mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-5303: fix incorrect resource count (snapshot, secondary_storage)
(cherry picked from commit 4bb85cd7f921d66eabe72d00dcde817affd48732) Conflicts: server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
This commit is contained in:
parent
e58c3c809d
commit
cbe2560a78
@ -175,6 +175,7 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
|
|||||||
CountSnapshotsByAccount = createSearchBuilder(Long.class);
|
CountSnapshotsByAccount = createSearchBuilder(Long.class);
|
||||||
CountSnapshotsByAccount.select(null, Func.COUNT, null);
|
CountSnapshotsByAccount.select(null, Func.COUNT, null);
|
||||||
CountSnapshotsByAccount.and("account", CountSnapshotsByAccount.entity().getAccountId(), SearchCriteria.Op.EQ);
|
CountSnapshotsByAccount.and("account", CountSnapshotsByAccount.entity().getAccountId(), SearchCriteria.Op.EQ);
|
||||||
|
CountSnapshotsByAccount.and("status", CountSnapshotsByAccount.entity().getState(), SearchCriteria.Op.NIN);
|
||||||
CountSnapshotsByAccount.and("removed", CountSnapshotsByAccount.entity().getRemoved(), SearchCriteria.Op.NULL);
|
CountSnapshotsByAccount.and("removed", CountSnapshotsByAccount.entity().getRemoved(), SearchCriteria.Op.NULL);
|
||||||
CountSnapshotsByAccount.done();
|
CountSnapshotsByAccount.done();
|
||||||
|
|
||||||
@ -268,6 +269,7 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
|
|||||||
public Long countSnapshotsForAccount(long accountId) {
|
public Long countSnapshotsForAccount(long accountId) {
|
||||||
SearchCriteria<Long> sc = CountSnapshotsByAccount.create();
|
SearchCriteria<Long> sc = CountSnapshotsByAccount.create();
|
||||||
sc.setParameters("account", accountId);
|
sc.setParameters("account", accountId);
|
||||||
|
sc.setParameters("status", State.Error, State.Destroyed);
|
||||||
return customSearch(sc, null).get(0);
|
return customSearch(sc, null).get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -430,8 +430,10 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
|
|||||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_DELETE, snapshotCheck.getAccountId(), snapshotCheck.getDataCenterId(), snapshotId,
|
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_DELETE, snapshotCheck.getAccountId(), snapshotCheck.getDataCenterId(), snapshotId,
|
||||||
snapshotCheck.getName(), null, null, 0L, snapshotCheck.getClass().getName(), snapshotCheck.getUuid());
|
snapshotCheck.getName(), null, null, 0L, snapshotCheck.getClass().getName(), snapshotCheck.getUuid());
|
||||||
}
|
}
|
||||||
_resourceLimitMgr.decrementResourceCount(snapshotCheck.getAccountId(), ResourceType.snapshot);
|
if (snapshotCheck.getState() != Snapshot.State.Error && snapshotCheck.getState() != Snapshot.State.Destroyed)
|
||||||
_resourceLimitMgr.decrementResourceCount(snapshotCheck.getAccountId(), ResourceType.secondary_storage, new Long(snapshotStoreRef.getSize()));
|
_resourceLimitMgr.decrementResourceCount(snapshotCheck.getAccountId(), ResourceType.snapshot);
|
||||||
|
if (snapshotCheck.getState() == Snapshot.State.BackedUp)
|
||||||
|
_resourceLimitMgr.decrementResourceCount(snapshotCheck.getAccountId(), ResourceType.secondary_storage, new Long(snapshotStoreRef.getSize()));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -949,7 +951,6 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
|
|||||||
|
|
||||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_CREATE, snapshot.getAccountId(), snapshot.getDataCenterId(), snapshotId, snapshot.getName(),
|
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SNAPSHOT_CREATE, snapshot.getAccountId(), snapshot.getDataCenterId(), snapshotId, snapshot.getName(),
|
||||||
null, null, volume.getSize(), snapshot.getClass().getName(), snapshot.getUuid());
|
null, null, volume.getSize(), snapshot.getClass().getName(), snapshot.getUuid());
|
||||||
_resourceLimitMgr.incrementResourceCount(snapshotOwner.getId(), ResourceType.snapshot);
|
|
||||||
SnapshotDataStoreVO snapshotStoreRef = _snapshotStoreDao.findBySnapshot(snapshotId, DataStoreRole.Image);
|
SnapshotDataStoreVO snapshotStoreRef = _snapshotStoreDao.findBySnapshot(snapshotId, DataStoreRole.Image);
|
||||||
// Correct the resource count of snapshot in case of delta snapshots.
|
// Correct the resource count of snapshot in case of delta snapshots.
|
||||||
_resourceLimitMgr.decrementResourceCount(snapshotOwner.getId(), ResourceType.secondary_storage, new Long(volume.getSize() - snapshotStoreRef.getSize()));
|
_resourceLimitMgr.decrementResourceCount(snapshotOwner.getId(), ResourceType.secondary_storage, new Long(volume.getSize() - snapshotStoreRef.getSize()));
|
||||||
@ -958,6 +959,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
s_logger.debug("Failed to create snapshot", e);
|
s_logger.debug("Failed to create snapshot", e);
|
||||||
|
_resourceLimitMgr.decrementResourceCount(snapshotOwner.getId(), ResourceType.snapshot);
|
||||||
_resourceLimitMgr.decrementResourceCount(snapshotOwner.getId(), ResourceType.secondary_storage, new Long(volume.getSize()));
|
_resourceLimitMgr.decrementResourceCount(snapshotOwner.getId(), ResourceType.secondary_storage, new Long(volume.getSize()));
|
||||||
throw new CloudRuntimeException("Failed to create snapshot", e);
|
throw new CloudRuntimeException("Failed to create snapshot", e);
|
||||||
}
|
}
|
||||||
@ -1102,6 +1104,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
|
|||||||
if (snapshot == null) {
|
if (snapshot == null) {
|
||||||
throw new CloudRuntimeException("Failed to create snapshot for volume: " + volume.getId());
|
throw new CloudRuntimeException("Failed to create snapshot for volume: " + volume.getId());
|
||||||
}
|
}
|
||||||
|
_resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.snapshot);
|
||||||
_resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.secondary_storage, new Long(volume.getSize()));
|
_resourceLimitMgr.incrementResourceCount(volume.getAccountId(), ResourceType.secondary_storage, new Long(volume.getSize()));
|
||||||
return snapshot;
|
return snapshot;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user