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