diff --git a/core/src/main/java/com/cloud/agent/api/ModifyStoragePoolAnswer.java b/core/src/main/java/com/cloud/agent/api/ModifyStoragePoolAnswer.java index f7a7e1ced06..be84cce152d 100644 --- a/core/src/main/java/com/cloud/agent/api/ModifyStoragePoolAnswer.java +++ b/core/src/main/java/com/cloud/agent/api/ModifyStoragePoolAnswer.java @@ -19,6 +19,7 @@ package com.cloud.agent.api; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -29,7 +30,7 @@ public class ModifyStoragePoolAnswer extends Answer { private Map templateInfo; private String localDatastoreName; private String poolType; - private List datastoreClusterChildren; + private List datastoreClusterChildren = new ArrayList<>();; public ModifyStoragePoolAnswer(ModifyStoragePoolCommand cmd, long capacityBytes, long availableBytes, Map tInfo) { super(cmd); 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 5c55a36c5b5..cb4ff74eed6 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 @@ -103,42 +103,44 @@ public class DefaultHostListener implements HypervisorHostListener { StoragePoolVO poolVO = this.primaryStoreDao.findById(poolId); updateStoragePoolHostVOAndDetails(poolVO, hostId, mspAnswer); - for (ModifyStoragePoolAnswer childDataStoreAnswer : ((ModifyStoragePoolAnswer) answer).getDatastoreClusterChildren()) { - StoragePoolInfo childStoragePoolInfo = childDataStoreAnswer.getPoolInfo(); - StoragePoolVO dataStoreVO = primaryStoreDao.findPoolByUUID(childStoragePoolInfo.getUuid()); - if (dataStoreVO != null) { - continue; + if (pool.getPoolType() == Storage.StoragePoolType.DatastoreCluster) { + for (ModifyStoragePoolAnswer childDataStoreAnswer : ((ModifyStoragePoolAnswer) answer).getDatastoreClusterChildren()) { + StoragePoolInfo childStoragePoolInfo = childDataStoreAnswer.getPoolInfo(); + StoragePoolVO dataStoreVO = primaryStoreDao.findPoolByUUID(childStoragePoolInfo.getUuid()); + if (dataStoreVO != null) { + continue; + } + dataStoreVO = new StoragePoolVO(); + dataStoreVO.setStorageProviderName(poolVO.getStorageProviderName()); + dataStoreVO.setHostAddress(childStoragePoolInfo.getHost()); + dataStoreVO.setPoolType(Storage.StoragePoolType.PreSetup); + dataStoreVO.setPath(childStoragePoolInfo.getHostPath()); + dataStoreVO.setPort(poolVO.getPort()); + dataStoreVO.setName(childStoragePoolInfo.getName()); + dataStoreVO.setUuid(childStoragePoolInfo.getUuid()); + dataStoreVO.setDataCenterId(poolVO.getDataCenterId()); + dataStoreVO.setPodId(poolVO.getPodId()); + dataStoreVO.setClusterId(poolVO.getClusterId()); + dataStoreVO.setStatus(StoragePoolStatus.Up); + dataStoreVO.setUserInfo(poolVO.getUserInfo()); + dataStoreVO.setManaged(poolVO.isManaged()); + dataStoreVO.setCapacityIops(poolVO.getCapacityIops()); + dataStoreVO.setCapacityBytes(childDataStoreAnswer.getPoolInfo().getCapacityBytes()); + 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())) { + details.put("pool_type", childDataStoreAnswer.getPoolType()); + } + + List storageTags = storagePoolTagsDao.getStoragePoolTags(poolId); + primaryStoreDao.persist(dataStoreVO, details, storageTags); + + updateStoragePoolHostVOAndDetails(dataStoreVO, hostId, childDataStoreAnswer); } - dataStoreVO = new StoragePoolVO(); - dataStoreVO.setStorageProviderName(poolVO.getStorageProviderName()); - dataStoreVO.setHostAddress(childStoragePoolInfo.getHost()); - dataStoreVO.setPoolType(Storage.StoragePoolType.PreSetup); - dataStoreVO.setPath(childStoragePoolInfo.getHostPath()); - dataStoreVO.setPort(poolVO.getPort()); - dataStoreVO.setName(childStoragePoolInfo.getName()); - dataStoreVO.setUuid(childStoragePoolInfo.getUuid()); - dataStoreVO.setDataCenterId(poolVO.getDataCenterId()); - dataStoreVO.setPodId(poolVO.getPodId()); - dataStoreVO.setClusterId(poolVO.getClusterId()); - dataStoreVO.setStatus(StoragePoolStatus.Up); - dataStoreVO.setUserInfo(poolVO.getUserInfo()); - dataStoreVO.setManaged(poolVO.isManaged()); - dataStoreVO.setCapacityIops(poolVO.getCapacityIops()); - dataStoreVO.setCapacityBytes(childDataStoreAnswer.getPoolInfo().getCapacityBytes()); - 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())) { - details.put("pool_type", childDataStoreAnswer.getPoolType()); - } - - List storageTags = storagePoolTagsDao.getStoragePoolTags(poolId); - primaryStoreDao.persist(dataStoreVO, details, storageTags); - - updateStoragePoolHostVOAndDetails(dataStoreVO, hostId, childDataStoreAnswer); } s_logger.info("Connection established between storage pool " + pool + " and host " + hostId);