bug 12849: applying vm sync fence fix/cleanup to master

This commit is contained in:
abhi 2012-02-02 11:15:14 +05:30
parent 7cdb83abfc
commit 1beab0be32
3 changed files with 27 additions and 15 deletions

View File

@ -253,7 +253,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
protected long _dcId;
protected String _pod;
protected String _cluster;
private static final XenServerPoolVms s_vms = new XenServerPoolVms();
protected static final XenServerPoolVms s_vms = new XenServerPoolVms();
protected String _privateNetworkName;
protected String _linkLocalPrivateNetworkName;
protected String _publicNetworkName;
@ -1090,9 +1090,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
synchronized (_cluster.intern()) {
s_logger.debug("1. The VM " + vmName + " is in Starting state.");
s_vms.put(_cluster, _name, vmName, State.Starting);
}
s_logger.debug("1. The VM " + vmName + " is in Starting state.");
Host host = Host.getByUuid(conn, _host.uuid);
vm = createVmFromTemplate(conn, vmSpec, host);
@ -1174,11 +1174,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} finally {
synchronized (_cluster.intern()) {
if (state != State.Stopped) {
s_logger.debug("2. The VM " + vmName + " is in " + state + " state.");
s_vms.put(_cluster, _name, vmName, state);
s_logger.debug("2. The VM " + vmName + " is in " + state + " state.");
} else {
s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName);
s_vms.remove(_cluster, _name, vmName);
s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName);
}
}
}
@ -2182,9 +2182,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
Integer vncPort = null;
if (state == State.Running) {
synchronized (_cluster.intern()) {
s_logger.debug("3. The VM " + vmName + " is in " + State.Running + " state");
s_vms.put(_cluster, _name, vmName, State.Running);
}
s_logger.debug("3. The VM " + vmName + " is in Running state");
}
return new CheckVirtualMachineAnswer(cmd, state, vncPort);
@ -2206,9 +2206,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
getNetwork(conn, nic);
}
synchronized (_cluster.intern()) {
s_logger.debug("4. The VM " + vm.getName() + " is in " + State.Migrating + " state");
s_vms.put(_cluster, _name, vm.getName(), State.Migrating);
}
s_logger.debug("4. The VM " + vm.getName() + " is in Migrating state");
return new PrepareForMigrationAnswer(cmd);
} catch (Exception e) {
@ -2473,9 +2473,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
state = s_vms.getState(_cluster, vmName);
synchronized (_cluster.intern()) {
s_logger.debug("5. The VM " + vmName + " is in " + State.Stopping + " state");
s_vms.put(_cluster, _name, vmName, State.Stopping);
}
s_logger.debug("5. The VM " + vmName + " is in Stopping state");
try {
Set<VM> vms = VM.getByNameLabel(conn, vmName);
@ -2514,9 +2514,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return new MigrateAnswer(cmd, false, msg, null);
} finally {
synchronized (_cluster.intern()) {
s_logger.debug("6. The VM " + vmName + " is in " + state + " state");
s_vms.put(_cluster, _name, vmName, state);
}
s_logger.debug("6. The VM " + vmName + " is in " + state + " state");
}
}
@ -2639,9 +2639,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
public RebootAnswer execute(RebootCommand cmd) {
Connection conn = getConnection();
synchronized (_cluster.intern()) {
s_logger.debug("7. The VM " + cmd.getVmName() + " is in " + State.Starting + " state");
s_vms.put(_cluster, _name, cmd.getVmName(), State.Starting);
}
s_logger.debug("7. The VM " + cmd.getVmName() + " is in Starting state");
try {
Set<VM> vms = null;
try {
@ -2665,9 +2665,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return new RebootAnswer(cmd, "reboot succeeded", null, null);
} finally {
synchronized (_cluster.intern()) {
s_logger.debug("8. The VM " + cmd.getVmName() + " is in " + State.Running + " state");
s_vms.put(_cluster, _name, cmd.getVmName(), State.Running);
}
s_logger.debug("8. The VM " + cmd.getVmName() + " is in Running state");
}
}
@ -3167,9 +3167,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
State state = s_vms.getState(_cluster, vmName);
synchronized (_cluster.intern()) {
s_logger.debug("9. The VM " + vmName + " is in " + State.Stopping + " state");
s_vms.put(_cluster, _name, vmName, State.Stopping);
}
s_logger.debug("9. The VM " + vmName + " is in Stopping state");
try {
if (vmr.powerState == VmPowerState.RUNNING) {
@ -3231,9 +3231,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
s_logger.warn(msg, e);
} finally {
synchronized (_cluster.intern()) {
s_logger.debug("10. The VM " + vmName + " is in " + state + " state");
s_vms.put(_cluster, _name, vmName, state);
}
s_logger.debug("10. The VM " + vmName + " is in " + state + " state");
}
}
}
@ -6640,7 +6640,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
protected HashMap<String, Pair<String, State>> fullClusterSync(Connection conn) {
XenServerPoolVms vms = new XenServerPoolVms();
synchronized (_cluster.intern()) {
s_vms.clear(_cluster);
}
try {
Map<VM, VM.Record> vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER
for (VM.Record record: vm_map.values()) {
@ -6654,7 +6656,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
String host_uuid = null;
if( ! isRefNull(host) ) {
host_uuid = host.getUuid(conn);
vms.put(_cluster, host_uuid, vm_name, state);
synchronized (_cluster.intern()) {
s_vms.put(_cluster, host_uuid, vm_name, state);
}
}
if (s_logger.isTraceEnabled()) {
s_logger.trace("VM " + vm_name + ": powerstate = " + ps + "; vm state=" + state.toString());
@ -6665,7 +6669,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
s_logger.warn(msg, e);
throw new CloudRuntimeException(msg);
}
return vms.getClusterVmState(_cluster);
return s_vms.getClusterVmState(_cluster);
}

View File

@ -95,6 +95,10 @@ public class XenServer56FP1Resource extends XenServer56Resource {
vdis.add(vdi);
}
}
synchronized (_cluster.intern()) {
s_vms.remove(_cluster, _name, vm.getNameLabel(conn));
}
s_logger.info("Fence command for VM " + cmd.getVmName());
vm.powerStateReset(conn);
vm.destroy(conn);
for (VDI vdi : vdis) {

View File

@ -222,6 +222,10 @@ public class XenServer56Resource extends CitrixResourceBase {
Set<VM> vms = VM.getByNameLabel(conn, cmd.getVmName());
for (VM vm : vms) {
synchronized (_cluster.intern()) {
s_vms.remove(_cluster, _name, vm.getNameLabel(conn));
}
s_logger.info("Fence command for VM " + cmd.getVmName());
vm.powerStateReset(conn);
vm.destroy(conn);
}