The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6124
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) === Closes #6123 Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
From c1d13411c4ac8f7fcea7a8dbe0f51e2e7612fe61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Mon, 26 Aug 2019 05:05:58 -0400 Subject: [PATCH] lxd/storage/zfs: Fix error reporting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #6123 Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/storage_zfs_utils.go | 99 +++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 51 deletions(-) diff --git a/lxd/storage_zfs_utils.go b/lxd/storage_zfs_utils.go index 7f0bc618a6..5944c40407 100644 --- a/lxd/storage_zfs_utils.go +++ b/lxd/storage_zfs_utils.go @@ -81,7 +81,7 @@ func zfsPoolCheck(pool string) error { output, err := shared.RunCommand( "zfs", "get", "-H", "-o", "value", "type", pool) if err != nil { - return fmt.Errorf(strings.Split(output, "\n")[0]) + return err } poolType := strings.Split(output, "\n")[0] @@ -110,25 +110,24 @@ func zfsPoolVolumeExists(dataset string) (bool, error) { } func zfsPoolCreate(pool string, vdev string) error { - var output string var err error dataset := "" if pool == "" { - output, err := shared.RunCommand( + _, err := shared.RunCommand( "zfs", "create", "-p", "-o", "mountpoint=none", vdev) if err != nil { - logger.Errorf("zfs create failed: %s", output) - return fmt.Errorf("Failed to create ZFS filesystem: %s", output) + logger.Errorf("zfs create failed: %v", err) + return errors.Wrap(err, "Failed to create ZFS filesystem") } dataset = vdev } else { - output, err = shared.RunCommand( + _, err = shared.RunCommand( "zpool", "create", "-f", "-m", "none", "-O", "compression=on", pool, vdev) if err != nil { - logger.Errorf("zfs create failed: %s", output) - return fmt.Errorf("Failed to create the ZFS pool: %s", output) + logger.Errorf("zfs create failed: %v", err) + return errors.Wrap(err, "Failed to create the ZFS pool") } dataset = pool @@ -177,7 +176,7 @@ func zfsPoolApplyDefaults(dataset string) error { } func zfsPoolVolumeClone(project, pool string, source string, name string, dest string, mountpoint string) error { - output, err := shared.RunCommand( + _, err := shared.RunCommand( "zfs", "clone", "-p", @@ -186,8 +185,8 @@ func zfsPoolVolumeClone(project, pool string, source string, name string, dest s fmt.Sprintf("%s/%s@%s", pool, source, name), fmt.Sprintf("%s/%s", pool, dest)) if err != nil { - logger.Errorf("zfs clone failed: %s", output) - return fmt.Errorf("Failed to clone the filesystem: %s", output) + logger.Errorf("zfs clone failed: %v", err) + return errors.Wrap(err, "Failed to clone the filesystem") } subvols, err := zfsPoolListSubvolumes(pool, fmt.Sprintf("%s/%s", pool, source)) @@ -208,7 +207,7 @@ func zfsPoolVolumeClone(project, pool string, source string, name string, dest s destSubvol := dest + strings.TrimPrefix(sub, source) snapshotMntPoint := driver.GetSnapshotMountPoint(project, pool, destSubvol) - output, err := shared.RunCommand( + _, err = shared.RunCommand( "zfs", "clone", "-p", @@ -217,8 +216,8 @@ func zfsPoolVolumeClone(project, pool string, source string, name string, dest s fmt.Sprintf("%s/%s@%s", pool, sub, name), fmt.Sprintf("%s/%s", pool, destSubvol)) if err != nil { - logger.Errorf("zfs clone failed: %s", output) - return fmt.Errorf("Failed to clone the sub-volume: %s", output) + logger.Errorf("zfs clone failed: %v", err) + return errors.Wrap(err, "Failed to clone the sub-volume") } } @@ -226,17 +225,16 @@ func zfsPoolVolumeClone(project, pool string, source string, name string, dest s } func zfsFilesystemEntityDelete(vdev string, pool string) error { - var output string var err error if strings.Contains(pool, "/") { // Command to destroy a zfs dataset. - output, err = shared.RunCommand("zfs", "destroy", "-r", pool) + _, err = shared.RunCommand("zfs", "destroy", "-r", pool) } else { // Command to destroy a zfs pool. - output, err = shared.RunCommand("zpool", "destroy", "-f", pool) + _, err = shared.RunCommand("zpool", "destroy", "-f", pool) } if err != nil { - return fmt.Errorf("Failed to delete the ZFS pool: %s", output) + return errors.Wrap(err, "Failed to delete the ZFS pool") } // Cleanup storage @@ -262,15 +260,15 @@ func zfsPoolVolumeDestroy(pool string, path string) error { } // Due to open fds or kernel refs, this may fail for a bit, give it 10s - output, err := shared.TryRunCommand( + _, err = shared.TryRunCommand( "zfs", "destroy", "-r", fmt.Sprintf("%s/%s", pool, path)) if err != nil { - logger.Errorf("zfs destroy failed: %s", output) - return fmt.Errorf("Failed to destroy ZFS filesystem: %s", output) + logger.Errorf("zfs destroy failed: %v", err) + return errors.Wrap(err, "Failed to destroy ZFS filesystem") } return nil @@ -355,7 +353,7 @@ func zfsFilesystemEntityPropertyGet(pool string, path string, key string) (strin key, entity) if err != nil { - return "", fmt.Errorf("Failed to get ZFS config: %s", output) + return "", errors.Wrap(err, "Failed to get ZFS config") } return strings.TrimRight(output, "\n"), nil @@ -363,11 +361,10 @@ func zfsFilesystemEntityPropertyGet(pool string, path string, key string) (strin func zfsPoolVolumeRename(pool string, source string, dest string, ignoreMounts bool) error { var err error - var output string for i := 0; i < 20; i++ { if ignoreMounts { - output, err = shared.RunCommand( + _, err = shared.RunCommand( "/proc/self/exe", "forkzfs", "--", @@ -376,7 +373,7 @@ func zfsPoolVolumeRename(pool string, source string, dest string, ignoreMounts b fmt.Sprintf("%s/%s", pool, source), fmt.Sprintf("%s/%s", pool, dest)) } else { - output, err = shared.RunCommand( + _, err = shared.RunCommand( "zfs", "rename", "-p", @@ -398,8 +395,8 @@ func zfsPoolVolumeRename(pool string, source string, dest string, ignoreMounts b } // Timeout - logger.Errorf("zfs rename failed: %s", output) - return fmt.Errorf("Failed to rename ZFS filesystem: %s", output) + logger.Errorf("zfs rename failed: %v", err) + return errors.Wrap(err, "Failed to rename ZFS filesystem") } func zfsPoolVolumeSet(pool string, path string, key string, value string) error { @@ -407,55 +404,55 @@ func zfsPoolVolumeSet(pool string, path string, key string, value string) error if path != "" { vdev = fmt.Sprintf("%s/%s", pool, path) } - output, err := shared.RunCommand( + _, err := shared.RunCommand( "zfs", "set", fmt.Sprintf("%s=%s", key, value), vdev) if err != nil { - logger.Errorf("zfs set failed: %s", output) - return fmt.Errorf("Failed to set ZFS config: %s", output) + logger.Errorf("zfs set failed: %v", err) + return errors.Wrap(err, "Failed to set ZFS config") } return nil } func zfsPoolVolumeSnapshotCreate(pool string, path string, name string) error { - output, err := shared.RunCommand( + _, err := shared.RunCommand( "zfs", "snapshot", "-r", fmt.Sprintf("%s/%s@%s", pool, path, name)) if err != nil { - logger.Errorf("zfs snapshot failed: %s", output) - return fmt.Errorf("Failed to create ZFS snapshot: %s", output) + logger.Errorf("zfs snapshot failed: %v", err) + return errors.Wrap(err, "Failed to create ZFS snapshot") } return nil } func zfsPoolVolumeSnapshotDestroy(pool, path string, name string) error { - output, err := shared.RunCommand( + _, err := shared.RunCommand( "zfs", "destroy", "-r", fmt.Sprintf("%s/%s@%s", pool, path, name)) if err != nil { - logger.Errorf("zfs destroy failed: %s", output) - return fmt.Errorf("Failed to destroy ZFS snapshot: %s", output) + logger.Errorf("zfs destroy failed: %v", err) + return errors.Wrap(err, "Failed to destroy ZFS snapshot") } return nil } func zfsPoolVolumeSnapshotRestore(pool string, path string, name string) error { - output, err := shared.TryRunCommand( + _, err := shared.TryRunCommand( "zfs", "rollback", fmt.Sprintf("%s/%s@%s", pool, path, name)) if err != nil { - logger.Errorf("zfs rollback failed: %s", output) - return fmt.Errorf("Failed to restore ZFS snapshot: %s", output) + logger.Errorf("zfs rollback failed: %v", err) + return errors.Wrap(err, "Failed to restore ZFS snapshot") } subvols, err := zfsPoolListSubvolumes(pool, fmt.Sprintf("%s/%s", pool, path)) @@ -473,13 +470,13 @@ func zfsPoolVolumeSnapshotRestore(pool string, path string, name string) error { continue } - output, err := shared.TryRunCommand( + _, err = shared.TryRunCommand( "zfs", "rollback", fmt.Sprintf("%s/%s@%s", pool, sub, name)) if err != nil { - logger.Errorf("zfs rollback failed: %s", output) - return fmt.Errorf("Failed to restore ZFS sub-volume snapshot: %s", output) + logger.Errorf("zfs rollback failed: %v", err) + return errors.Wrap(err, "Failed to restore ZFS sub-volume snapshot") } } @@ -487,27 +484,27 @@ func zfsPoolVolumeSnapshotRestore(pool string, path string, name string) error { } func zfsPoolVolumeSnapshotRename(pool string, path string, oldName string, newName string) error { - output, err := shared.RunCommand( + _, err := shared.RunCommand( "zfs", "rename", "-r", fmt.Sprintf("%s/%s@%s", pool, path, oldName), fmt.Sprintf("%s/%s@%s", pool, path, newName)) if err != nil { - logger.Errorf("zfs snapshot rename failed: %s", output) - return fmt.Errorf("Failed to rename ZFS snapshot: %s", output) + logger.Errorf("zfs snapshot rename failed: %v", err) + return errors.Wrap(err, "Failed to rename ZFS snapshot") } return nil } func zfsMount(poolName string, path string) error { - output, err := shared.TryRunCommand( + _, err := shared.TryRunCommand( "zfs", "mount", fmt.Sprintf("%s/%s", poolName, path)) if err != nil { - return fmt.Errorf("Failed to mount ZFS filesystem: %s", output) + return errors.Wrap(err, "Failed to mount ZFS filesystem") } return nil @@ -539,8 +536,8 @@ func zfsPoolListSubvolumes(pool string, path string) ([]string, error) { "-H", "-r", path) if err != nil { - logger.Errorf("zfs list failed: %s", output) - return []string{}, fmt.Errorf("Failed to list ZFS filesystems: %s", output) + logger.Errorf("zfs list failed: %v", err) + return []string{}, errors.Wrap(err, "Failed to list ZFS filesystems") } children := []string{} @@ -576,8 +573,8 @@ func zfsPoolListSnapshots(pool string, path string) ([]string, error) { "-s", "creation", "-r", fullPath) if err != nil { - logger.Errorf("zfs list failed: %s", output) - return []string{}, fmt.Errorf("Failed to list ZFS snapshots: %s", output) + logger.Errorf("zfs list failed: %v", err) + return []string{}, errors.Wrap(err, "Failed to list ZFS snapshots") } children := []string{}
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel