From d1aa043aba227679f68de621aee44348f30c6a0b Mon Sep 17 00:00:00 2001 From: nit Date: Thu, 20 Jan 2011 20:38:43 +0530 Subject: [PATCH] bug 7525: Cleaning up primary storage stats from op_host_Capacity(reflected on dashboard) when primary storage is deleted. status 7525 : resolved fixed --- .../src/com/cloud/capacity/dao/CapacityDao.java | 4 +++- .../com/cloud/capacity/dao/CapacityDaoImpl.java | 15 ++++++++++++--- .../com/cloud/storage/StorageManagerImpl.java | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) mode change 100644 => 100755 server/src/com/cloud/capacity/dao/CapacityDao.java mode change 100644 => 100755 server/src/com/cloud/capacity/dao/CapacityDaoImpl.java diff --git a/server/src/com/cloud/capacity/dao/CapacityDao.java b/server/src/com/cloud/capacity/dao/CapacityDao.java old mode 100644 new mode 100755 index 9d26287abce..7401ced3b7a --- a/server/src/com/cloud/capacity/dao/CapacityDao.java +++ b/server/src/com/cloud/capacity/dao/CapacityDao.java @@ -18,14 +18,16 @@ package com.cloud.capacity.dao; +import java.util.List; + import com.cloud.capacity.CapacityVO; import com.cloud.utils.db.GenericDao; -import com.cloud.vm.VMInstanceVO; public interface CapacityDao extends GenericDao { void clearNonStorageCapacities(); void clearStorageCapacities(); CapacityVO findByHostIdType(Long hostId, short capacityType); void clearNonStorageCapacities2(); + List findByHostorPoolId(Long hostorPoolId); } diff --git a/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java b/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java old mode 100644 new mode 100755 index 6a23621a2de..fda470afc5c --- a/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java +++ b/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java @@ -25,13 +25,10 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.capacity.CapacityVO; -import com.cloud.service.ServiceOfferingVO; -import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; -import com.cloud.vm.VMInstanceVO; @Local(value = { CapacityDao.class }) public class CapacityDaoImpl extends GenericDaoBase implements CapacityDao { @@ -43,12 +40,17 @@ public class CapacityDaoImpl extends GenericDaoBase implements private static final String CLEAR_NON_STORAGE_CAPACITIES = "DELETE FROM `cloud`.`op_host_capacity` WHERE capacity_type<>2 AND capacity_type<>3 AND capacity_type<>6"; //clear non-storage and non-secondary_storage capacities private static final String CLEAR_NON_STORAGE_CAPACITIES2 = "DELETE FROM `cloud`.`op_host_capacity` WHERE capacity_type<>2 AND capacity_type<>3 AND capacity_type<>6 AND capacity_type<>0 AND capacity_type<>1"; //clear non-storage and non-secondary_storage capacities private SearchBuilder _hostIdTypeSearch; + private SearchBuilder _hostOrPoolIdSearch; public CapacityDaoImpl() { _hostIdTypeSearch = createSearchBuilder(); _hostIdTypeSearch.and("hostId", _hostIdTypeSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); _hostIdTypeSearch.and("type", _hostIdTypeSearch.entity().getCapacityType(), SearchCriteria.Op.EQ); _hostIdTypeSearch.done(); + + _hostOrPoolIdSearch = createSearchBuilder(); + _hostOrPoolIdSearch.and("hostId", _hostOrPoolIdSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ); + _hostOrPoolIdSearch.done(); } public void updateAllocated(Long hostId, long allocatedAmount, short capacityType, boolean add) { @@ -129,5 +131,12 @@ public class CapacityDaoImpl extends GenericDaoBase implements sc.setParameters("hostId", hostId); sc.setParameters("type", capacityType); return findOneBy(sc); + } + + @Override + public java.util.List findByHostorPoolId(Long hostorPoolId){ + SearchCriteria sc = _hostOrPoolIdSearch.create(); + sc.setParameters("hostId", hostorPoolId); + return listBy(sc); } } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 9392e449d0b..1daedf8dcab 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -73,6 +73,7 @@ import com.cloud.api.commands.PreparePrimaryStorageForMaintenanceCmd; import com.cloud.api.commands.UpdateStoragePoolCmd; import com.cloud.async.AsyncInstanceCreateStatus; import com.cloud.async.AsyncJobManager; +import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Config; @@ -1413,6 +1414,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag sPool.setUuid(null); _storagePoolDao.update(id, sPool); _storagePoolDao.remove(id); + deleteHostorPoolStats(id); return true; } else { // 1. Check if the pool has associated volumes in the volumes table @@ -1462,6 +1464,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag sPool.setStatus(Status.Removed); _storagePoolDao.update(id, sPool); _storagePoolDao.remove(id); + deleteHostorPoolStats(id); return true; } } @@ -1470,6 +1473,20 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } + @DB + private boolean deleteHostorPoolStats(Long hostorPoolId){ + + List capacities = _capacityDao.findByHostorPoolId(hostorPoolId); + Transaction txn = Transaction.currentTxn(); + txn.start(); + for (CapacityVO capacity : capacities){ + _capacityDao.remove(capacity.getId()); + } + txn.commit(); + return true; + + } + @Override public boolean addPoolToHost(long hostId, StoragePoolVO pool) { s_logger.debug("Adding pool " + pool.getName() + " to host " + hostId);