The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/5466
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 4d9aba3eba5559b8deaf9c9cbb35b566215ffed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]> Date: Mon, 4 Feb 2019 16:55:40 +0100 Subject: [PATCH 1/3] shared: Properly handle uncompressed tarballs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <[email protected]> --- shared/archive_linux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/archive_linux.go b/shared/archive_linux.go index c141936387..5c6aec830d 100644 --- a/shared/archive_linux.go +++ b/shared/archive_linux.go @@ -47,7 +47,7 @@ func DetectCompressionFile(f io.ReadSeeker) ([]string, string, []string, error) case bytes.Equal(header[0:3], []byte{0x5d, 0x00, 0x00}): return []string{"--lzma", "-xf"}, ".tar.lzma", []string{"lzma", "-d"}, nil case bytes.Equal(header[257:262], []byte{'u', 's', 't', 'a', 'r'}): - return []string{"-xf"}, ".tar", []string{""}, nil + return []string{"-xf"}, ".tar", []string{}, nil case bytes.Equal(header[0:4], []byte{'h', 's', 'q', 's'}): return []string{""}, ".squashfs", nil, nil default: From f18362015da4fe468305a12036a7b624206b9ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]> Date: Mon, 4 Feb 2019 17:14:43 +0100 Subject: [PATCH 2/3] lxd/backup: Don't waste memory during unpack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #5447 Signed-off-by: Stéphane Graber <[email protected]> --- lxd/backup.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lxd/backup.go b/lxd/backup.go index e469a19429..4aace58f63 100644 --- a/lxd/backup.go +++ b/lxd/backup.go @@ -2,10 +2,10 @@ package main import ( "archive/tar" - "bytes" "fmt" "io" "os" + "os/exec" "path/filepath" "strings" "time" @@ -175,14 +175,22 @@ func backupGetInfo(r io.ReadSeeker) (*backupInfo, error) { } if len(unpacker) > 0 { - var buf bytes.Buffer + cmd := exec.Command(unpacker[0], unpacker[1:]...) + cmd.Stdin = r - err := shared.RunCommandWithFds(r, &buf, unpacker[0], unpacker[1:]...) + stdout, err := cmd.StdoutPipe() if err != nil { return nil, err } + defer stdout.Close() - tr = tar.NewReader(&buf) + err = cmd.Start() + if err != nil { + return nil, err + } + defer cmd.Wait() + + tr = tar.NewReader(stdout) } else { tr = tar.NewReader(r) } From 9a2e7f95b40081668ea81b42f15ab2cab8c8a46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]> Date: Mon, 4 Feb 2019 16:52:31 +0100 Subject: [PATCH 3/3] lxd/backup: Fix fd leak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <[email protected]> --- lxd/containers_post.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lxd/containers_post.go b/lxd/containers_post.go index 1ec8a6b3c6..b229c696a3 100644 --- a/lxd/containers_post.go +++ b/lxd/containers_post.go @@ -579,6 +579,7 @@ func createFromBackup(d *Daemon, project string, data io.Reader) Response { _, err = io.Copy(f, data) if err != nil { + f.Close() return InternalError(err) } @@ -586,11 +587,14 @@ func createFromBackup(d *Daemon, project string, data io.Reader) Response { f.Seek(0, 0) bInfo, err := backupGetInfo(f) if err != nil { + f.Close() return BadRequest(err) } bInfo.Project = project run := func(op *operation) error { + defer f.Close() + // Dump tarball to storage f.Seek(0, 0) err = containerCreateFromBackup(d.State(), *bInfo, f)
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
