The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8205
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) === - Adds state column to `storage_pools_nodes` table. - Modifies storage pool create process to allow per-node state tracking. - Allows fixing of per-node creation blockers when creating a storage pool in a cluster. Checks: - [ ] Check partially created storage pools stays in `pending` state, but successful nodes are marked as `created`. - [ ] Allow update of `pending` node specific config when storage pool in `pending` state. - [ ] Block update of non-node-specific config when storage pool in `pending` state. - [ ] Block rename of storage pool in `pending state`. - [ ] Run local delete process for `created` nodes when deleting storage pool in `pending` state. - [ ] Allow subsequent non-targeted storage pool create command and skip any nodes already in `created` state. - [ ] Only mark storage pool as `created` when all nodes successfully created.
From 22b0b86a0507cbe1d961e540181c0ee5f77596c7 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 10:18:28 +0000 Subject: [PATCH 01/16] lxd/db/cluster: Adds state column to storage_pools_nodes table and set existing rows to state=1 (created) Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/cluster/schema.go | 3 ++- lxd/db/cluster/update.go | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lxd/db/cluster/schema.go b/lxd/db/cluster/schema.go index 4b110c8ada..00ce7ea8d3 100644 --- a/lxd/db/cluster/schema.go +++ b/lxd/db/cluster/schema.go @@ -490,6 +490,7 @@ CREATE TABLE storage_pools_nodes ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, storage_pool_id INTEGER NOT NULL, node_id INTEGER NOT NULL, + state INTEGER NOT NULL DEFAULT 0, UNIQUE (storage_pool_id, node_id), FOREIGN KEY (storage_pool_id) REFERENCES storage_pools (id) ON DELETE CASCADE, FOREIGN KEY (node_id) REFERENCES nodes (id) ON DELETE CASCADE @@ -590,5 +591,5 @@ CREATE TABLE storage_volumes_snapshots_config ( UNIQUE (storage_volume_snapshot_id, key) ); -INSERT INTO schema (version, updated_at) VALUES (40, strftime("%s")) +INSERT INTO schema (version, updated_at) VALUES (41, strftime("%s")) ` diff --git a/lxd/db/cluster/update.go b/lxd/db/cluster/update.go index 55ab9c7b8e..16efb06b34 100644 --- a/lxd/db/cluster/update.go +++ b/lxd/db/cluster/update.go @@ -77,6 +77,17 @@ var updates = map[int]schema.Update{ 38: updateFromV37, 39: updateFromV38, 40: updateFromV39, + 41: updateFromV40, +} + +// Add state column to storage_pools_nodes tables. Set existing row's state to 1 ("created"). +func updateFromV40(tx *sql.Tx) error { + stmt := ` + ALTER TABLE storage_pools_nodes ADD COLUMN state INTEGER NOT NULL DEFAULT 0; + UPDATE storage_pools_nodes SET state = 1; + ` + _, err := tx.Exec(stmt) + return err } // Add state column to networks_nodes tables. Set existing row's state to 1 ("created"). From f25eff38edd6d8b698ab2172884ec8a5e8353c96 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 10:29:05 +0000 Subject: [PATCH 02/16] lxd/db/networks: Updates network state comments to indicate node usage Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/networks.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lxd/db/networks.go b/lxd/db/networks.go index 34a75003a6..c1a1263a25 100644 --- a/lxd/db/networks.go +++ b/lxd/db/networks.go @@ -460,9 +460,9 @@ type NetworkState int // Network state. const ( - networkPending NetworkState = iota // Network defined but not yet created. - networkCreated // Network created on all nodes. - networkErrored // Network creation failed on some nodes + networkPending NetworkState = iota // Network defined but not yet created globally or on specific node. + networkCreated // Network created globally or on specific node. + networkErrored // Deprecated (should no longer occur). ) // NetworkType indicates type of network. From 01526037d71723c77129ce18ff8e2657bad0ee73 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 10:29:30 +0000 Subject: [PATCH 03/16] lxd/db/storage/pools: Updates storage pool state comments to indicate node usage Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index 76d12693d1..d676941c80 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -372,9 +372,9 @@ func (c *ClusterTx) CreateStoragePoolConfig(poolID, nodeID int64, config map[str // Storage pools state. const ( - storagePoolPending int = iota // Storage pool defined but not yet created. - storagePoolCreated // Storage pool created on all nodes. - storagePoolErrored // Storage pool creation failed on some nodes + storagePoolPending int = iota // Storage pool defined but not yet created globally or on specific node. + storagePoolCreated // Storage pool created globally or on specific node. + storagePoolErrored // Deprecated (should no longer occur). ) // CreatePendingStoragePool creates a new pending storage pool on the node with From 71ae26571c9b1876a700ab8892b5fd8aafe83ffd Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 10:29:48 +0000 Subject: [PATCH 04/16] lxd/db/storage/pools: Replace use of networkCreated with storagePoolCreated in getStoragePool Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index d676941c80..181c93013e 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -645,7 +645,7 @@ func (c *Cluster) getStoragePool(poolName string, onlyCreated bool) (int64, *api outargs := []interface{}{&poolID, &poolDriver, &description, &state} if onlyCreated { query += " AND state=?" - inargs = append(inargs, networkCreated) + inargs = append(inargs, storagePoolCreated) } err := dbQueryRowScan(c, query, inargs, outargs) From d4e536e424244456694511681e4565fe93f50311 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 10:32:31 +0000 Subject: [PATCH 05/16] lxd/db/networks: Removes unused NetworkErrored function Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/networks.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lxd/db/networks.go b/lxd/db/networks.go index c1a1263a25..dece3638a6 100644 --- a/lxd/db/networks.go +++ b/lxd/db/networks.go @@ -323,11 +323,6 @@ func (c *ClusterTx) NetworkCreated(project string, name string) error { return c.networkState(project, name, networkCreated) } -// NetworkErrored sets the state of the given network to networkErrored. -func (c *ClusterTx) NetworkErrored(project string, name string) error { - return c.networkState(project, name, networkErrored) -} - func (c *ClusterTx) networkState(project string, name string, state NetworkState) error { stmt := "UPDATE networks SET state=? WHERE project_id = (SELECT id FROM projects WHERE name = ?) AND name=?" result, err := c.tx.Exec(stmt, state, project, name) From 18b5d1af435d7b9fdfcd1ce72cf7da8afb558ee7 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 11:34:07 +0000 Subject: [PATCH 06/16] lxd/db/storage/pools: Set storage pool node state to created in UpdateStoragePoolAfterNodeJoin Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index 181c93013e..73e0472ce5 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -254,8 +254,9 @@ func (c *ClusterTx) GetNonPendingStoragePoolsNamesToIDs() (map[string]int64, err // assume that the relevant pool has already been created on the joining node, // and we just need to track it. func (c *ClusterTx) UpdateStoragePoolAfterNodeJoin(poolID, nodeID int64) error { - columns := []string{"storage_pool_id", "node_id"} - values := []interface{}{poolID, nodeID} + columns := []string{"storage_pool_id", "node_id", "state"} + // Create storage pool node with storagePoolCreated state as we expect the pool to already be setup. + values := []interface{}{poolID, nodeID, storagePoolCreated} _, err := query.UpsertObject(c.tx, "storage_pools_nodes", columns, values) if err != nil { return errors.Wrap(err, "failed to add storage pools node entry") From 13f431cba26eb792e3e83e5a101849bee1aaff0f Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 11:34:53 +0000 Subject: [PATCH 07/16] lxd/db/storage/pools: Set storage pool node state to pending in CreatePendingStoragePool Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index 73e0472ce5..b25312a341 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -447,9 +447,9 @@ func (c *ClusterTx) CreatePendingStoragePool(node, name, driver string, conf map return ErrAlreadyDefined } - // Insert the node-specific configuration. - columns := []string{"storage_pool_id", "node_id"} - values := []interface{}{poolID, nodeInfo.ID} + // Insert a node-specific entry pointing to ourselves with state storagePoolPending. + columns := []string{"storage_pool_id", "node_id", "state"} + values := []interface{}{poolID, nodeInfo.ID, storagePoolPending} _, err = query.UpsertObject(c.tx, "storage_pools_nodes", columns, values) if err != nil { return err From 43312c42639c9698074d381600cbb532483ff85d Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 11:35:15 +0000 Subject: [PATCH 08/16] lxd/db/storage/pools: Adds StoragePoolNodeCreated and storagePoolNodeState functions Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index b25312a341..76fb8e0a2b 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -488,6 +488,29 @@ func (c *ClusterTx) storagePoolState(name string, state int) error { return nil } +// StoragePoolNodeCreated sets the state of the given storage pool for the local member to storagePoolCreated. +func (c *ClusterTx) StoragePoolNodeCreated(poolID int64) error { + return c.storagePoolNodeState(poolID, storagePoolCreated) +} + +// storagePoolNodeState updates the storage pool member state for the local member and specified network ID. +func (c *ClusterTx) storagePoolNodeState(poolID int64, state int) error { + stmt := "UPDATE storage_pools_nodes SET state=? WHERE storage_pool_id = ? and node_id = ?" + result, err := c.tx.Exec(stmt, state, poolID, c.nodeID) + if err != nil { + return err + } + n, err := result.RowsAffected() + if err != nil { + return err + } + if n != 1 { + return ErrNoSuchObject + } + + return nil +} + // GetStoragePoolNodeConfigs returns the node-specific configuration of all // nodes grouped by node name, for the given poolID. // From e0f0805fad6c29a31b4ca2b9bcadb32fa815db7c Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 11:35:35 +0000 Subject: [PATCH 09/16] lxd/db/storage/pools: Set storage pool node state to pending in CreateStoragePool Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index 76fb8e0a2b..402bc10673 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -769,9 +769,9 @@ func (c *Cluster) CreateStoragePool(poolName string, poolDescription string, poo return err } - // Insert a node-specific entry pointing to ourselves. - columns := []string{"storage_pool_id", "node_id"} - values := []interface{}{id, c.nodeID} + // Insert a node-specific entry pointing to ourselves with state storagePoolPending. + columns := []string{"storage_pool_id", "node_id", "state"} + values := []interface{}{id, c.nodeID, storagePoolPending} _, err = query.UpsertObject(tx.tx, "storage_pools_nodes", columns, values) if err != nil { return err From cbec16a3e6697a3937f6f9cb60aa7749a5dad5a4 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 11:36:07 +0000 Subject: [PATCH 10/16] lxd/storage/pools/utils: Consistent commnent endings Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage_pools_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/storage_pools_utils.go b/lxd/storage_pools_utils.go index 6ea29eb5c2..9db47a5429 100644 --- a/lxd/storage_pools_utils.go +++ b/lxd/storage_pools_utils.go @@ -37,7 +37,7 @@ func storagePoolDBCreate(s *state.State, poolName, poolDescription string, drive return -1, err } - // Fill in the defaults + // Fill in the defaults. err = storagePoolFillDefault(poolName, driver, config) if err != nil { return -1, err From 3b04335618599c3a66f62cf75e6859c51141e451 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 11:41:06 +0000 Subject: [PATCH 11/16] lxd/storage/pools/utils: Fix comment in storagePoolCreateLocal Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage_pools_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/storage_pools_utils.go b/lxd/storage_pools_utils.go index 9db47a5429..dc8430bb62 100644 --- a/lxd/storage_pools_utils.go +++ b/lxd/storage_pools_utils.go @@ -144,7 +144,7 @@ func storagePoolCreateLocal(state *state.State, id int64, req api.StoragePoolsPo // happened. configDiff, _ := storagePools.ConfigDiff(req.Config, updatedConfig) if len(configDiff) > 0 { - // Create the database entry for the storage pool. + // Update the database entry for the storage pool. err = state.Cluster.UpdateStoragePool(req.Name, req.Description, updatedConfig) if err != nil { return nil, errors.Wrapf(err, "Error updating storage pool config after local create for %q", req.Name) From 5ea161cee8acb410e276846ab35eb6a467b69152 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 13:53:23 +0000 Subject: [PATCH 12/16] lxd/networks: golint fix Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/networks.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/networks.go b/lxd/networks.go index ea12c70c4e..9caa6cc25a 100644 --- a/lxd/networks.go +++ b/lxd/networks.go @@ -12,7 +12,6 @@ import ( "sync" "github.com/gorilla/mux" - log "github.com/lxc/lxd/shared/log15" "github.com/pkg/errors" lxd "github.com/lxc/lxd/client" @@ -30,6 +29,7 @@ import ( "github.com/lxc/lxd/lxd/util" "github.com/lxc/lxd/shared" "github.com/lxc/lxd/shared/api" + log "github.com/lxc/lxd/shared/log15" "github.com/lxc/lxd/shared/logger" "github.com/lxc/lxd/shared/version" ) From 0f1f51698c69cfcfc7fc80aabccaac1308d44756 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 13:54:52 +0000 Subject: [PATCH 13/16] lxd/storage/pools: Add logging for storage pool state updates in storagePoolsPostCluster - Also remove errored state (leave storage pool pending on partial error). - Setup notifier earlier to catch any errors before local creation begins. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage_pools.go | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/lxd/storage_pools.go b/lxd/storage_pools.go index 2e3631e676..69ce4708cc 100644 --- a/lxd/storage_pools.go +++ b/lxd/storage_pools.go @@ -18,6 +18,8 @@ import ( "github.com/lxc/lxd/lxd/util" "github.com/lxc/lxd/shared" "github.com/lxc/lxd/shared/api" + log "github.com/lxc/lxd/shared/log15" + "github.com/lxc/lxd/shared/logger" "github.com/lxc/lxd/shared/version" ) @@ -249,6 +251,12 @@ func storagePoolsPostCluster(d *Daemon, req api.StoragePoolsPost) error { return err } + // Create notifier for other nodes to create the storage pool. + notifier, err := cluster.NewNotifier(d.State(), d.endpoints.NetworkCert(), cluster.NotifyAll) + if err != nil { + return err + } + // Create the pool on this node. nodeReq := req for key, value := range configs[nodeName] { @@ -272,11 +280,7 @@ func storagePoolsPostCluster(d *Daemon, req api.StoragePoolsPost) error { } // Notify all other nodes to create the pool. - notifier, err := cluster.NewNotifier(d.State(), d.endpoints.NetworkCert(), cluster.NotifyAll) - if err != nil { - return err - } - notifyErr := notifier(func(client lxd.InstanceServer) error { + err = notifier(func(client lxd.InstanceServer) error { server, _, err := client.GetServer() if err != nil { return err @@ -287,23 +291,28 @@ func storagePoolsPostCluster(d *Daemon, req api.StoragePoolsPost) error { nodeReq.Config[key] = value } - return client.CreateStoragePool(nodeReq) - }) + err = client.CreateStoragePool(nodeReq) + if err != nil { + return err + } + logger.Error("Created storage pool on cluster member", log.Ctx{"pool": req.Name, "member": server.Environment.ServerName}) - errored := notifyErr != nil + return nil + }) + if err != nil { + return err + } // Finally update the storage pool state. err = d.cluster.Transaction(func(tx *db.ClusterTx) error { - if errored { - return tx.StoragePoolErrored(req.Name) - } return tx.StoragePoolCreated(req.Name) }) if err != nil { return err } + logger.Debug("Marked storage pool global status as created", log.Ctx{"pool": req.Name}) - return notifyErr + return nil } // /1.0/storage-pools/{name} From b5ed9619937616d54cac6b53faa6cf08f14d9d1f Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 13:56:52 +0000 Subject: [PATCH 14/16] lxd/storage/pools/utils: Updates storagePoolCreateLocal to mark local node state as created - Also adds use of revert package and better logging. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/storage_pools_utils.go | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lxd/storage_pools_utils.go b/lxd/storage_pools_utils.go index dc8430bb62..1754b9ead3 100644 --- a/lxd/storage_pools_utils.go +++ b/lxd/storage_pools_utils.go @@ -5,10 +5,14 @@ import ( "github.com/pkg/errors" + "github.com/lxc/lxd/lxd/db" + "github.com/lxc/lxd/lxd/revert" "github.com/lxc/lxd/lxd/state" storagePools "github.com/lxc/lxd/lxd/storage" "github.com/lxc/lxd/shared" "github.com/lxc/lxd/shared/api" + log "github.com/lxc/lxd/shared/log15" + "github.com/lxc/lxd/shared/logger" ) func storagePoolUpdate(state *state.State, name, newDescription string, newConfig map[string]string, withDB bool) error { @@ -99,7 +103,9 @@ func storagePoolCreateGlobal(state *state.State, req api.StoragePoolsPost) error // This performs local pool setup and updates DB record if config was changed during pool setup. func storagePoolCreateLocal(state *state.State, id int64, req api.StoragePoolsPost, isNotification bool) (map[string]string, error) { - tryUndo := true + // Setup revert. + revert := revert.New() + defer revert.Fail() // Make a copy of the req for later diff. var updatedConfig map[string]string @@ -117,6 +123,7 @@ func storagePoolCreateLocal(state *state.State, id int64, req api.StoragePoolsPo if err != nil { return nil, err } + revert.Add(func() { pool.Delete(isNotification, nil) }) // Mount the pool. _, err = pool.Mount() @@ -127,15 +134,6 @@ func storagePoolCreateLocal(state *state.State, id int64, req api.StoragePoolsPo // Record the updated config. updatedConfig = updatedReq.Config - // Setup revert function. - defer func() { - if !tryUndo { - return - } - - pool.Delete(isNotification, nil) - }() - // In case the storage pool config was changed during the pool creation, // we need to update the database to reflect this change. This can e.g. // happen, when we create a loop file image. This means we append ".img" @@ -151,9 +149,16 @@ func storagePoolCreateLocal(state *state.State, id int64, req api.StoragePoolsPo } } - // Success, update the closure to mark that the changes should be kept. - tryUndo = false + // Set storage pool node to storagePoolCreated. + err = state.Cluster.Transaction(func(tx *db.ClusterTx) error { + return tx.StoragePoolNodeCreated(id) + }) + if err != nil { + return nil, err + } + logger.Debug("Marked storage pool local status as created", log.Ctx{"pool": req.Name}) + revert.Success() return updatedConfig, nil } From 6aede4c05f537a80645f43531baa3bd784dbc660 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 13:59:16 +0000 Subject: [PATCH 15/16] lxd/db/storage/pools: Removes unused function StoragePoolErrored Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index 402bc10673..8f3b880588 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -467,11 +467,6 @@ func (c *ClusterTx) StoragePoolCreated(name string) error { return c.storagePoolState(name, storagePoolCreated) } -// StoragePoolErrored sets the state of the given pool to "Errored". -func (c *ClusterTx) StoragePoolErrored(name string) error { - return c.storagePoolState(name, storagePoolErrored) -} - func (c *ClusterTx) storagePoolState(name string, state int) error { stmt := "UPDATE storage_pools SET state=? WHERE name=?" result, err := c.tx.Exec(stmt, state, name) From b7041bd2ea41de773da9c793573c8e682eebb301 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Tue, 1 Dec 2020 14:01:00 +0000 Subject: [PATCH 16/16] lxd/db/storage/pools: Updates comment on StoragePoolCreated Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/storage_pools.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/db/storage_pools.go b/lxd/db/storage_pools.go index 8f3b880588..57f180bc0f 100644 --- a/lxd/db/storage_pools.go +++ b/lxd/db/storage_pools.go @@ -462,7 +462,7 @@ func (c *ClusterTx) CreatePendingStoragePool(node, name, driver string, conf map return nil } -// StoragePoolCreated sets the state of the given pool to "Created". +// StoragePoolCreated sets the state of the given pool to storagePoolCreated. func (c *ClusterTx) StoragePoolCreated(name string) error { return c.storagePoolState(name, storagePoolCreated) }
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel