mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-5314: Negative (-ve) values for primary storage and volumes are shown in the resource count table.
This commit is contained in:
parent
6d75c31958
commit
c3d8e207c8
@ -57,13 +57,4 @@ public interface SnapshotDao extends GenericDao<SnapshotVO, Long>, StateDao<Snap
|
||||
|
||||
List<SnapshotVO> listAllByStatus(Snapshot.State... status);
|
||||
|
||||
/**
|
||||
* Gets the Total Secondary Storage space (in bytes) used by snapshots
|
||||
* allocated for an account
|
||||
*
|
||||
* @param account
|
||||
* @return total Secondary Storage space allocated
|
||||
*/
|
||||
long secondaryStorageUsedForAccount(long accountId);
|
||||
|
||||
}
|
||||
|
||||
@ -36,7 +36,6 @@ import com.cloud.storage.Snapshot.Type;
|
||||
import com.cloud.storage.SnapshotVO;
|
||||
import com.cloud.storage.Volume;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.storage.dao.VolumeDaoImpl.SumCount;
|
||||
import com.cloud.tags.dao.ResourceTagDao;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.Filter;
|
||||
@ -46,7 +45,6 @@ import com.cloud.utils.db.JoinBuilder.JoinType;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.db.TransactionLegacy;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
@ -72,7 +70,6 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
|
||||
private SearchBuilder<SnapshotVO> InstanceIdSearch;
|
||||
private SearchBuilder<SnapshotVO> StatusSearch;
|
||||
private GenericSearchBuilder<SnapshotVO, Long> CountSnapshotsByAccount;
|
||||
private GenericSearchBuilder<SnapshotVO, SumCount> secondaryStorageSearch;
|
||||
@Inject
|
||||
ResourceTagDao _tagsDao;
|
||||
@Inject
|
||||
@ -193,12 +190,6 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
|
||||
|
||||
InstanceIdSearch.join("instanceSnapshots", volumeSearch, volumeSearch.entity().getId(), InstanceIdSearch.entity().getVolumeId(), JoinType.INNER);
|
||||
InstanceIdSearch.done();
|
||||
|
||||
secondaryStorageSearch = createSearchBuilder(SumCount.class);
|
||||
secondaryStorageSearch.select("sum", Func.SUM, secondaryStorageSearch.entity().getSize());
|
||||
secondaryStorageSearch.and("accountId", secondaryStorageSearch.entity().getAccountId(), Op.EQ);
|
||||
secondaryStorageSearch.and("isRemoved", secondaryStorageSearch.entity().getRemoved(), Op.NULL);
|
||||
secondaryStorageSearch.done();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -333,15 +324,4 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long secondaryStorageUsedForAccount(long accountId) {
|
||||
SearchCriteria<SumCount> sc = secondaryStorageSearch.create();
|
||||
sc.setParameters("accountId", accountId);
|
||||
List<SumCount> storageSpace = customSearch(sc, null);
|
||||
if (storageSpace != null) {
|
||||
return storageSpace.get(0).sum;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,8 +35,11 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
||||
|
||||
@ -68,6 +71,8 @@ import com.cloud.projects.dao.ProjectAccountDao;
|
||||
import com.cloud.projects.dao.ProjectDao;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import com.cloud.storage.DataStoreRole;
|
||||
import com.cloud.storage.SnapshotVO;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.dao.SnapshotDao;
|
||||
@ -149,8 +154,11 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
|
||||
private TemplateDataStoreDao _vmTemplateStoreDao;
|
||||
@Inject
|
||||
private VlanDao _vlanDao;
|
||||
@Inject
|
||||
private SnapshotDataStoreDao _snapshotDataStoreDao;
|
||||
|
||||
protected GenericSearchBuilder<TemplateDataStoreVO, SumCount> templateSizeSearch;
|
||||
protected GenericSearchBuilder<SnapshotDataStoreVO, SumCount> snapshotSizeSearch;
|
||||
|
||||
protected SearchBuilder<ResourceCountVO> ResourceCountSearch;
|
||||
ScheduledExecutorService _rcExecutor;
|
||||
@ -189,6 +197,15 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
|
||||
templateSizeSearch.join("templates", join1, templateSizeSearch.entity().getTemplateId(), join1.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
templateSizeSearch.done();
|
||||
|
||||
snapshotSizeSearch = _snapshotDataStoreDao.createSearchBuilder(SumCount.class);
|
||||
snapshotSizeSearch.select("sum", Func.SUM, snapshotSizeSearch.entity().getSize());
|
||||
snapshotSizeSearch.and("state", snapshotSizeSearch.entity().getState(), Op.EQ);
|
||||
snapshotSizeSearch.and("storeRole", snapshotSizeSearch.entity().getRole(), Op.EQ);
|
||||
SearchBuilder<SnapshotVO> join2 = _snapshotDao.createSearchBuilder();
|
||||
join2.and("accountId", join2.entity().getAccountId(), Op.EQ);
|
||||
snapshotSizeSearch.join("snapshots", join2, snapshotSizeSearch.entity().getSnapshotId(), join2.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
snapshotSizeSearch.done();
|
||||
|
||||
_resourceCountCheckInterval = NumbersUtil.parseInt(_configDao.getValue(Config.ResourceCountCheckInterval.key()), 0);
|
||||
if (_resourceCountCheckInterval > 0) {
|
||||
_rcExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("ResourceCountChecker"));
|
||||
@ -922,7 +939,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
|
||||
|
||||
public long calculateSecondaryStorageForAccount(long accountId) {
|
||||
long totalVolumesSize = _volumeDao.secondaryStorageUsedForAccount(accountId);
|
||||
long totalSnapshotsSize = _snapshotDao.secondaryStorageUsedForAccount(accountId);
|
||||
long totalSnapshotsSize = 0;
|
||||
long totalTemplatesSize = 0;
|
||||
|
||||
SearchCriteria<SumCount> sc = templateSizeSearch.create();
|
||||
@ -934,6 +951,14 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
|
||||
totalTemplatesSize = templates.get(0).sum;
|
||||
}
|
||||
|
||||
SearchCriteria<SumCount> sc2 = snapshotSizeSearch.create();
|
||||
sc2.setParameters("state", ObjectInDataStoreStateMachine.State.Ready);
|
||||
sc2.setParameters("storeRole", DataStoreRole.Image);
|
||||
sc2.setJoinParameters("snapshots", "accountId", accountId);
|
||||
List<SumCount> snapshots = _snapshotDataStoreDao.customSearch(sc2, null);
|
||||
if (snapshots != null) {
|
||||
totalSnapshotsSize = snapshots.get(0).sum;
|
||||
}
|
||||
return totalVolumesSize + totalSnapshotsSize + totalTemplatesSize;
|
||||
}
|
||||
|
||||
|
||||
@ -759,7 +759,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
||||
if (!created) {
|
||||
s_logger.trace("Decrementing volume resource count for account id=" + volume.getAccountId() + " as volume failed to create on the backend");
|
||||
_resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.volume, cmd.getDisplayVolume());
|
||||
_resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, cmd.getDisplayVolume(), new Long(volume.getSize()));
|
||||
_resourceLimitMgr.recalculateResourceCount(volume.getAccountId(), volume.getDomainId(), ResourceType.primary_storage.getOrdinal());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1005,7 +1005,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
||||
/* If volume is in primary storage, decrement primary storage count else decrement secondary
|
||||
storage count (in case of upload volume). */
|
||||
if (volume.getFolder() != null || volume.getPath() != null || volume.getState() == Volume.State.Allocated) {
|
||||
_resourceLimitMgr.decrementResourceCount(volume.getAccountId(), ResourceType.primary_storage, volume.isDisplayVolume(), new Long(volume.getSize()));
|
||||
_resourceLimitMgr.recalculateResourceCount(volume.getAccountId(), volume.getDomainId(), ResourceType.primary_storage.getOrdinal());
|
||||
} else {
|
||||
_resourceLimitMgr.recalculateResourceCount(volume.getAccountId(), volume.getDomainId(), ResourceType.secondary_storage.getOrdinal());
|
||||
}
|
||||
|
||||
@ -1663,7 +1663,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
// Update Resource count
|
||||
if (vm.getAccountId() != Account.ACCOUNT_ID_SYSTEM && !rootVol.isEmpty()) {
|
||||
_resourceLimitMgr.decrementResourceCount(vm.getAccountId(), ResourceType.volume);
|
||||
_resourceLimitMgr.decrementResourceCount(vm.getAccountId(), ResourceType.primary_storage, new Long(rootVol.get(0).getSize()));
|
||||
_resourceLimitMgr.recalculateResourceCount(vm.getAccountId(), vm.getDomainId(), ResourceType.primary_storage.getOrdinal());
|
||||
}
|
||||
|
||||
// Only if vm is not expunged already, cleanup it's resources
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user