From 7b51040ed336a3cb9f107fdf2d71fbc14e1dcf04 Mon Sep 17 00:00:00 2001 From: sp16743 Date: Mon, 28 Sep 2026 15:03:29 +0530 Subject: [PATCH 1/2] CSTACKEX-325: Validate storage capacity before creating volume --- .../main/java/com/cloud/storage/VolumeApiServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 8674014addd7..bc4a556f6595 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -1127,6 +1127,11 @@ private VolumeVO createVolumeOnStoragePool(Long volumeId, Long storageId) throws throw new InvalidParameterValueException(String.format("Disk offering: %s is not compatible with the storage pool", diskOffering.getUuid())); } + if (!storageMgr.storagePoolHasEnoughSpace(volume.getSize(), storagePool)) { + throw new InvalidParameterValueException(String.format("Storage pool %s does not have enough space to create volume %s.", + storagePool.getName(), volume.getUuid())); + } + DataStore dataStore = dataStoreMgr.getDataStore(storageId, DataStoreRole.Primary); VolumeInfo volumeInfo = volFactory.getVolume(volumeId, dataStore); AsyncCallFuture createVolumeFuture = volService.createVolumeAsync(volumeInfo, dataStore); From 9cdcc8b8588da2525afd9556d43632cb96ea13f7 Mon Sep 17 00:00:00 2001 From: sugapriyap Date: Thu, 29 Oct 2026 19:03:34 +0530 Subject: [PATCH 2/2] Merge pull request #123 CSTACKEX-345: validate storage pool capacity for volume creation --- .../main/java/com/cloud/storage/VolumeApiServiceImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index bc4a556f6595..efbfdeb59ac9 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -1127,7 +1127,9 @@ private VolumeVO createVolumeOnStoragePool(Long volumeId, Long storageId) throws throw new InvalidParameterValueException(String.format("Disk offering: %s is not compatible with the storage pool", diskOffering.getUuid())); } - if (!storageMgr.storagePoolHasEnoughSpace(volume.getSize(), storagePool)) { + HypervisorType hypervisorType = _volsDao.getHypervisorType(volume.getId()); + DiskProfile diskProfile = new DiskProfile(volume, diskOffering, hypervisorType); + if (!storageMgr.storagePoolHasEnoughSpace(Collections.singletonList(new Pair<>(volume, diskProfile)), storagePool, storagePool.getClusterId())) { throw new InvalidParameterValueException(String.format("Storage pool %s does not have enough space to create volume %s.", storagePool.getName(), volume.getUuid())); } @@ -1189,6 +1191,9 @@ public VolumeVO createVolume(long volumeId, Long vmId, Long snapshotId, Long sto created = false; VolumeInfo vol = volFactory.getVolume(volumeId); vol.stateTransit(Volume.Event.DestroyRequested); + if (e instanceof InvalidParameterValueException) { + throw (InvalidParameterValueException) e; + } throw new CloudRuntimeException(String.format("Failed to create volume: %s", volume), e); } finally { if (!created) {