The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8080
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) ===
From d5fe43aa567c9684bedffc051478f17ee8b11d5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Mon, 26 Oct 2020 19:07:40 -0400 Subject: [PATCH 1/2] lxd/storage: Rename RunningSnapshotFreeze to RunningCopyFreeze MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/storage/backend_lxd.go | 3 ++- lxd/storage/drivers/driver_btrfs.go | 2 +- lxd/storage/drivers/driver_ceph.go | 22 +++++++++++----------- lxd/storage/drivers/driver_cephfs.go | 22 +++++++++++----------- lxd/storage/drivers/driver_dir.go | 22 +++++++++++----------- lxd/storage/drivers/driver_lvm.go | 22 +++++++++++----------- lxd/storage/drivers/driver_types.go | 2 +- lxd/storage/drivers/driver_zfs.go | 24 ++++++++++++------------ lxd/storage/drivers/drivers_mock.go | 22 +++++++++++----------- 9 files changed, 71 insertions(+), 70 deletions(-) diff --git a/lxd/storage/backend_lxd.go b/lxd/storage/backend_lxd.go index e14f911692..4a6aa5619f 100644 --- a/lxd/storage/backend_lxd.go +++ b/lxd/storage/backend_lxd.go @@ -1709,11 +1709,12 @@ func (b *lxdBackend) CreateInstanceSnapshot(inst instance.Instance, src instance } // Some driver backing stores require that running instances be frozen during snapshot. - if b.driver.Info().RunningSnapshotFreeze && src.IsRunning() { + if b.driver.Info().RunningCopyFreeze && src.IsRunning() { err = src.Freeze() if err != nil { return err } + defer src.Unfreeze() } diff --git a/lxd/storage/drivers/driver_btrfs.go b/lxd/storage/drivers/driver_btrfs.go index c98b8409de..bbf1dd6280 100644 --- a/lxd/storage/drivers/driver_btrfs.go +++ b/lxd/storage/drivers/driver_btrfs.go @@ -81,7 +81,7 @@ func (d *btrfs) Info() Info { VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, BlockBacking: false, RunningQuotaResize: true, - RunningSnapshotFreeze: false, + RunningCopyFreeze: false, DirectIO: true, MountedRoot: true, } diff --git a/lxd/storage/drivers/driver_ceph.go b/lxd/storage/drivers/driver_ceph.go index 2500bb94ac..111d44239c 100644 --- a/lxd/storage/drivers/driver_ceph.go +++ b/lxd/storage/drivers/driver_ceph.go @@ -72,17 +72,17 @@ func (d *ceph) isRemote() bool { // Info returns info about the driver and its environment. func (d *ceph) Info() Info { return Info{ - Name: "ceph", - Version: cephVersion, - OptimizedImages: true, - PreservesInodes: false, - Remote: d.isRemote(), - VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, - BlockBacking: true, - RunningQuotaResize: false, - RunningSnapshotFreeze: true, - DirectIO: true, - MountedRoot: false, + Name: "ceph", + Version: cephVersion, + OptimizedImages: true, + PreservesInodes: false, + Remote: d.isRemote(), + VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, + BlockBacking: true, + RunningQuotaResize: false, + RunningCopyFreeze: true, + DirectIO: true, + MountedRoot: false, } } diff --git a/lxd/storage/drivers/driver_cephfs.go b/lxd/storage/drivers/driver_cephfs.go index 015da2c949..b1c39ea348 100644 --- a/lxd/storage/drivers/driver_cephfs.go +++ b/lxd/storage/drivers/driver_cephfs.go @@ -71,17 +71,17 @@ func (d *cephfs) isRemote() bool { // Info returns the pool driver information. func (d *cephfs) Info() Info { return Info{ - Name: "cephfs", - Version: cephfsVersion, - OptimizedImages: false, - PreservesInodes: false, - Remote: d.isRemote(), - VolumeTypes: []VolumeType{VolumeTypeCustom}, - BlockBacking: false, - RunningQuotaResize: true, - RunningSnapshotFreeze: false, - DirectIO: true, - MountedRoot: true, + Name: "cephfs", + Version: cephfsVersion, + OptimizedImages: false, + PreservesInodes: false, + Remote: d.isRemote(), + VolumeTypes: []VolumeType{VolumeTypeCustom}, + BlockBacking: false, + RunningQuotaResize: true, + RunningCopyFreeze: false, + DirectIO: true, + MountedRoot: true, } } diff --git a/lxd/storage/drivers/driver_dir.go b/lxd/storage/drivers/driver_dir.go index 906024f17b..df9023823e 100644 --- a/lxd/storage/drivers/driver_dir.go +++ b/lxd/storage/drivers/driver_dir.go @@ -34,17 +34,17 @@ func (d *dir) load() error { // Info returns info about the driver and its environment. func (d *dir) Info() Info { return Info{ - Name: "dir", - Version: "1", - OptimizedImages: false, - PreservesInodes: false, - Remote: d.isRemote(), - VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, - BlockBacking: false, - RunningQuotaResize: true, - RunningSnapshotFreeze: true, - DirectIO: true, - MountedRoot: true, + Name: "dir", + Version: "1", + OptimizedImages: false, + PreservesInodes: false, + Remote: d.isRemote(), + VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, + BlockBacking: false, + RunningQuotaResize: true, + RunningCopyFreeze: true, + DirectIO: true, + MountedRoot: true, } } diff --git a/lxd/storage/drivers/driver_lvm.go b/lxd/storage/drivers/driver_lvm.go index cda510284f..75fe9f0476 100644 --- a/lxd/storage/drivers/driver_lvm.go +++ b/lxd/storage/drivers/driver_lvm.go @@ -87,17 +87,17 @@ func (d *lvm) load() error { // Info returns info about the driver and its environment. func (d *lvm) Info() Info { return Info{ - Name: "lvm", - Version: lvmVersion, - OptimizedImages: d.usesThinpool(), // Only thinpool pools support optimized images. - PreservesInodes: false, - Remote: d.isRemote(), - VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, - BlockBacking: true, - RunningQuotaResize: false, - RunningSnapshotFreeze: false, - DirectIO: true, - MountedRoot: false, + Name: "lvm", + Version: lvmVersion, + OptimizedImages: d.usesThinpool(), // Only thinpool pools support optimized images. + PreservesInodes: false, + Remote: d.isRemote(), + VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, + BlockBacking: true, + RunningQuotaResize: false, + RunningCopyFreeze: false, + DirectIO: true, + MountedRoot: false, } } diff --git a/lxd/storage/drivers/driver_types.go b/lxd/storage/drivers/driver_types.go index bba7d4e01d..dbfd222a92 100644 --- a/lxd/storage/drivers/driver_types.go +++ b/lxd/storage/drivers/driver_types.go @@ -12,7 +12,7 @@ type Info struct { PreservesInodes bool // Whether driver preserves inodes when volumes are moved hosts. BlockBacking bool // Whether driver uses block devices as backing store. RunningQuotaResize bool // Whether quota resize is supported whilst instance running. - RunningSnapshotFreeze bool // Whether instance should be frozen during snapshot if running. + RunningCopyFreeze bool // Whether instance should be frozen during snapshot if running. DirectIO bool // Whether the driver supports direct I/O. MountedRoot bool // Whether the pool directory itself is a mount. } diff --git a/lxd/storage/drivers/driver_zfs.go b/lxd/storage/drivers/driver_zfs.go index 5e290af54f..956f8297fb 100644 --- a/lxd/storage/drivers/driver_zfs.go +++ b/lxd/storage/drivers/driver_zfs.go @@ -103,18 +103,18 @@ func (d *zfs) load() error { // Info returns info about the driver and its environment. func (d *zfs) Info() Info { info := Info{ - Name: "zfs", - Version: zfsVersion, - OptimizedImages: true, - OptimizedBackups: true, - PreservesInodes: true, - Remote: d.isRemote(), - VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, - BlockBacking: false, - RunningQuotaResize: true, - RunningSnapshotFreeze: false, - DirectIO: zfsDirectIO, - MountedRoot: false, + Name: "zfs", + Version: zfsVersion, + OptimizedImages: true, + OptimizedBackups: true, + PreservesInodes: true, + Remote: d.isRemote(), + VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, + BlockBacking: false, + RunningQuotaResize: true, + RunningCopyFreeze: false, + DirectIO: zfsDirectIO, + MountedRoot: false, } return info diff --git a/lxd/storage/drivers/drivers_mock.go b/lxd/storage/drivers/drivers_mock.go index bc876b075d..b3967e5970 100644 --- a/lxd/storage/drivers/drivers_mock.go +++ b/lxd/storage/drivers/drivers_mock.go @@ -22,17 +22,17 @@ func (d *mock) load() error { // Info returns info about the driver and its environment. func (d *mock) Info() Info { return Info{ - Name: "mock", - Version: "1", - OptimizedImages: false, - PreservesInodes: false, - Remote: d.isRemote(), - VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, - BlockBacking: false, - RunningQuotaResize: true, - RunningSnapshotFreeze: true, - DirectIO: true, - MountedRoot: true, + Name: "mock", + Version: "1", + OptimizedImages: false, + PreservesInodes: false, + Remote: d.isRemote(), + VolumeTypes: []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer, VolumeTypeVM}, + BlockBacking: false, + RunningQuotaResize: true, + RunningCopyFreeze: true, + DirectIO: true, + MountedRoot: true, } } From 1cb7475c22a02f5317641c746c87430b0d561551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Mon, 26 Oct 2020 19:07:52 -0400 Subject: [PATCH 2/2] lxd/storage: Ensure source is frozen during copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/storage/backend_lxd.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lxd/storage/backend_lxd.go b/lxd/storage/backend_lxd.go index 4a6aa5619f..b2c1272991 100644 --- a/lxd/storage/backend_lxd.go +++ b/lxd/storage/backend_lxd.go @@ -673,6 +673,16 @@ func (b *lxdBackend) CreateInstanceFromCopy(inst instance.Instance, src instance return err } + // Some driver backing stores require that running instances be frozen during copy. + if !src.IsSnapshot() && b.driver.Info().RunningCopyFreeze && src.IsRunning() { + err = src.Freeze() + if err != nil { + return err + } + + defer src.Unfreeze() + } + if b.Name() == srcPool.Name() { logger.Debug("CreateInstanceFromCopy same-pool mode detected") err = b.driver.CreateVolumeFromCopy(vol, srcVol, snapshots, op)
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel