Search in sources :

Example 16 with CapacityVO

use of com.cloud.capacity.CapacityVO in project cosmic by MissionCriticalCloud.

the class StorageManagerImpl method createCapacityEntry.

@Override
public void createCapacityEntry(final StoragePoolVO storagePool, final short capacityType, final long allocated) {
    final SearchCriteria<CapacityVO> capacitySC = _capacityDao.createSearchCriteria();
    capacitySC.addAnd("hostOrPoolId", SearchCriteria.Op.EQ, storagePool.getId());
    capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, storagePool.getDataCenterId());
    capacitySC.addAnd("capacityType", SearchCriteria.Op.EQ, capacityType);
    final List<CapacityVO> capacities = _capacityDao.search(capacitySC, null);
    final long totalOverProvCapacity;
    if (storagePool.getPoolType() == StoragePoolType.NetworkFilesystem) {
        // All this is for the inaccuracy of floats for big number multiplication.
        final BigDecimal overProvFactor = getStorageOverProvisioningFactor(storagePool.getId());
        totalOverProvCapacity = overProvFactor.multiply(new BigDecimal(storagePool.getCapacityBytes())).longValue();
        s_logger.debug("Found storage pool " + storagePool.getName() + " of type " + storagePool.getPoolType().toString() + " with overprovisioning factor " + overProvFactor.toString());
        s_logger.debug("Total over provisioned capacity calculated is " + overProvFactor + " * " + storagePool.getCapacityBytes());
    } else {
        s_logger.debug("Found storage pool " + storagePool.getName() + " of type " + storagePool.getPoolType().toString());
        totalOverProvCapacity = storagePool.getCapacityBytes();
    }
    s_logger.debug("Total over provisioned capacity of the pool " + storagePool.getName() + " id: " + storagePool.getId() + " is " + totalOverProvCapacity);
    CapacityState capacityState = CapacityState.Enabled;
    if (storagePool.getScope() == ScopeType.ZONE) {
        final DataCenterVO dc = ApiDBUtils.findZoneById(storagePool.getDataCenterId());
        final AllocationState allocationState = dc.getAllocationState();
        capacityState = allocationState == AllocationState.Disabled ? CapacityState.Disabled : CapacityState.Enabled;
    } else {
        if (storagePool.getClusterId() != null) {
            final ClusterVO cluster = ApiDBUtils.findClusterById(storagePool.getClusterId());
            if (cluster != null) {
                final AllocationState allocationState = _configMgr.findClusterAllocationState(cluster);
                capacityState = allocationState == AllocationState.Disabled ? CapacityState.Disabled : CapacityState.Enabled;
            }
        }
    }
    if (capacities.size() == 0) {
        final CapacityVO capacity = new CapacityVO(storagePool.getId(), storagePool.getDataCenterId(), storagePool.getPodId(), storagePool.getClusterId(), allocated, totalOverProvCapacity, capacityType);
        capacity.setCapacityState(capacityState);
        _capacityDao.persist(capacity);
    } else {
        final CapacityVO capacity = capacities.get(0);
        if (capacity.getTotalCapacity() != totalOverProvCapacity || allocated != capacity.getUsedCapacity() || capacity.getCapacityState() != capacityState) {
            capacity.setTotalCapacity(totalOverProvCapacity);
            capacity.setUsedCapacity(allocated);
            capacity.setCapacityState(capacityState);
            _capacityDao.update(capacity.getId(), capacity);
        }
    }
    s_logger.debug("Successfully set Capacity - " + totalOverProvCapacity + " for capacity type - " + capacityType + " , DataCenterId - " + storagePool.getDataCenterId() + ", HostOrPoolId - " + storagePool.getId() + ", PodId " + storagePool.getPodId());
}
Also used : DataCenterVO(com.cloud.dc.DataCenterVO) ClusterVO(com.cloud.dc.ClusterVO) CapacityState(com.cloud.capacity.CapacityState) AllocationState(com.cloud.model.enumeration.AllocationState) CapacityVO(com.cloud.capacity.CapacityVO) BigDecimal(java.math.BigDecimal)

Example 17 with CapacityVO

use of com.cloud.capacity.CapacityVO in project cosmic by MissionCriticalCloud.

the class StorageManagerImpl method getSecondaryStorageUsedStats.

@Override
public CapacityVO getSecondaryStorageUsedStats(final Long hostId, final Long zoneId) {
    final SearchCriteria<HostVO> sc = _hostDao.createSearchCriteria();
    if (zoneId != null) {
        sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
    }
    final List<Long> hosts = new ArrayList<>();
    if (hostId != null) {
        hosts.add(hostId);
    } else {
        final List<DataStore> stores = _dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
        if (stores != null) {
            for (final DataStore store : stores) {
                hosts.add(store.getId());
            }
        }
    }
    final CapacityVO capacity = new CapacityVO(hostId, zoneId, null, null, 0, 0, Capacity.CAPACITY_TYPE_SECONDARY_STORAGE);
    for (final Long id : hosts) {
        final StorageStats stats = ApiDBUtils.getSecondaryStorageStatistics(id);
        if (stats == null) {
            continue;
        }
        capacity.setUsedCapacity(stats.getByteUsed() + capacity.getUsedCapacity());
        capacity.setTotalCapacity(stats.getCapacityBytes() + capacity.getTotalCapacity());
    }
    return capacity;
}
Also used : ZoneScope(com.cloud.engine.subsystem.api.storage.ZoneScope) DataStore(com.cloud.engine.subsystem.api.storage.DataStore) CapacityVO(com.cloud.capacity.CapacityVO) ArrayList(java.util.ArrayList) HostVO(com.cloud.host.HostVO)

Example 18 with CapacityVO

use of com.cloud.capacity.CapacityVO in project cloudstack by apache.

the class UserConcentratedAllocator method dataCenterAndPodHasEnoughCapacity.

private boolean dataCenterAndPodHasEnoughCapacity(long dataCenterId, long podId, long capacityNeeded, short capacityType, long[] hostCandidate) {
    List<CapacityVO> capacities = null;
    SearchCriteria<CapacityVO> sc = _capacityDao.createSearchCriteria();
    sc.addAnd("capacityType", SearchCriteria.Op.EQ, capacityType);
    sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId);
    sc.addAnd("podId", SearchCriteria.Op.EQ, podId);
    s_logger.trace("Executing search");
    capacities = _capacityDao.search(sc, null);
    s_logger.trace("Done with a search");
    boolean enoughCapacity = false;
    if (capacities != null) {
        for (CapacityVO capacity : capacities) {
            if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) {
                // 
                if ((capacity.getTotalCapacity() - calcHostAllocatedCpuMemoryCapacity(capacity.getHostOrPoolId(), capacityType)) >= capacityNeeded) {
                    hostCandidate[0] = capacity.getHostOrPoolId();
                    enoughCapacity = true;
                    break;
                }
            } else {
                if ((capacity.getTotalCapacity() - capacity.getUsedCapacity()) >= capacityNeeded) {
                    hostCandidate[0] = capacity.getHostOrPoolId();
                    enoughCapacity = true;
                    break;
                }
            }
        }
    }
    return enoughCapacity;
}
Also used : CapacityVO(com.cloud.capacity.CapacityVO)

Example 19 with CapacityVO

use of com.cloud.capacity.CapacityVO in project cloudstack by apache.

the class AlertManagerImpl method createOrUpdateVlanCapacity.

private void createOrUpdateVlanCapacity(long dcId, AllocationState capacityState) {
    SearchCriteria<CapacityVO> capacitySC = _capacityDao.createSearchCriteria();
    List<CapacityVO> capacities = _capacityDao.search(capacitySC, null);
    capacitySC = _capacityDao.createSearchCriteria();
    capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, dcId);
    capacitySC.addAnd("capacityType", SearchCriteria.Op.EQ, Capacity.CAPACITY_TYPE_VLAN);
    capacities = _capacityDao.search(capacitySC, null);
    int totalVlans = _dcDao.countZoneVlans(dcId, false);
    int allocatedVlans = _dcDao.countZoneVlans(dcId, true);
    CapacityState vlanCapacityState = (capacityState == AllocationState.Disabled) ? CapacityState.Disabled : CapacityState.Enabled;
    if (capacities.size() == 0) {
        CapacityVO newVlanCapacity = new CapacityVO(null, dcId, null, null, allocatedVlans, totalVlans, Capacity.CAPACITY_TYPE_VLAN);
        newVlanCapacity.setCapacityState(vlanCapacityState);
        _capacityDao.persist(newVlanCapacity);
    } else if (!(capacities.get(0).getUsedCapacity() == allocatedVlans && capacities.get(0).getTotalCapacity() == totalVlans && capacities.get(0).getCapacityState() == vlanCapacityState)) {
        CapacityVO capacity = capacities.get(0);
        capacity.setUsedCapacity(allocatedVlans);
        capacity.setTotalCapacity(totalVlans);
        capacity.setCapacityState(vlanCapacityState);
        _capacityDao.update(capacity.getId(), capacity);
    }
}
Also used : CapacityState(com.cloud.capacity.CapacityState) CapacityVO(com.cloud.capacity.CapacityVO)

