Skip to content

Commit afcbf2f

Browse files
committed
Fix storage resource allocation during VM creation
1 parent be89e6f commit afcbf2f

2 files changed

Lines changed: 11 additions & 8 deletions

File tree

engine/schema/src/main/resources/META-INF/db/schema-42200to42210-cleanup.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@
1818
--;
1919
-- Schema upgrade cleanup from 4.22.0.0 to 4.22.1.0
2020
--;
21+
22+
-- Entries remaining on `cloud`.`resource_reservation` during the upgrade process are stale, so delete them.
23+
-- This script was added to normalize volume/primary storage reservations that got stuck due to a bug on VM deployment,
24+
-- but it is more interesting to introduce a smarter logic to clean these stale reservations in the future without the need
25+
-- for upgrades (for instance, by having a heartbeat_time column for the reservations and automatically cleaning old entries).
26+
DELETE FROM `cloud`.`resource_reservation`;

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4301,22 +4301,20 @@ protected List<String> getResourceLimitStorageTags(long diskOfferingId) {
43014301
return resourceLimitService.getResourceLimitStorageTags(diskOfferingVO);
43024302
}
43034303

4304-
private List<CheckedReservation> reserveStorageResourcesForVm(Account owner, Long diskOfferingId, Long diskSize, List<VmDiskInfo> dataDiskInfoList, Long rootDiskOfferingId, ServiceOfferingVO offering, Long rootDiskSize) throws ResourceAllocationException {
4305-
List <CheckedReservation> checkedReservations = new ArrayList<>();
4306-
4304+
private void reserveStorageResourcesForVm(List<CheckedReservation> checkedReservations, Account owner, Long diskOfferingId, Long diskSize, List<VmDiskInfo> dataDiskInfoList, Long rootDiskOfferingId, ServiceOfferingVO offering, Long rootDiskSize) throws ResourceAllocationException {
43074305
List<String> rootResourceLimitStorageTags = getResourceLimitStorageTags(rootDiskOfferingId != null ? rootDiskOfferingId : offering.getDiskOfferingId());
43084306
CheckedReservation rootVolumeReservation = new CheckedReservation(owner, ResourceType.volume, rootResourceLimitStorageTags, 1L, reservationDao, resourceLimitService);
43094307
checkedReservations.add(rootVolumeReservation);
43104308
CheckedReservation rootPrimaryStorageReservation = new CheckedReservation(owner, ResourceType.primary_storage, rootResourceLimitStorageTags, rootDiskSize, reservationDao, resourceLimitService);
43114309
checkedReservations.add(rootPrimaryStorageReservation);
43124310

43134311
if (diskOfferingId != null) {
4314-
List<String> additionalResourceLimitStorageTags = diskOfferingId != null ? getResourceLimitStorageTags(diskOfferingId) : null;
4312+
List<String> additionalResourceLimitStorageTags = getResourceLimitStorageTags(diskOfferingId);
43154313
DiskOfferingVO diskOffering = _diskOfferingDao.findById(diskOfferingId);
43164314
Long size = verifyAndGetDiskSize(diskOffering, diskSize);
4317-
CheckedReservation additionalVolumeReservation = diskOfferingId != null ? new CheckedReservation(owner, ResourceType.volume, additionalResourceLimitStorageTags, 1L, reservationDao, resourceLimitService) : null;
4315+
CheckedReservation additionalVolumeReservation = new CheckedReservation(owner, ResourceType.volume, additionalResourceLimitStorageTags, 1L, reservationDao, resourceLimitService);
43184316
checkedReservations.add(additionalVolumeReservation);
4319-
CheckedReservation additionalPrimaryStorageReservation = diskOfferingId != null ? new CheckedReservation(owner, ResourceType.primary_storage, additionalResourceLimitStorageTags, size, reservationDao, resourceLimitService) : null;
4317+
CheckedReservation additionalPrimaryStorageReservation = new CheckedReservation(owner, ResourceType.primary_storage, additionalResourceLimitStorageTags, size, reservationDao, resourceLimitService);
43204318
checkedReservations.add(additionalPrimaryStorageReservation);
43214319

43224320
}
@@ -4332,7 +4330,6 @@ private List<CheckedReservation> reserveStorageResourcesForVm(Account owner, Lon
43324330
checkedReservations.add(additionalPrimaryStorageReservation);
43334331
}
43344332
}
4335-
return checkedReservations;
43364333
}
43374334

43384335
private UserVm getUncheckedUserVmResource(DataCenter zone, String hostName, String displayName, Account owner,
@@ -4347,7 +4344,7 @@ private UserVm getUncheckedUserVmResource(DataCenter zone, String hostName, Stri
43474344
List<CheckedReservation> checkedReservations = new ArrayList<>();
43484345

43494346
try {
4350-
checkedReservations = reserveStorageResourcesForVm(owner, diskOfferingId, diskSize, dataDiskInfoList, rootDiskOfferingId, offering, volumesSize);
4347+
reserveStorageResourcesForVm(checkedReservations, owner, diskOfferingId, diskSize, dataDiskInfoList, rootDiskOfferingId, offering, volumesSize);
43514348

43524349
// verify security group ids
43534350
if (securityGroupIdList != null) {

0 commit comments

Comments
 (0)