The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6712
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) === Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
From d77f8852f641cde03cc91bf65f94d525fb36ac13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Tue, 14 Jan 2020 23:56:40 -0500 Subject: [PATCH] lxd/db: Fix multi-arch cached images MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/daemon_images.go | 9 ++++++--- lxd/db/db_internal_test.go | 4 ++-- lxd/db/images.go | 8 ++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lxd/daemon_images.go b/lxd/daemon_images.go index 4609621d77..4441a65dd5 100644 --- a/lxd/daemon_images.go +++ b/lxd/daemon_images.go @@ -97,9 +97,12 @@ func (d *Daemon) ImageDownload(op *operations.Operation, server string, protocol return nil, err } if preferCached && interval > 0 && alias != fp { - cachedFingerprint, err := d.cluster.ImageSourceGetCachedFingerprint(server, protocol, alias, imageType) - if err == nil && cachedFingerprint != fp { - fp = cachedFingerprint + for _, architecture := range d.os.Architectures { + cachedFingerprint, err := d.cluster.ImageSourceGetCachedFingerprint(server, protocol, alias, imageType, architecture) + if err == nil && cachedFingerprint != fp { + fp = cachedFingerprint + break + } } } diff --git a/lxd/db/db_internal_test.go b/lxd/db/db_internal_test.go index 6b411081f9..13c28f7069 100644 --- a/lxd/db/db_internal_test.go +++ b/lxd/db/db_internal_test.go @@ -254,7 +254,7 @@ func (s *dbTestSuite) Test_ImageSourceGetCachedFingerprint() { err = s.db.ImageSourceInsert(imageID, "server.remote", "simplestreams", "", "test") s.Nil(err) - fingerprint, err := s.db.ImageSourceGetCachedFingerprint("server.remote", "simplestreams", "test", "container") + fingerprint, err := s.db.ImageSourceGetCachedFingerprint("server.remote", "simplestreams", "test", "container", 0) s.Nil(err) s.Equal(fingerprint, "fingerprint") } @@ -266,7 +266,7 @@ func (s *dbTestSuite) Test_ImageSourceGetCachedFingerprint_no_match() { err = s.db.ImageSourceInsert(imageID, "server.remote", "simplestreams", "", "test") s.Nil(err) - _, err = s.db.ImageSourceGetCachedFingerprint("server.remote", "lxd", "test", "container") + _, err = s.db.ImageSourceGetCachedFingerprint("server.remote", "lxd", "test", "container", 0) s.Equal(err, ErrNoSuchObject) } diff --git a/lxd/db/images.go b/lxd/db/images.go index 4fd1fbfc26..d8916d14f6 100644 --- a/lxd/db/images.go +++ b/lxd/db/images.go @@ -182,7 +182,7 @@ func (c *Cluster) ImageSourceGet(imageID int) (int, api.ImageSource, error) { // ImageSourceGetCachedFingerprint tries to find a source entry of a locally // cached image that matches the given remote details (server, protocol and // alias). Return the fingerprint linked to the matching entry, if any. -func (c *Cluster) ImageSourceGetCachedFingerprint(server string, protocol string, alias string, typeName string) (string, error) { +func (c *Cluster) ImageSourceGetCachedFingerprint(server string, protocol string, alias string, typeName string, architecture int) (string, error) { imageType := instancetype.Any if typeName != "" { var err error @@ -207,13 +207,13 @@ func (c *Cluster) ImageSourceGetCachedFingerprint(server string, protocol string FROM images_source INNER JOIN images ON images_source.image_id=images.id - WHERE server=? AND protocol=? AND alias=? AND auto_update=1 + WHERE server=? AND protocol=? AND alias=? AND auto_update=1 AND images.architecture=? ` - arg1 := []interface{}{server, protocolInt, alias} + arg1 := []interface{}{server, protocolInt, alias, architecture} if imageType != instancetype.Any { q += "AND images.type=?\n" - arg1 = []interface{}{server, protocolInt, alias, imageType} + arg1 = []interface{}{server, protocolInt, alias, architecture, imageType} } q += "ORDER BY creation_date DESC"
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel