[lxc-devel] [lxd/master] Fix placement in cluster for foreign arch

stgraber on Github lxc-bot at linuxcontainers.org
Wed Jun 24 22:06:30 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200624/09908229/attachment.bin>
-------------- next part --------------
From cf0a8fbccd441902431628427f877ac39eabbdc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 24 Jun 2020 17:43:39 -0400
Subject: [PATCH 1/2] lxd/db: Consider personalities in
 GetNodeWithLeastInstances
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/db/node.go | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/lxd/db/node.go b/lxd/db/node.go
index 5d74420109..1e22920877 100644
--- a/lxd/db/node.go
+++ b/lxd/db/node.go
@@ -641,8 +641,29 @@ func (c *ClusterTx) GetNodeWithLeastInstances(archs []int) (string, error) {
 			continue
 		}
 
-		if len(archs) > 0 && !shared.IntInSlice(node.Architecture, archs) {
-			continue
+		if len(archs) > 0 {
+			// Get personalities too.
+			personalities, err := osarch.ArchitecturePersonalities(node.Architecture)
+			if err != nil {
+				return "", err
+			}
+
+			supported := []int{node.Architecture}
+			supported = append(supported, personalities...)
+
+			match := false
+			fmt.Printf("stgraber: supported=%v requested=%v\n", supported, archs)
+			for _, entry := range supported {
+				if shared.IntInSlice(entry, archs) {
+					fmt.Printf("stgraber: supported\n")
+					match = true
+				}
+			}
+
+			if !match {
+				fmt.Printf("stgraber: unsupported\n")
+				continue
+			}
 		}
 
 		// Fetch the number of containers already created on this node.

From 8bc058e036b09460f224fc4b74c2ceae9ee5d9a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 24 Jun 2020 18:01:09 -0400
Subject: [PATCH 2/2] lxd/db: Avoid test failure in arch matching
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/db/node_test.go | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lxd/db/node_test.go b/lxd/db/node_test.go
index f111fd3998..99c1c47f34 100644
--- a/lxd/db/node_test.go
+++ b/lxd/db/node_test.go
@@ -372,7 +372,12 @@ func TestGetNodeWithLeastInstances_Architecture(t *testing.T) {
 	localArch, err := osarch.ArchitectureGetLocalID()
 	require.NoError(t, err)
 
-	_, err = tx.CreateNodeWithArch("buzz", "1.2.3.4:666", localArch+1)
+	testArch := osarch.ARCH_64BIT_S390_BIG_ENDIAN
+	if localArch == testArch {
+		testArch = osarch.ARCH_64BIT_INTEL_X86
+	}
+
+	_, err = tx.CreateNodeWithArch("buzz", "1.2.3.4:666", testArch)
 	require.NoError(t, err)
 
 	// Add a container to the default node (ID 1)


More information about the lxc-devel mailing list