From f983e6ed82a8ba3c838a09789c9fc4ff01173bc5 Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Thu, 22 Jan 2015 12:43:54 -0700 Subject: [PATCH] Un-plug any remaining VBDs and PBDs --- .../resource/CitrixResourceBase.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java index 07318b88da4..a3c894de4d6 100644 --- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java @@ -2868,6 +2868,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (sr == null) { return; } + if (s_logger.isDebugEnabled()) { s_logger.debug(logX(sr, "Removing SR")); } @@ -2875,34 +2876,49 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe for (int i = 0; i < 2; i++) { try { Set vdis = sr.getVDIs(conn); + for (VDI vdi : vdis) { + Set vbds = vdi.getVBDs(conn); + + for (VBD vbd : vbds) { + vbd.unplug(conn); + } + vdi.forget(conn); } + Set pbds = sr.getPBDs(conn); + for (PBD pbd : pbds) { if (s_logger.isDebugEnabled()) { s_logger.debug(logX(pbd, "Unplugging pbd")); } - if (pbd.getCurrentlyAttached(conn)) { - pbd.unplug(conn); - } + +// if (pbd.getCurrentlyAttached(conn)) { + pbd.unplug(conn); +// } + pbd.destroy(conn); } pbds = sr.getPBDs(conn); + if (pbds.size() == 0) { if (s_logger.isDebugEnabled()) { s_logger.debug(logX(sr, "Forgetting")); } + sr.forget(conn); + return; } if (s_logger.isDebugEnabled()) { - s_logger.debug(logX(sr, "There are still pbd attached")); + s_logger.debug(logX(sr, "There is still one or more PBDs attached.")); + if (s_logger.isTraceEnabled()) { for (PBD pbd : pbds) { - s_logger.trace(logX(pbd, " Still attached")); + s_logger.trace(logX(pbd, "Still attached")); } } } @@ -2912,6 +2928,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.debug(logX(sr, "Catch Exception: " + e.getMessage())); } } + s_logger.warn(logX(sr, "Unable to remove SR")); }