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

Reply via email to