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

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) ===

From a9919a5edba5de5602d43f7efef7858db84d5680 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Wed, 9 Oct 2019 12:22:51 +0100
Subject: [PATCH 1/2] lxd/rsync: Moves rsync functions to own package

Updates static analysis tests.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/{ => rsync}/rsync.go       | 24 ++++++++++++------------
 test/suites/static_analysis.sh |  1 +
 2 files changed, 13 insertions(+), 12 deletions(-)
 rename lxd/{ => rsync}/rsync.go (86%)

diff --git a/lxd/rsync.go b/lxd/rsync/rsync.go
similarity index 86%
rename from lxd/rsync.go
rename to lxd/rsync/rsync.go
index 5bfa3c1423..4b01b1307d 100644
--- a/lxd/rsync.go
+++ b/lxd/rsync/rsync.go
@@ -1,4 +1,4 @@
-package main
+package rsync
 
 import (
        "fmt"
@@ -17,17 +17,17 @@ import (
        "github.com/lxc/lxd/shared/logger"
 )
 
-// rsyncCopy copies a directory using rsync (with the --devices option).
-func rsyncLocalCopy(source string, dest string, bwlimit string, xattrs bool) 
(string, error) {
+// LocalCopy copies a directory using rsync (with the --devices option).
+func LocalCopy(source string, dest string, bwlimit string, xattrs bool) 
(string, error) {
        err := os.MkdirAll(dest, 0755)
        if err != nil {
                return "", err
        }
 
        rsyncVerbosity := "-q"
-       if debug {
+       /*if debug {
                rsyncVerbosity = "-vi"
-       }
+       }*/
 
        if bwlimit == "" {
                bwlimit = "0"
@@ -73,7 +73,7 @@ func rsyncLocalCopy(source string, dest string, bwlimit 
string, xattrs bool) (st
        return msg, nil
 }
 
-func rsyncSendSetup(name string, path string, bwlimit string, execPath string, 
features []string) (*exec.Cmd, net.Conn, io.ReadCloser, error) {
+func sendSetup(name string, path string, bwlimit string, execPath string, 
features []string) (*exec.Cmd, net.Conn, io.ReadCloser, error) {
        /*
         * The way rsync works, it invokes a subprocess that does the actual
         * talking (given to it by a -E argument). Since there isn't an easy
@@ -177,10 +177,10 @@ func rsyncSendSetup(name string, path string, bwlimit 
string, execPath string, f
        return cmd, *conn, stderr, nil
 }
 
-// RsyncSend sets up the sending half of an rsync, to recursively send the
+// Send sets up the sending half of an rsync, to recursively send the
 // directory pointed to by path over the websocket.
-func RsyncSend(name string, path string, conn *websocket.Conn, readWrapper 
func(io.ReadCloser) io.ReadCloser, features []string, bwlimit string, execPath 
string) error {
-       cmd, dataSocket, stderr, err := rsyncSendSetup(name, path, bwlimit, 
execPath, features)
+func Send(name string, path string, conn *websocket.Conn, readWrapper 
func(io.ReadCloser) io.ReadCloser, features []string, bwlimit string, execPath 
string) error {
+       cmd, dataSocket, stderr, err := sendSetup(name, path, bwlimit, 
execPath, features)
        if err != nil {
                return err
        }
@@ -222,10 +222,10 @@ func RsyncSend(name string, path string, conn 
*websocket.Conn, readWrapper func(
        return err
 }
 
-// RsyncRecv sets up the receiving half of the websocket to rsync (the other
-// half set up by RsyncSend), putting the contents in the directory specified
+// Recv sets up the receiving half of the websocket to rsync (the other
+// half set up by rsync.Send), putting the contents in the directory specified
 // by path.
-func RsyncRecv(path string, conn *websocket.Conn, writeWrapper 
func(io.WriteCloser) io.WriteCloser, features []string) error {
+func Recv(path string, conn *websocket.Conn, writeWrapper func(io.WriteCloser) 
io.WriteCloser, features []string) error {
        args := []string{
                "--server",
                "-vlogDtpre.iLsfx",
diff --git a/test/suites/static_analysis.sh b/test/suites/static_analysis.sh
index 44786668d3..102c22e47b 100644
--- a/test/suites/static_analysis.sh
+++ b/test/suites/static_analysis.sh
@@ -97,6 +97,7 @@ test_static_analysis() {
       golint -set_exit_status lxd/ucred/...
       golint -set_exit_status lxd/seccomp/...
       golint -set_exit_status lxd/apparmor/...
+      golint -set_exit_status lxd/rsync/...
 
       golint -set_exit_status shared/api/
       golint -set_exit_status shared/cancel/

From a9fd094aec1c24a641533eca40f649e25141c84d Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Wed, 9 Oct 2019 12:23:15 +0100
Subject: [PATCH 2/2] lxd: Updates usage of moved rsync functions

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/daemon_storage.go     |  3 ++-
 lxd/migrate_container.go  |  9 +++++----
 lxd/patches.go            | 15 ++++++++-------
 lxd/storage_btrfs.go      | 13 +++++++------
 lxd/storage_ceph.go       |  5 +++--
 lxd/storage_ceph_utils.go |  7 ++++---
 lxd/storage_cephfs.go     |  5 +++--
 lxd/storage_dir.go        | 19 ++++++++++---------
 lxd/storage_lvm.go        |  7 ++++---
 lxd/storage_lvm_utils.go  |  5 +++--
 lxd/storage_migration.go  | 25 +++++++++++++------------
 lxd/storage_zfs.go        | 15 ++++++++-------
 12 files changed, 70 insertions(+), 58 deletions(-)

diff --git a/lxd/daemon_storage.go b/lxd/daemon_storage.go
index fc88e3b196..f5efe4bf7d 100644
--- a/lxd/daemon_storage.go
+++ b/lxd/daemon_storage.go
@@ -11,6 +11,7 @@ import (
 
        "github.com/lxc/lxd/lxd/db"
        "github.com/lxc/lxd/lxd/node"
+       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/state"
        "github.com/lxc/lxd/shared"
 )
@@ -188,7 +189,7 @@ func daemonStorageMove(s *state.State, storageType string, 
target string) error
 
        moveContent := func(source string, target string) error {
                // Copy the content
-               _, err := rsyncLocalCopy(source, target, "", false)
+               _, err := rsync.LocalCopy(source, target, "", false)
                if err != nil {
                        return err
                }
diff --git a/lxd/migrate_container.go b/lxd/migrate_container.go
index 7bd62ac3a9..1a0c094556 100644
--- a/lxd/migrate_container.go
+++ b/lxd/migrate_container.go
@@ -19,6 +19,7 @@ import (
        "github.com/lxc/lxd/lxd/instance/instancetype"
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
+       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/util"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
@@ -266,7 +267,7 @@ func (s *migrationSourceWs) preDumpLoop(args 
*preDumpLoopArgs) (bool, error) {
        // Send the pre-dump.
        ctName, _, _ := 
shared.ContainerGetParentAndSnapshotName(s.instance.Name())
        state := s.instance.DaemonState()
-       err = RsyncSend(ctName, shared.AddSlash(args.checkpointDir), 
s.criuConn, nil, args.rsyncFeatures, args.bwlimit, state.OS.ExecPath)
+       err = rsync.Send(ctName, shared.AddSlash(args.checkpointDir), 
s.criuConn, nil, args.rsyncFeatures, args.bwlimit, state.OS.ExecPath)
        if err != nil {
                return final, err
        }
@@ -680,7 +681,7 @@ func (s *migrationSourceWs) Do(migrateOp 
*operations.Operation) error {
                 */
                ctName, _, _ := 
shared.ContainerGetParentAndSnapshotName(s.instance.Name())
                state := s.instance.DaemonState()
-               err = RsyncSend(ctName, shared.AddSlash(checkpointDir), 
s.criuConn, nil, rsyncFeatures, bwlimit, state.OS.ExecPath)
+               err = rsync.Send(ctName, shared.AddSlash(checkpointDir), 
s.criuConn, nil, rsyncFeatures, bwlimit, state.OS.ExecPath)
                if err != nil {
                        return abort(err)
                }
@@ -1060,7 +1061,7 @@ func (c *migrationSink) Do(migrateOp 
*operations.Operation) error {
                                for !sync.GetFinalPreDump() {
                                        logger.Debugf("About to receive rsync")
                                        // Transfer a CRIU pre-dump
-                                       err = 
RsyncRecv(shared.AddSlash(imagesDir), criuConn, nil, rsyncFeatures)
+                                       err = 
rsync.Recv(shared.AddSlash(imagesDir), criuConn, nil, rsyncFeatures)
                                        if err != nil {
                                                restore <- err
                                                return
@@ -1088,7 +1089,7 @@ func (c *migrationSink) Do(migrateOp 
*operations.Operation) error {
                        }
 
                        // Final CRIU dump
-                       err = RsyncRecv(shared.AddSlash(imagesDir), criuConn, 
nil, rsyncFeatures)
+                       err = rsync.Recv(shared.AddSlash(imagesDir), criuConn, 
nil, rsyncFeatures)
                        if err != nil {
                                restore <- err
                                return
diff --git a/lxd/patches.go b/lxd/patches.go
index c461998611..1193bbd927 100644
--- a/lxd/patches.go
+++ b/lxd/patches.go
@@ -17,6 +17,7 @@ import (
        "github.com/lxc/lxd/lxd/db"
        "github.com/lxc/lxd/lxd/db/query"
        deviceConfig "github.com/lxc/lxd/lxd/device/config"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
        log "github.com/lxc/lxd/shared/log15"
@@ -506,7 +507,7 @@ func upgradeFromStorageTypeBtrfs(name string, d *Daemon, 
defaultPoolName string,
                                        return err
                                }
 
-                               _, err = rsyncLocalCopy(oldContainerMntPoint, 
newContainerMntPoint, "", true)
+                               _, err = rsync.LocalCopy(oldContainerMntPoint, 
newContainerMntPoint, "", true)
                                if err != nil {
                                        logger.Errorf("Failed to rsync: %v", 
err)
                                        return err
@@ -593,7 +594,7 @@ func upgradeFromStorageTypeBtrfs(name string, d *Daemon, 
defaultPoolName string,
                                                return err
                                        }
 
-                                       output, err := 
rsyncLocalCopy(oldSnapshotMntPoint, newSnapshotMntPoint, "", true)
+                                       output, err := 
rsync.LocalCopy(oldSnapshotMntPoint, newSnapshotMntPoint, "", true)
                                        if err != nil {
                                                logger.Errorf("Failed to rsync: 
%s: %s", output, err)
                                                return err
@@ -797,7 +798,7 @@ func upgradeFromStorageTypeDir(name string, d *Daemon, 
defaultPoolName string, d
                        // First try to rename.
                        err := os.Rename(oldContainerMntPoint, 
newContainerMntPoint)
                        if err != nil {
-                               output, err := 
rsyncLocalCopy(oldContainerMntPoint, newContainerMntPoint, "", true)
+                               output, err := 
rsync.LocalCopy(oldContainerMntPoint, newContainerMntPoint, "", true)
                                if err != nil {
                                        logger.Errorf("Failed to rsync: %s: 
%s", output, err)
                                        return err
@@ -844,7 +845,7 @@ func upgradeFromStorageTypeDir(name string, d *Daemon, 
defaultPoolName string, d
                if shared.PathExists(oldSnapshotMntPoint) && 
!shared.PathExists(newSnapshotMntPoint) {
                        err := os.Rename(oldSnapshotMntPoint, 
newSnapshotMntPoint)
                        if err != nil {
-                               output, err := 
rsyncLocalCopy(oldSnapshotMntPoint, newSnapshotMntPoint, "", true)
+                               output, err := 
rsync.LocalCopy(oldSnapshotMntPoint, newSnapshotMntPoint, "", true)
                                if err != nil {
                                        logger.Errorf("Failed to rsync: %s: 
%s", output, err)
                                        return err
@@ -1176,7 +1177,7 @@ func upgradeFromStorageTypeLvm(name string, d *Daemon, 
defaultPoolName string, d
                                }
 
                                // Use rsync to fill the empty volume.
-                               output, err := 
rsyncLocalCopy(oldContainerMntPoint, newContainerMntPoint, "", true)
+                               output, err := 
rsync.LocalCopy(oldContainerMntPoint, newContainerMntPoint, "", true)
                                if err != nil {
                                        ctStorage.ContainerDelete(ctStruct)
                                        return fmt.Errorf("rsync failed: %s", 
string(output))
@@ -1330,7 +1331,7 @@ func upgradeFromStorageTypeLvm(name string, d *Daemon, 
defaultPoolName string, d
                                        }
 
                                        // Use rsync to fill the empty volume.
-                                       output, err := 
rsyncLocalCopy(oldSnapshotMntPoint, newSnapshotMntPoint, "", true)
+                                       output, err := 
rsync.LocalCopy(oldSnapshotMntPoint, newSnapshotMntPoint, "", true)
                                        if err != nil {
                                                
csStorage.ContainerDelete(csStruct)
                                                return fmt.Errorf("rsync 
failed: %s", string(output))
@@ -3434,7 +3435,7 @@ func patchUpdateFromV11(_ *sql.Tx) error {
                        // containers/<container>/snapshots/<snap0>
                        // to
                        // snapshots/<container>/<snap0>
-                       output, err := rsyncLocalCopy(oldPath, newPath, "", 
true)
+                       output, err := rsync.LocalCopy(oldPath, newPath, "", 
true)
                        if err != nil {
                                logger.Error(
                                        "Failed rsync snapshot",
diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go
index 73926948fc..cca520afb5 100644
--- a/lxd/storage_btrfs.go
+++ b/lxd/storage_btrfs.go
@@ -19,6 +19,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/state"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/lxd/util"
@@ -1098,7 +1099,7 @@ func (s *storageBtrfs) doCrossPoolContainerCopy(target 
Instance, source Instance
        if !containerOnly {
                for _, snap := range snapshots {
                        srcSnapshotMntPoint := 
driver.GetSnapshotMountPoint(target.Project(), sourcePool, snap.Name())
-                       _, err = rsyncLocalCopy(srcSnapshotMntPoint, 
destContainerMntPoint, bwlimit, true)
+                       _, err = rsync.LocalCopy(srcSnapshotMntPoint, 
destContainerMntPoint, bwlimit, true)
                        if err != nil {
                                logger.Errorf("Failed to rsync into BTRFS 
storage volume \"%s\" on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, 
err)
                                return err
@@ -1114,7 +1115,7 @@ func (s *storageBtrfs) doCrossPoolContainerCopy(target 
Instance, source Instance
        }
 
        srcContainerMntPoint := driver.GetContainerMountPoint(source.Project(), 
sourcePool, source.Name())
-       _, err = rsyncLocalCopy(srcContainerMntPoint, destContainerMntPoint, 
bwlimit, true)
+       _, err = rsync.LocalCopy(srcContainerMntPoint, destContainerMntPoint, 
bwlimit, true)
        if err != nil {
                logger.Errorf("Failed to rsync into BTRFS storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
                return err
@@ -1330,7 +1331,7 @@ func (s *storageBtrfs) ContainerRestore(container 
Instance, sourceContainer Inst
                        // Use rsync to fill the empty volume.  Sync by using
                        // the subvolume name.
                        bwlimit := s.pool.Config["rsync.bwlimit"]
-                       output, err := 
rsyncLocalCopy(sourceContainerSubvolumeName, targetContainerSubvolumeName, 
bwlimit, true)
+                       output, err := 
rsync.LocalCopy(sourceContainerSubvolumeName, targetContainerSubvolumeName, 
bwlimit, true)
                        if err != nil {
                                s.ContainerDelete(container)
                                logger.Errorf("ContainerRestore: rsync failed: 
%s", string(output))
@@ -1692,7 +1693,7 @@ func (s *storageBtrfs) 
doContainerBackupCreateOptimized(tmpPath string, backup b
 func (s *storageBtrfs) doContainerBackupCreateVanilla(tmpPath string, backup 
backup, source Instance) error {
        // Prepare for rsync
        rsync := func(oldPath string, newPath string, bwlimit string) error {
-               output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
+               output, err := rsync.LocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
                }
@@ -2923,7 +2924,7 @@ func (s *storageBtrfs) doCrossPoolVolumeCopy(sourcePool 
string, sourceName strin
                for _, snap := range snapshots {
                        srcSnapshotMntPoint := 
driver.GetStoragePoolVolumeSnapshotMountPoint(sourcePool, snap)
 
-                       _, err = rsyncLocalCopy(srcSnapshotMntPoint, 
destVolumeMntPoint, bwlimit, true)
+                       _, err = rsync.LocalCopy(srcSnapshotMntPoint, 
destVolumeMntPoint, bwlimit, true)
                        if err != nil {
                                logger.Errorf("Failed to rsync into BTRFS 
storage volume \"%s\" on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, 
err)
                                return err
@@ -2949,7 +2950,7 @@ func (s *storageBtrfs) doCrossPoolVolumeCopy(sourcePool 
string, sourceName strin
                srcVolumeMntPoint = 
driver.GetStoragePoolVolumeMountPoint(sourcePool, sourceName)
        }
 
-       _, err = rsyncLocalCopy(srcVolumeMntPoint, destVolumeMntPoint, bwlimit, 
true)
+       _, err = rsync.LocalCopy(srcVolumeMntPoint, destVolumeMntPoint, 
bwlimit, true)
        if err != nil {
                logger.Errorf("Failed to rsync into BTRFS storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
                return err
diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go
index 708b73d3c6..34ca18ef9d 100644
--- a/lxd/storage_ceph.go
+++ b/lxd/storage_ceph.go
@@ -18,6 +18,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
@@ -1048,7 +1049,7 @@ func (s *storageCeph) doCrossPoolContainerCopy(target 
Instance, source Instance,
        if !containerOnly {
                for _, snap := range snapshots {
                        srcSnapshotMntPoint := 
driver.GetSnapshotMountPoint(snap.Project(), sourcePool, snap.Name())
-                       _, err = rsyncLocalCopy(srcSnapshotMntPoint, 
destContainerMntPoint, bwlimit, true)
+                       _, err = rsync.LocalCopy(srcSnapshotMntPoint, 
destContainerMntPoint, bwlimit, true)
                        if err != nil {
                                return err
                        }
@@ -1076,7 +1077,7 @@ func (s *storageCeph) doCrossPoolContainerCopy(target 
Instance, source Instance,
        }
 
        srcContainerMntPoint := driver.GetContainerMountPoint(source.Project(), 
sourcePool, source.Name())
-       _, err = rsyncLocalCopy(srcContainerMntPoint, destContainerMntPoint, 
bwlimit, true)
+       _, err = rsync.LocalCopy(srcContainerMntPoint, destContainerMntPoint, 
bwlimit, true)
        if err != nil {
                if !refresh {
                        s.StoragePoolVolumeDelete()
diff --git a/lxd/storage_ceph_utils.go b/lxd/storage_ceph_utils.go
index a23ed4352a..0175357363 100644
--- a/lxd/storage_ceph_utils.go
+++ b/lxd/storage_ceph_utils.go
@@ -16,6 +16,7 @@ import (
 
        "github.com/lxc/lxd/lxd/db"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
@@ -1592,7 +1593,7 @@ func (s *storageCeph) cephRBDVolumeBackupCreate(tmpPath 
string, backup backup, s
 
        // Prepare for rsync
        rsync := func(oldPath string, newPath string, bwlimit string) error {
-               output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
+               output, err := rsync.LocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
                }
@@ -1934,7 +1935,7 @@ func (s *storageCeph) doCrossPoolVolumeCopy(source 
*api.StorageVolumeSource) err
                        _, snapOnlyName, _ := 
shared.ContainerGetParentAndSnapshotName(snap)
                        srcSnapshotMntPoint := 
driver.GetStoragePoolVolumeSnapshotMountPoint(source.Pool, snap)
 
-                       _, err = rsyncLocalCopy(srcSnapshotMntPoint, 
dstVolumeMntPoint, bwlimit, true)
+                       _, err = rsync.LocalCopy(srcSnapshotMntPoint, 
dstVolumeMntPoint, bwlimit, true)
                        if err != nil {
                                return err
                        }
@@ -1954,7 +1955,7 @@ func (s *storageCeph) doCrossPoolVolumeCopy(source 
*api.StorageVolumeSource) err
                srcVolumeMntPoint = 
driver.GetStoragePoolVolumeMountPoint(source.Pool, source.Name)
        }
 
-       _, err = rsyncLocalCopy(srcVolumeMntPoint, dstVolumeMntPoint, bwlimit, 
true)
+       _, err = rsync.LocalCopy(srcVolumeMntPoint, dstVolumeMntPoint, bwlimit, 
true)
        if err != nil {
                os.RemoveAll(dstVolumeMntPoint)
                logger.Errorf("Failed to rsync into RBD storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
diff --git a/lxd/storage_cephfs.go b/lxd/storage_cephfs.go
index ed3f219ece..89d0a8cc06 100644
--- a/lxd/storage_cephfs.go
+++ b/lxd/storage_cephfs.go
@@ -15,6 +15,7 @@ import (
 
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
+       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/state"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
@@ -534,7 +535,7 @@ func (s *storageCephFs) StoragePoolVolumeUpdate(writable 
*api.StorageVolumePut,
 
                // Restore using rsync
                bwlimit := s.pool.Config["rsync.bwlimit"]
-               output, err := rsyncLocalCopy(sourcePath, targetPath, bwlimit, 
false)
+               output, err := rsync.LocalCopy(sourcePath, targetPath, bwlimit, 
false)
                if err != nil {
                        return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
                }
@@ -984,7 +985,7 @@ func (s *storageCephFs) copyVolume(sourcePool string, 
source string, target stri
 
        // Sync data on target
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       _, err := rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit, false)
+       _, err := rsync.LocalCopy(srcMountPoint, dstMountPoint, bwlimit, false)
        if err != nil {
                logger.Errorf("Failed to rsync into CEPHFS storage volume 
\"%s\" on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
                return err
diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go
index c24eecaae4..4bcb01f837 100644
--- a/lxd/storage_dir.go
+++ b/lxd/storage_dir.go
@@ -15,6 +15,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/lxd/storage/quota"
        "github.com/lxc/lxd/shared"
@@ -413,7 +414,7 @@ func (s *storageDir) StoragePoolVolumeUpdate(writable 
*api.StorageVolumePut, cha
 
                // Restore using rsync
                bwlimit := s.pool.Config["rsync.bwlimit"]
-               output, err := rsyncLocalCopy(sourcePath, targetPath, bwlimit, 
true)
+               output, err := rsync.LocalCopy(sourcePath, targetPath, bwlimit, 
true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
                }
@@ -669,7 +670,7 @@ func (s *storageDir) copyContainer(target Instance, source 
Instance) error {
        }
 
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
+       output, err := rsync.LocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
        if err != nil {
                return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
@@ -698,7 +699,7 @@ func (s *storageDir) copySnapshot(target Instance, 
targetPool string, source Ins
        }
 
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
+       output, err := rsync.LocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
        if err != nil {
                return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
@@ -893,7 +894,7 @@ func (s *storageDir) ContainerRestore(container Instance, 
sourceContainer Instan
 
        // Restore using rsync
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       output, err := rsyncLocalCopy(sourcePath, targetPath, bwlimit, true)
+       output, err := rsync.LocalCopy(sourcePath, targetPath, bwlimit, true)
        if err != nil {
                return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
@@ -936,7 +937,7 @@ func (s *storageDir) 
ContainerSnapshotCreate(snapshotContainer Instance, sourceC
        }
 
        rsync := func(snapshotContainer Instance, oldPath string, newPath 
string, bwlimit string) error {
-               output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
+               output, err := rsync.LocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        s.ContainerDelete(snapshotContainer)
                        return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
@@ -1141,7 +1142,7 @@ func (s *storageDir) ContainerBackupCreate(backup backup, 
source Instance) error
 
        // Prepare for rsync
        rsync := func(oldPath string, newPath string, bwlimit string) error {
-               output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
+               output, err := rsync.LocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
                }
@@ -1473,7 +1474,7 @@ func (s *storageDir) 
StoragePoolVolumeSnapshotCreate(target *api.StorageVolumeSn
 
        sourcePath := driver.GetStoragePoolVolumeMountPoint(s.pool.Name, 
sourceName)
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       msg, err := rsyncLocalCopy(sourcePath, targetPath, bwlimit, true)
+       msg, err := rsync.LocalCopy(sourcePath, targetPath, bwlimit, true)
        if err != nil {
                return fmt.Errorf("Failed to rsync: %s: %s", string(msg), err)
        }
@@ -1563,7 +1564,7 @@ func (s *storageDir) copyVolume(sourcePool string, source 
string, target string)
 
        bwlimit := s.pool.Config["rsync.bwlimit"]
 
-       _, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
+       _, err = rsync.LocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
        if err != nil {
                os.RemoveAll(dstMountPoint)
                logger.Errorf("Failed to rsync into DIR storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
@@ -1584,7 +1585,7 @@ func (s *storageDir) copyVolumeSnapshot(sourcePool 
string, source string, target
 
        bwlimit := s.pool.Config["rsync.bwlimit"]
 
-       _, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
+       _, err = rsync.LocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
        if err != nil {
                os.RemoveAll(dstMountPoint)
                logger.Errorf("Failed to rsync into DIR storage volume \"%s\" 
on storage pool \"%s\": %s", target, s.pool.Name, err)
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index d41704a8bf..8c9162735e 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -16,6 +16,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
@@ -823,7 +824,7 @@ func (s *storageLvm) StoragePoolVolumeUpdate(writable 
*api.StorageVolumePut,
                        targetVolumeMntPoint := 
driver.GetStoragePoolVolumeMountPoint(poolName, s.volume.Name)
 
                        bwlimit := s.pool.Config["rsync.bwlimit"]
-                       output, err := rsyncLocalCopy(sourceVolumeMntPoint, 
targetVolumeMntPoint, bwlimit, true)
+                       output, err := rsync.LocalCopy(sourceVolumeMntPoint, 
targetVolumeMntPoint, bwlimit, true)
                        if err != nil {
                                return fmt.Errorf("Failed to rsync container: 
%s: %s", string(output), err)
                        }
@@ -1491,7 +1492,7 @@ func (s *storageLvm) ContainerRestore(target Instance, 
source Instance) error {
                defer target.Unfreeze()
 
                bwlimit := s.pool.Config["rsync.bwlimit"]
-               output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
+               output, err := rsync.LocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
                }
@@ -1683,7 +1684,7 @@ func (s *storageLvm) ContainerBackupCreate(backup backup, 
source Instance) error
 
        // Prepare for rsync
        rsync := func(oldPath string, newPath string, bwlimit string) error {
-               output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
+               output, err := rsync.LocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
                }
diff --git a/lxd/storage_lvm_utils.go b/lxd/storage_lvm_utils.go
index a504886614..f782366ad2 100644
--- a/lxd/storage_lvm_utils.go
+++ b/lxd/storage_lvm_utils.go
@@ -13,6 +13,7 @@ import (
        "github.com/lxc/lxd/lxd/db"
        "github.com/lxc/lxd/lxd/instance/instancetype"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/state"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
@@ -426,7 +427,7 @@ func (s *storageLvm) copyContainerLv(target Instance, 
source Instance, readonly
        }
 
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
+       output, err := rsync.LocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
        if err != nil {
                return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
@@ -1034,7 +1035,7 @@ func (s *storageLvm) copyVolumeLv(sourcePool string, 
source string, target strin
        }
 
        bwlimit := s.pool.Config["rsync.bwlimit"]
-       _, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
+       _, err = rsync.LocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
        if err != nil {
                os.RemoveAll(dstMountPoint)
                logger.Errorf("Failed to rsync into LVM storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
diff --git a/lxd/storage_migration.go b/lxd/storage_migration.go
index 6025602700..7bb005266d 100644
--- a/lxd/storage_migration.go
+++ b/lxd/storage_migration.go
@@ -12,6 +12,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
@@ -72,7 +73,7 @@ func (s rsyncStorageSourceDriver) SendStorageVolume(conn 
*websocket.Conn, op *op
                        path = shared.AddSlash(path)
                        logger.Debugf("Starting to send storage volume snapshot 
%s on storage pool %s from %s", snap, pool.Name, path)
 
-                       err = RsyncSend(volume.Name, path, conn, wrapper, 
s.rsyncFeatures, bwlimit, state.OS.ExecPath)
+                       err = rsync.Send(volume.Name, path, conn, wrapper, 
s.rsyncFeatures, bwlimit, state.OS.ExecPath)
                        if err != nil {
                                return err
                        }
@@ -83,7 +84,7 @@ func (s rsyncStorageSourceDriver) SendStorageVolume(conn 
*websocket.Conn, op *op
        path := driver.GetStoragePoolVolumeMountPoint(pool.Name, volume.Name)
        path = shared.AddSlash(path)
        logger.Debugf("Starting to send storage volume %s on storage pool %s 
from %s", volume.Name, pool.Name, path)
-       err = RsyncSend(volume.Name, path, conn, wrapper, s.rsyncFeatures, 
bwlimit, state.OS.ExecPath)
+       err = rsync.Send(volume.Name, path, conn, wrapper, s.rsyncFeatures, 
bwlimit, state.OS.ExecPath)
        if err != nil {
                return err
        }
@@ -107,7 +108,7 @@ func (s rsyncStorageSourceDriver) SendWhileRunning(conn 
*websocket.Conn, op *ope
                        path := send.Path()
                        wrapper := StorageProgressReader(op, "fs_progress", 
send.Name())
                        state := s.container.DaemonState()
-                       err = RsyncSend(project.Prefix(s.container.Project(), 
ctName), shared.AddSlash(path), conn, wrapper, s.rsyncFeatures, bwlimit, 
state.OS.ExecPath)
+                       err = rsync.Send(project.Prefix(s.container.Project(), 
ctName), shared.AddSlash(path), conn, wrapper, s.rsyncFeatures, bwlimit, 
state.OS.ExecPath)
                        if err != nil {
                                return err
                        }
@@ -127,14 +128,14 @@ func (s rsyncStorageSourceDriver) SendWhileRunning(conn 
*websocket.Conn, op *ope
                }
        }
 
-       return RsyncSend(project.Prefix(s.container.Project(), ctName), 
shared.AddSlash(s.container.Path()), conn, wrapper, s.rsyncFeatures, bwlimit, 
state.OS.ExecPath)
+       return rsync.Send(project.Prefix(s.container.Project(), ctName), 
shared.AddSlash(s.container.Path()), conn, wrapper, s.rsyncFeatures, bwlimit, 
state.OS.ExecPath)
 }
 
 func (s rsyncStorageSourceDriver) SendAfterCheckpoint(conn *websocket.Conn, 
bwlimit string) error {
        ctName, _, _ := 
shared.ContainerGetParentAndSnapshotName(s.container.Name())
        // resync anything that changed between our first send and the 
checkpoint
        state := s.container.DaemonState()
-       return RsyncSend(project.Prefix(s.container.Project(), ctName), 
shared.AddSlash(s.container.Path()), conn, nil, s.rsyncFeatures, bwlimit, 
state.OS.ExecPath)
+       return rsync.Send(project.Prefix(s.container.Project(), ctName), 
shared.AddSlash(s.container.Path()), conn, nil, s.rsyncFeatures, bwlimit, 
state.OS.ExecPath)
 }
 
 func (s rsyncStorageSourceDriver) Cleanup() {
@@ -263,7 +264,7 @@ func rsyncStorageMigrationSink(conn *websocket.Conn, op 
*operations.Operation, a
                        path = shared.AddSlash(path)
                        logger.Debugf("Starting to receive storage volume 
snapshot %s on storage pool %s into %s", target.Name, pool.Name, path)
 
-                       err = RsyncRecv(path, conn, wrapper, args.RsyncFeatures)
+                       err = rsync.Recv(path, conn, wrapper, 
args.RsyncFeatures)
                        if err != nil {
                                return err
                        }
@@ -279,7 +280,7 @@ func rsyncStorageMigrationSink(conn *websocket.Conn, op 
*operations.Operation, a
        path := driver.GetStoragePoolVolumeMountPoint(pool.Name, volume.Name)
        path = shared.AddSlash(path)
        logger.Debugf("Starting to receive storage volume %s on storage pool %s 
into %s", volume.Name, pool.Name, path)
-       return RsyncRecv(path, conn, wrapper, args.RsyncFeatures)
+       return rsync.Recv(path, conn, wrapper, args.RsyncFeatures)
 }
 
 func rsyncMigrationSink(conn *websocket.Conn, op *operations.Operation, args 
MigrationSinkArgs) error {
@@ -356,7 +357,7 @@ func rsyncMigrationSink(conn *websocket.Conn, op 
*operations.Operation, args Mig
                                }
 
                                wrapper := StorageProgressWriter(op, 
"fs_progress", s.Name())
-                               if err := RsyncRecv(shared.AddSlash(s.Path()), 
conn, wrapper, args.RsyncFeatures); err != nil {
+                               if err := rsync.Recv(shared.AddSlash(s.Path()), 
conn, wrapper, args.RsyncFeatures); err != nil {
                                        return err
                                }
 
@@ -371,7 +372,7 @@ func rsyncMigrationSink(conn *websocket.Conn, op 
*operations.Operation, args Mig
                }
 
                wrapper := StorageProgressWriter(op, "fs_progress", 
args.Instance.Name())
-               err = RsyncRecv(shared.AddSlash(args.Instance.Path()), conn, 
wrapper, args.RsyncFeatures)
+               err = rsync.Recv(shared.AddSlash(args.Instance.Path()), conn, 
wrapper, args.RsyncFeatures)
                if err != nil {
                        return err
                }
@@ -409,7 +410,7 @@ func rsyncMigrationSink(conn *websocket.Conn, op 
*operations.Operation, args Mig
                                }
 
                                wrapper := StorageProgressWriter(op, 
"fs_progress", snap.GetName())
-                               err := 
RsyncRecv(shared.AddSlash(args.Instance.Path()), conn, wrapper, 
args.RsyncFeatures)
+                               err := 
rsync.Recv(shared.AddSlash(args.Instance.Path()), conn, wrapper, 
args.RsyncFeatures)
                                if err != nil {
                                        return err
                                }
@@ -434,7 +435,7 @@ func rsyncMigrationSink(conn *websocket.Conn, op 
*operations.Operation, args Mig
                }
 
                wrapper := StorageProgressWriter(op, "fs_progress", 
args.Instance.Name())
-               err = RsyncRecv(shared.AddSlash(args.Instance.Path()), conn, 
wrapper, args.RsyncFeatures)
+               err = rsync.Recv(shared.AddSlash(args.Instance.Path()), conn, 
wrapper, args.RsyncFeatures)
                if err != nil {
                        return err
                }
@@ -443,7 +444,7 @@ func rsyncMigrationSink(conn *websocket.Conn, op 
*operations.Operation, args Mig
        if args.Live {
                /* now receive the final sync */
                wrapper := StorageProgressWriter(op, "fs_progress", 
args.Instance.Name())
-               err := RsyncRecv(shared.AddSlash(args.Instance.Path()), conn, 
wrapper, args.RsyncFeatures)
+               err := rsync.Recv(shared.AddSlash(args.Instance.Path()), conn, 
wrapper, args.RsyncFeatures)
                if err != nil {
                        return err
                }
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index b0bf9c9df9..743591695a 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -17,6 +17,7 @@ import (
        "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/project"
+       "github.com/lxc/lxd/lxd/rsync"
        driver "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/lxd/util"
        "github.com/lxc/lxd/shared"
@@ -1012,7 +1013,7 @@ func (s *storageZfs) copyWithoutSnapshotsSparse(target 
Instance, source Instance
                }()
 
                bwlimit := s.pool.Config["rsync.bwlimit"]
-               output, err := rsyncLocalCopy(sourceContainerPath, 
targetContainerPath, bwlimit, true)
+               output, err := rsync.LocalCopy(sourceContainerPath, 
targetContainerPath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("rsync failed: %s", string(output))
                }
@@ -1229,7 +1230,7 @@ func (s *storageZfs) doCrossPoolContainerCopy(target 
Instance, source Instance,
        if !containerOnly {
                for _, snap := range snapshots {
                        srcSnapshotMntPoint := 
driver.GetSnapshotMountPoint(target.Project(), sourcePool, snap.Name())
-                       _, err = rsyncLocalCopy(srcSnapshotMntPoint, 
destContainerMntPoint, bwlimit, true)
+                       _, err = rsync.LocalCopy(srcSnapshotMntPoint, 
destContainerMntPoint, bwlimit, true)
                        if err != nil {
                                logger.Errorf("Failed to rsync into ZFS storage 
volume \"%s\" on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
                                return err
@@ -1245,7 +1246,7 @@ func (s *storageZfs) doCrossPoolContainerCopy(target 
Instance, source Instance,
        }
 
        srcContainerMntPoint := driver.GetContainerMountPoint(source.Project(), 
sourcePool, source.Name())
-       _, err = rsyncLocalCopy(srcContainerMntPoint, destContainerMntPoint, 
bwlimit, true)
+       _, err = rsync.LocalCopy(srcContainerMntPoint, destContainerMntPoint, 
bwlimit, true)
        if err != nil {
                logger.Errorf("Failed to rsync into ZFS storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
                return err
@@ -1991,7 +1992,7 @@ func (s *storageZfs) 
doContainerBackupCreateOptimized(tmpPath string, backup bac
 func (s *storageZfs) doContainerBackupCreateVanilla(tmpPath string, backup 
backup, source Instance) error {
        // Prepare for rsync
        rsync := func(oldPath string, newPath string, bwlimit string) error {
-               output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
+               output, err := rsync.LocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
                }
@@ -2856,7 +2857,7 @@ func (s *storageZfs) doCrossPoolStorageVolumeCopy(source 
*api.StorageVolumeSourc
                for _, snap := range snapshots {
                        srcMountPoint := 
driver.GetStoragePoolVolumeSnapshotMountPoint(source.Pool, snap)
 
-                       _, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, 
bwlimit, true)
+                       _, err = rsync.LocalCopy(srcMountPoint, dstMountPoint, 
bwlimit, true)
                        if err != nil {
                                logger.Errorf("Failed to rsync into ZFS storage 
volume \"%s\" on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
                                return err
@@ -2876,7 +2877,7 @@ func (s *storageZfs) doCrossPoolStorageVolumeCopy(source 
*api.StorageVolumeSourc
                srcMountPoint = 
driver.GetStoragePoolVolumeMountPoint(source.Pool, source.Name)
        }
 
-       _, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
+       _, err = rsync.LocalCopy(srcMountPoint, dstMountPoint, bwlimit, true)
        if err != nil {
                os.RemoveAll(dstMountPoint)
                logger.Errorf("Failed to rsync into ZFS storage volume \"%s\" 
on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
@@ -3029,7 +3030,7 @@ func (s *storageZfs) 
copyVolumeWithoutSnapshotsSparse(source *api.StorageVolumeS
        } else {
                bwlimit := s.pool.Config["rsync.bwlimit"]
 
-               output, err := rsyncLocalCopy(sourceVolumePath, 
targetVolumePath, bwlimit, true)
+               output, err := rsync.LocalCopy(sourceVolumePath, 
targetVolumePath, bwlimit, true)
                if err != nil {
                        return fmt.Errorf("rsync failed: %s", string(output))
                }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to