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

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 is part 1 of a series of patches to add better progress
tracking support for export and import.

By using Reader and Writer rather than filename for compressing
the caller can provide a tracking reader/writer for progress.

Signed-off-by: Joel Hockey <joelhoc...@chromium.org>
From 20a55a17baf3933d10ca7aee009d54b8365cec7e Mon Sep 17 00:00:00 2001
From: Joel Hockey <joelhoc...@chromium.org>
Date: Thu, 31 Jan 2019 18:52:24 -0800
Subject: [PATCH] lxd/images: change compressFile to take io.Reader and
 io.Writer

This is part 1 of a series of patches to add better progress
tracking support for export and import.

By using Reader and Writer rather than filename for compressing
the caller can provide a tracking reader/writer for progress.

Signed-off-by: Joel Hockey <joelhoc...@chromium.org>
---
 lxd/backup.go  | 16 ++++++++++++++--
 lxd/images.go  | 35 ++++++++++++++++++-----------------
 lxd/patches.go | 16 ++++++++++++++--
 3 files changed, 46 insertions(+), 21 deletions(-)

diff --git a/lxd/backup.go b/lxd/backup.go
index 46a53a3014..e469a19429 100644
--- a/lxd/backup.go
+++ b/lxd/backup.go
@@ -353,7 +353,19 @@ func backupCreateTarball(s *state.State, path string, 
backup backup) error {
        }
 
        if compress != "none" {
-               compressedPath, err := compressFile(backupPath, compress)
+               infile, err := os.Open(backupPath)
+               if err != nil {
+                       return err
+               }
+               defer infile.Close()
+
+               compressed, err := os.Create(backupPath + ".compressed")
+               if err != nil {
+                       return err
+               }
+               defer compressed.Close()
+
+               err = compressFile(compress, infile, compressed)
                if err != nil {
                        return err
                }
@@ -363,7 +375,7 @@ func backupCreateTarball(s *state.State, path string, 
backup backup) error {
                        return err
                }
 
-               err = os.Rename(compressedPath, backupPath)
+               err = os.Rename(compressed.Name(), backupPath)
                if err != nil {
                        return err
                }
diff --git a/lxd/images.go b/lxd/images.go
index a27f4f5620..ea8c2cc69f 100644
--- a/lxd/images.go
+++ b/lxd/images.go
@@ -129,7 +129,7 @@ func unpackImage(imagefname string, destpath string, sType 
storageType, runningI
        return nil
 }
 
-func compressFile(path string, compress string) (string, error) {
+func compressFile(compress string, infile io.Reader, outfile io.Writer) error {
        reproducible := []string{"gzip"}
 
        args := []string{"-c"}
@@ -137,24 +137,11 @@ func compressFile(path string, compress string) (string, 
error) {
                args = append(args, "-n")
        }
 
-       args = append(args, path)
        cmd := exec.Command(compress, args...)
-
-       outfile, err := os.Create(path + ".compressed")
-       if err != nil {
-               return "", err
-       }
-
-       defer outfile.Close()
+       cmd.Stdin = infile
        cmd.Stdout = outfile
 
-       err = cmd.Run()
-       if err != nil {
-               os.Remove(outfile.Name())
-               return "", err
-       }
-
-       return outfile.Name(), nil
+       return cmd.Run()
 }
 
 /*
@@ -223,7 +210,21 @@ func imgPostContInfo(d *Daemon, r *http.Request, req 
api.ImagesPost, builddir st
        }
 
        if compress != "none" {
-               compressedPath, err = compressFile(tarfile.Name(), compress)
+               tarfile, err = os.Open(tarfile.Name())
+               if err != nil {
+                       return nil, err
+               }
+               defer tarfile.Close()
+
+               compressedPath = tarfile.Name() + ".compressed"
+
+               compressed, err := os.Create(compressedPath)
+               if err != nil {
+                       return nil, err
+               }
+               defer compressed.Close()
+
+               err = compressFile(compress, tarfile, compressed)
                if err != nil {
                        return nil, err
                }
diff --git a/lxd/patches.go b/lxd/patches.go
index 235410e66c..93b2ab8e5f 100644
--- a/lxd/patches.go
+++ b/lxd/patches.go
@@ -3154,7 +3154,19 @@ func patchMoveBackups(name string, d *Daemon) error {
                                }
 
                                // Compress it
-                               compressedPath, err := compressFile(backupPath, 
"xz")
+                               infile, err := os.Open(backupPath)
+                               if err != nil {
+                                       return err
+                               }
+                               defer infile.Close()
+
+                               compressed, err := os.Create(backupPath + 
".compressed")
+                               if err != nil {
+                                       return err
+                               }
+                               defer compressed.Close()
+
+                               err = compressFile("xz", infile, compressed)
                                if err != nil {
                                        return err
                                }
@@ -3164,7 +3176,7 @@ func patchMoveBackups(name string, d *Daemon) error {
                                        return err
                                }
 
-                               err = os.Rename(compressedPath, backupPath)
+                               err = os.Rename(compressed.Name(), backupPath)
                                if err != nil {
                                        return err
                                }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to