Weekly status for the week of the 1st August to the 7th August.
Introduction
This past week has seen several improvements and bug fixes for LXD and go-dqlite, as we continue on our larger roadmap items.
@stgraber has continued his series of videos on LXD storage and this week explores the ZFS storage driver:
https://www.youtube.com/watch?v=ysLi_LYAs_M
LXD
Improvements:
- Continued series of improvements around making our database querying more efficient. Particularly reducing the amount of repeated queries when loading information about instances and their snapshots when generating lists of instances or snapshots. This ultimately lead to the removal of the inefficient
InstanceToArgs
function. - Switched to using
losetup
command for loop device management for storage pool disk images. This was to resolve an intermittent issue we saw in our test environment where we would often getInvalid argument
errors when trying to mount a BTRFS filesystem that was on a loop device. - In addition to the BTRFS change above there were also some smaller changes to improve the reliability of our automated test suite, including; making the devlxd tests work on go-tip, tweaking
proxy
device test ordering to give the the test process more time to start up to avoid spurious connection errors, and adding retries to DHCP allocation request tests. - Added support for updating network forwarder and load balancer config properties when using the
PATCH
API method. - Added a restriction to storage pool and network list and show API endpoints that prevents non-admin users from seeing the config of these entities. This is because there can be sensitive config info stored there.
- Set
atime=off
andrelatime=on
settings on new ZFS storage pools for improved performance/reduced wear on disks. This aligns with existing defaults for other filesystem types. - Improve errors returned from
GetIOStats
function. - Added context support to
RunCommand*
family of functions.
Bug fixes:
- Handle PATCH requests in devlxd API to allow instance to set ‘ready’ status.
- Fixed a panic in the
lxc
client command when showing expanded config for a snapshot, e.g.lxc config show <instance>/<snapshot> --expanded
. - Fixed
lxc file mount
command to remote servers over TLS which was a regression since LXD 5.3 that was caused by our switch to usinghttp.DialContext
. - Fixed an unreleased regression in network load balancer listing query.
- Fixed a regression in LXD shutdown procedure that was preventing the unmounting of shared mounts (due to incorrectly detecting there were instances running when there were not).
- Fixed API version shown in UsedBy URLs for project info. Was incorrectly showing LXD version rather than API version.
- Fixed incorrect escaping in some UsedBy storage volume URLs.
Dqlite (Go bindings)
Bug fixes:
- Fixed an issue that was identified as part of the work done in LXD to improve the query performance that meant sometimes queries that had >255 query bindings were being used. This would overflow the internal argument counter in Dqlite rather than generate an error. This has now been fixed in
go-dqlite
so that if >255 query bindings are used the query will fail immediately. The actual limitation will also be fixed in future versions of dqlite.
YouTube videos
The LXD team is running a YouTube channel with live streams covering LXD releases and weekly videos on different aspects of LXD. You may want to give it a watch and/or subscribe for more content in the coming weeks.
https://www.youtube.com/lxd-videos
Contribute to LXD
Ever wanted to contribute to LXD but not sure where to start?
We’ve recently gone through some effort to properly tag issues suitable for new contributors on Github: Easy issues for new contributors
Upcoming events
- Nothing planned currently.
Ongoing projects
The list below is feature or refactoring work which will span several weeks/months and can’t be tied directly to a single Github issue or pull request.
- Stable release work for LXC, LXCFS and LXD
- [LXD] Object storage (S3 API)
- Infiniband support for VMs
- Dqlite disk-only operation mode
Upstream changes
The items listed below are highlights of the work which happened upstream over the past week and which will be included in the next release.
LXD
- lxd-agent: Handle PATCH /1.0 in devlxd
- LXC: Fix expanded show of instance snapshot
- Instance: Remove InstanceToArgs function
- doc: mark up default values correctly
- Network: Support patching forwarder and load balancer configs
- Storage: Add common volume management “not supported” functions
- API: Only allow admin users to see storage pool and network config
- Storage: Scan pool device source for BTRFS filesystems before mounting
- Storage: Fix
Invalid argument
errors on BTRFS pool mount - Tests: Fix devlxd tests on go-tip
- Daemon: Add explicit instancesLoaded bool to indicate if shared mounts can be cleaned up
- Doc landing page
- Util: Adds detection of
RunError
type toExitStatus
function - Test: Order tweaks for proxy device tests
- Client: Set transport.DialTLSContext in tlsHTTPClient
- Network: Fix regression in GetNetworkLoadBalancers
- doc/reference: improve description of storage option
- Test: Make basic_usage reboot test more reliable
- lxd: Fixes API version for instances in project usedby.
- lxd/db: Fix escaped slashes in storage volume URIs.
- URLs: Generate URLs in GetClusterGroupURIs correctly
- workflows: Adds edge ppa’s and removes make deps step.
- lxd/storage/drivers/zfs: set atime=off and relatime=on
- doc/reference: fix description of dir source param
- lxd/cgroup/abstractions: Improve errors from GetIOStats
- Instance: Use more efficient snapshot loading query when deleting snapshots
- lxd: Adds
RunCommandContext
function and updatesRunError
withUnwrap
function
LXC
LXCFS
- Nothing to report this week
Distrobuilder
Dqlite (RAFT library)
- Nothing to report this week
Dqlite (database)
- Nothing to report this week
Dqlite (Go bindings)
LXD Charm
- Nothing to report this week
Distribution work
This section is used to track the work done in downstream Linux distributions to ship the latest LXC, LXD and LXCFS as well as work to get various software to work properly inside containers.
Ubuntu
- Nothing to report this week
Snap
- Nothing to report this week