From 93fac76bd9ad727c6d34727dbeb0376b8564db2a Mon Sep 17 00:00:00 2001 From: anthony Date: Wed, 22 Sep 2010 20:32:27 -0700 Subject: [PATCH] bug 6181: ingore provisioning factor for iscsi primary storage status 6181: resolved fixed --- .../com/cloud/capacity/dao/CapacityDao.java | 1 - .../cloud/capacity/dao/CapacityDaoImpl.java | 21 +-------- .../src/com/cloud/storage/StorageManager.java | 2 + .../src/com/cloud/alert/AlertManagerImpl.java | 21 ++------- .../src/com/cloud/server/StatsCollector.java | 6 +-- .../com/cloud/storage/StorageManagerImpl.java | 46 ++++++++++++------- 6 files changed, 39 insertions(+), 58 deletions(-) diff --git a/core/src/com/cloud/capacity/dao/CapacityDao.java b/core/src/com/cloud/capacity/dao/CapacityDao.java index f86bd97056f..726544f4384 100644 --- a/core/src/com/cloud/capacity/dao/CapacityDao.java +++ b/core/src/com/cloud/capacity/dao/CapacityDao.java @@ -22,7 +22,6 @@ import com.cloud.capacity.CapacityVO; import com.cloud.utils.db.GenericDao; public interface CapacityDao extends GenericDao { - void setUsedStorage(Long hostId, long totalUsed); void clearNonStorageCapacities(); void clearStorageCapacities(); } diff --git a/core/src/com/cloud/capacity/dao/CapacityDaoImpl.java b/core/src/com/cloud/capacity/dao/CapacityDaoImpl.java index 7151bff7ce9..e6e8d4dba25 100644 --- a/core/src/com/cloud/capacity/dao/CapacityDaoImpl.java +++ b/core/src/com/cloud/capacity/dao/CapacityDaoImpl.java @@ -34,9 +34,8 @@ public class CapacityDaoImpl extends GenericDaoBase implements private static final String ADD_ALLOCATED_SQL = "UPDATE `cloud`.`op_host_capacity` SET used_capacity = used_capacity + ? WHERE host_id = ? AND capacity_type = ?"; private static final String SUBTRACT_ALLOCATED_SQL = "UPDATE `cloud`.`op_host_capacity` SET used_capacity = used_capacity - ? WHERE host_id = ? AND capacity_type = ?"; - private static final String SET_USED_STORAGE_SQL = "UPDATE `cloud`.`op_host_capacity` SET used_capacity = ? WHERE host_id = ? AND capacity_type = 2"; - private static final String CLEAR_STORAGE_CAPACITIES = "DELETE FROM `cloud`.`op_host_capacity` WHERE capacity_type=2 OR capacity_type=6"; //clear storage and secondary_storage capacities - private static final String CLEAR_NON_STORAGE_CAPACITIES = "DELETE FROM `cloud`.`op_host_capacity` WHERE capacity_type<>2 AND capacity_type <>6"; //clear non-storage and non-secondary_storage capacities + private static final String CLEAR_STORAGE_CAPACITIES = "DELETE FROM `cloud`.`op_host_capacity` WHERE capacity_type=2 OR capacity_type=3 OR capacity_type=6"; //clear storage and secondary_storage capacities + 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 public void updateAllocated(Long hostId, long allocatedAmount, short capacityType, boolean add) { Transaction txn = Transaction.currentTxn(); @@ -61,22 +60,6 @@ public class CapacityDaoImpl extends GenericDaoBase implements } } - public void setUsedStorage(Long hostId, long totalUsed) { - Transaction txn = Transaction.currentTxn(); - PreparedStatement pstmt = null; - try { - txn.start(); - String sql = SET_USED_STORAGE_SQL; - pstmt = txn.prepareAutoCloseStatement(sql); - pstmt.setLong(1, totalUsed); - pstmt.setLong(2, hostId); - pstmt.executeUpdate(); // TODO: Make sure exactly 1 row was updated? - txn.commit(); - } catch (Exception e) { - txn.rollback(); - s_logger.warn("Exception setting used storage for host: " + hostId, e); - } - } @Override public void clearNonStorageCapacities() { diff --git a/core/src/com/cloud/storage/StorageManager.java b/core/src/com/cloud/storage/StorageManager.java index c273f39bcf6..5d6653b96b2 100644 --- a/core/src/com/cloud/storage/StorageManager.java +++ b/core/src/com/cloud/storage/StorageManager.java @@ -272,4 +272,6 @@ public interface StorageManager extends Manager { */ VolumeVO createVolumeFromSnapshot(long userId, long accountId, long snapshotId, String volumeName, long startEventId); + void createCapacityEntry(StoragePoolVO storagePool, long allocated); + } diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java b/server/src/com/cloud/alert/AlertManagerImpl.java index eca8a0c50bd..d70c0490abb 100644 --- a/server/src/com/cloud/alert/AlertManagerImpl.java +++ b/server/src/com/cloud/alert/AlertManagerImpl.java @@ -60,12 +60,14 @@ import com.cloud.service.ServiceOffering; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.SearchCriteria; @@ -95,7 +97,8 @@ public class AlertManagerImpl implements AlertManager { private String _name = null; private EmailAlert _emailAlert; private AlertDao _alertDao; - private HostDao _hostDao; + private HostDao _hostDao; + @Inject protected StorageManager _storageMgr; private ServiceOfferingDao _offeringsDao; private CapacityDao _capacityDao; private VMInstanceDao _vmDao; @@ -111,7 +114,6 @@ public class AlertManagerImpl implements AlertManager { private StoragePoolDao _storagePoolDao; private Timer _timer = null; - private int _overProvisioningFactor = 1; private float _cpuOverProvisioningFactor = 1; private long _capacityCheckPeriod = 60L * 60L * 1000L; // one hour by default private double _memoryCapacityThreshold = 0.75; @@ -263,11 +265,6 @@ public class AlertManagerImpl implements AlertManager { if (capacityCheckPeriodStr != null) { _capacityCheckPeriod = Long.parseLong(capacityCheckPeriodStr); } - - String overProvisioningFactorStr = configs.get("storage.overprovisioning.factor"); - if (overProvisioningFactorStr != null) { - _overProvisioningFactor = Integer.parseInt(overProvisioningFactorStr); - } String cpuOverProvisioningFactorStr = configs.get("cpu.overprovisioning.factor"); if (cpuOverProvisioningFactorStr != null) { @@ -409,15 +406,7 @@ public class AlertManagerImpl implements AlertManager { long disk = 0l; Pair sizes = _volumeDao.getCountAndTotalByPool(pool.getId()); disk = sizes.second(); - int provFactor = 1; - if( pool.getPoolType() == StoragePoolType.NetworkFilesystem ) { - provFactor = _overProvisioningFactor; - } - CapacityVO newStorageCapacity = new CapacityVO(pool.getId(), pool.getDataCenterId(), pool.getPodId(), disk, pool.getCapacityBytes() * provFactor, CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED); - newCapacities.add(newStorageCapacity); -// _capacityDao.persist(newStorageCapacity); - - continue; + _storageMgr.createCapacityEntry(pool, disk); } // Calculate new Public IP capacity diff --git a/server/src/com/cloud/server/StatsCollector.java b/server/src/com/cloud/server/StatsCollector.java index 02a4f449287..4469a0ceace 100644 --- a/server/src/com/cloud/server/StatsCollector.java +++ b/server/src/com/cloud/server/StatsCollector.java @@ -335,9 +335,7 @@ public class StatsCollector { pool.setAvailableBytes(available); _storagePoolDao.update(pool.getId(), pool); - CapacityVO capacity = new CapacityVO(poolId, pool.getDataCenterId(), pool.getPodId(), stats.getByteUsed(), stats.getCapacityBytes(), CapacityVO.CAPACITY_TYPE_STORAGE); - newCapacities.add(capacity); -// _capacityDao.persist(capacity); + _storageManager.createCapacityEntry(pool, 0L); } Transaction txn = Transaction.open(Transaction.CLOUD_DB); @@ -346,8 +344,6 @@ public class StatsCollector { s_logger.trace("recalculating system storage capacity"); } txn.start(); - _capacityDao.clearStorageCapacities(); - for (CapacityVO newCapacity : newCapacities) { s_logger.trace("Executing capacity update"); _capacityDao.persist(newCapacity); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index b6d521dfc91..b8ed40a8511 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -941,13 +941,14 @@ public class StorageManagerImpl implements StorageManager { _discoverers = locator.getAdapters(StoragePoolDiscoverer.class); - String overProvisioningFactorStr = (String) params.get("storage.overprovisioning.factor"); + Map configs = configDao.getConfiguration("management-server", params); + + + String overProvisioningFactorStr = configs.get("storage.overprovisioning.factor"); if (overProvisioningFactorStr != null) { _overProvisioningFactor = Integer.parseInt(overProvisioningFactorStr); } - Map configs = configDao.getConfiguration("management-server", params); - _retry = NumbersUtil.parseInt(configs.get(Config.StartRetry.key()), 2); _pingInterval = NumbersUtil.parseInt(configs.get("ping.interval"), 60); _hostRetry = NumbersUtil.parseInt(configs.get("host.retry"), 2); @@ -1572,9 +1573,14 @@ public class StorageManagerImpl implements StorageManager { txn.commit(); } - + @Override public void createCapacityEntry(StoragePoolVO storagePool) { + createCapacityEntry(storagePool, 0); + } + + @Override + public void createCapacityEntry(StoragePoolVO storagePool, long allocated) { SearchCriteria capacitySC = _capacityDao.createSearchCriteria(); capacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, storagePool.getId()); capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, storagePool.getDataCenterId()); @@ -1583,15 +1589,14 @@ public class StorageManagerImpl implements StorageManager { List capacities = _capacityDao.search(capacitySC, null); if (capacities.size() == 0) { - CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), 0L, storagePool.getCapacityBytes(), + CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), storagePool.getAvailableBytes(), storagePool.getCapacityBytes(), CapacityVO.CAPACITY_TYPE_STORAGE); _capacityDao.persist(capacity); } else { CapacityVO capacity = capacities.get(0); - if (capacity.getTotalCapacity() != storagePool.getCapacityBytes()) { - capacity.setTotalCapacity(storagePool.getCapacityBytes()); - _capacityDao.update(capacity.getId(), capacity); - } + capacity.setTotalCapacity(storagePool.getCapacityBytes()); + capacity.setUsedCapacity(storagePool.getAvailableBytes()); + _capacityDao.update(capacity.getId(), capacity); } s_logger.debug("Successfully set Capacity - " +storagePool.getCapacityBytes()+ " for CAPACITY_TYPE_STORAGE, DataCenterId - " +storagePool.getDataCenterId()+ ", HostOrPoolId - " +storagePool.getId()+ ", PodId " +storagePool.getPodId()); capacitySC = _capacityDao.createSearchCriteria(); @@ -1601,21 +1606,28 @@ public class StorageManagerImpl implements StorageManager { capacities = _capacityDao.search(capacitySC, null); + int provFactor = 1; + if( storagePool.getPoolType() == StoragePoolType.NetworkFilesystem ) { + provFactor = _overProvisioningFactor; + } if (capacities.size() == 0) { - int provFactor = 1; - if( storagePool.getPoolType() == StoragePoolType.NetworkFilesystem ) { - provFactor = _overProvisioningFactor; - } - - CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), 0L, storagePool.getCapacityBytes() + CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), allocated, storagePool.getCapacityBytes() * provFactor, CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED); _capacityDao.persist(capacity); } else { CapacityVO capacity = capacities.get(0); - long currCapacity = _overProvisioningFactor * storagePool.getCapacityBytes(); + long currCapacity = provFactor * storagePool.getCapacityBytes(); + boolean update = false; if (capacity.getTotalCapacity() != currCapacity) { capacity.setTotalCapacity(currCapacity); - _capacityDao.update(capacity.getId(), capacity); + update = true; + } + if ( allocated != 0 ) { + capacity.setUsedCapacity(allocated); + update = true; + } + if ( update ) { + _capacityDao.update(capacity.getId(), capacity); } } s_logger.debug("Successfully set Capacity - " +storagePool.getCapacityBytes()* _overProvisioningFactor+ " for CAPACITY_TYPE_STORAGE_ALLOCATED, DataCenterId - " +storagePool.getDataCenterId()+ ", HostOrPoolId - " +storagePool.getId()+ ", PodId " +storagePool.getPodId());