mcst-linux-kernel/patches-2024.06.26/lxd-3.0.0/0020-Properly-filter-node-l...

75 lines
2.7 KiB
Diff
Raw Normal View History

2024-07-09 13:51:45 +03:00
From c1fefd8f43433a5eb95f315f0acda3a51904d786 Mon Sep 17 00:00:00 2001
From: Free Ekanayaka <free.ekanayaka@canonical.com>
Date: Thu, 5 Apr 2018 07:47:40 +0000
Subject: Properly filter node-level storage configs by pool ID
Signed-off-by: Free Ekanayaka <free.ekanayaka@canonical.com>
---
lxd/db/storage_pools.go | 3 ++-
lxd/db/storage_pools_test.go | 38 ++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go
index 91e51926..00f5160e 100644
--- a/lxd/db/storage_pools.go
+++ b/lxd/db/storage_pools.go
@@ -332,7 +332,8 @@ WHERE storage_pools.id = ? AND storage_pools.state = ?
configs := map[string]map[string]string{}
for _, node := range nodes {
- config, err := query.SelectConfig(c.tx, "storage_pools_config", "node_id=?", node.ID)
+ config, err := query.SelectConfig(
+ c.tx, "storage_pools_config", "storage_pool_id=? AND node_id=?", poolID, node.ID)
if err != nil {
return nil, err
}
diff --git a/lxd/db/storage_pools_test.go b/lxd/db/storage_pools_test.go
index 523a014c..11e503f0 100644
--- a/lxd/db/storage_pools_test.go
+++ b/lxd/db/storage_pools_test.go
@@ -46,6 +46,44 @@ func TestStoragePoolsCreatePending(t *testing.T) {
assert.Equal(t, map[string]string{"source": "/egg"}, configs["none"])
}
+func TestStoragePoolsCreatePending_OtherPool(t *testing.T) {
+ tx, cleanup := db.NewTestClusterTx(t)
+ defer cleanup()
+
+ // Create a pending pool named 'pool1' on two nodes (the default 'none'
+ // and 'buzz')
+ _, err := tx.NodeAdd("buzz", "1.2.3.4:666")
+ require.NoError(t, err)
+
+ config := map[string]string{"source": "/foo"}
+ err = tx.StoragePoolCreatePending("none", "pool1", "dir", config)
+ require.NoError(t, err)
+
+ config = map[string]string{"source": "/bar"}
+ err = tx.StoragePoolCreatePending("buzz", "pool1", "dir", config)
+ require.NoError(t, err)
+
+ // Create a second pending pool named pool2 on the same two nodes.
+ config = map[string]string{}
+ err = tx.StoragePoolCreatePending("none", "pool2", "dir", config)
+ require.NoError(t, err)
+
+ poolID, err := tx.StoragePoolID("pool2")
+ require.NoError(t, err)
+
+ config = map[string]string{}
+ err = tx.StoragePoolCreatePending("buzz", "pool2", "dir", config)
+ require.NoError(t, err)
+
+ // The node-level configs of the second pool do not contain any key
+ // from the first pool.
+ configs, err := tx.StoragePoolNodeConfigs(poolID)
+ require.NoError(t, err)
+ assert.Len(t, configs, 2)
+ assert.Equal(t, map[string]string{}, configs["none"])
+ assert.Equal(t, map[string]string{}, configs["buzz"])
+}
+
// If an entry for the given pool and node already exists, an error is
// returned.
func TestStoragePoolsCreatePending_AlreadyDefined(t *testing.T) {