From e06e3b7cd41787efc4e0f3cbf2d5a3040b4f15c9 Mon Sep 17 00:00:00 2001 From: Sudhansu Date: Fri, 23 Dec 2016 16:01:21 +0530 Subject: [PATCH] CLOUDSTACK-9701: When host is disabled/removed, capacity_type for local storage in op_host_capacity is still enabled --- .../src/com/cloud/resource/ResourceManagerImpl.java | 7 +++++++ .../src/com/cloud/storage/StorageManagerImpl.java | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 2efce066b0c..203f7792d9f 100644 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -1181,6 +1181,13 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, final CapacityState capacityState = nextState == ResourceState.Enabled ? CapacityState.Enabled : CapacityState.Disabled; final short[] capacityTypes = {Capacity.CAPACITY_TYPE_CPU, Capacity.CAPACITY_TYPE_MEMORY}; _capacityDao.updateCapacityState(null, null, null, host.getId(), capacityState.toString(), capacityTypes); + + final StoragePoolVO storagePool = _storageMgr.findLocalStorageOnHost(host.getId()); + + if(storagePool != null){ + final short[] capacityTypesLocalStorage = {Capacity.CAPACITY_TYPE_LOCAL_STORAGE}; + _capacityDao.updateCapacityState(null, null, null, storagePool.getId(), capacityState.toString(), capacityTypesLocalStorage); + } } return _hostDao.updateResourceState(currentState, event, nextState, host); } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 10ca4247368..62c4355e421 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -965,6 +965,19 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C } } } + + if (storagePool.getScope() == ScopeType.HOST) { + List stoargePoolHostVO = _storagePoolHostDao.listByPoolId(storagePool.getId()); + + if(stoargePoolHostVO != null && !stoargePoolHostVO.isEmpty()){ + HostVO host = _hostDao.findById(stoargePoolHostVO.get(0).getHostId()); + + if(host != null){ + capacityState = (host.getResourceState() == ResourceState.Disabled) ? CapacityState.Disabled : CapacityState.Enabled; + } + } + } + if (capacities.size() == 0) { CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), storagePool.getClusterId(), allocated, totalOverProvCapacity,