[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