From c96e1648529212f6ace35fb92f6e5127a3d59723 Mon Sep 17 00:00:00 2001 From: Rakesh Venkatesh Date: Fri, 25 Mar 2022 12:27:47 +0100 Subject: [PATCH 1/4] Mount disabled storage pool on host reboot Add a global setting so that disabled pools will be mounted again on host reboot --- .../src/main/java/com/cloud/storage/StorageManager.java | 9 +++++++++ .../main/java/com/cloud/storage/StorageManagerImpl.java | 3 ++- .../com/cloud/storage/listener/StoragePoolMonitor.java | 9 ++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java index 0ceae02a2fde..4c808b2a8ab4 100644 --- a/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java +++ b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java @@ -155,6 +155,15 @@ public interface StorageManager extends StorageService { ConfigKey PreferredStoragePool = new ConfigKey(String.class, "preferred.storage.pool", "Advanced", "", "The UUID of preferred storage pool for allocation.", true, ConfigKey.Scope.Account, null); + ConfigKey MountDisabledStoragePool = new ConfigKey<>(Boolean.class, + "mount.disabled.storage.pool", + "Storage", + "false", + "Mount disabled storage pool after node reboot", + true, + ConfigKey.Scope.Cluster, + null); + /** * Returns a comma separated list of tags for the specified storage pool * @param poolId diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index db24b17bbe18..336565f7cdfb 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -3340,7 +3340,8 @@ public ConfigKey[] getConfigKeys() { MaxDataMigrationWaitTime, DiskProvisioningStrictness, PreferredStoragePool, - SecStorageVMAutoScaleDown + SecStorageVMAutoScaleDown, + MountDisabledStoragePool }; } diff --git a/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java index eca96efff3e1..ed07bb2a1877 100644 --- a/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java +++ b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java @@ -20,6 +20,7 @@ import javax.inject.Inject; +import com.cloud.storage.StorageManager; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager; import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener; @@ -108,10 +109,12 @@ public void processConnect(Host host, StartupCommand cmd, boolean forRebalance) List zoneStoragePoolsByAnyHypervisor = _poolDao.findZoneWideStoragePoolsByHypervisor(host.getDataCenterId(), HypervisorType.Any); pools.addAll(zoneStoragePoolsByAnyHypervisor); + // get the disabled pools list if global setting is true. + if (StorageManager.MountDisabledStoragePool.value()) { + pools.addAll(_poolDao.findDisabledPoolsByScope(host.getDataCenterId(), null, null, ScopeType.ZONE)); + } + for (StoragePoolVO pool : pools) { - if (pool.getStatus() != StoragePoolStatus.Up) { - continue; - } if (!pool.isShared()) { continue; } From be335a3d2ceb5a1355018dcd6245c66edb82f103 Mon Sep 17 00:00:00 2001 From: Rakesh Venkatesh Date: Fri, 25 Mar 2022 14:29:30 +0100 Subject: [PATCH 2/4] fix build error --- .../main/java/com/cloud/storage/listener/StoragePoolMonitor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java index ed07bb2a1877..b792618fe058 100644 --- a/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java +++ b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java @@ -45,7 +45,6 @@ import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StorageManagerImpl; import com.cloud.storage.StoragePoolHostVO; -import com.cloud.storage.StoragePoolStatus; public class StoragePoolMonitor implements Listener { private static final Logger s_logger = Logger.getLogger(StoragePoolMonitor.class); From 87e0d67b98e61762a4286872fbc5e1f2f1e31588 Mon Sep 17 00:00:00 2001 From: Rakesh Venkatesh Date: Mon, 28 Mar 2022 09:31:03 +0200 Subject: [PATCH 3/4] Update description --- .../src/main/java/com/cloud/storage/StorageManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java index 4c808b2a8ab4..1e08260a5b17 100644 --- a/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java +++ b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java @@ -159,9 +159,9 @@ public interface StorageManager extends StorageService { "mount.disabled.storage.pool", "Storage", "false", - "Mount disabled storage pool after node reboot", + "Mount all disabled storage pools after node reboot", true, - ConfigKey.Scope.Cluster, + ConfigKey.Scope.Zone, null); /** From ac531a0cbfff2d772dac7d283d0410180466beca Mon Sep 17 00:00:00 2001 From: Rakesh Venkatesh Date: Wed, 30 Mar 2022 09:59:11 +0200 Subject: [PATCH 4/4] add cluster-wide support --- .../src/main/java/com/cloud/storage/StorageManager.java | 4 ++-- .../com/cloud/storage/listener/StoragePoolMonitor.java | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java index 1e08260a5b17..e4b46bc5233c 100644 --- a/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java +++ b/engine/components-api/src/main/java/com/cloud/storage/StorageManager.java @@ -159,9 +159,9 @@ public interface StorageManager extends StorageService { "mount.disabled.storage.pool", "Storage", "false", - "Mount all disabled storage pools after node reboot", + "Mount all zone-wide or cluster-wide disabled storage pools after node reboot", true, - ConfigKey.Scope.Zone, + ConfigKey.Scope.Cluster, null); /** diff --git a/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java index b792618fe058..63ae60411ab9 100644 --- a/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java +++ b/server/src/main/java/com/cloud/storage/listener/StoragePoolMonitor.java @@ -108,11 +108,16 @@ public void processConnect(Host host, StartupCommand cmd, boolean forRebalance) List zoneStoragePoolsByAnyHypervisor = _poolDao.findZoneWideStoragePoolsByHypervisor(host.getDataCenterId(), HypervisorType.Any); pools.addAll(zoneStoragePoolsByAnyHypervisor); - // get the disabled pools list if global setting is true. + // get the zone wide disabled pools list if global setting is true. if (StorageManager.MountDisabledStoragePool.value()) { pools.addAll(_poolDao.findDisabledPoolsByScope(host.getDataCenterId(), null, null, ScopeType.ZONE)); } + // get the cluster wide disabled pool list + if (StorageManager.MountDisabledStoragePool.valueIn(host.getClusterId())) { + pools.addAll(_poolDao.findDisabledPoolsByScope(host.getDataCenterId(), host.getPodId(), host.getClusterId(), ScopeType.CLUSTER)); + } + for (StoragePoolVO pool : pools) { if (!pool.isShared()) { continue;