[lxc-devel] [lxd/master] zfs: Handle projects correctly

monstermunchkin on Github lxc-bot at linuxcontainers.org
Tue Jun 4 12:09:48 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 376 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190604/fb24cd59/attachment.bin>
-------------- next part --------------
From f1793c66fa0091216665a09106c8dd624f42a556 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Tue, 4 Jun 2019 14:06:01 +0200
Subject: [PATCH] zfs: Handle projects correctly

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 lxd/storage_zfs.go | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index dc849f0f80..395fd34ec0 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -1081,7 +1081,7 @@ func (s *storageZfs) copyWithoutSnapshotFull(target container, source container)
 	if sourceIsSnapshot {
 		sourceParentName, sourceSnapOnlyName, _ := containerGetParentAndSnapshotName(source.Name())
 		snapshotSuffix = fmt.Sprintf("snapshot-%s", sourceSnapOnlyName)
-		sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, sourceParentName, snapshotSuffix)
+		sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, projectPrefix(source.Project(), sourceParentName), snapshotSuffix)
 		targetSnapshotDataset = fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, projectPrefix(target.Project(), targetName), sourceSnapOnlyName)
 	} else {
 		snapshotSuffix = uuid.NewRandom().String()
@@ -1131,7 +1131,7 @@ func (s *storageZfs) copyWithoutSnapshotFull(target container, source container)
 	}
 
 	targetContainerMountPoint := getContainerMountPoint(target.Project(), s.pool.Name, targetName)
-	targetfs := fmt.Sprintf("containers/%s", targetName)
+	targetfs := fmt.Sprintf("containers/%s", projectPrefix(target.Project(), targetName))
 
 	err = zfsPoolVolumeSet(poolName, targetfs, "canmount", "noauto")
 	if err != nil {
@@ -1444,8 +1444,8 @@ func (s *storageZfs) ContainerRename(container container, newName string) error
 	}
 
 	// Rename the dataset.
-	oldZfsDataset := fmt.Sprintf("containers/%s", oldName)
-	newZfsDataset := fmt.Sprintf("containers/%s", newName)
+	oldZfsDataset := fmt.Sprintf("containers/%s", projectPrefix(container.Project(), oldName))
+	newZfsDataset := fmt.Sprintf("containers/%s", projectPrefix(container.Project(), newName))
 	err = zfsPoolVolumeRename(poolName, oldZfsDataset, newZfsDataset, false)
 	if err != nil {
 		return err
@@ -1569,7 +1569,7 @@ func (s *storageZfs) ContainerRestore(target container, source container) error
 func (s *storageZfs) ContainerGetUsage(container container) (int64, error) {
 	var err error
 
-	fs := fmt.Sprintf("containers/%s", container.Name())
+	fs := fmt.Sprintf("containers/%s", projectPrefix(container.Project(), container.Name()))
 
 	property := "used"
 
@@ -1873,10 +1873,10 @@ func (s *storageZfs) doContainerOnlyBackup(tmpPath string, backup backup, source
 	if sourceIsSnapshot {
 		sourceParentName, sourceSnapOnlyName, _ := containerGetParentAndSnapshotName(source.Name())
 		snapshotSuffix = fmt.Sprintf("backup-%s", sourceSnapOnlyName)
-		sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, sourceParentName, snapshotSuffix)
+		sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, projectPrefix(source.Project(), sourceParentName), snapshotSuffix)
 	} else {
 		snapshotSuffix = uuid.NewRandom().String()
-		sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, sourceName, snapshotSuffix)
+		sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, projectPrefix(source.Project(), sourceName), snapshotSuffix)
 
 		fs := fmt.Sprintf("containers/%s", projectPrefix(source.Project(), sourceName))
 		err := zfsPoolVolumeSnapshotCreate(poolName, fs, snapshotSuffix)
@@ -1922,11 +1922,11 @@ func (s *storageZfs) doSnapshotBackup(tmpPath string, backup backup, source cont
 
 	poolName := s.getOnDiskPoolName()
 	sourceParentName, sourceSnapOnlyName, _ := containerGetParentAndSnapshotName(sourceName)
-	currentSnapshotDataset := fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, sourceParentName, sourceSnapOnlyName)
+	currentSnapshotDataset := fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, projectPrefix(source.Project(), sourceParentName), sourceSnapOnlyName)
 	args := []string{"send", currentSnapshotDataset}
 	if parentSnapshot != "" {
 		parentName, parentSnaponlyName, _ := containerGetParentAndSnapshotName(parentSnapshot)
-		parentSnapshotDataset := fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, parentName, parentSnaponlyName)
+		parentSnapshotDataset := fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, projectPrefix(source.Project(), parentName), parentSnaponlyName)
 		args = append(args, "-i", parentSnapshotDataset)
 	}
 
@@ -2002,7 +2002,7 @@ func (s *storageZfs) doContainerBackupCreateOptimized(tmpPath string, backup bac
 			return err
 		}
 
-		zfsPoolVolumeSnapshotDestroy(poolName, fmt.Sprintf("containers/%s", source.Name()), tmpSnapshotName)
+		zfsPoolVolumeSnapshotDestroy(poolName, fmt.Sprintf("containers/%s", projectPrefix(source.Project(), source.Name())), tmpSnapshotName)
 	}
 	if err != nil {
 		return err
@@ -2201,7 +2201,7 @@ func (s *storageZfs) doContainerBackupLoadOptimized(info backupInfo, data io.Rea
 			return err
 		}
 
-		snapshotDataset := fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, containerName, snapshotOnlyName)
+		snapshotDataset := fmt.Sprintf("%s/containers/%s at snapshot-%s", poolName, projectPrefix(info.Project, containerName), snapshotOnlyName)
 		zfsRecvCmd := exec.Command("zfs", "receive", "-F", snapshotDataset)
 		zfsRecvCmd.Stdin = feeder
 		err = zfsRecvCmd.Run()
@@ -2233,18 +2233,18 @@ func (s *storageZfs) doContainerBackupLoadOptimized(info backupInfo, data io.Rea
 	}
 	defer feeder.Close()
 
-	containerSnapshotDataset := fmt.Sprintf("%s/containers/%s at backup", poolName, containerName)
+	containerSnapshotDataset := fmt.Sprintf("%s/containers/%s at backup", poolName, projectPrefix(info.Project, containerName))
 	zfsRecvCmd := exec.Command("zfs", "receive", "-F", containerSnapshotDataset)
 	zfsRecvCmd.Stdin = feeder
 
 	err = zfsRecvCmd.Run()
 	os.RemoveAll(unpackPath)
-	zfsPoolVolumeSnapshotDestroy(poolName, fmt.Sprintf("containers/%s", containerName), "backup")
+	zfsPoolVolumeSnapshotDestroy(poolName, fmt.Sprintf("containers/%s", projectPrefix(info.Project, containerName)), "backup")
 	if err != nil {
 		return err
 	}
 
-	fs := fmt.Sprintf("containers/%s", containerName)
+	fs := fmt.Sprintf("containers/%s", projectPrefix(info.Project, containerName))
 	err = zfsPoolVolumeSet(poolName, fs, "canmount", "noauto")
 	if err != nil {
 		return err


More information about the lxc-devel mailing list