Example 20 with CapacityVO

use of com.cloud.capacity.CapacityVO in project cloudstack by apache.

the class AlertManagerImpl method createOrUpdateIpCapacity.

public void createOrUpdateIpCapacity(Long dcId, Long podId, short capacityType, AllocationState capacityState) {
    SearchCriteria<CapacityVO> capacitySC = _capacityDao.createSearchCriteria();
    List<CapacityVO> capacities = _capacityDao.search(capacitySC, null);
    capacitySC = _capacityDao.createSearchCriteria();
    capacitySC.addAnd("podId", SearchCriteria.Op.EQ, podId);
    capacitySC.addAnd("dataCenterId", SearchCriteria.Op.EQ, dcId);
    capacitySC.addAnd("capacityType", SearchCriteria.Op.EQ, capacityType);
    int totalIPs;
    int allocatedIPs;
    capacities = _capacityDao.search(capacitySC, null);
    if (capacityType == Capacity.CAPACITY_TYPE_PRIVATE_IP) {
        totalIPs = _privateIPAddressDao.countIPs(podId, dcId, false);
        allocatedIPs = _privateIPAddressDao.countIPs(podId, dcId, true);
    } else if (capacityType == Capacity.CAPACITY_TYPE_VIRTUAL_NETWORK_PUBLIC_IP) {
        totalIPs = _publicIPAddressDao.countIPsForNetwork(dcId, false, VlanType.VirtualNetwork);
        allocatedIPs = _publicIPAddressDao.countIPsForNetwork(dcId, true, VlanType.VirtualNetwork);
    } else {
        totalIPs = _publicIPAddressDao.countIPsForNetwork(dcId, false, VlanType.DirectAttached);
        allocatedIPs = _publicIPAddressDao.countIPsForNetwork(dcId, true, VlanType.DirectAttached);
    }
    CapacityState ipCapacityState = (capacityState == AllocationState.Disabled) ? CapacityState.Disabled : CapacityState.Enabled;
    if (capacities.size() == 0) {
        CapacityVO newPublicIPCapacity = new CapacityVO(null, dcId, podId, null, allocatedIPs, totalIPs, capacityType);
        newPublicIPCapacity.setCapacityState(ipCapacityState);
        _capacityDao.persist(newPublicIPCapacity);
    } else if (!(capacities.get(0).getUsedCapacity() == allocatedIPs && capacities.get(0).getTotalCapacity() == totalIPs && capacities.get(0).getCapacityState() == ipCapacityState)) {
        CapacityVO capacity = capacities.get(0);
        capacity.setUsedCapacity(allocatedIPs);
        capacity.setTotalCapacity(totalIPs);
        capacity.setCapacityState(ipCapacityState);
        _capacityDao.update(capacity.getId(), capacity);
    }
}
Also used : CapacityState(com.cloud.capacity.CapacityState) CapacityVO(com.cloud.capacity.CapacityVO)

Aggregations

CapacityVO (com.cloud.capacity.CapacityVO)23 ArrayList (java.util.ArrayList)12 CapacityState (com.cloud.capacity.CapacityState)6 SummedCapacity (com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity)6 DataCenterVO (com.cloud.dc.DataCenterVO)6 HostVO (com.cloud.host.HostVO)4 ClusterVO (com.cloud.dc.ClusterVO)2 ExcludeList (com.cloud.deploy.DeploymentPlanner.ExcludeList)2 BigDecimal (java.math.BigDecimal)2 List (java.util.List)2 DomainJoinVO (com.cloud.api.query.vo.DomainJoinVO)1 CapacityResponse (com.cloud.api.response.CapacityResponse)1 DedicatedResourceVO (com.cloud.dc.DedicatedResourceVO)1 DataStore (com.cloud.engine.subsystem.api.storage.DataStore)1 ZoneScope (com.cloud.engine.subsystem.api.storage.ZoneScope)1 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)1 AllocationState (com.cloud.model.enumeration.AllocationState)1 AllocationState (com.cloud.org.Grouping.AllocationState)1 StoragePoolVO (com.cloud.storage.datastore.db.StoragePoolVO)1 Account (com.cloud.user.Account)1