From c57e35818bd9b5fd236c84b14de3c6e4d4f59788 Mon Sep 17 00:00:00 2001 From: sandeeplocharla Date: Tue, 30 Jun 2026 15:51:13 +0530 Subject: [PATCH 1/3] Fix for NFS3 primary storage pool is failing to come out of maintenance mode --- .../cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java | 2 +- .../cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java index 35cc864268c3..d1f6d11fcffd 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java @@ -426,10 +426,10 @@ public boolean deleteStoragePool(StoragePoolType type, String uuid) { public boolean deleteStoragePool(StoragePoolType type, String uuid, Map details) { StorageAdaptor adaptor = getStorageAdaptor(type); + boolean deleteStatus = adaptor.deleteStoragePool(uuid, details); if (type == StoragePoolType.NetworkFilesystem) { _haMonitor.removeStoragePool(uuid); } - boolean deleteStatus = adaptor.deleteStoragePool(uuid, details); synchronized (_storagePools) { _storagePools.remove(uuid); } diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index a03daeb197bf..b8be637309be 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -905,6 +905,11 @@ private boolean destroyStoragePoolHandleException(Connect conn, String uuid) return false; } + @Override + public boolean deleteStoragePool(String uuid, Map details) { + return deleteStoragePool(uuid); + } + @Override public boolean deleteStoragePool(String uuid) { logger.info("Attempting to remove storage pool " + uuid + " from libvirt"); From 5aba1d626de9f669ffd49defd5bdea74653a9a6d Mon Sep 17 00:00:00 2001 From: sandeeplocharla Date: Wed, 8 Jul 2026 08:45:36 +0530 Subject: [PATCH 2/3] Addressed review comments --- .../com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java index d1f6d11fcffd..bd4438bc131a 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java @@ -426,6 +426,8 @@ public boolean deleteStoragePool(StoragePoolType type, String uuid) { public boolean deleteStoragePool(StoragePoolType type, String uuid, Map details) { StorageAdaptor adaptor = getStorageAdaptor(type); + // For NetworkFilesystem, libvirt will take care of unmounting the nfs mount. If nfs mount has been removed before libvirt's pool + // delete, libvirt will throw an error. So, we need to remove the pool from HA monitor before deleting the pool. boolean deleteStatus = adaptor.deleteStoragePool(uuid, details); if (type == StoragePoolType.NetworkFilesystem) { _haMonitor.removeStoragePool(uuid); From 705151dbea756c49711884f9338745739f930590 Mon Sep 17 00:00:00 2001 From: sandeeplocharla Date: Fri, 31 Jul 2026 08:17:03 +0530 Subject: [PATCH 3/3] Corrected a comment --- .../cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java index bd4438bc131a..9d8ec8fc4637 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java @@ -417,7 +417,7 @@ public boolean deleteStoragePool(StoragePoolType type, String uuid) { if (type == StoragePoolType.NetworkFilesystem) { _haMonitor.removeStoragePool(uuid); } - boolean deleteStatus = adaptor.deleteStoragePool(uuid);; + boolean deleteStatus = adaptor.deleteStoragePool(uuid); synchronized (_storagePools) { _storagePools.remove(uuid); } @@ -427,7 +427,7 @@ public boolean deleteStoragePool(StoragePoolType type, String uuid) { public boolean deleteStoragePool(StoragePoolType type, String uuid, Map details) { StorageAdaptor adaptor = getStorageAdaptor(type); // For NetworkFilesystem, libvirt will take care of unmounting the nfs mount. If nfs mount has been removed before libvirt's pool - // delete, libvirt will throw an error. So, we need to remove the pool from HA monitor before deleting the pool. + // delete, libvirt will throw an error. boolean deleteStatus = adaptor.deleteStoragePool(uuid, details); if (type == StoragePoolType.NetworkFilesystem) { _haMonitor.removeStoragePool(uuid);