The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/3221
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) === Signed-off-by: Christian Brauner <[email protected]>
From 2fe8d23fac8f905828be40196960e93ad8026d37 Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Tue, 25 Apr 2017 16:24:17 +0200 Subject: [PATCH] tree-wide: use containerGetParentAndSnapshotName() Signed-off-by: Christian Brauner <[email protected]> --- lxd/container_lxc.go | 2 +- lxd/container_snapshot.go | 3 +- lxd/db_update.go | 6 ++-- lxd/storage_btrfs.go | 22 +++++------- lxd/storage_dir.go | 18 +++++----- lxd/storage_lvm.go | 21 +++++------ lxd/storage_pools_utils.go | 4 +-- lxd/storage_zfs.go | 88 +++++++++++++++++++--------------------------- 8 files changed, 69 insertions(+), 95 deletions(-) diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go index a897c7a..b222af3 100644 --- a/lxd/container_lxc.go +++ b/lxd/container_lxc.go @@ -4000,7 +4000,7 @@ func (c *containerLXC) Export(w io.Writer, properties map[string]string) error { // Get the container's architecture var arch string if c.IsSnapshot() { - parentName := strings.SplitN(c.name, shared.SnapshotDelimiter, 2)[0] + parentName, _, _ := containerGetParentAndSnapshotName(c.name) parent, err := containerLoadByName(c.daemon, parentName) if err != nil { tw.Close() diff --git a/lxd/container_snapshot.go b/lxd/container_snapshot.go index 3e022ac..a4d2ace 100644 --- a/lxd/container_snapshot.go +++ b/lxd/container_snapshot.go @@ -5,7 +5,6 @@ import ( "fmt" "net/http" "strconv" - "strings" "github.com/gorilla/mux" @@ -36,7 +35,7 @@ func containerSnapshotsGet(d *Daemon, r *http.Request) Response { resultMap := []*api.ContainerSnapshot{} for _, snap := range snaps { - snapName := strings.SplitN(snap.Name(), shared.SnapshotDelimiter, 2)[1] + _, snapName, _ := containerGetParentAndSnapshotName(snap.Name()) if recursion == 0 { url := fmt.Sprintf("/%s/containers/%s/snapshots/%s", version.APIVersion, cname, snapName) resultString = append(resultString, url) diff --git a/lxd/db_update.go b/lxd/db_update.go index bc641c6..ee1dc71 100644 --- a/lxd/db_update.go +++ b/lxd/db_update.go @@ -561,9 +561,9 @@ func dbUpdateFromV11(currentVersion int, version int, d *Daemon) error { errors := 0 for _, cName := range cNames { - snappieces := strings.SplitN(cName, shared.SnapshotDelimiter, 2) - oldPath := shared.VarPath("containers", snappieces[0], "snapshots", snappieces[1]) - newPath := shared.VarPath("snapshots", snappieces[0], snappieces[1]) + snapParentName, snapOnlyName, _ := containerGetParentAndSnapshotName(cName) + oldPath := shared.VarPath("containers", snapParentName, "snapshots", snapOnlyName) + newPath := shared.VarPath("snapshots", snapParentName, snapOnlyName) if shared.PathExists(oldPath) && !shared.PathExists(newPath) { logger.Info( "Moving snapshot", diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go index 56424e3..df66a02 100644 --- a/lxd/storage_btrfs.go +++ b/lxd/storage_btrfs.go @@ -796,10 +796,10 @@ func (s *storageBtrfs) copySnapshot(target container, source container) error { sourceContainerSubvolumeName := getSnapshotMountPoint(s.pool.Name, sourceName) targetContainerSubvolumeName := getSnapshotMountPoint(s.pool.Name, targetName) - fields := strings.SplitN(target.Name(), shared.SnapshotDelimiter, 2) - containersPath := getSnapshotMountPoint(s.pool.Name, fields[0]) - snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", fields[0]) - snapshotMntPointSymlink := shared.VarPath("snapshots", fields[0]) + targetParentName, _, _ := containerGetParentAndSnapshotName(target.Name()) + containersPath := getSnapshotMountPoint(s.pool.Name, targetParentName) + snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", targetParentName) + snapshotMntPointSymlink := shared.VarPath("snapshots", targetParentName) err := createSnapshotMountpoint(containersPath, snapshotMntPointSymlinkTarget, snapshotMntPointSymlink) if err != nil { return err @@ -871,11 +871,10 @@ func (s *storageBtrfs) ContainerCopy(target container, source container, contain return err } - fields := strings.SplitN(snap.Name(), shared.SnapshotDelimiter, 2) - newSnapName := fmt.Sprintf("%s/%s", target.Name(), fields[1]) + _, snapOnlyName, _ := containerGetParentAndSnapshotName(snap.Name()) + newSnapName := fmt.Sprintf("%s/%s", target.Name(), snapOnlyName) targetSnapshot, err := containerLoadByName(s.d, newSnapName) if err != nil { - logger.Errorf("1111: %s", newSnapName) return err } @@ -1131,8 +1130,7 @@ func (s *storageBtrfs) ContainerSnapshotDelete(snapshotContainer container) erro os.Remove(sourceSnapshotMntPoint) os.Remove(snapshotSubvolumeName) - sourceFields := strings.SplitN(snapshotContainer.Name(), shared.SnapshotDelimiter, 2) - sourceName := sourceFields[0] + sourceName, _, _ := containerGetParentAndSnapshotName(snapshotContainer.Name()) snapshotSubvolumePath := s.getSnapshotSubvolumePath(s.pool.Name, sourceName) os.Remove(snapshotSubvolumePath) if !shared.PathExists(snapshotSubvolumePath) { @@ -1237,8 +1235,7 @@ func (s *storageBtrfs) ContainerSnapshotCreateEmpty(snapshotContainer container) } // Create the snapshot subvole path on the storage pool. - sourceFields := strings.SplitN(snapshotContainer.Name(), shared.SnapshotDelimiter, 2) - sourceName := sourceFields[0] + sourceName, _, _ := containerGetParentAndSnapshotName(snapshotContainer.Name()) snapshotSubvolumePath := s.getSnapshotSubvolumePath(s.pool.Name, sourceName) snapshotSubvolumeName := getSnapshotMountPoint(s.pool.Name, snapshotContainer.Name()) if !shared.PathExists(snapshotSubvolumePath) { @@ -1757,8 +1754,7 @@ func (s *btrfsMigrationSourceDriver) SendWhileRunning(conn *websocket.Conn, op * // Deal with sending a snapshot to create a container on another LXD // instance. if s.container.IsSnapshot() { - sourceFields := strings.SplitN(containerName, shared.SnapshotDelimiter, 2) - sourceName = sourceFields[0] + sourceName, _, _ := containerGetParentAndSnapshotName(containerName) snapshotsPath := getSnapshotMountPoint(containerPool, sourceName) tmpContainerMntPoint, err := ioutil.TempDir(snapshotsPath, sourceName) if err != nil { diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go index 7e4677c..95dd459 100644 --- a/lxd/storage_dir.go +++ b/lxd/storage_dir.go @@ -396,10 +396,10 @@ func (s *storageDir) copySnapshot(target container, source container) error { sourceContainerMntPoint := getSnapshotMountPoint(s.pool.Name, sourceName) targetContainerMntPoint := getSnapshotMountPoint(s.pool.Name, targetName) - fields := strings.SplitN(target.Name(), shared.SnapshotDelimiter, 2) - containersPath := getSnapshotMountPoint(s.pool.Name, fields[0]) - snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", fields[0]) - snapshotMntPointSymlink := shared.VarPath("snapshots", fields[0]) + targetParentName, _, _ := containerGetParentAndSnapshotName(target.Name()) + containersPath := getSnapshotMountPoint(s.pool.Name, targetParentName) + snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", targetParentName) + snapshotMntPointSymlink := shared.VarPath("snapshots", targetParentName) err := createSnapshotMountpoint(containersPath, snapshotMntPointSymlinkTarget, snapshotMntPointSymlink) if err != nil { return err @@ -457,8 +457,8 @@ func (s *storageDir) ContainerCopy(target container, source container, container return err } - fields := strings.SplitN(snap.Name(), shared.SnapshotDelimiter, 2) - newSnapName := fmt.Sprintf("%s/%s", target.Name(), fields[1]) + _, snapOnlyName, _ := containerGetParentAndSnapshotName(snap.Name()) + newSnapName := fmt.Sprintf("%s/%s", target.Name(), snapOnlyName) targetSnapshot, err := containerLoadByName(s.d, newSnapName) if err != nil { return err @@ -655,8 +655,7 @@ func (s *storageDir) ContainerSnapshotCreateEmpty(snapshotContainer container) e // Check if the symlink // ${LXD_DIR}/snapshots/<source_container_name> -> ${POOL_PATH}/snapshots/<source_container_name> // exists and if not create it. - fields := strings.SplitN(targetContainerName, shared.SnapshotDelimiter, 2) - sourceContainerName := fields[0] + sourceContainerName, _, _ := containerGetParentAndSnapshotName(targetContainerName) sourceContainerSymlink := shared.VarPath("snapshots", sourceContainerName) sourceContainerSymlinkTarget := getSnapshotMountPoint(s.pool.Name, sourceContainerName) if !shared.PathExists(sourceContainerSymlink) { @@ -694,8 +693,7 @@ func (s *storageDir) ContainerSnapshotDelete(snapshotContainer container) error // Check if we can remove the snapshot symlink: // ${LXD_DIR}/snapshots/<container_name> -> ${POOL}/snapshots/<container_name> // by checking if the directory is empty. - fields := strings.SplitN(snapshotContainerName, shared.SnapshotDelimiter, 2) - sourceContainerName := fields[0] + sourceContainerName, _, _ := containerGetParentAndSnapshotName(snapshotContainerName) snapshotContainerPath := getSnapshotMountPoint(s.pool.Name, sourceContainerName) empty, _ := shared.PathIsEmpty(snapshotContainerPath) if empty == true { diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go index abdfed3..127eff4 100644 --- a/lxd/storage_lvm.go +++ b/lxd/storage_lvm.go @@ -1060,8 +1060,7 @@ func (s *storageLvm) ContainerCreate(container container) error { if container.IsSnapshot() { containerMntPoint := getSnapshotMountPoint(s.pool.Name, containerName) - fields := strings.SplitN(containerName, shared.SnapshotDelimiter, 2) - sourceName := fields[0] + sourceName, _, _ := containerGetParentAndSnapshotName(containerName) snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", sourceName) snapshotMntPointSymlink := shared.VarPath("snapshots", sourceName) err := os.MkdirAll(containerMntPoint, 0755) @@ -1274,8 +1273,7 @@ func (s *storageLvm) ContainerDelete(container container) error { } if container.IsSnapshot() { - fields := strings.SplitN(containerName, shared.SnapshotDelimiter, 2) - sourceName := fields[0] + sourceName, _, _ := containerGetParentAndSnapshotName(containerName) snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", sourceName) snapshotMntPointSymlink := shared.VarPath("snapshots", sourceName) err = deleteSnapshotMountpoint(containerMntPoint, snapshotMntPointSymlinkTarget, snapshotMntPointSymlink) @@ -1400,10 +1398,10 @@ func (s *storageLvm) copyContainerThinpool(target container, source container, r } func (s *storageLvm) copySnapshot(target container, source container) error { - fields := strings.SplitN(target.Name(), shared.SnapshotDelimiter, 2) - containersPath := getSnapshotMountPoint(s.pool.Name, fields[0]) - snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", fields[0]) - snapshotMntPointSymlink := shared.VarPath("snapshots", fields[0]) + targetParentName, _, _ := containerGetParentAndSnapshotName(target.Name()) + containersPath := getSnapshotMountPoint(s.pool.Name, targetParentName) + snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", targetParentName) + snapshotMntPointSymlink := shared.VarPath("snapshots", targetParentName) err := createSnapshotMountpoint(containersPath, snapshotMntPointSymlinkTarget, snapshotMntPointSymlink) if err != nil { return err @@ -1460,8 +1458,8 @@ func (s *storageLvm) ContainerCopy(target container, source container, container } for _, snap := range snapshots { - fields := strings.SplitN(snap.Name(), shared.SnapshotDelimiter, 2) - newSnapName := fmt.Sprintf("%s/%s", target.Name(), fields[1]) + _, snapOnlyName, _ := containerGetParentAndSnapshotName(snap.Name()) + newSnapName := fmt.Sprintf("%s/%s", target.Name(), snapOnlyName) logger.Debugf("Copying LVM container storage for snapshot %s -> %s.", snap.Name(), newSnapName) @@ -1780,8 +1778,7 @@ func (s *storageLvm) createSnapshotContainer(snapshotContainer container, source targetIsSnapshot := snapshotContainer.IsSnapshot() if targetIsSnapshot { targetContainerMntPoint = getSnapshotMountPoint(s.pool.Name, targetContainerName) - sourceFields := strings.SplitN(sourceContainerName, shared.SnapshotDelimiter, 2) - sourceName := sourceFields[0] + sourceName, _, _ := containerGetParentAndSnapshotName(sourceContainerName) snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", poolName, "snapshots", sourceName) snapshotMntPointSymlink := shared.VarPath("snapshots", sourceName) err = createSnapshotMountpoint(targetContainerMntPoint, snapshotMntPointSymlinkTarget, snapshotMntPointSymlink) diff --git a/lxd/storage_pools_utils.go b/lxd/storage_pools_utils.go index e43d102..bcac4d1 100644 --- a/lxd/storage_pools_utils.go +++ b/lxd/storage_pools_utils.go @@ -102,8 +102,8 @@ func storagePoolUsedByGet(db *sql.DB, poolID int64, poolName string) ([]string, switch apiEndpoint { case storagePoolVolumeAPIEndpointContainers: if strings.Index(volumes[i].Name, shared.SnapshotDelimiter) > 0 { - fields := strings.SplitN(volumes[i].Name, shared.SnapshotDelimiter, 2) - poolUsedBy[i] = fmt.Sprintf("/%s/containers/%s/snapshots/%s", version.APIVersion, fields[0], fields[1]) + parentName, snapOnlyName, _ := containerGetParentAndSnapshotName(volumes[i].Name) + poolUsedBy[i] = fmt.Sprintf("/%s/containers/%s/snapshots/%s", version.APIVersion, parentName, snapOnlyName) } else { poolUsedBy[i] = fmt.Sprintf("/%s/containers/%s", version.APIVersion, volumes[i].Name) } diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go index b6552a0..26fb7fc 100644 --- a/lxd/storage_zfs.go +++ b/lxd/storage_zfs.go @@ -736,13 +736,12 @@ func (s *storageZfs) copyWithoutSnapshotsSparse(target container, source contain sourceZfsDataset := "" sourceZfsDatasetSnapshot := "" - sourceFields := strings.SplitN(sourceContainerName, shared.SnapshotDelimiter, 2) - sourceName := sourceFields[0] + sourceName, sourceSnapOnlyName, isSnapshotName := containerGetParentAndSnapshotName(sourceContainerName) targetZfsDataset := fmt.Sprintf("containers/%s", targetContainerName) - if len(sourceFields) == 2 { - sourceZfsDatasetSnapshot = sourceFields[1] + if isSnapshotName { + sourceZfsDatasetSnapshot = sourceSnapOnlyName } revert := true @@ -842,10 +841,10 @@ func (s *storageZfs) copyWithoutSnapshotFull(target container, source container) targetSnapshotDataset := targetDataset if sourceIsSnapshot { - sourceFields := strings.SplitN(source.Name(), shared.SnapshotDelimiter, 2) - snapshotSuffix = fmt.Sprintf("snapshot-%s", sourceFields[1]) - sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, sourceFields[0], snapshotSuffix) - targetSnapshotDataset = fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, targetName, sourceFields[1]) + sourceParentName, sourceSnapOnlyName, _ := containerGetParentAndSnapshotName(source.Name()) + snapshotSuffix = fmt.Sprintf("snapshot-%s", sourceSnapOnlyName) + sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, sourceParentName, snapshotSuffix) + targetSnapshotDataset = fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, targetName, sourceSnapOnlyName) } else { snapshotSuffix = uuid.NewRandom().String() sourceDataset = fmt.Sprintf("%s/containers/%s@%s", poolName, sourceName, snapshotSuffix) @@ -916,27 +915,27 @@ func (s *storageZfs) copyWithoutSnapshotFull(target container, source container) func (s *storageZfs) copyWithSnapshots(target container, source container, parentSnapshot string) error { sourceName := source.Name() - fields := strings.SplitN(target.Name(), shared.SnapshotDelimiter, 2) - containersPath := getSnapshotMountPoint(s.pool.Name, fields[0]) - snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", fields[0]) - snapshotMntPointSymlink := shared.VarPath("snapshots", fields[0]) + targetParentName, _, _ := containerGetParentAndSnapshotName(target.Name()) + containersPath := getSnapshotMountPoint(s.pool.Name, targetParentName) + snapshotMntPointSymlinkTarget := shared.VarPath("storage-pools", s.pool.Name, "snapshots", targetParentName) + snapshotMntPointSymlink := shared.VarPath("snapshots", targetParentName) err := createSnapshotMountpoint(containersPath, snapshotMntPointSymlinkTarget, snapshotMntPointSymlink) if err != nil { return err } poolName := s.getOnDiskPoolName() - sourceFields := strings.SplitN(sourceName, shared.SnapshotDelimiter, 2) - currentSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, sourceFields[0], sourceFields[1]) + sourceParentName, sourceSnapOnlyName, _ := containerGetParentAndSnapshotName(sourceName) + currentSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, sourceParentName, sourceSnapOnlyName) args := []string{"send", currentSnapshotDataset} if parentSnapshot != "" { - parentFields := strings.SplitN(parentSnapshot, shared.SnapshotDelimiter, 2) - parentSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, parentFields[0], parentFields[1]) + parentName, parentSnaponlyName, _ := containerGetParentAndSnapshotName(parentSnapshot) + parentSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, parentName, parentSnaponlyName) args = append(args, "-i", parentSnapshotDataset) } zfsSendCmd := exec.Command("zfs", args...) - targetSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, fields[0], fields[1]) + targetSnapshotDataset := fmt.Sprintf("%s/containers/%s@snapshot-%s", poolName, sourceParentName, sourceSnapOnlyName) zfsRecvCmd := exec.Command("zfs", "receive", targetSnapshotDataset) zfsRecvCmd.Stdin, _ = zfsSendCmd.StdoutPipe() @@ -1009,8 +1008,8 @@ func (s *storageZfs) ContainerCopy(target container, source container, container return err } - fields := strings.SplitN(snap.Name(), shared.SnapshotDelimiter, 2) - newSnapName := fmt.Sprintf("%s/%s", target.Name(), fields[1]) + _, snapOnlyName, _ := containerGetParentAndSnapshotName(snap.Name()) + newSnapName := fmt.Sprintf("%s/%s", target.Name(), snapOnlyName) targetSnapshot, err := containerLoadByName(s.d, newSnapName) if err != nil { return err @@ -1155,9 +1154,8 @@ func (s *storageZfs) ContainerRestore(target container, source container) error } // Restore the snapshot - fields := strings.SplitN(source.Name(), shared.SnapshotDelimiter, 2) - cName := fields[0] - snapName := fmt.Sprintf("snapshot-%s", fields[1]) + cName, snapOnlyName, _ := containerGetParentAndSnapshotName(source.Name()) + snapName := fmt.Sprintf("snapshot-%s", snapOnlyName) err = s.zfsPoolVolumeSnapshotRestore(fmt.Sprintf("containers/%s", cName), snapName) if err != nil { @@ -1239,9 +1237,8 @@ func (s *storageZfs) ContainerSnapshotCreate(snapshotContainer container, source sourceContainerName := sourceContainer.Name() - fields := strings.SplitN(snapshotContainerName, shared.SnapshotDelimiter, 2) - cName := fields[0] - snapName := fmt.Sprintf("snapshot-%s", fields[1]) + cName, snapshotSnapOnlyName, _ := containerGetParentAndSnapshotName(snapshotContainerName) + snapName := fmt.Sprintf("snapshot-%s", snapshotSnapOnlyName) sourceZfsDataset := fmt.Sprintf("containers/%s", cName) err := s.zfsPoolVolumeSnapshotCreate(sourceZfsDataset, snapName) @@ -1282,9 +1279,8 @@ func (s *storageZfs) ContainerSnapshotCreate(snapshotContainer container, source func (s *storageZfs) ContainerSnapshotDelete(snapshotContainer container) error { logger.Debugf("Deleting ZFS storage volume for snapshot \"%s\" on storage pool \"%s\".", s.volume.Name, s.pool.Name) - fields := strings.SplitN(snapshotContainer.Name(), shared.SnapshotDelimiter, 2) - sourceContainerName := fields[0] - snapName := fmt.Sprintf("snapshot-%s", fields[1]) + sourceContainerName, sourceContainerSnapOnlyName, _ := containerGetParentAndSnapshotName(snapshotContainer.Name()) + snapName := fmt.Sprintf("snapshot-%s", sourceContainerSnapOnlyName) if s.zfsFilesystemEntityExists(fmt.Sprintf("containers/%s@%s", sourceContainerName, snapName), true) { removable, err := s.zfsPoolVolumeSnapshotRemovable(fmt.Sprintf("containers/%s", sourceContainerName), snapName) @@ -1335,7 +1331,7 @@ func (s *storageZfs) ContainerSnapshotDelete(snapshotContainer container) error } // Legacy - snapPath := shared.VarPath(fmt.Sprintf("snapshots/%s/%s.zfs", sourceContainerName, fields[1])) + snapPath := shared.VarPath(fmt.Sprintf("snapshots/%s/%s.zfs", sourceContainerName, sourceContainerSnapOnlyName)) if shared.PathExists(snapPath) { err := os.Remove(snapPath) if err != nil { @@ -1361,12 +1357,11 @@ func (s *storageZfs) ContainerSnapshotRename(snapshotContainer container, newNam oldName := snapshotContainer.Name() - oldFields := strings.SplitN(snapshotContainer.Name(), shared.SnapshotDelimiter, 2) - oldcName := oldFields[0] - oldZfsDatasetName := fmt.Sprintf("snapshot-%s", oldFields[1]) + oldcName, oldSnapOnlyName, _ := containerGetParentAndSnapshotName(snapshotContainer.Name()) + oldZfsDatasetName := fmt.Sprintf("snapshot-%s", oldSnapOnlyName) - newFields := strings.SplitN(newName, shared.SnapshotDelimiter, 2) - newZfsDatasetName := fmt.Sprintf("snapshot-%s", newFields[1]) + _, newSnapOnlyName, _ := containerGetParentAndSnapshotName(newName) + newZfsDatasetName := fmt.Sprintf("snapshot-%s", newSnapOnlyName) if oldZfsDatasetName != newZfsDatasetName { err := s.zfsPoolVolumeSnapshotRename(fmt.Sprintf("containers/%s", oldcName), oldZfsDatasetName, newZfsDatasetName) @@ -1382,7 +1377,7 @@ func (s *storageZfs) ContainerSnapshotRename(snapshotContainer container, newNam s.ContainerSnapshotRename(snapshotContainer, oldName) }() - oldStyleSnapshotMntPoint := shared.VarPath(fmt.Sprintf("snapshots/%s/%s.zfs", oldcName, oldFields[1])) + oldStyleSnapshotMntPoint := shared.VarPath(fmt.Sprintf("snapshots/%s/%s.zfs", oldcName, oldSnapOnlyName)) if shared.PathExists(oldStyleSnapshotMntPoint) { err := os.Remove(oldStyleSnapshotMntPoint) if err != nil { @@ -1424,13 +1419,7 @@ func (s *storageZfs) ContainerSnapshotRename(snapshotContainer container, newNam func (s *storageZfs) ContainerSnapshotStart(container container) (bool, error) { logger.Debugf("Initializing ZFS storage volume for snapshot \"%s\" on storage pool \"%s\".", s.volume.Name, s.pool.Name) - fields := strings.SplitN(container.Name(), shared.SnapshotDelimiter, 2) - if len(fields) < 2 { - return false, fmt.Errorf("Invalid snapshot name: %s", container.Name()) - } - - cName := fields[0] - sName := fields[1] + cName, sName, _ := containerGetParentAndSnapshotName(container.Name()) sourceFs := fmt.Sprintf("containers/%s", cName) sourceSnap := fmt.Sprintf("snapshot-%s", sName) destFs := fmt.Sprintf("snapshots/%s/%s", cName, sName) @@ -1448,12 +1437,7 @@ func (s *storageZfs) ContainerSnapshotStart(container container) (bool, error) { func (s *storageZfs) ContainerSnapshotStop(container container) (bool, error) { logger.Debugf("Stopping ZFS storage volume for snapshot \"%s\" on storage pool \"%s\".", s.volume.Name, s.pool.Name) - fields := strings.SplitN(container.Name(), shared.SnapshotDelimiter, 2) - if len(fields) < 2 { - return false, fmt.Errorf("Invalid snapshot name: %s", container.Name()) - } - cName := fields[0] - sName := fields[1] + cName, sName, _ := containerGetParentAndSnapshotName(container.Name()) destFs := fmt.Sprintf("snapshots/%s/%s", cName, sName) err := s.zfsPoolVolumeDestroy(destFs) @@ -2381,9 +2365,9 @@ func (s *zfsMigrationSourceDriver) Snapshots() []container { } func (s *zfsMigrationSourceDriver) send(conn *websocket.Conn, zfsName string, zfsParent string, readWrapper func(io.ReadCloser) io.ReadCloser) error { - fields := strings.SplitN(s.container.Name(), shared.SnapshotDelimiter, 2) + sourceParentName, _, _ := containerGetParentAndSnapshotName(s.container.Name()) poolName := s.zfs.getOnDiskPoolName() - args := []string{"send", fmt.Sprintf("%s/containers/%s@%s", poolName, fields[0], zfsName)} + args := []string{"send", fmt.Sprintf("%s/containers/%s@%s", poolName, sourceParentName, zfsName)} if zfsParent != "" { args = append(args, "-i", fmt.Sprintf("%s/containers/%s@%s", poolName, s.container.Name(), zfsParent)) } @@ -2426,8 +2410,8 @@ func (s *zfsMigrationSourceDriver) send(conn *websocket.Conn, zfsName string, zf func (s *zfsMigrationSourceDriver) SendWhileRunning(conn *websocket.Conn, op *operation, bwlimit string) error { if s.container.IsSnapshot() { - fields := strings.SplitN(s.container.Name(), shared.SnapshotDelimiter, 2) - snapshotName := fmt.Sprintf("snapshot-%s", fields[1]) + _, snapOnlyName, _ := containerGetParentAndSnapshotName(s.container.Name()) + snapshotName := fmt.Sprintf("snapshot-%s", snapOnlyName) wrapper := StorageProgressReader(op, "fs_progress", s.container.Name()) return s.send(conn, snapshotName, "", wrapper) }
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
