mirror of https://github.com/apache/cloudstack.git
bug 12849: applying vm sync fence fix/cleanup to master
This commit is contained in:
parent
7cdb83abfc
commit
1beab0be32
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue