From 7114e8832a9b7c327bb06a9fba939856d2862b73 Mon Sep 17 00:00:00 2001 From: Ramgopal Nagaboina Date: Thu, 3 Sep 2026 20:05:25 -0400 Subject: [PATCH] server: treat a zero-capacity storage pool as full checkUsagedSpace divided used by total capacity without guarding a zero total. A pool reporting capacityBytes == 0 (freshly added, stats not yet populated) with zero used produced NaN, and NaN >= threshold is false, so the method returned true and reported that a pool with no capacity had space, letting allocation or resize proceed onto it. Return false when the pool reports no capacity. --- .../java/com/cloud/storage/StorageManagerImpl.java | 3 +++ .../com/cloud/storage/StorageManagerImplTest.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index 4d2bfb47de1b..69f04393174c 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -3444,6 +3444,9 @@ private boolean checkUsagedSpace(StoragePool pool) { } long totalSize = pool.getCapacityBytes(); + if (totalSize <= 0) { + return false; + } long usedSize = getUsedSize(pool); double usedPercentage = ((double)usedSize / (double)totalSize); double storageUsedThreshold = CapacityManager.StorageCapacityDisableThreshold.valueIn(pool.getId()); diff --git a/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java b/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java index 8f88800d549f..f46699f88cfb 100644 --- a/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java +++ b/server/src/test/java/com/cloud/storage/StorageManagerImplTest.java @@ -1716,4 +1716,15 @@ public void testDiscoverObjectStoreInitializationFailure() { storageManagerImpl.discoverObjectStore(name, url, size, providerName, details); } + + @Test + public void checkUsagedSpaceReturnsFalseForZeroCapacityPool() { + StoragePool pool = Mockito.mock(StoragePool.class); + Mockito.when(pool.isManaged()).thenReturn(false); + Mockito.when(pool.getCapacityBytes()).thenReturn(0L); + + Boolean result = ReflectionTestUtils.invokeMethod(storageManagerImpl, "checkUsagedSpace", pool); + + Assert.assertFalse(result); + } }