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

Reply via email to