The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/5815

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) ===
This fixes #5813 

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
From f1793c66fa0091216665a09106c8dd624f42a556 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Tue, 4 Jun 2019 14:06:01 +0200
Subject: [PATCH] zfs: Handle projects correctly

Signed-off-by: Thomas Hipp <thomas.h...@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@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@snapshot-%s", 
poolName, sourceParentName, sourceSnapOnlyName)
+       currentSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", 
poolName, projectPrefix(source.Project(), sourceParentName), sourceSnapOnlyName)
        args := []string{"send", currentSnapshotDataset}
        if parentSnapshot != "" {
                parentName, parentSnaponlyName, _ := 
containerGetParentAndSnapshotName(parentSnapshot)
-               parentSnapshotDataset := 
fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, parentName, 
parentSnaponlyName)
+               parentSnapshotDataset := 
fmt.Sprintf("%s/containers/%s@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@snapshot-%s", 
poolName, containerName, snapshotOnlyName)
+               snapshotDataset := fmt.Sprintf("%s/containers/%s@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@backup", 
poolName, containerName)
+       containerSnapshotDataset := fmt.Sprintf("%s/containers/%s@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
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to