From 63e7938aba871bf36ff9c6d7879a982f8d4c03c7 Mon Sep 17 00:00:00 2001 From: sandeeplocharla Date: Tue, 30 Jun 2026 15:51:13 +0530 Subject: [PATCH 1/2] 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 be2f24e0f0fe68d1b99b0480d2dab6b1046c9e2e Mon Sep 17 00:00:00 2001 From: sandeeplocharla Date: Wed, 8 Jul 2026 08:45:36 +0530 Subject: [PATCH 2/2] 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);