From 3eacdb1547f42ee69378503b5b27cbbf4f1baf9b Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Thu, 15 Aug 2013 17:44:07 -0700 Subject: [PATCH] CLOUDSTACK-3047 java.lang.NullPointerException encountered when executing capacityChecker thread. Changes: - Added null check around clusterId, since its possible to have null clusterId for storagepool and host records Conflicts: server/src/com/cloud/capacity/CapacityManagerImpl.java --- .../cloud/capacity/CapacityManagerImpl.java | 12 ++++++++--- .../com/cloud/storage/StorageManagerImpl.java | 20 +++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/server/src/com/cloud/capacity/CapacityManagerImpl.java b/server/src/com/cloud/capacity/CapacityManagerImpl.java index cf7f3c4e6ea..7dde12ed4e9 100755 --- a/server/src/com/cloud/capacity/CapacityManagerImpl.java +++ b/server/src/com/cloud/capacity/CapacityManagerImpl.java @@ -633,15 +633,21 @@ public class CapacityManagerImpl extends ManagerBase implements CapacityManager, } }else { Transaction txn = Transaction.currentTxn(); - CapacityState capacityState = _configMgr.findClusterAllocationState(ApiDBUtils.findClusterById(host.getClusterId())) == AllocationState.Disabled ? - CapacityState.Disabled : CapacityState.Enabled; txn.start(); CapacityVO capacity = new CapacityVO(host.getId(), host.getDataCenterId(), host.getPodId(), host.getClusterId(), usedMemory, host.getTotalMemory(), CapacityVO.CAPACITY_TYPE_MEMORY); capacity.setReservedCapacity(reservedMemory); - capacity.setCapacityState(capacityState); + CapacityState capacityState = CapacityState.Enabled; + if (host.getClusterId() != null) { + ClusterVO clusterOfHost = ApiDBUtils.findClusterById(host.getClusterId()); + if (clusterOfHost != null) { + capacityState = _configMgr.findClusterAllocationState(clusterOfHost) == AllocationState.Disabled ? CapacityState.Disabled + : CapacityState.Enabled; + capacity.setCapacityState(capacityState); + } + } _capacityDao.persist(capacity); capacity = new CapacityVO( diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 4ce134e4c58..67e3b47a527 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -984,16 +984,24 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C if (capacities.size() == 0) { CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), storagePool.getClusterId(), allocated, totalOverProvCapacity, capacityType); - AllocationState allocationState = null; + if (storagePool.getScope() == ScopeType.ZONE) { DataCenterVO dc = ApiDBUtils.findZoneById(storagePool.getDataCenterId()); - allocationState = dc.getAllocationState(); + AllocationState allocationState = dc.getAllocationState(); + CapacityState capacityState = (allocationState == AllocationState.Disabled) ? CapacityState.Disabled + : CapacityState.Enabled; + capacity.setCapacityState(capacityState); } else { - allocationState = _configMgr.findClusterAllocationState(ApiDBUtils.findClusterById(storagePool.getClusterId())); + if (storagePool.getClusterId() != null) { + ClusterVO cluster = ApiDBUtils.findClusterById(storagePool.getClusterId()); + if (cluster != null) { + AllocationState allocationState = _configMgr.findClusterAllocationState(cluster); + CapacityState capacityState = (allocationState == AllocationState.Disabled) ? CapacityState.Disabled + : CapacityState.Enabled; + capacity.setCapacityState(capacityState); + } + } } - CapacityState capacityState = (allocationState == AllocationState.Disabled) ? CapacityState.Disabled : CapacityState.Enabled; - - capacity.setCapacityState(capacityState); _capacityDao.persist(capacity); } else { CapacityVO capacity = capacities.get(0);