[lxc-devel] [lxd/master] Don't make unnecessary image copies
stgraber on Github
lxc-bot at linuxcontainers.org
Mon Oct 17 20:50:09 UTC 2016
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 370 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20161017/15e9898c/attachment.bin>
-------------- next part --------------
From 36755bdbfae33e0a568e9d10e9b70169565c861c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Mon, 17 Oct 2016 16:47:32 -0400
Subject: [PATCH] Don't make unnecessary image copies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #2508
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxd/images.go | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/lxd/images.go b/lxd/images.go
index afaa514..daae70b 100644
--- a/lxd/images.go
+++ b/lxd/images.go
@@ -468,14 +468,14 @@ func getImgPostInfo(d *Daemon, r *http.Request,
sha256 := sha256.New()
var size int64
- // Create a temporary file for the image tarball
- imageTarf, err := ioutil.TempFile(builddir, "lxd_tar_")
- if err != nil {
- return info, err
- }
- defer os.Remove(imageTarf.Name())
-
if ctype == "multipart/form-data" {
+ // Create a temporary file for the image tarball
+ imageTarf, err := ioutil.TempFile(builddir, "lxd_tar_")
+ if err != nil {
+ return info, err
+ }
+ defer os.Remove(imageTarf.Name())
+
// Parse the POST data
post.Seek(0, 0)
mr := multipart.NewReader(post, ctypeParams["boundary"])
@@ -577,9 +577,8 @@ func getImgPostInfo(d *Daemon, r *http.Request,
}
} else {
post.Seek(0, 0)
- size, err = io.Copy(io.MultiWriter(imageTarf, sha256), post)
+ size, err = io.Copy(sha256, post)
info.Size = size
- imageTarf.Close()
logger.Debug("Tar size", log.Ctx{"size": size})
if err != nil {
logger.Error(
@@ -605,7 +604,7 @@ func getImgPostInfo(d *Daemon, r *http.Request,
return info, err
}
- imageMeta, err = getImageMetadata(imageTarf.Name())
+ imageMeta, err = getImageMetadata(post.Name())
if err != nil {
logger.Error(
"Failed to get image metadata",
@@ -614,13 +613,13 @@ func getImgPostInfo(d *Daemon, r *http.Request,
}
imgfname := shared.VarPath("images", info.Fingerprint)
- err = shared.FileMove(imageTarf.Name(), imgfname)
+ err = shared.FileMove(post.Name(), imgfname)
if err != nil {
logger.Error(
"Failed to move the tarfile",
log.Ctx{
"err": err,
- "source": imageTarf.Name(),
+ "source": post.Name(),
"dest": imgfname})
return info, err
}
More information about the lxc-devel
mailing list