Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 43 additions & 6 deletions server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import javax.inject.Inject;
import javax.naming.ConfigurationException;

import com.cloud.vm.UserVmDetailVO;
import com.cloud.vm.dao.UserVmDetailsDao;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -123,6 +125,8 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
@Inject
private UserVmDao _userVmDao;
@Inject
private UserVmDetailsDao _userVmDetailsDao;
@Inject
private AccountDao _accountDao;
@Inject
protected SnapshotDao _snapshotDao;
Expand Down Expand Up @@ -938,11 +942,28 @@ public long countCpusForAccount(long accountId) {
sc.setJoinParameters("offerings", "state", new Object[] {State.Destroyed, State.Error, State.Expunging});
sc.setJoinParameters("offerings", "displayVm", 1);
List<SumCount> cpus = _serviceOfferingDao.customSearch(sc, null);
long total = 0;
if (cpus != null) {
return cpus.get(0).sum;
} else {
return 0;
total = cpus.get(0).sum;
}

GenericSearchBuilder<UserVmDetailVO, SumCount> detailCpuSearch = _userVmDetailsDao.createSearchBuilder(SumCount.class);
detailCpuSearch.select("sum", Func.SUM, detailCpuSearch.entity().getValue());
detailCpuSearch.and("name", detailCpuSearch.entity().getName(), Op.EQ);
detailCpuSearch.join("vms", join1, detailCpuSearch.entity().getResourceId(), join1.entity().getId(), JoinBuilder.JoinType.INNER);

sc = detailCpuSearch.create();
sc.setParameters("name", "cpu");
sc.setJoinParameters("vms", "accountId", accountId);
sc.setJoinParameters("vms", "type", VirtualMachine.Type.User);
sc.setJoinParameters("vms", "state", new Object[] {State.Destroyed, State.Error, State.Expunging});
sc.setJoinParameters("vms", "displayVm", 1);

cpus = _userVmDetailsDao.customSearch(sc, null);
if (cpus != null) {
total += cpus.get(0).sum;
}
return total;
}

public long calculateMemoryForAccount(long accountId) {
Expand All @@ -962,11 +983,27 @@ public long calculateMemoryForAccount(long accountId) {
sc.setJoinParameters("offerings", "state", new Object[] {State.Destroyed, State.Error, State.Expunging});
sc.setJoinParameters("offerings", "displayVm", 1);
List<SumCount> memory = _serviceOfferingDao.customSearch(sc, null);
long total = 0;
if (memory != null) {
return memory.get(0).sum;
} else {
return 0;
total = memory.get(0).sum;
}

GenericSearchBuilder<UserVmDetailVO, SumCount> detailMemorySearch = _userVmDetailsDao.createSearchBuilder(SumCount.class);
detailMemorySearch.select("sum", Func.SUM, detailMemorySearch.entity().getValue());
detailMemorySearch.and("name", detailMemorySearch.entity().getName(), Op.EQ);
detailMemorySearch.join("vms", join1, detailMemorySearch.entity().getResourceId(), join1.entity().getId(), JoinBuilder.JoinType.INNER);
sc = detailMemorySearch.create();
sc.setParameters("name", "memory");
sc.setJoinParameters("vms", "accountId", accountId);
sc.setJoinParameters("vms", "type", VirtualMachine.Type.User);
sc.setJoinParameters("vms", "state", new Object[] {State.Destroyed, State.Error, State.Expunging});
sc.setJoinParameters("vms", "displayVm", 1);

memory = _userVmDetailsDao.customSearch(sc, null);
if (memory != null) {
total += memory.get(0).sum;
}
return total;
}

public long calculateSecondaryStorageForAccount(long accountId) {
Expand Down