[lxc-devel] [lxd/master] Fix ZFS storage volume copies

stgraber on Github lxc-bot at linuxcontainers.org
Sat Dec 8 03:41:26 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20181208/2e79f24c/attachment.bin>
-------------- next part --------------
From 4b8d6db89437388548b7afbf69879a3faa9e9b2a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 7 Dec 2018 22:39:28 -0500
Subject: [PATCH 1/2] lxd/storage: Fix broken error handling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #5339

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/storage_volumes_utils.go | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/lxd/storage_volumes_utils.go b/lxd/storage_volumes_utils.go
index b9c6253b6b..f8d4ab5066 100644
--- a/lxd/storage_volumes_utils.go
+++ b/lxd/storage_volumes_utils.go
@@ -615,10 +615,12 @@ func storagePoolVolumeCreateInternal(state *state.State, poolName string, vol *a
 	}
 	if err != nil {
 		poolID, _, _ := s.GetContainerPoolInfo()
-		volumeType, err := storagePoolVolumeTypeNameToType(vol.Type)
-		if err == nil {
+
+		volumeType, err1 := storagePoolVolumeTypeNameToType(vol.Type)
+		if err1 == nil {
 			state.Cluster.StoragePoolVolumeDelete("default", vol.Name, volumeType, poolID)
 		}
+
 		return err
 	}
 
@@ -666,10 +668,12 @@ func storagePoolVolumeSnapshotCreateInternal(state *state.State, poolName string
 	}
 	if err != nil {
 		poolID, _, _ := s.GetContainerPoolInfo()
-		volumeType, err := storagePoolVolumeTypeNameToType(vol.Type)
-		if err == nil {
+
+		volumeType, err1 := storagePoolVolumeTypeNameToType(vol.Type)
+		if err1 == nil {
 			state.Cluster.StoragePoolVolumeDelete("default", vol.Name, volumeType, poolID)
 		}
+
 		return err
 	}
 

From a2c5f268ed1012549b743a7b2489feb574178938 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 7 Dec 2018 22:39:46 -0500
Subject: [PATCH 2/2] lxd/storage: Fix custom volume copies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

On ZFS, when a pool name doesn't match the zpool name or dataset, the
wrong paths were being accessed.

Closes #5339

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/storage_zfs.go | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index fc18db36e3..647db33b66 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -3169,14 +3169,17 @@ func (s *storageZfs) StoragePoolVolumeCopy(source *api.StorageVolumeSource) erro
 	successMsg := fmt.Sprintf("Copied ZFS storage volume \"%s\" on storage pool \"%s\" as \"%s\" to storage pool \"%s\"", source.Name, source.Pool, s.volume.Name, s.pool.Name)
 
 	if source.Pool != s.pool.Name {
+		logger.Errorf("wtf")
 		return s.doCrossPoolStorageVolumeCopy(source)
 	}
 
 	var snapshots []string
 	var err error
 
+	poolName := s.getOnDiskPoolName()
+
 	if !strings.Contains(source.Name, "/") {
-		snapshots, err = zfsPoolListSnapshots(source.Pool, fmt.Sprintf("custom/%s", source.Name))
+		snapshots, err = zfsPoolListSnapshots(poolName, fmt.Sprintf("custom/%s", source.Name))
 		if err != nil {
 			return err
 		}
@@ -3188,7 +3191,6 @@ func (s *storageZfs) StoragePoolVolumeCopy(source *api.StorageVolumeSource) erro
 		if s.pool.Config["zfs.clone_copy"] != "" && !shared.IsTrue(s.pool.Config["zfs.clone_copy"]) {
 			err = s.copyVolumeWithoutSnapshotsFull(source)
 		} else {
-			// TODO (monstermunchkin): implement
 			err = s.copyVolumeWithoutSnapshotsSparse(source)
 		}
 		if err != nil {
@@ -3197,8 +3199,6 @@ func (s *storageZfs) StoragePoolVolumeCopy(source *api.StorageVolumeSource) erro
 	} else {
 		targetStorageVolumeMountPoint := getStoragePoolVolumeMountPoint(s.pool.Name, s.volume.Name)
 
-		poolName := s.getOnDiskPoolName()
-
 		tmpSnapshotName := fmt.Sprintf("copy-send-%s", uuid.NewRandom().String())
 		err := zfsPoolVolumeSnapshotCreate(poolName, fmt.Sprintf("custom/%s", source.Name), tmpSnapshotName)
 		if err != nil {


More information about the lxc-devel mailing list