[lxc-devel] [lxd/master] lxd: change ImageFileRequest to use io.Writer rather than WriteSeeker

joelhockey on Github lxc-bot at linuxcontainers.org
Wed Jan 30 09:27:15 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 714 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190130/00ef22d9/attachment.bin>
-------------- next part --------------
From 4c50176f951d163ca501bfe518fd762b9a47f00f Mon Sep 17 00:00:00 2001
From: Joel Hockey <joelhockey at chromium.org>
Date: Wed, 30 Jan 2019 01:16:53 -0800
Subject: [PATCH] lxd: change ImageFileRequest to require io.Writer rather than
 io.WriteSeeker

Currently shared/util.go DownloadFileHash requires an io.WriteSeeker
since it calls Seek(0, 0).  The call to Seek is unnecessary as all
current calls into this function provide a file newly created
with os.Create.

Allowing io.Writer rather than the more restrictive io.WriteSeeker
allows other writers such as ioprogress.ProgressWriter to be
passed.

Signed-off-by: Joel Hockey <joelhockey at chromium.org>
---
 client/interfaces.go           | 6 +++---
 client/simplestreams_images.go | 2 +-
 lxc/export.go                  | 3 +--
 lxc/image.go                   | 4 ++--
 lxd/daemon_images.go           | 4 ++--
 lxd/images.go                  | 4 ++--
 shared/util.go                 | 5 +----
 7 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/client/interfaces.go b/client/interfaces.go
index 3addab14ce..2d19cb6086 100644
--- a/client/interfaces.go
+++ b/client/interfaces.go
@@ -250,7 +250,7 @@ type ContainerBackupArgs struct {
 // The BackupFileRequest struct is used for a backup download request
 type BackupFileRequest struct {
 	// Writer for the backup file
-	BackupFile io.WriteSeeker
+	BackupFile io.Writer
 
 	// Progress handler (called whenever some progress is made)
 	ProgressHandler func(progress ioprogress.ProgressData)
@@ -286,10 +286,10 @@ type ImageCreateArgs struct {
 // The ImageFileRequest struct is used for an image download request
 type ImageFileRequest struct {
 	// Writer for the metadata file
-	MetaFile io.WriteSeeker
+	MetaFile io.Writer
 
 	// Writer for the rootfs file
-	RootfsFile io.WriteSeeker
+	RootfsFile io.Writer
 
 	// Progress handler (called whenever some progress is made)
 	ProgressHandler func(progress ioprogress.ProgressData)
diff --git a/client/simplestreams_images.go b/client/simplestreams_images.go
index 1fab73a14c..2a908d81ef 100644
--- a/client/simplestreams_images.go
+++ b/client/simplestreams_images.go
@@ -79,7 +79,7 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
 	resp := ImageFileResponse{}
 
 	// Download function
-	download := func(path string, filename string, hash string, target io.WriteSeeker) (int64, error) {
+	download := func(path string, filename string, hash string, target io.Writer) (int64, error) {
 		// Try over http
 		url := fmt.Sprintf("http://%s/%s", strings.TrimPrefix(r.httpHost, "https://"), path)
 
diff --git a/lxc/export.go b/lxc/export.go
index 708c027ca1..d8f2f5086d 100644
--- a/lxc/export.go
+++ b/lxc/export.go
@@ -1,7 +1,6 @@
 package main
 
 import (
-	"io"
 	"os"
 	"strings"
 	"time"
@@ -112,7 +111,7 @@ func (c *cmdExport) Run(cmd *cobra.Command, args []string) error {
 		Quiet:  c.global.flagQuiet,
 	}
 	backupFileRequest := lxd.BackupFileRequest{
-		BackupFile:      io.WriteSeeker(target),
+		BackupFile:      target,
 		ProgressHandler: progress.UpdateProgress,
 	}
 
diff --git a/lxc/image.go b/lxc/image.go
index 8671a4fa52..2ab7e8338f 100644
--- a/lxc/image.go
+++ b/lxc/image.go
@@ -501,8 +501,8 @@ func (c *cmdImageExport) Run(cmd *cobra.Command, args []string) error {
 	}
 
 	req := lxd.ImageFileRequest{
-		MetaFile:        io.WriteSeeker(dest),
-		RootfsFile:      io.WriteSeeker(destRootfs),
+		MetaFile:        dest,
+		RootfsFile:      destRootfs,
 		ProgressHandler: progress.UpdateProgress,
 	}
 
diff --git a/lxd/daemon_images.go b/lxd/daemon_images.go
index 3a3b22eff0..c1789672a0 100644
--- a/lxd/daemon_images.go
+++ b/lxd/daemon_images.go
@@ -431,8 +431,8 @@ func (d *Daemon) ImageDownload(op *operation, server string, protocol string, ce
 		// Download the image
 		var resp *lxd.ImageFileResponse
 		request := lxd.ImageFileRequest{
-			MetaFile:        io.WriteSeeker(dest),
-			RootfsFile:      io.WriteSeeker(destRootfs),
+			MetaFile:        dest,
+			RootfsFile:      destRootfs,
 			ProgressHandler: progress,
 			Canceler:        canceler,
 			DeltaSourceRetriever: func(fingerprint string, file string) string {
diff --git a/lxd/images.go b/lxd/images.go
index 59dadf433a..05dedb0c44 100644
--- a/lxd/images.go
+++ b/lxd/images.go
@@ -1902,8 +1902,8 @@ func imageImportFromNode(imagesDir string, client lxd.ContainerServer, fingerpri
 	defer rootfsFile.Close()
 
 	getReq := lxd.ImageFileRequest{
-		MetaFile:   io.WriteSeeker(metaFile),
-		RootfsFile: io.WriteSeeker(rootfsFile),
+		MetaFile:   metaFile,
+		RootfsFile: rootfsFile,
 	}
 	getResp, err := client.GetImageFile(fingerprint, getReq)
 	if err != nil {
diff --git a/shared/util.go b/shared/util.go
index 7c964fd958..c4e3496913 100644
--- a/shared/util.go
+++ b/shared/util.go
@@ -1008,10 +1008,7 @@ func EscapePathFstab(path string) string {
 	return r.Replace(path)
 }
 
-func DownloadFileHash(httpClient *http.Client, useragent string, progress func(progress ioprogress.ProgressData), canceler *cancel.Canceler, filename string, url string, hash string, hashFunc hash.Hash, target io.WriteSeeker) (int64, error) {
-	// Always seek to the beginning
-	target.Seek(0, 0)
-
+func DownloadFileHash(httpClient *http.Client, useragent string, progress func(progress ioprogress.ProgressData), canceler *cancel.Canceler, filename string, url string, hash string, hashFunc hash.Hash, target io.Writer) (int64, error) {
 	// Prepare the download request
 	req, err := http.NewRequest("GET", url, nil)
 	if err != nil {


More information about the lxc-devel mailing list