CLOUDSTACK-4315: add code to clean up libvirt data structure after plug/unplug, that's the only thing I can do to fix this kind of libvirt issue

This commit is contained in:
Edison Su 2013-08-14 16:56:58 -07:00
parent 37d58313c9
commit 90388ce77e
1 changed files with 20 additions and 2 deletions

View File

@ -1738,9 +1738,10 @@ ServerResource {
private PlugNicAnswer execute(PlugNicCommand cmd) {
NicTO nic = cmd.getNic();
String vmName = cmd.getVmName();
Domain vm = null;
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
Domain vm = getDomain(conn, vmName);
vm = getDomain(conn, vmName);
List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName);
Integer nicnum = 0;
for (InterfaceDef pluggedNic : pluggedNics) {
@ -1760,6 +1761,14 @@ ServerResource {
String msg = " Plug Nic failed due to " + e.toString();
s_logger.warn(msg, e);
return new PlugNicAnswer(cmd, false, msg);
} finally {
if (vm != null) {
try {
vm.free();
} catch (LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
}
}
}
}
@ -1767,9 +1776,10 @@ ServerResource {
Connect conn;
NicTO nic = cmd.getNic();
String vmName = cmd.getVmName();
Domain vm = null;
try {
conn = LibvirtConnection.getConnectionByVmName(vmName);
Domain vm = getDomain(conn, vmName);
vm = getDomain(conn, vmName);
List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName);
for (InterfaceDef pluggedNic : pluggedNics) {
if (pluggedNic.getMacAddress().equalsIgnoreCase(nic.getMac())) {
@ -1787,6 +1797,14 @@ ServerResource {
String msg = " Unplug Nic failed due to " + e.toString();
s_logger.warn(msg, e);
return new UnPlugNicAnswer(cmd, false, msg);
} finally {
if (vm != null) {
try {
vm.free();
} catch (LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
}
}
}
}