From c9c38c0f37be784efd341374ceed05d167dc9995 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Wed, 22 Jul 2020 00:18:51 +0530 Subject: [PATCH] Handle datastore clusters in list storage pools to list only parent not the children in the Datastore cluster --- .../storage/datastore/db/PrimaryDataStoreDao.java | 2 ++ .../storage/datastore/db/PrimaryDataStoreDaoImpl.java | 11 ++++++++++- .../hypervisor/vmware/resource/VmwareResource.java | 5 ----- .../java/com/cloud/api/query/QueryManagerImpl.java | 2 ++ .../com/cloud/api/query/vo/StoragePoolJoinVO.java | 7 +++++++ 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java index f5929f440c4..5712411a48e 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java @@ -125,4 +125,6 @@ public interface PrimaryDataStoreDao extends GenericDao { void deletePoolTags(long poolId); List listChildStoragePoolsInDatastoreCluster(long poolId); + + Integer countAll(); } diff --git a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java index 7d6b2821e72..1d1e0a0198d 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java @@ -557,5 +557,14 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase public List listChildStoragePoolsInDatastoreCluster(long poolId) { QueryBuilder sc = QueryBuilder.create(StoragePoolVO.class); sc.and(sc.entity().getParent(), Op.EQ, poolId); - return sc.list(); } + return sc.list(); + } + + @Override + public Integer countAll() { + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("parent", SearchCriteria.Op.EQ, 0); + sc.addAnd("removed", SearchCriteria.Op.NULL); + return getCount(sc); + } } diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index f11342cd846..577e1a6e0af 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -181,7 +181,6 @@ import com.cloud.hypervisor.vmware.mo.StoragepodMO; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; import com.cloud.hypervisor.vmware.mo.VirtualMachineDiskInfoBuilder; import com.cloud.hypervisor.vmware.mo.VirtualMachineMO; -import com.cloud.hypervisor.vmware.mo.VirtualStorageObjectManagerMO; import com.cloud.hypervisor.vmware.mo.VirtualSwitchType; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHost; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHostNetworkSummary; @@ -227,7 +226,6 @@ import com.cloud.vm.VmDetailConstants; import com.google.common.base.Strings; import com.google.gson.Gson; import com.vmware.vim25.AboutInfo; -import com.vmware.vim25.AlreadyExistsFaultMsg; import com.vmware.vim25.ArrayUpdateOperation; import com.vmware.vim25.BoolPolicy; import com.vmware.vim25.ComputeResourceSummary; @@ -247,7 +245,6 @@ import com.vmware.vim25.HostCapability; import com.vmware.vim25.HostHostBusAdapter; import com.vmware.vim25.HostInternetScsiHba; import com.vmware.vim25.HostPortGroupSpec; -import com.vmware.vim25.ID; import com.vmware.vim25.ManagedObjectReference; import com.vmware.vim25.NasDatastoreInfo; import com.vmware.vim25.ObjectContent; @@ -269,8 +266,6 @@ import com.vmware.vim25.VAppProductSpec; import com.vmware.vim25.VAppPropertyInfo; import com.vmware.vim25.VAppPropertySpec; import com.vmware.vim25.VMwareDVSPortSetting; -import com.vmware.vim25.VStorageObject; -import com.vmware.vim25.VStorageObjectConfigInfo; import com.vmware.vim25.VimPortType; import com.vmware.vim25.VirtualDevice; import com.vmware.vim25.VirtualDeviceBackingInfo; diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 28f6bfcba28..943e0d81448 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -2402,6 +2402,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); sb.and("hostAddress", sb.entity().getHostAddress(), SearchCriteria.Op.EQ); sb.and("scope", sb.entity().getScope(), SearchCriteria.Op.EQ); + sb.and("parent", sb.entity().getParent(), Op.EQ); SearchCriteria sc = sb.create(); @@ -2439,6 +2440,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q if (scopeType != null) { sc.setParameters("scope", scopeType.toString()); } + sc.setParameters("parent", 0); // search Pool details by ids Pair, Integer> uniquePoolPair = _poolJoinDao.searchAndCount(sc, searchFilter); diff --git a/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java index 565e290bd70..1831aaafac9 100644 --- a/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java +++ b/server/src/main/java/com/cloud/api/query/vo/StoragePoolJoinVO.java @@ -139,6 +139,9 @@ public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, I @Column(name = "storage_provider_name") private String storageProviderName; + @Column(name = "parent") + private Long parent; + /** * @return the scope */ @@ -263,4 +266,8 @@ public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, I public String getStorageProviderName() { return storageProviderName; } + + public Long getParent() { + return parent; + } }