From 75fb1d91eee6e18b2247d39ea4a3cfda04101c07 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Wed, 22 Jul 2020 12:37:06 +0530 Subject: [PATCH] Fix adding Datastore clusters and listing --- .../storage/datastore/db/StoragePoolVO.java | 2 +- .../volume/datastore/PrimaryDataStoreHelper.java | 14 ++++++++++++++ .../datastore/provider/DefaultHostListener.java | 4 +++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java index 2cdcae54de2..c7eb72b469e 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/StoragePoolVO.java @@ -120,7 +120,7 @@ public class StoragePoolVO implements StoragePool { private HypervisorType hypervisor; @Column(name = "parent") - private Long parent; + private Long parent = 0L; @Override public long getId() { diff --git a/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java index 31b57080aec..ac2c93567c3 100644 --- a/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java +++ b/engine/storage/src/main/java/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java @@ -161,6 +161,13 @@ public class PrimaryDataStoreHelper { pool.setScope(ScopeType.CLUSTER); pool.setStatus(StoragePoolStatus.Up); this.dataStoreDao.update(pool.getId(), pool); + if(pool.getPoolType() == StoragePoolType.DatastoreCluster && pool.getParent() == 0) { + List childDatastores = dataStoreDao.listChildStoragePoolsInDatastoreCluster(pool.getId()); + for (StoragePoolVO child : childDatastores) { + child.setScope(ScopeType.CLUSTER); + this.dataStoreDao.update(child.getId(), child); + } + } return dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Primary); } @@ -178,6 +185,13 @@ public class PrimaryDataStoreHelper { pool.setHypervisor(hypervisor); pool.setStatus(StoragePoolStatus.Up); this.dataStoreDao.update(pool.getId(), pool); + if(pool.getPoolType() == StoragePoolType.DatastoreCluster && pool.getParent() == 0) { + List childDatastores = dataStoreDao.listChildStoragePoolsInDatastoreCluster(pool.getId()); + for (StoragePoolVO child : childDatastores) { + child.setScope(ScopeType.ZONE); + this.dataStoreDao.update(child.getId(), child); + } + } return dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Primary); } diff --git a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java index dac6514cc84..665b2631fb2 100644 --- a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java +++ b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java @@ -26,6 +26,7 @@ import com.cloud.agent.api.StoragePoolInfo; import com.cloud.alert.AlertManager; import com.cloud.exception.StorageConflictException; import com.cloud.storage.DataStoreRole; +import com.cloud.storage.Storage; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolHostVO; import com.cloud.storage.StoragePoolStatus; @@ -111,7 +112,7 @@ public class DefaultHostListener implements HypervisorHostListener { dataStoreVO = new StoragePoolVO(); dataStoreVO.setStorageProviderName(poolVO.getStorageProviderName()); dataStoreVO.setHostAddress(childStoragePoolInfo.getHost()); - dataStoreVO.setPoolType(poolVO.getPoolType()); + dataStoreVO.setPoolType(Storage.StoragePoolType.PreSetup); dataStoreVO.setPath(childStoragePoolInfo.getHostPath()); dataStoreVO.setPort(poolVO.getPort()); dataStoreVO.setName(childStoragePoolInfo.getName()); @@ -127,6 +128,7 @@ public class DefaultHostListener implements HypervisorHostListener { dataStoreVO.setUsedBytes(childDataStoreAnswer.getPoolInfo().getCapacityBytes() - childDataStoreAnswer.getPoolInfo().getAvailableBytes()); dataStoreVO.setHypervisor(poolVO.getHypervisor()); dataStoreVO.setScope(poolVO.getScope()); + dataStoreVO.setParent(poolVO.getId()); Map details = new HashMap<>(); if(StringUtils.isNotEmpty(childDataStoreAnswer.getPoolType())) {