Skip to content

Commit

Permalink
libvirtstorageadaptor: better handle failed destroy
Browse files Browse the repository at this point in the history
  • Loading branch information
rp- committed Jul 13, 2024
1 parent 42e4da2 commit 0cbafde
Showing 1 changed file with 41 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,44 @@ public KVMStoragePool createStoragePool(String name, String host, int port, Stri
}
}

private boolean destroyPool(Connect conn, String uuid) throws LibvirtException
{
StoragePool sp;
try {
sp = conn.storagePoolLookupByUUIDString(uuid);
} catch (LibvirtException exc) {
s_logger.warn("Storage pool " + uuid + " doesn't exist in libvirt. Assuming it is already removed");
return true;
}

if (sp != null) {
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();

return true;
} else {
s_logger.warn("Storage pool " + uuid + " doesn't exist in libvirt. Assuming it is already removed");
return false;
}
}

private boolean destroyPoolHandleException(Connect conn, String uuid)
{
try {
return destroyPool(conn, uuid);
}
catch (LibvirtException e)
{
s_logger.error(String.format("Failed to destroy libvirt pool %s: %s", uuid, e));
}
return false;
}

@Override
public boolean deleteStoragePool(String uuid) {
s_logger.info("Attempting to remove storage pool " + uuid + " from libvirt");
Expand All @@ -750,23 +788,14 @@ public boolean deleteStoragePool(String uuid) {
return true;
}

Connect conn = null;
Connect conn;
try {
conn = LibvirtConnection.getConnection();
} catch (LibvirtException e) {
throw new CloudRuntimeException(e.toString());
}

StoragePool sp = null;
Secret s = null;

try {
sp = conn.storagePoolLookupByUUIDString(uuid);
} catch (LibvirtException e) {
s_logger.warn("Storage pool " + uuid + " doesn't exist in libvirt. Assuming it is already removed");
return true;
}

/*
* Some storage pools, like RBD also have 'secret' information stored in libvirt
* Destroy them if they exist
Expand All @@ -778,13 +807,7 @@ public boolean deleteStoragePool(String uuid) {
}

try {
if (sp.isPersistent() == 1) {
sp.destroy();
sp.undefine();
} else {
sp.destroy();
}
sp.free();
destroyPool(conn, uuid);
if (s != null) {
s.undefine();
s.free();
Expand All @@ -802,6 +825,7 @@ public boolean deleteStoragePool(String uuid) {
String result = Script.runSimpleBashScript("sleep 5 && umount " + targetPath);
if (result == null) {
s_logger.info("Succeeded in unmounting " + targetPath);
destroyPoolHandleException(conn, uuid);
return true;
}
s_logger.error("Failed to unmount " + targetPath);
Expand Down

0 comments on commit 0cbafde

Please sign in to comment.