You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2014/07/28 21:52:42 UTC
[1/3] completed the new vmsync TODOs in the code. removed old vmsync
logic
Repository: cloudstack
Updated Branches:
refs/heads/master acc9c7937 -> 330c4ba57
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
----------------------------------------------------------------------
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 4fa0456..775f5455 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
@@ -244,7 +244,6 @@ import com.cloud.utils.ssh.SshHelper;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.snapshot.VMSnapshot;
/**
@@ -271,7 +270,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
protected long _dcId;
protected String _pod;
protected String _cluster;
- protected static final XenServerPoolVms s_vms = new XenServerPoolVms();
protected String _privateNetworkName;
protected String _linkLocalPrivateNetworkName;
protected String _publicNetworkName;
@@ -328,29 +326,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
- protected static final HashMap<Types.VmPowerState, PowerState> s_powerStatesTable;
+ protected static final HashMap<VmPowerState, PowerState> s_powerStatesTable;
static {
- s_powerStatesTable = new HashMap<Types.VmPowerState, PowerState>();
- s_powerStatesTable.put(Types.VmPowerState.HALTED, PowerState.PowerOff);
- s_powerStatesTable.put(Types.VmPowerState.PAUSED, PowerState.PowerOff);
- s_powerStatesTable.put(Types.VmPowerState.RUNNING, PowerState.PowerOn);
- s_powerStatesTable.put(Types.VmPowerState.SUSPENDED, PowerState.PowerOff);
- s_powerStatesTable.put(Types.VmPowerState.UNRECOGNIZED, PowerState.PowerUnknown);
+ s_powerStatesTable = new HashMap<VmPowerState, PowerState>();
+ s_powerStatesTable.put(VmPowerState.HALTED, PowerState.PowerOff);
+ s_powerStatesTable.put(VmPowerState.PAUSED, PowerState.PowerOff);
+ s_powerStatesTable.put(VmPowerState.RUNNING, PowerState.PowerOn);
+ s_powerStatesTable.put(VmPowerState.SUSPENDED, PowerState.PowerOff);
+ s_powerStatesTable.put(VmPowerState.UNRECOGNIZED, PowerState.PowerUnknown);
}
- // TODO vmsync {
- protected static final HashMap<Types.VmPowerState, State> s_statesTable;
- static {
- s_statesTable = new HashMap<Types.VmPowerState, State>();
- s_statesTable.put(Types.VmPowerState.HALTED, State.Stopped);
- s_statesTable.put(Types.VmPowerState.PAUSED, State.Running);
- s_statesTable.put(Types.VmPowerState.RUNNING, State.Running);
- s_statesTable.put(Types.VmPowerState.SUSPENDED, State.Running);
- s_statesTable.put(Types.VmPowerState.UNRECOGNIZED, State.Unknown);
- }
-
- // TODO vmsync }
-
public XsHost getHost() {
return _host;
}
@@ -790,13 +775,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
VMSnapshot.Type vmSnapshotType = cmd.getTarget().getType();
Boolean snapshotMemory = vmSnapshotType == VMSnapshot.Type.DiskAndMemory;
Connection conn = getConnection();
- VirtualMachine.State vmState = null;
+ PowerState vmState = null;
VM vm = null;
try {
- // remove vm from s_vms, for delta sync
- s_vms.remove(_cluster, _name, vmName);
-
Set<VM> vmSnapshots = VM.getByNameLabel(conn, cmd.getTarget().getSnapshotName());
if (vmSnapshots.size() == 0)
return new RevertToVMSnapshotAnswer(cmd, false, "Cannot find vmSnapshot with name: " + cmd.getTarget().getSnapshotName());
@@ -830,10 +812,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
if (!snapshotMemory) {
vm.destroy(conn);
- vmState = VirtualMachine.State.Stopped;
+ vmState = PowerState.PowerOff;
} else {
- s_vms.put(_cluster, _name, vmName, State.Running);
- vmState = VirtualMachine.State.Running;
+ vmState = PowerState.PowerOn;
}
// after revert, VM's volumes path have been changed, need to report to manager
@@ -1710,7 +1691,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
Connection conn = getConnection();
VirtualMachineTO vmSpec = cmd.getVirtualMachine();
String vmName = vmSpec.getName();
- State state = State.Stopped;
+ VmPowerState state = VmPowerState.HALTED;
VM vm = null;
// if a VDI is created, record its UUID to send back to the CS MS
Map<String, String> iqnToPath = new HashMap<String, String>();
@@ -1733,9 +1714,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
}
- synchronized (_cluster.intern()) {
- 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);
@@ -1839,7 +1817,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
- state = State.Running;
+ state = VmPowerState.RUNNING;
StartAnswer startAnswer = new StartAnswer(cmd);
@@ -1856,14 +1834,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return startAnswer;
} finally {
- synchronized (_cluster.intern()) {
- if (state != State.Stopped) {
- s_vms.put(_cluster, _name, vmName, state);
- s_logger.debug("2. The VM " + vmName + " is in " + state + " state.");
- } else {
- s_vms.remove(_cluster, _name, vmName);
- s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName);
- }
+ if (state != VmPowerState.HALTED) {
+ 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);
}
}
}
@@ -2575,13 +2549,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
- protected State convertToState(Types.VmPowerState ps) {
- final State state = s_statesTable.get(ps);
- return state == null ? State.Unknown : state;
- }
-
- private static PowerState convertPowerState(Types.VmPowerState powerState) {
- return s_powerStatesTable.get(powerState);
+ private static PowerState convertToPowerState(VmPowerState ps) {
+ final PowerState powerState = s_powerStatesTable.get(ps);
+ return powerState == null ? PowerState.PowerUnknown : powerState;
}
protected HashMap<String, HostVmStateReportEntry> getHostVmStateReport(Connection conn) {
@@ -2629,7 +2599,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
if (host_uuid.equalsIgnoreCase(_host.uuid)) {
vmStates.put(
record.nameLabel,
- new HostVmStateReportEntry(convertPowerState(ps), host_uuid)
+ new HostVmStateReportEntry(convertToPowerState(ps), host_uuid)
);
}
}
@@ -2638,65 +2608,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return vmStates;
}
- // TODO vmsync {
- protected HashMap<String, Pair<String, State>> getAllVms(Connection conn) {
- final HashMap<String, Pair<String, State>> vmStates = new HashMap<String, Pair<String, State>>();
- Map<VM, VM.Record> vm_map = null;
- for (int i = 0; i < 2; i++) {
- try {
- vm_map = VM.getAllRecords(conn); //USE THIS TO GET ALL VMS FROM A CLUSTER
- break;
- } catch (final Throwable e) {
- s_logger.warn("Unable to get vms", e);
- }
- try {
- Thread.sleep(1000);
- } catch (final InterruptedException ex) {
-
- }
- }
-
- if (vm_map == null) {
- return null;
- }
- for (VM.Record record : vm_map.values()) {
- if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
- continue; // Skip DOM0
- }
-
- VmPowerState ps = record.powerState;
- final State state = convertToState(ps);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + record.nameLabel + ": powerstate = " + ps + "; vm state=" + state.toString());
- }
- Host host = record.residentOn;
- String host_uuid = null;
- if (!isRefNull(host)) {
- try {
- host_uuid = host.getUuid(conn);
- } catch (BadServerResponse e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- } catch (XenAPIException e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- } catch (XmlRpcException e) {
- s_logger.error("Failed to get host uuid for host " + host.toWireString(), e);
- }
- vmStates.put(record.nameLabel, new Pair<String, State>(host_uuid, state));
- }
- }
-
- return vmStates;
- }
-
- // TODO vmsync }
-
- protected State getVmState(Connection conn, final String vmName) {
+ protected PowerState getVmState(Connection conn, final String vmName) {
int retry = 3;
while (retry-- > 0) {
try {
Set<VM> vms = VM.getByNameLabel(conn, vmName);
for (final VM vm : vms) {
- return convertToState(vm.getPowerState(conn));
+ return convertToPowerState(vm.getPowerState(conn));
}
} catch (final BadServerResponse e) {
// There is a race condition within xenserver such that if a vm is
@@ -2727,22 +2645,19 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
- return State.Stopped;
+ return PowerState.PowerOff;
}
protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) {
Connection conn = getConnection();
final String vmName = cmd.getVmName();
- final State state = getVmState(conn, vmName);
+ final PowerState powerState = getVmState(conn, vmName);
Integer vncPort = null;
- if (state == State.Running) {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Running);
- }
+ if (powerState == PowerState.PowerOn) {
s_logger.debug("3. The VM " + vmName + " is in Running state");
}
- return new CheckVirtualMachineAnswer(cmd, state, vncPort);
+ return new CheckVirtualMachineAnswer(cmd, powerState, vncPort);
}
protected PrepareForMigrationAnswer execute(PrepareForMigrationCommand cmd) {
@@ -2760,9 +2675,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
for (NicTO nic : nics) {
getNetwork(conn, nic);
}
- synchronized (_cluster.intern()) {
- 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);
@@ -3000,14 +2912,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
protected MigrateAnswer execute(final MigrateCommand cmd) {
Connection conn = getConnection();
final String vmName = cmd.getVmName();
- State state = null;
-
- state = s_vms.getState(_cluster, vmName);
- synchronized (_cluster.intern()) {
- 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);
@@ -3037,54 +2942,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
migrateVM(conn, dsthost, vm, vmName);
vm.setAffinity(conn, dsthost);
- state = State.Stopping;
}
return new MigrateAnswer(cmd, true, "migration succeeded", null);
} catch (Exception e) {
String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString();
s_logger.warn(msg, e);
return new MigrateAnswer(cmd, false, msg, null);
- } finally {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, state);
- }
- s_logger.debug("6. The VM " + vmName + " is in " + state + " state");
}
}
- protected State getRealPowerState(Connection conn, String label) {
- int i = 0;
- s_logger.trace("Checking on the HALTED State");
- for (; i < 20; i++) {
- try {
- Set<VM> vms = VM.getByNameLabel(conn, label);
- if (vms == null || vms.size() == 0) {
- continue;
- }
-
- VM vm = vms.iterator().next();
-
- VmPowerState vps = vm.getPowerState(conn);
- if (vps != null && vps != VmPowerState.HALTED && vps != VmPowerState.UNRECOGNIZED) {
- return convertToState(vps);
- }
- } catch (XenAPIException e) {
- String msg = "Unable to get real power state due to " + e.toString();
- s_logger.warn(msg, e);
- } catch (XmlRpcException e) {
- String msg = "Unable to get real power state due to " + e.getMessage();
- s_logger.warn(msg, e);
- }
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- }
- return State.Stopped;
- }
-
protected Pair<VM, VM.Record> getControlDomain(Connection conn) throws XenAPIException, XmlRpcException {
Host host = Host.getByUuid(conn, _host.uuid);
Set<VM> vms = null;
@@ -3172,9 +3039,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
@Override
public RebootAnswer execute(RebootCommand cmd) {
Connection conn = getConnection();
- synchronized (_cluster.intern()) {
- 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;
@@ -3198,9 +3062,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
return new RebootAnswer(cmd, "reboot succeeded", true);
} finally {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, cmd.getVmName(), State.Running);
- }
s_logger.debug("8. The VM " + cmd.getVmName() + " is in Running state");
}
}
@@ -3342,7 +3203,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
waitForTask(conn, task, 1000, 10 * 60 * 1000);
checkForSuccess(conn, task);
} catch (Types.HandleInvalid e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
+ if (vm.getPowerState(conn) == VmPowerState.RUNNING) {
task = null;
return;
}
@@ -3390,7 +3251,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
waitForTask(conn, task, 1000, 10 * 60 * 1000);
checkForSuccess(conn, task);
} catch (TimeoutException e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.HALTED) {
+ if (vm.getPowerState(conn) == VmPowerState.HALTED) {
task = null;
return;
}
@@ -3399,19 +3260,19 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} catch (XenAPIException e) {
s_logger.debug("Unable to cleanShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString());
try {
- Types.VmPowerState state = vm.getPowerState(conn);
- if (state == Types.VmPowerState.RUNNING) {
+ VmPowerState state = vm.getPowerState(conn);
+ if (state == VmPowerState.RUNNING) {
try {
vm.hardShutdown(conn);
} catch (Exception e1) {
s_logger.debug("Unable to hardShutdown VM(" + vmName + ") on host(" + _host.uuid + ") due to " + e.toString());
state = vm.getPowerState(conn);
- if (state == Types.VmPowerState.RUNNING) {
+ if (state == VmPowerState.RUNNING) {
forceShutdownVM(conn, vm);
}
return;
}
- } else if (state == Types.VmPowerState.HALTED) {
+ } else if (state == VmPowerState.HALTED) {
return;
} else {
String msg = "After cleanShutdown the VM status is " + state.toString() + ", that is not expected";
@@ -3443,14 +3304,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
waitForTask(conn, task, 1000, 10 * 60 * 1000);
checkForSuccess(conn, task);
} catch (Types.HandleInvalid e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
+ if (vm.getPowerState(conn) == VmPowerState.RUNNING) {
s_logger.debug("VM " + vmName + " is in Running status");
task = null;
return;
}
throw new CloudRuntimeException("Start VM " + vmName + " catch HandleInvalid and VM is not in RUNNING state");
} catch (TimeoutException e) {
- if (vm.getPowerState(conn) == Types.VmPowerState.RUNNING) {
+ if (vm.getPowerState(conn) == VmPowerState.RUNNING) {
s_logger.debug("VM " + vmName + " is in Running status");
task = null;
return;
@@ -3593,10 +3454,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
if (vms.size() == 0) {
- synchronized (_cluster.intern()) {
- s_logger.info("VM does not exist on XenServer" + _host.uuid);
- s_vms.remove(_cluster, _name, vmName);
- }
return new StopAnswer(cmd, "VM does not exist", true);
}
for (VM vm : vms) {
@@ -3620,11 +3477,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return new StopAnswer(cmd, msg, false);
}
- State state = s_vms.getState(_cluster, vmName);
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
s_logger.debug("9. The VM " + vmName + " is in Stopping state");
try {
@@ -3668,7 +3520,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
networks.add(vif.getNetwork(conn));
}
vm.destroy(conn);
- state = State.Stopped;
SR sr = getISOSRbyVmName(conn, cmd.getVmName());
removeSR(conn, sr);
// Disable any VLAN networks that aren't used
@@ -3688,10 +3539,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
String msg = "VM destroy failed in Stop " + vmName + " Command due to " + e.getMessage();
s_logger.warn(msg, e);
} finally {
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, state);
- }
- s_logger.debug("10. The VM " + vmName + " is in " + state + " state");
+ s_logger.debug("10. The VM " + vmName + " is in Stopped state");
}
}
}
@@ -4317,13 +4165,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
Connection conn = getConnection();
if (!_canBridgeFirewall && !_isOvs) {
- return new PingRoutingCommand(getType(), id, null, getHostVmStateReport(conn));
+ return new PingRoutingCommand(getType(), id, getHostVmStateReport(conn));
} else if (_isOvs) {
List<Pair<String, Long>> ovsStates = ovsFullSyncStates();
- return new PingRoutingWithOvsCommand(getType(), id, null, getHostVmStateReport(conn), ovsStates);
+ return new PingRoutingWithOvsCommand(getType(), id, getHostVmStateReport(conn), ovsStates);
} else {
HashMap<String, Pair<Long, Long>> nwGrpStates = syncNetworkGroups(conn, id);
- return new PingRoutingWithNwGroupsCommand(getType(), id, null, getHostVmStateReport(conn), nwGrpStates);
+ return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(conn), nwGrpStates);
}
} catch (Exception e) {
s_logger.warn("Unable to get current status", e);
@@ -4581,7 +4429,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
cmd.setHypervisorType(HypervisorType.XenServer);
cmd.setCluster(_cluster);
cmd.setPoolSync(false);
- cmd.setHostVmStateReport(getHostVmStateReport(conn));
Pool pool;
try {
@@ -4589,10 +4436,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
Pool.Record poolr = pool.getRecord(conn);
Host.Record hostr = poolr.master.getRecord(conn);
- if (_host.uuid.equals(hostr.uuid)) {
- HashMap<String, Pair<String, State>> allStates = fullClusterSync(conn);
- cmd.setClusterVMStateChanges(allStates);
- }
} catch (Throwable e) {
s_logger.warn("Check for master failed, failing the FULL Cluster sync command");
}
@@ -6411,7 +6254,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
String vmName = cmd.getVmName();
String vmSnapshotName = cmd.getTarget().getSnapshotName();
List<VolumeObjectTO> listVolumeTo = cmd.getVolumeTOs();
- VirtualMachine.State vmState = cmd.getVmState();
+ VmPowerState vmState = VmPowerState.HALTED;
String guestOSType = cmd.getGuestOSType();
String platformEmulator = cmd.getPlatformEmulator();
@@ -6446,6 +6289,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
if (task == null) {
try {
vm = getVM(conn, vmName);
+ vmState = vm.getPowerState(conn);
} catch (Exception e) {
if (!snapshotMemory) {
vm = createWorkingVM(conn, vmName, guestOSType, platformEmulator, listVolumeTo);
@@ -6525,7 +6369,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vmSnapshot.destroy(conn);
}
}
- if (vmState == VirtualMachine.State.Stopped) {
+ if (vmState == VmPowerState.HALTED) {
if (vm != null) {
vm.destroy(conn);
}
@@ -7193,146 +7037,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return vmMetaDatum;
}
- protected HashMap<String, Pair<String, State>> fullClusterSync(Connection conn) {
- 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()) {
- if (record.isControlDomain || record.isASnapshot || record.isATemplate) {
- continue; // Skip DOM0
- }
- String vm_name = record.nameLabel;
- VmPowerState ps = record.powerState;
- final State state = convertToState(ps);
- Host host = record.residentOn;
- String host_uuid = null;
- if (!isRefNull(host)) {
- host_uuid = host.getUuid(conn);
- 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());
- }
- }
- } catch (final Throwable e) {
- String msg = "Unable to get vms through host " + _host.uuid + " due to to " + e.toString();
- s_logger.warn(msg, e);
- throw new CloudRuntimeException(msg);
- }
- return s_vms.getClusterVmState(_cluster);
- }
-
- protected HashMap<String, Pair<String, State>> deltaClusterSync(Connection conn) {
- final HashMap<String, Pair<String, State>> changes = new HashMap<String, Pair<String, State>>();
-
- synchronized (_cluster.intern()) {
- HashMap<String, Pair<String, State>> newStates = getAllVms(conn);
- if (newStates == null) {
- s_logger.warn("Unable to get the vm states so no state sync at this point.");
- return null;
- }
- HashMap<String, Pair<String, State>> oldStates = new HashMap<String, Pair<String, State>>(s_vms.size(_cluster));
- oldStates.putAll(s_vms.getClusterVmState(_cluster));
-
- for (final Map.Entry<String, Pair<String, State>> entry : newStates.entrySet()) {
- final String vm = entry.getKey();
- State newState = entry.getValue().second();
- String host_uuid = entry.getValue().first();
- final Pair<String, State> oldState = oldStates.remove(vm);
-
- //check if host is changed
- if (host_uuid != null && oldState != null) {
- if (!host_uuid.equals(oldState.first()) && newState != State.Stopped && newState != State.Stopping) {
- s_logger.warn("Detecting a change in host for " + vm);
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
-
- s_logger.debug("11. The VM " + vm + " is in " + newState + " state");
- s_vms.put(_cluster, host_uuid, vm, newState);
- continue;
- }
- }
-
- if (newState == State.Stopped && oldState != null && oldState.second() != State.Stopping && oldState.second() != State.Stopped) {
- newState = getRealPowerState(conn, vm);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": xenserver has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null"));
- }
-
- if (vm.startsWith("migrating")) {
- s_logger.warn("Migrating from xenserver detected. Skipping");
- continue;
- }
- if (oldState == null) {
- s_vms.put(_cluster, host_uuid, vm, newState);
- s_logger.warn("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm);
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
- } else if (oldState.second() == State.Starting) {
- if (newState == State.Running) {
- s_logger.debug("12. The VM " + vm + " is in " + State.Running + " state");
- s_vms.put(_cluster, host_uuid, vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.warn("Ignoring vm " + vm + " because of a lag in starting the vm.");
- }
- } else if (oldState.second() == State.Migrating) {
- if (newState == State.Running) {
- s_logger.debug("Detected that an migrating VM is now running: " + vm);
- s_vms.put(_cluster, host_uuid, vm, newState);
- }
- } else if (oldState.second() == State.Stopping) {
- if (newState == State.Stopped) {
- s_logger.debug("13. The VM " + vm + " is in " + State.Stopped + " state");
- s_vms.put(_cluster, host_uuid, vm, newState);
- } else if (newState == State.Running) {
- s_logger.warn("Ignoring vm " + vm + " because of a lag in stopping the vm. ");
- }
- } else if (oldState.second() != newState) {
- s_logger.debug("14. The VM " + vm + " is in " + newState + " state was " + oldState.second());
- s_vms.put(_cluster, host_uuid, vm, newState);
- if (newState == State.Stopped) {
- /*
- * if (s_vmsKilled.remove(vm)) { s_logger.debug("VM " + vm + " has been killed for storage. ");
- * newState = State.Error; }
- */
- }
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
- }
- }
-
- for (final Map.Entry<String, Pair<String, State>> entry : oldStates.entrySet()) {
- final String vm = entry.getKey();
- final State oldState = entry.getValue().second();
- String host_uuid = entry.getValue().first();
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + " is now missing from xenserver so reporting stopped");
- }
-
- if (oldState == State.Stopping) {
- s_logger.warn("Ignoring VM " + vm + " in transition state stopping.");
- s_vms.remove(_cluster, host_uuid, vm);
- } else if (oldState == State.Starting) {
- s_logger.warn("Ignoring VM " + vm + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- s_logger.debug("VM missing " + vm + " old state stopped so removing.");
- s_vms.remove(_cluster, host_uuid, vm);
- } else if (oldState == State.Migrating) {
- s_logger.warn("Ignoring VM " + vm + " in migrating state.");
- } else {
- State newState = State.Stopped;
- s_logger.warn("The VM is now missing marking it as Stopped " + vm);
- changes.put(vm, new Pair<String, State>(host_uuid, newState));
- }
- }
- }
- return changes;
- }
-
/**
* @param cmd
* @return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
index e1669a5..1a04f1f 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56FP1Resource.java
@@ -101,9 +101,6 @@ 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);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
index d3e17bd..6f3537d 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
@@ -261,9 +261,6 @@ 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);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
index b099c99..c4a0056 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer610Resource.java
@@ -62,7 +62,6 @@ import com.cloud.network.Networks.TrafficType;
import com.cloud.resource.ServerResource;
import com.cloud.storage.Volume;
import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.VirtualMachine.State;
@Local(value = ServerResource.class)
public class XenServer610Resource extends XenServer602Resource {
@@ -143,13 +142,8 @@ public class XenServer610Resource extends XenServer602Resource {
VirtualMachineTO vmSpec = cmd.getVirtualMachine();
Map<VolumeTO, StorageFilerTO> volumeToFiler = cmd.getVolumeToFiler();
final String vmName = vmSpec.getName();
- State state = s_vms.getState(_cluster, vmName);
Task task = null;
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
-
try {
prepareISO(connection, vmSpec.getName());
Map<String, String> other = new HashMap<String, String>();
@@ -196,8 +190,6 @@ public class XenServer610Resource extends XenServer602Resource {
// Volume paths would have changed. Return that information.
List<VolumeObjectTO> volumeToList = getUpdatedVolumePathsOfMigratedVm(connection, vmToMigrate, vmSpec.getDisks());
vmToMigrate.setAffinity(connection, host);
- state = State.Stopping;
-
return new MigrateWithStorageAnswer(cmd, volumeToList);
} catch (Exception e) {
s_logger.warn("Catch Exception " + e.getClass().getName() + ". Storage motion failed due to " + e.toString(), e);
@@ -210,10 +202,6 @@ public class XenServer610Resource extends XenServer602Resource {
s_logger.debug("Unable to destroy task " + task.toString() + " on host " + _host.uuid + " due to " + e.toString());
}
}
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, state);
- }
}
}
@@ -260,15 +248,9 @@ public class XenServer610Resource extends XenServer602Resource {
Map<NicTO, Object> nicToNetwork = cmd.getNicToNetwork();
Map<String, String> token = cmd.getToken();
final String vmName = vmSpec.getName();
- State state = s_vms.getState(_cluster, vmName);
Set<VolumeTO> volumeToSet = null;
boolean migrated = false;
Task task = null;
-
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmName, State.Stopping);
- }
-
try {
Set<VM> vms = VM.getByNameLabel(connection, vmSpec.getName());
VM vmToMigrate = vms.iterator().next();
@@ -339,15 +321,6 @@ public class XenServer610Resource extends XenServer602Resource {
s_logger.debug("Unable to destroy task " + task.toString() + " on host " + _host.uuid + " due to " + e.toString());
}
}
-
- // Keep cluster/vm sync happy.
- synchronized (_cluster.intern()) {
- if (migrated) {
- s_vms.remove(_cluster, _name, vmName);
- } else {
- s_vms.put(_cluster, _name, vmName, state);
- }
- }
}
}
@@ -369,10 +342,6 @@ public class XenServer610Resource extends XenServer602Resource {
List<VolumeObjectTO> volumeToSet = getUpdatedVolumePathsOfMigratedVm(connection, migratedVm, vmSpec.getDisks());
migratedVm.setAffinity(connection, host);
- synchronized (_cluster.intern()) {
- s_vms.put(_cluster, _name, vmSpec.getName(), State.Running);
- }
-
return new MigrateWithStorageCompleteAnswer(cmd, volumeToSet);
} catch (CloudRuntimeException e) {
s_logger.error("Migration of vm " + vmSpec.getName() + " with storage failed due to " + e.toString(), e);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java
deleted file mode 100644
index 9cbf71f..0000000
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServerPoolVms.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.hypervisor.xenserver.resource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
-
-public class XenServerPoolVms {
- private static final Logger s_logger = Logger.getLogger(XenServerPoolVms.class);
- private final Map<String/* clusterId */, HashMap<String/* vm name */, Pair<String/* host uuid */, State/* vm state */>>> _clusterVms =
- new ConcurrentHashMap<String, HashMap<String, Pair<String, State>>>();
-
- public HashMap<String, Pair<String, State>> getClusterVmState(String clusterId) {
- HashMap<String, Pair<String, State>> _vms = _clusterVms.get(clusterId);
- if (_vms == null) {
- HashMap<String, Pair<String, State>> vmStates = new HashMap<String, Pair<String, State>>();
- _clusterVms.put(clusterId, vmStates);
- return vmStates;
- } else
- return _vms;
- }
-
- public void clear(String clusterId) {
- HashMap<String, Pair<String, State>> _vms = getClusterVmState(clusterId);
- _vms.clear();
- }
-
- public State getState(String clusterId, String name) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- Pair<String, State> pv = vms.get(name);
- return pv == null ? State.Stopped : pv.second(); // if a VM is absent on the cluster, it is effectively in stopped state.
- }
-
- public Pair<String, State> get(String clusterId, String name) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- return vms.get(name);
- }
-
- public void put(String clusterId, String hostUuid, String name, State state) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- vms.put(name, new Pair<String, State>(hostUuid, state));
- }
-
- public void remove(String clusterId, String hostUuid, String name) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- vms.remove(name);
- }
-
- public void putAll(String clusterId, HashMap<String, Pair<String, State>> newVms) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- vms.putAll(newVms);
- }
-
- public int size(String clusterId) {
- HashMap<String, Pair<String, State>> vms = getClusterVmState(clusterId);
- return vms.size();
- }
-
- @Override
- public String toString() {
- StringBuilder sbuf = new StringBuilder("PoolVms=");
- for (HashMap<String/* vm name */, Pair<String/* host uuid */, State/* vm state */>> clusterVM : _clusterVms.values()) {
- for (Map.Entry<String,Pair<String,State>> entry: clusterVM.entrySet()) {
- String vmname = entry.getKey();
- Pair<String,State> vmstate= entry.getValue();
- sbuf.append(vmname).append("-").append(vmstate.second()).append(",");
- }
- }
- return sbuf.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java b/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
index def1b05..161a7b2 100644
--- a/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
+++ b/plugins/hypervisors/xenserver/src/org/apache/cloudstack/hypervisor/xenserver/XenServerResourceNewBase.java
@@ -40,7 +40,6 @@ import com.cloud.hypervisor.xenserver.resource.XenServer620SP1Resource;
import com.cloud.utils.Pair;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineName;
/**
*
@@ -205,99 +204,7 @@ public class XenServerResourceNewBase extends XenServer620SP1Resource {
}
protected void recordChanges(Connection conn, VM.Record rec, String hostUuid) {
- String vm = rec.nameLabel;
- if (!VirtualMachineName.isValidCloudStackVmName(vm, _instance)) {
- s_logger.debug("Skipping over VMs that does not conform to CloudStack naming convention: " + vm);
- return;
- }
-
- VirtualMachine.State currentState = convertToState(rec.powerState);
- if (vm.startsWith("migrating")) {
- s_logger.warn("Skipping " + vm + " because it is migrating.");
- return;
- }
-
- if (currentState == VirtualMachine.State.Stopped) {
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Double check the power state to make sure we got the correct state for " + vm);
- }
- currentState = getRealPowerState(conn, vm);
- }
-
- boolean updateMap = false;
- boolean reportChange = false;
-
- // NOTE: For now we only record change when the VM is stopped. We don't find out any VMs starting for now.
- synchronized (_cluster.intern()) {
- Pair<String, VirtualMachine.State> oldState = s_vms.get(_cluster, vm);
- if (oldState == null) {
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Unable to find " + vm + " from previous map. Assuming it was in Stopped state.");
- }
- oldState = new Pair<String, VirtualMachine.State>(null, VirtualMachine.State.Stopped);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace(vm + ": current state=" + currentState + ", previous state=" + oldState);
- }
- if (oldState.second() == VirtualMachine.State.Starting) {
- if (currentState == VirtualMachine.State.Running) {
- updateMap = true;
- reportChange = false;
- } else if (currentState == VirtualMachine.State.Stopped) {
- updateMap = false;
- reportChange = false;
- }
- } else if (oldState.second() == VirtualMachine.State.Migrating) {
- updateMap = true;
- reportChange = false;
- } else if (oldState.second() == VirtualMachine.State.Stopping) {
- if (currentState == VirtualMachine.State.Stopped) {
- updateMap = true;
- reportChange = false;
- } else if (currentState == VirtualMachine.State.Running) {
- updateMap = false;
- reportChange = false;
- }
- } else if (oldState.second() != currentState) {
- updateMap = true;
- reportChange = true;
- } else if (hostUuid != null && !hostUuid.equals(oldState.first())) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Detecting " + vm + " moved from " + oldState.first() + " to " + hostUuid);
- }
- reportChange = true;
- updateMap = true;
- }
-
- if (updateMap) {
- s_vms.put(_cluster, hostUuid, vm, currentState);
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("Updated " + vm + " to [" + hostUuid + ", " + currentState);
- }
- }
- if (reportChange) {
- Pair<String, VirtualMachine.State> change = _changes.get(vm);
- if (hostUuid == null) {
- // This is really strange code. It looks like the sync
- // code wants this to be set, which is extremely weird
- // for VMs that are dead. Why would I want to set the
- // hostUuid if the VM is stopped.
- hostUuid = oldState.first();
- if (hostUuid == null) {
- hostUuid = _host.uuid;
- }
- }
- if (change == null) {
- change = new Pair<String, VirtualMachine.State>(hostUuid, currentState);
- } else {
- change.first(hostUuid);
- change.second(currentState);
- }
- _changes.put(vm, change);
- }
- }
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java b/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
index 1dfe8c0..b361199 100644
--- a/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
+++ b/server/src/com/cloud/ha/CheckOnAgentInvestigator.java
@@ -30,7 +30,7 @@ import com.cloud.host.Host;
import com.cloud.host.Status;
import com.cloud.utils.component.AdapterBase;
import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachine.PowerState;
@Local(value = Investigator.class)
public class CheckOnAgentInvestigator extends AdapterBase implements Investigator {
@@ -57,7 +57,7 @@ public class CheckOnAgentInvestigator extends AdapterBase implements Investigato
}
s_logger.debug("Agent responded with state " + answer.getState().toString());
- return answer.getState() == State.Running;
+ return answer.getState() == PowerState.PowerOn;
} catch (AgentUnavailableException e) {
s_logger.debug("Unable to reach the agent for " + vm.toString() + ": " + e.getMessage());
return null;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
index 33548c8..ee69a07 100644
--- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmDummyResourceBase.java
@@ -23,11 +23,9 @@ import javax.naming.ConfigurationException;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
-import com.cloud.agent.api.HostVmStateReportEntry;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupRoutingCommand.VmState;
import com.cloud.host.Host.Type;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.resource.ServerResource;
@@ -49,8 +47,7 @@ public class KvmDummyResourceBase extends ServerResourceBase implements ServerRe
@Override
public StartupCommand[] initialize() {
StartupRoutingCommand cmd =
- new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.KVM, new HashMap<String, String>(), new HashMap<String, VmState>(),
- new HashMap<String, HostVmStateReportEntry>());
+ new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.KVM, new HashMap<String, String>());
cmd.setDataCenter(_zoneId);
cmd.setPod(_podId);
cmd.setCluster(_clusterId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/server/src/com/cloud/resource/DummyHostServerResource.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/DummyHostServerResource.java b/server/src/com/cloud/resource/DummyHostServerResource.java
index 2252a81..41f5d3d 100644
--- a/server/src/com/cloud/resource/DummyHostServerResource.java
+++ b/server/src/com/cloud/resource/DummyHostServerResource.java
@@ -31,7 +31,6 @@ import com.cloud.agent.api.StartupRoutingCommand;
import com.cloud.host.Host.Type;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.utils.net.MacAddress;
-import com.cloud.vm.VirtualMachine;
public class DummyHostServerResource extends ServerResourceBase {
@@ -57,8 +56,7 @@ public class DummyHostServerResource extends ServerResourceBase {
@Override
public PingCommand getCurrentStatus(long id) {
- HashMap<String, VirtualMachine.State> newStates = new HashMap<String, VirtualMachine.State>();
- return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, newStates, new HashMap<String, HostVmStateReportEntry>());
+ return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, new HashMap<String, HostVmStateReportEntry>());
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 54ae965..7432fc4 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -220,10 +220,6 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
VmWorkJobHandlerProxy _jobHandlerProxy = new VmWorkJobHandlerProxy(this);
- // TODO
- static final ConfigKey<Boolean> VmJobEnabled = new ConfigKey<Boolean>("Advanced",
- Boolean.class, "vm.job.enabled", "true",
- "True to enable new VM sync model. false to use the old way", false);
static final ConfigKey<Long> VmJobCheckInterval = new ConfigKey<Long>("Advanced", Long.class, "vm.job.check.interval", "3000",
"Interval in milliseconds to check if the job is complete", false);
@@ -898,22 +894,18 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if ( jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(userVm.getId());
- }
+ placeHolder = createPlaceHolderWork(userVm.getId());
try {
return orchestrateResizeVolume(volume.getId(), currentSize, newSize, newMinIops, newMaxIops,
newDiskOffering != null ? cmd.getNewDiskOfferingId() : null, shrinkOk);
} finally {
- if (VmJobEnabled.value()) {
- _workJobDao.expunge(placeHolder.getId());
- }
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
Outcome<Volume> outcome = resizeVolumeThroughJobQueue(userVm.getId(), volume.getId(), currentSize, newSize, newMinIops, newMaxIops,
@@ -1328,18 +1320,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vmId);
- }
+ placeHolder = createPlaceHolderWork(vmId);
try {
return orchestrateAttachVolumeToVM(vmId, volumeId, deviceId);
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
@@ -1536,17 +1525,14 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vmId);
- }
+ placeHolder = createPlaceHolderWork(vmId);
try {
return orchestrateDetachVolumeFromVM(vmId, volumeId);
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
Outcome<Volume> outcome = detachVolumeFromVmThroughJobQueue(vmId, volumeId);
@@ -1733,18 +1719,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
if (vm != null) {
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
return orchestrateMigrateVolume(vol.getId(), destPool.getId(), liveMigrateVolume);
} finally {
- if ((VmJobEnabled.value())&&(placeHolder != null))
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
@@ -1835,18 +1818,15 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
if (vm != null) {
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
return orchestrateTakeVolumeSnapshot(volumeId, policyId, snapshotId, account, quiescevm);
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index e46aded..c7d7a8c 100644
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -134,10 +134,6 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
int _vmSnapshotMax;
int _wait;
- // TODO
- static final ConfigKey<Boolean> VmJobEnabled = new ConfigKey<Boolean>("Advanced",
- Boolean.class, "vm.job.enabled", "true",
- "True to enable new VM sync model. false to use the old way", false);
static final ConfigKey<Long> VmJobCheckInterval = new ConfigKey<Long>("Advanced",
Long.class, "vm.job.check.interval", "3000",
"Interval in milliseconds to check if the job is complete", false);
@@ -368,17 +364,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vmId);
- }
+ placeHolder = createPlaceHolderWork(vmId);
try {
- return orchestrateCreateVMSnapshot(vmId, vmSnapshotId, quiescevm);
+ return orchestrateCreateVMSnapshot(vmId, vmSnapshotId, quiescevm);
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
@@ -466,17 +459,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vmSnapshot.getVmId());
- }
+ placeHolder = createPlaceHolderWork(vmSnapshot.getVmId());
try {
- return orchestrateDeleteVMSnapshot(vmSnapshotId);
+ return orchestrateDeleteVMSnapshot(vmSnapshotId);
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
Outcome<VMSnapshot> outcome = deleteVMSnapshotThroughJobQueue(vmSnapshot.getVmId(), vmSnapshotId);
@@ -581,18 +571,15 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vmSnapshotVo.getVmId());
- }
+ placeHolder = createPlaceHolderWork(vmSnapshotVo.getVmId());
try {
- return orchestrateRevertToVMSnapshot(vmSnapshotId);
+ return orchestrateRevertToVMSnapshot(vmSnapshotId);
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
@@ -718,16 +705,14 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana
public boolean deleteAllVMSnapshots(long vmId, VMSnapshot.Type type) {
// serialize VM operation
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vmId);
- }
+ placeHolder = createPlaceHolderWork(vmId);
try {
- return orchestrateDeleteAllVMSnapshots(vmId, type);
+ return orchestrateDeleteAllVMSnapshots(vmId, type);
} finally {
- if ( (VmJobEnabled.value()) && (placeHolder != null))
+ if (placeHolder != null)
_workJobDao.expunge(placeHolder.getId());
}
[3/3] git commit: updated refs/heads/master to 330c4ba
Posted by an...@apache.org.
completed the new vmsync TODOs in the code.
removed old vmsync logic
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/330c4ba5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/330c4ba5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/330c4ba5
Branch: refs/heads/master
Commit: 330c4ba57856c161d34b81b2ae4e59877e28eb19
Parents: acc9c79
Author: Anthony Xu <an...@citrix.com>
Authored: Mon Jul 28 12:45:14 2014 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Mon Jul 28 12:51:37 2014 -0700
----------------------------------------------------------------------
.../com/cloud/agent/resource/DummyResource.java | 5 +-
.../agent/api/CheckVirtualMachineAnswer.java | 10 +-
.../agent/api/CreateVMSnapshotCommand.java | 15 +-
.../com/cloud/agent/api/PingRoutingCommand.java | 12 +-
.../api/PingRoutingWithNwGroupsCommand.java | 5 +-
.../agent/api/PingRoutingWithOvsCommand.java | 5 +-
.../agent/api/RevertToVMSnapshotAnswer.java | 8 +-
.../cloud/agent/api/StartupRoutingCommand.java | 101 +--
.../cloud/agent/manager/AgentManagerImpl.java | 10 +-
.../com/cloud/vm/VirtualMachineManagerImpl.java | 638 ++-----------------
.../cloud/vm/VirtualMachineManagerImplTest.java | 3 +-
.../vmsnapshot/DefaultVMSnapshotStrategy.java | 2 +-
.../storage/helper/HypervisorHelperImpl.java | 2 +-
.../networkservice/BareMetalResourceBase.java | 155 +----
.../BaremetalDhcpResourceBase.java | 3 +-
.../networkservice/BaremetalDhcpdResource.java | 3 +-
.../BaremetalDnsmasqResource.java | 3 +-
.../BaremetalKickStartPxeResource.java | 3 +-
.../BaremetalPingPxeResource.java | 3 +-
.../resource/HypervDirectConnectResource.java | 7 +-
.../test/HypervDirectConnectResourceTest.java | 4 +-
.../kvm/resource/LibvirtComputingResource.java | 371 +----------
.../cloud/ovm/hypervisor/OvmResourceBase.java | 205 +-----
.../cloud/resource/AgentRoutingResource.java | 108 +---
.../vmware/resource/VmwareResource.java | 235 +------
.../xenserver/resource/CitrixResourceBase.java | 378 ++---------
.../resource/XenServer56FP1Resource.java | 3 -
.../xenserver/resource/XenServer56Resource.java | 3 -
.../resource/XenServer610Resource.java | 31 -
.../xenserver/resource/XenServerPoolVms.java | 92 ---
.../xenserver/XenServerResourceNewBase.java | 93 ---
.../com/cloud/ha/CheckOnAgentInvestigator.java | 4 +-
.../kvm/discoverer/KvmDummyResourceBase.java | 5 +-
.../cloud/resource/DummyHostServerResource.java | 4 +-
.../com/cloud/storage/VolumeApiServiceImpl.java | 50 +-
.../vm/snapshot/VMSnapshotManagerImpl.java | 47 +-
36 files changed, 233 insertions(+), 2393 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/agent/src/com/cloud/agent/resource/DummyResource.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/DummyResource.java b/agent/src/com/cloud/agent/resource/DummyResource.java
index 73f8ef1..ea23f96 100755
--- a/agent/src/com/cloud/agent/resource/DummyResource.java
+++ b/agent/src/com/cloud/agent/resource/DummyResource.java
@@ -32,7 +32,6 @@ import com.cloud.agent.api.Command;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupRoutingCommand.VmState;
import com.cloud.agent.api.StartupStorageCommand;
import com.cloud.agent.api.StoragePoolInfo;
import com.cloud.host.Host;
@@ -147,13 +146,11 @@ public class DummyResource implements ServerResource {
@Override
public StartupCommand[] initialize() {
- Map<String, VmState> changes = null;
-
final List<Object> info = getHostInfo();
final StartupRoutingCommand cmd =
new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), HypervisorType.KVM,
- RouterPrivateIpStrategy.HostLocal, changes, null);
+ RouterPrivateIpStrategy.HostLocal);
fillNetworkInformation(cmd);
cmd.getHostDetails().putAll(getVersionStrings());
cmd.setCluster(getConfiguredProperty("cluster", "1"));
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java b/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
index 539d18a..a6b8bd9 100644
--- a/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
+++ b/core/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java
@@ -19,23 +19,23 @@
package com.cloud.agent.api;
-import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachine.PowerState;
public class CheckVirtualMachineAnswer extends Answer {
Integer vncPort;
- State state;
+ PowerState state;
protected CheckVirtualMachineAnswer() {
}
- public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, State state, Integer vncPort, String detail) {
+ public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, PowerState state, Integer vncPort, String detail) {
super(cmd, true, detail);
this.state = state;
this.vncPort = vncPort;
}
- public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, State state, Integer vncPort) {
+ public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, PowerState state, Integer vncPort) {
this(cmd, state, vncPort, null);
}
@@ -47,7 +47,7 @@ public class CheckVirtualMachineAnswer extends Answer {
return vncPort;
}
- public State getState() {
+ public PowerState getState() {
return state;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java b/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java
index c1d2561..ab4edaf 100644
--- a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java
+++ b/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java
@@ -23,23 +23,10 @@ import java.util.List;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import com.cloud.vm.VirtualMachine;
public class CreateVMSnapshotCommand extends VMSnapshotBaseCommand {
- public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType, VirtualMachine.State vmState) {
+ public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType) {
super(vmName, snapshot, volumeTOs, guestOSType);
- this.vmState = vmState;
}
-
- private VirtualMachine.State vmState;
-
- public VirtualMachine.State getVmState() {
- return vmState;
- }
-
- public void setVmState(VirtualMachine.State vmState) {
- this.vmState = vmState;
- }
-
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/PingRoutingCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/PingRoutingCommand.java b/core/src/com/cloud/agent/api/PingRoutingCommand.java
index 3e68ab4..d7733ee 100755
--- a/core/src/com/cloud/agent/api/PingRoutingCommand.java
+++ b/core/src/com/cloud/agent/api/PingRoutingCommand.java
@@ -22,14 +22,9 @@ package com.cloud.agent.api;
import java.util.Map;
import com.cloud.host.Host;
-import com.cloud.vm.VirtualMachine.State;
public class PingRoutingCommand extends PingCommand {
- // TODO vmsync {
- Map<String, State> newStates;
- // TODO vmsync }
-
Map<String, HostVmStateReportEntry> _hostVmStateReport;
boolean _gatewayAccessible = true;
@@ -38,16 +33,11 @@ public class PingRoutingCommand extends PingCommand {
protected PingRoutingCommand() {
}
- public PingRoutingCommand(Host.Type type, long id, Map<String, State> states, Map<String, HostVmStateReportEntry> hostVmStateReport) {
+ public PingRoutingCommand(Host.Type type, long id, Map<String, HostVmStateReportEntry> hostVmStateReport) {
super(type, id);
- this.newStates = states;
this._hostVmStateReport = hostVmStateReport;
}
- public Map<String, State> getNewStates() {
- return newStates;
- }
-
public Map<String, HostVmStateReportEntry> getHostVmStateReport() {
return this._hostVmStateReport;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java b/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
index 6526748..c92407c 100644
--- a/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
+++ b/core/src/com/cloud/agent/api/PingRoutingWithNwGroupsCommand.java
@@ -24,7 +24,6 @@ import java.util.Map;
import com.cloud.host.Host;
import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand {
HashMap<String, Pair<Long, Long>> newGroupStates;
@@ -33,9 +32,9 @@ public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand {
super();
}
- public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map<String, State> states, Map<String, HostVmStateReportEntry> hostVmStateReport,
+ public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map<String, HostVmStateReportEntry> hostVmStateReport,
HashMap<String, Pair<Long, Long>> nwGrpStates) {
- super(type, id, states, hostVmStateReport);
+ super(type, id, hostVmStateReport);
newGroupStates = nwGrpStates;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java b/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
index b415ac7..aecbc63 100644
--- a/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
+++ b/core/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java
@@ -24,7 +24,6 @@ import java.util.Map;
import com.cloud.host.Host;
import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
public class PingRoutingWithOvsCommand extends PingRoutingCommand {
List<Pair<String, Long>> states;
@@ -33,9 +32,9 @@ public class PingRoutingWithOvsCommand extends PingRoutingCommand {
super();
}
- public PingRoutingWithOvsCommand(Host.Type type, long id, Map<String, State> states, Map<String, HostVmStateReportEntry> hostVmStateReport,
+ public PingRoutingWithOvsCommand(Host.Type type, long id, Map<String, HostVmStateReportEntry> hostVmStateReport,
List<Pair<String, Long>> ovsStates) {
- super(type, id, states, hostVmStateReport);
+ super(type, id, hostVmStateReport);
this.states = ovsStates;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java b/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
index b67d9dd..572dff4 100644
--- a/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
+++ b/core/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java
@@ -28,7 +28,7 @@ import com.cloud.vm.VirtualMachine;
public class RevertToVMSnapshotAnswer extends Answer {
private List<VolumeObjectTO> volumeTOs;
- private VirtualMachine.State vmState;
+ private VirtualMachine.PowerState vmState;
public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, boolean result, String message) {
super(cmd, result, message);
@@ -38,13 +38,13 @@ public class RevertToVMSnapshotAnswer extends Answer {
super();
}
- public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, List<VolumeObjectTO> volumeTOs, VirtualMachine.State vmState) {
+ public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, List<VolumeObjectTO> volumeTOs, VirtualMachine.PowerState vmState) {
super(cmd, true, "");
this.volumeTOs = volumeTOs;
this.vmState = vmState;
}
- public VirtualMachine.State getVmState() {
+ public VirtualMachine.PowerState getVmState() {
return vmState;
}
@@ -56,7 +56,7 @@ public class RevertToVMSnapshotAnswer extends Answer {
this.volumeTOs = volumeTOs;
}
- public void setVmState(VirtualMachine.State vmState) {
+ public void setVmState(VirtualMachine.PowerState vmState) {
this.vmState = vmState;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/core/src/com/cloud/agent/api/StartupRoutingCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/StartupRoutingCommand.java b/core/src/com/cloud/agent/api/StartupRoutingCommand.java
index 8601e92..834d076 100755
--- a/core/src/com/cloud/agent/api/StartupRoutingCommand.java
+++ b/core/src/com/cloud/agent/api/StartupRoutingCommand.java
@@ -25,31 +25,8 @@ import java.util.Map;
import com.cloud.host.Host;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.Networks.RouterPrivateIpStrategy;
-import com.cloud.utils.Pair;
-import com.cloud.vm.VirtualMachine.State;
public class StartupRoutingCommand extends StartupCommand {
- public static class VmState {
- State state;
- String host;
-
- public VmState() {
- }
-
- public VmState(State state, String host) {
- this.state = state;
- this.host = host;
- }
-
- public State getState() {
- return state;
- }
-
- public String getHost() {
- return host;
- }
- }
-
Integer cpuSockets;
int cpus;
long speed;
@@ -57,16 +34,6 @@ public class StartupRoutingCommand extends StartupCommand {
long dom0MinMemory;
boolean poolSync;
- // VM power state report is added in a side-by-side way as old VM state report
- // this is to allow a graceful migration from the old VM state sync model to the new model
- //
- // side-by-side addition of power state sync
- Map<String, HostVmStateReportEntry> _hostVmStateReport;
-
- // TODO vmsync
- // deprecated, will delete after full replacement
- Map<String, VmState> vms;
- HashMap<String, Pair<String, State>> _clusterVMStates;
String caps;
String pool;
@@ -82,68 +49,30 @@ public class StartupRoutingCommand extends StartupCommand {
}
- public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, String caps, HypervisorType hypervisorType,
- RouterPrivateIpStrategy privIpStrategy, Map<String, VmState> vms, Map<String, HostVmStateReportEntry> hostVmStateReport) {
- this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType, vms, hostVmStateReport);
- getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStrategy.toString());
- }
-
- public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, String caps, HypervisorType hypervisorType, RouterPrivateIpStrategy privIpStrategy) {
- this(cpus,
- speed,
- memory,
- dom0MinMemory,
- caps,
- hypervisorType,
- new HashMap<String, String>(),
- new HashMap<String, VmState>(),
- new HashMap<String, HostVmStateReportEntry>());
-
- getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStrategy.toString());
- }
-
public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, final String caps, final HypervisorType hypervisorType,
- final Map<String, String> hostDetails, Map<String, VmState> vms, Map<String, HostVmStateReportEntry> hostVmStateReport) {
+ final Map<String, String> hostDetails) {
super(Host.Type.Routing);
this.cpus = cpus;
this.speed = speed;
this.memory = memory;
this.dom0MinMemory = dom0MinMemory;
- this.vms = vms;
- this._hostVmStateReport = hostVmStateReport;
this.hypervisorType = hypervisorType;
this.hostDetails = hostDetails;
this.caps = caps;
this.poolSync = false;
}
- public StartupRoutingCommand(int cpus2, long speed2, long memory2, long dom0MinMemory2, String caps2, HypervisorType hypervisorType2, Map<String, VmState> vms2,
- Map<String, HostVmStateReportEntry> hostVmStateReport) {
- this(cpus2, speed2, memory2, dom0MinMemory2, caps2, hypervisorType2, new HashMap<String, String>(), vms2, hostVmStateReport);
- }
-
- public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, final String caps, final HypervisorType hypervisorType,
- final Map<String, String> hostDetails, Map<String, VmState> vms, Map<String, HostVmStateReportEntry> vmPowerStates, String hypervisorVersion) {
- this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType, hostDetails, vms, vmPowerStates);
- this.hypervisorVersion = hypervisorVersion;
+ public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, String caps, HypervisorType hypervisorType,
+ RouterPrivateIpStrategy privIpStrategy) {
+ this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType);
+ getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStrategy.toString());
}
- public void setChanges(Map<String, VmState> vms) {
- this.vms = vms;
- }
- public void setStateChanges(Map<String, State> vms) {
- for (String vm_name : vms.keySet()) {
- if (this.vms == null) {
- this.vms = new HashMap<String, VmState>();
- }
- this.vms.put(vm_name, new VmState(vms.get(vm_name), null));
- }
+ public StartupRoutingCommand(int cpus2, long speed2, long memory2, long dom0MinMemory2, String caps2, HypervisorType hypervisorType2) {
+ this(cpus2, speed2, memory2, dom0MinMemory2, caps2, hypervisorType2, new HashMap<String, String>());
}
- public void setClusterVMStateChanges(HashMap<String, Pair<String, State>> allStates) {
- _clusterVMStates = allStates;
- }
public Integer getCpuSockets() {
return cpuSockets;
@@ -169,14 +98,6 @@ public class StartupRoutingCommand extends StartupCommand {
return dom0MinMemory;
}
- public Map<String, VmState> getVmStates() {
- return vms;
- }
-
- public HashMap<String, Pair<String, State>> getClusterVMStateChanges() {
- return _clusterVMStates;
- }
-
public void setSpeed(long speed) {
this.speed = speed;
}
@@ -241,14 +162,6 @@ public class StartupRoutingCommand extends StartupCommand {
this.hypervisorVersion = hypervisorVersion;
}
- public Map<String, HostVmStateReportEntry> getHostVmStateReport() {
- return this._hostVmStateReport;
- }
-
- public void setHostVmStateReport(Map<String, HostVmStateReportEntry> hostVmStateReport) {
- this._hostVmStateReport = hostVmStateReport;
- }
-
public HashMap<String, HashMap<String, VgpuTypesInfo>> getGpuGroupDetails() {
return groupDetails;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
index fdb88d0..af2d1b9 100755
--- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -1184,13 +1184,9 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
if (s_logger.isDebugEnabled()) {
if (cmd instanceof PingRoutingCommand) {
final PingRoutingCommand ping = (PingRoutingCommand)cmd;
- if (ping.getNewStates().size() > 0) {
- s_logger.debug("SeqA " + hostId + "-" + request.getSequence() + ": Processing " + request);
- } else {
- logD = false;
- s_logger.debug("Ping from " + hostId);
- s_logger.trace("SeqA " + hostId + "-" + request.getSequence() + ": Processing " + request);
- }
+ logD = false;
+ s_logger.debug("Ping from " + hostId);
+ s_logger.trace("SeqA " + hostId + "-" + request.getSequence() + ": Processing " + request);
} else if (cmd instanceof PingCommand) {
logD = false;
s_logger.debug("Ping from " + hostId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 19f29ec..2943047 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -22,15 +22,12 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import java.util.concurrent.Executors;
@@ -96,7 +93,6 @@ import com.cloud.agent.api.StartAnswer;
import com.cloud.agent.api.StartCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupRoutingCommand.VmState;
import com.cloud.agent.api.StopAnswer;
import com.cloud.agent.api.StopCommand;
import com.cloud.agent.api.UnPlugNicAnswer;
@@ -206,9 +202,7 @@ import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;
-import com.cloud.vm.snapshot.VMSnapshot;
import com.cloud.vm.snapshot.VMSnapshotManager;
-import com.cloud.vm.snapshot.VMSnapshotVO;
import com.cloud.vm.snapshot.dao.VMSnapshotDao;
@Local(value = VirtualMachineManager.class)
@@ -350,9 +344,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
static final ConfigKey<Integer> ClusterVMMetaDataSyncInterval = new ConfigKey<Integer>("Advanced", Integer.class, "vmmetadata.sync.interval", "180", "Cluster VM metadata sync interval in seconds",
false);
- static final ConfigKey<Boolean> VmJobEnabled = new ConfigKey<Boolean>("Advanced",
- Boolean.class, "vm.job.enabled", "true",
- "True to enable new VM sync model. false to use the old way", false);
static final ConfigKey<Long> VmJobCheckInterval = new ConfigKey<Long>("Advanced",
Long.class, "vm.job.check.interval", "3000",
"Interval in milliseconds to check if the job is complete", false);
@@ -596,9 +587,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_agentMgr.registerForHostEvents(this, true, true, true);
- if (VmJobEnabled.value()) {
- _messageBus.subscribe(VirtualMachineManager.Topics.VM_POWER_STATE, MessageDispatcher.getDispatcher(this));
- }
+ _messageBus.subscribe(VirtualMachineManager.Topics.VM_POWER_STATE, MessageDispatcher.getDispatcher(this));
return true;
}
@@ -766,13 +755,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if ( jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateStart(vmUuid, params, planToDeploy, planner);
} finally {
@@ -1343,14 +1330,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateStop(vmUuid, cleanUpEvenIfUnableToStop);
} finally {
@@ -1662,7 +1647,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
protected boolean checkVmOnHost(VirtualMachine vm, long hostId) throws AgentUnavailableException, OperationTimedoutException {
CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer)_agentMgr.send(hostId, new CheckVirtualMachineCommand(vm.getInstanceName()));
- if (!answer.getResult() || answer.getState() == State.Stopped) {
+ if (!answer.getResult() || answer.getState() == PowerState.PowerOff) {
return false;
}
@@ -1672,13 +1657,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
@Override
public void storageMigration(String vmUuid, StoragePool destPool) {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateStorageMigration(vmUuid, destPool);
} finally {
@@ -1767,13 +1750,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws ResourceUnavailableException, ConcurrentOperationException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateMigrate(vmUuid, srcHostId, dest);
} finally {
@@ -2073,14 +2054,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws ResourceUnavailableException, ConcurrentOperationException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateMigrateWithStorage(vmUuid, srcHostId, destHostId, volumeToPool);
} finally {
@@ -2257,14 +2236,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
@Override
public void migrateAway(String vmUuid, long srcHostId) throws InsufficientServerCapacityException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
try {
orchestrateMigrateAway(vmUuid, srcHostId, null);
@@ -2273,8 +2250,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
orchestrateMigrateAway(vmUuid, srcHostId, _haMgr.getHAPlanner());
}
} finally {
- if (VmJobEnabled.value())
- _workJobDao.expunge(placeHolder.getId());
+ _workJobDao.expunge(placeHolder.getId());
}
} else {
Outcome<VirtualMachine> outcome = migrateVmAwayThroughJobQueue(vmUuid, srcHostId);
@@ -2421,13 +2397,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if ( jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateReboot(vmUuid, params);
} finally {
@@ -2502,92 +2476,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
- public Commands fullHostSync(final long hostId, StartupRoutingCommand startup) {
- Commands commands = new Commands(Command.OnError.Continue);
-
- Map<Long, AgentVmInfo> infos = convertToInfos(startup);
-
- final List<? extends VMInstanceVO> vms = _vmDao.listByHostId(hostId);
- s_logger.debug("Found " + vms.size() + " VMs for host " + hostId);
- for (VMInstanceVO vm : vms) {
- AgentVmInfo info = infos.remove(vm.getId());
-
- // sync VM Snapshots related transient states
- List<VMSnapshotVO> vmSnapshotsInTrasientStates =
- _vmSnapshotDao.listByInstanceId(vm.getId(), VMSnapshot.State.Expunging, VMSnapshot.State.Reverting, VMSnapshot.State.Creating);
- if (vmSnapshotsInTrasientStates.size() > 1) {
- s_logger.info("Found vm " + vm.getInstanceName() + " with VM snapshots in transient states, needs to sync VM snapshot state");
- if (!_vmSnapshotMgr.syncVMSnapshot(vm, hostId)) {
- s_logger.warn("Failed to sync VM in a transient snapshot related state: " + vm.getInstanceName());
- continue;
- } else {
- s_logger.info("Successfully sync VM with transient snapshot: " + vm.getInstanceName());
- }
- }
-
- if (info == null) {
- info = new AgentVmInfo(vm.getInstanceName(), vm, State.Stopped);
- }
-
- HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
- Command command = compareState(hostId, vm, info, true, hvGuru.trackVmHostChange());
- if (command != null) {
- commands.addCommand(command);
- }
- }
-
- for (final AgentVmInfo left : infos.values()) {
- boolean found = false;
- VMInstanceVO vm = _vmDao.findVMByInstanceName(left.name);
- if (vm != null) {
- found = true;
- HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
- if (hvGuru.trackVmHostChange()) {
- Command command = compareState(hostId, vm, left, true, true);
- if (command != null) {
- commands.addCommand(command);
- }
- } else {
- s_logger.warn("Stopping a VM, VM " + left.name + " migrate from Host " + vm.getHostId() + " to Host " + hostId);
- commands.addCommand(cleanup(left.name));
- }
- }
- if (!found) {
- s_logger.warn("Stopping a VM that we have no record of <fullHostSync>: " + left.name);
- commands.addCommand(cleanup(left.name));
- }
- }
-
- return commands;
- }
-
- public Commands deltaHostSync(long hostId, Map<String, State> newStates) {
- Map<Long, AgentVmInfo> states = convertDeltaToInfos(newStates);
- Commands commands = new Commands(Command.OnError.Continue);
-
- for (Map.Entry<Long, AgentVmInfo> entry : states.entrySet()) {
- AgentVmInfo info = entry.getValue();
-
- VMInstanceVO vm = info.vm;
-
- Command command = null;
- if (vm != null) {
- HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
- command = compareState(hostId, vm, info, false, hvGuru.trackVmHostChange());
- } else {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Cleaning up a VM that is no longer found: " + info.name);
- }
- command = cleanup(info.name);
- }
-
- if (command != null) {
- commands.addCommand(command);
- }
- }
-
- return commands;
- }
// this is XenServer specific
public void syncVMMetaData(Map<String, String> vmMetadatum) {
@@ -2628,376 +2516,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
}
- public void fullSync(final long clusterId, Map<String, Pair<String, State>> newStates) {
- if (newStates == null)
- return;
- Map<Long, AgentVmInfo> infos = convertToInfos(newStates);
- Set<VMInstanceVO> set_vms = Collections.synchronizedSet(new HashSet<VMInstanceVO>());
- set_vms.addAll(_vmDao.listByClusterId(clusterId));
- set_vms.addAll(_vmDao.listLHByClusterId(clusterId));
-
- for (VMInstanceVO vm : set_vms) {
- AgentVmInfo info = infos.remove(vm.getId());
-
- // sync VM Snapshots related transient states
- List<VMSnapshotVO> vmSnapshotsInExpungingStates =
- _vmSnapshotDao.listByInstanceId(vm.getId(), VMSnapshot.State.Expunging, VMSnapshot.State.Creating, VMSnapshot.State.Reverting);
- if (vmSnapshotsInExpungingStates.size() > 0) {
- s_logger.info("Found vm " + vm.getInstanceName() + " in state. " + vm.getState() + ", needs to sync VM snapshot state");
- Long hostId = null;
- Host host = null;
- if (info != null && info.getHostUuid() != null) {
- host = _hostDao.findByGuid(info.getHostUuid());
- }
- hostId = host == null ? (vm.getHostId() == null ? vm.getLastHostId() : vm.getHostId()) : host.getId();
- if (!_vmSnapshotMgr.syncVMSnapshot(vm, hostId)) {
- s_logger.warn("Failed to sync VM with transient snapshot: " + vm.getInstanceName());
- continue;
- } else {
- s_logger.info("Successfully sync VM with transient snapshot: " + vm.getInstanceName());
- }
- }
-
- if ((info == null && (vm.getState() == State.Running || vm.getState() == State.Starting)) ||
- (info != null && (info.state == State.Running && vm.getState() == State.Starting))) {
- s_logger.info("Found vm " + vm.getInstanceName() + " in inconsistent state. " + vm.getState() + " on CS while " + (info == null ? "Stopped" : "Running") +
- " on agent");
- info = new AgentVmInfo(vm.getInstanceName(), vm, State.Stopped);
-
- // Bug 13850- grab outstanding work item if any for this VM state so that we mark it as DONE after we change VM state, else it will remain pending
- ItWorkVO work = _workDao.findByOutstandingWork(vm.getId(), vm.getState());
- if (work != null) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Found an outstanding work item for this vm " + vm + " in state:" + vm.getState() + ", work id:" + work.getId());
- }
- }
- vm.setState(State.Running); // set it as running and let HA take care of it
- _vmDao.persist(vm);
-
- if (work != null) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Updating outstanding work item to Done, id:" + work.getId());
- }
- work.setStep(Step.Done);
- _workDao.update(work.getId(), work);
- }
-
- try {
- Host host = _hostDao.findByGuid(info.getHostUuid());
- long hostId = host == null ? (vm.getHostId() == null ? vm.getLastHostId() : vm.getHostId()) : host.getId();
- HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
- Command command = compareState(hostId, vm, info, true, hvGuru.trackVmHostChange());
- if (command != null) {
- Answer answer = _agentMgr.send(hostId, command);
- if (!answer.getResult()) {
- s_logger.warn("Failed to update state of the VM due to " + answer.getDetails());
- }
- }
- } catch (Exception e) {
- s_logger.warn("Unable to update state of the VM due to exception " + e.getMessage());
- e.printStackTrace();
- }
- } else if (info != null &&
- (vm.getState() == State.Stopped || vm.getState() == State.Stopping || vm.isRemoved() || vm.getState() == State.Destroyed || vm.getState() == State.Expunging)) {
- Host host = _hostDao.findByGuid(info.getHostUuid());
- if (host != null) {
- s_logger.warn("Stopping a VM which is stopped/stopping/destroyed/expunging " + info.name);
- if (vm.getState() == State.Stopped || vm.getState() == State.Stopping) {
- vm.setState(State.Stopped); // set it as stop and clear it from host
- vm.setHostId(null);
- _vmDao.persist(vm);
- }
- try {
- Answer answer = _agentMgr.send(host.getId(), cleanup(info.name));
- if (!answer.getResult()) {
- s_logger.warn("Unable to stop a VM due to " + answer.getDetails());
- }
- } catch (Exception e) {
- s_logger.warn("Unable to stop a VM due to " + e.getMessage());
- }
- }
- } else
- // host id can change
- if (info != null && vm.getState() == State.Running) {
- // check for host id changes
- Host host = _hostDao.findByGuid(info.getHostUuid());
- if (host != null && (vm.getHostId() == null || host.getId() != vm.getHostId())) {
- s_logger.info("Found vm " + vm.getInstanceName() + " with inconsistent host in db, new host is " + host.getId());
- try {
- stateTransitTo(vm, VirtualMachine.Event.AgentReportMigrated, host.getId());
- } catch (NoTransitionException e) {
- s_logger.warn(e.getMessage());
- }
- }
- }
- /* else if(info == null && vm.getState() == State.Stopping) { //Handling CS-13376
- s_logger.warn("Marking the VM as Stopped as it was still stopping on the CS" +vm.getName());
- vm.setState(State.Stopped); // Setting the VM as stopped on the DB and clearing it from the host
- vm.setLastHostId(vm.getHostId());
- vm.setHostId(null);
- _vmDao.persist(vm);
- }*/
- }
-
- for (final AgentVmInfo left : infos.values()) {
- if (!VirtualMachineName.isValidVmName(left.name))
- continue; // if the vm doesn't follow CS naming ignore it for stopping
- try {
- Host host = _hostDao.findByGuid(left.getHostUuid());
- if (host != null) {
- s_logger.warn("Stopping a VM which we do not have any record of " + left.name);
- Answer answer = _agentMgr.send(host.getId(), cleanup(left.name));
- if (!answer.getResult()) {
- s_logger.warn("Unable to stop a VM due to " + answer.getDetails());
- }
- }
- } catch (Exception e) {
- s_logger.warn("Unable to stop a VM due to " + e.getMessage());
- }
- }
-
- }
-
- protected Map<Long, AgentVmInfo> convertToInfos(final Map<String, Pair<String, State>> newStates) {
- final HashMap<Long, AgentVmInfo> map = new HashMap<Long, AgentVmInfo>();
- if (newStates == null) {
- return map;
- }
- boolean is_alien_vm = true;
- long alien_vm_count = -1;
- for (Map.Entry<String, Pair<String, State>> entry : newStates.entrySet()) {
- is_alien_vm = true;
- String name = entry.getKey();
- VMInstanceVO vm = _vmDao.findVMByInstanceName(name);
- if (vm != null) {
- map.put(vm.getId(), new AgentVmInfo(entry.getKey(), vm, entry.getValue().second(), entry.getValue().first()));
- is_alien_vm = false;
- }
- // alien VMs
- if (is_alien_vm) {
- map.put(alien_vm_count--, new AgentVmInfo(entry.getKey(), null, entry.getValue().second(), entry.getValue().first()));
- s_logger.warn("Found an alien VM " + entry.getKey());
- }
- }
- return map;
- }
-
- protected Map<Long, AgentVmInfo> convertToInfos(StartupRoutingCommand cmd) {
- final Map<String, VmState> states = cmd.getVmStates();
- final HashMap<Long, AgentVmInfo> map = new HashMap<Long, AgentVmInfo>();
- if (states == null) {
- return map;
- }
-
- for (Map.Entry<String, VmState> entry : states.entrySet()) {
- String name = entry.getKey();
- VMInstanceVO vm = _vmDao.findVMByInstanceName(name);
- if (vm != null) {
- map.put(vm.getId(), new AgentVmInfo(entry.getKey(), vm, entry.getValue().getState(), entry.getValue().getHost()));
- }
- }
-
- return map;
- }
-
- protected Map<Long, AgentVmInfo> convertDeltaToInfos(final Map<String, State> states) {
- final HashMap<Long, AgentVmInfo> map = new HashMap<Long, AgentVmInfo>();
-
- if (states == null) {
- return map;
- }
-
- for (Map.Entry<String, State> entry : states.entrySet()) {
- String name = entry.getKey();
- VMInstanceVO vm = _vmDao.findVMByInstanceName(name);
- if (vm != null) {
- map.put(vm.getId(), new AgentVmInfo(entry.getKey(), vm, entry.getValue()));
- }
- }
-
- return map;
- }
-
- /**
- * compareState does as its name suggests and compares the states between
- * management server and agent. It returns whether something should be
- * cleaned up
- *
- */
- protected Command compareState(long hostId, VMInstanceVO vm, final AgentVmInfo info, final boolean fullSync, boolean trackExternalChange) {
- State agentState = info.state;
- final State serverState = vm.getState();
- final String serverName = vm.getInstanceName();
-
- Command command = null;
- s_logger.debug("VM " + serverName + ": cs state = " + serverState + " and realState = " + agentState);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("VM " + serverName + ": cs state = " + serverState + " and realState = " + agentState);
- }
-
- if (agentState == State.Error) {
- agentState = State.Stopped;
-
- AlertManager.AlertType alertType = AlertManager.AlertType.ALERT_TYPE_USERVM;
- if (VirtualMachine.Type.DomainRouter.equals(vm.getType())) {
- alertType = AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER;
- } else if (VirtualMachine.Type.ConsoleProxy.equals(vm.getType())) {
- alertType = AlertManager.AlertType.ALERT_TYPE_CONSOLE_PROXY;
- } else if (VirtualMachine.Type.SecondaryStorageVm.equals(vm.getType())) {
- alertType = AlertManager.AlertType.ALERT_TYPE_SSVM;
- }
-
- HostPodVO podVO = _podDao.findById(vm.getPodIdToDeployIn());
- DataCenterVO dcVO = _dcDao.findById(vm.getDataCenterId());
- HostVO hostVO = _hostDao.findById(vm.getHostId());
-
- String hostDesc = "name: " + hostVO.getName() + " (id:" + hostVO.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName();
- _alertMgr.sendAlert(alertType, vm.getDataCenterId(), vm.getPodIdToDeployIn(), "VM (name: " + vm.getInstanceName() + ", id: " + vm.getId() +
- ") stopped on host " + hostDesc + " due to storage failure", "Virtual Machine " + vm.getInstanceName() + " (id: " + vm.getId() + ") running on host [" +
- vm.getHostId() + "] stopped due to storage failure.");
- }
-
- if (trackExternalChange) {
- if (serverState == State.Starting) {
- if (vm.getHostId() != null && vm.getHostId() != hostId) {
- s_logger.info("CloudStack is starting VM on host " + vm.getHostId() + ", but status report comes from a different host " + hostId +
- ", skip status sync for vm: " + vm.getInstanceName());
- return null;
- }
- }
- if (vm.getHostId() == null || hostId != vm.getHostId()) {
- try {
- ItWorkVO workItem = _workDao.findByOutstandingWork(vm.getId(), State.Migrating);
- if (workItem == null) {
- stateTransitTo(vm, VirtualMachine.Event.AgentReportMigrated, hostId);
- }
- } catch (NoTransitionException e) {
- }
- }
- }
-
- // during VM migration time, don't sync state will agent status update
- if (serverState == State.Migrating) {
- s_logger.debug("Skipping vm in migrating state: " + vm);
- return null;
- }
-
- if (trackExternalChange) {
- if (serverState == State.Starting) {
- if (vm.getHostId() != null && vm.getHostId() != hostId) {
- s_logger.info("CloudStack is starting VM on host " + vm.getHostId() + ", but status report comes from a different host " + hostId +
- ", skip status sync for vm: " + vm.getInstanceName());
- return null;
- }
- }
-
- if (serverState == State.Running) {
- try {
- //
- // we had a bug that sometimes VM may be at Running State
- // but host_id is null, we will cover it here.
- // means that when CloudStack DB lost of host information,
- // we will heal it with the info reported from host
- //
- if (vm.getHostId() == null || hostId != vm.getHostId()) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("detected host change when VM " + vm + " is at running state, VM could be live-migrated externally from host " +
- vm.getHostId() + " to host " + hostId);
- }
-
- stateTransitTo(vm, VirtualMachine.Event.AgentReportMigrated, hostId);
- }
- } catch (NoTransitionException e) {
- s_logger.warn(e.getMessage());
- }
- }
- }
-
- if (agentState == serverState) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Both states are " + agentState + " for " + vm);
- }
- assert (agentState == State.Stopped || agentState == State.Running) : "If the states we send up is changed, this must be changed.";
- if (agentState == State.Running) {
- try {
- stateTransitTo(vm, VirtualMachine.Event.AgentReportRunning, hostId);
- } catch (NoTransitionException e) {
- s_logger.warn(e.getMessage());
- }
- // FIXME: What if someone comes in and sets it to stopping? Then
- // what?
- return null;
- }
-
- s_logger.debug("State matches but the agent said stopped so let's send a cleanup command anyways.");
- return cleanup(vm);
- }
-
- if (agentState == State.Shutdowned) {
- if (serverState == State.Running || serverState == State.Starting || serverState == State.Stopping) {
- try {
- advanceStop(vm.getUuid(), true);
- } catch (AgentUnavailableException e) {
- assert (false) : "How do we hit this with forced on?";
- return null;
- } catch (OperationTimedoutException e) {
- assert (false) : "How do we hit this with forced on?";
- return null;
- } catch (ConcurrentOperationException e) {
- assert (false) : "How do we hit this with forced on?";
- return null;
- }
- } else {
- s_logger.debug("Sending cleanup to a shutdowned vm: " + vm.getInstanceName());
- command = cleanup(vm);
- }
- } else if (agentState == State.Stopped) {
- // This state means the VM on the agent was detected previously
- // and now is gone. This is slightly different than if the VM
- // was never completed but we still send down a Stop Command
- // to ensure there's cleanup.
- if (serverState == State.Running) {
- // Our records showed that it should be running so let's restart
- // it.
- _haMgr.scheduleRestart(vm, false);
- } else if (serverState == State.Stopping) {
- _haMgr.scheduleStop(vm, hostId, WorkType.ForceStop);
- s_logger.debug("Scheduling a check stop for VM in stopping mode: " + vm);
- } else if (serverState == State.Starting) {
- s_logger.debug("Ignoring VM in starting mode: " + vm.getInstanceName());
- _haMgr.scheduleRestart(vm, false);
- }
- command = cleanup(vm);
- } else if (agentState == State.Running) {
- if (serverState == State.Starting) {
- if (fullSync) {
- try {
- ensureVmRunningContext(hostId, vm, Event.AgentReportRunning);
- } catch (OperationTimedoutException e) {
- s_logger.error("Exception during update for running vm: " + vm, e);
- return null;
- } catch (ResourceUnavailableException e) {
- s_logger.error("Exception during update for running vm: " + vm, e);
- return null;
- } catch (InsufficientAddressCapacityException e) {
- s_logger.error("Exception during update for running vm: " + vm, e);
- return null;
- } catch (NoTransitionException e) {
- s_logger.warn(e.getMessage());
- }
- }
- } else if (serverState == State.Stopped) {
- s_logger.debug("Scheduling a stop command for " + vm);
- _haMgr.scheduleStop(vm, hostId, WorkType.Stop);
- } else {
- s_logger.debug("server VM state " + serverState + " does not meet expectation of a running VM report from agent");
-
- // just be careful not to stop VM for things we don't handle
- // command = cleanup(vm);
- }
- }
- return command;
- }
private void ensureVmRunningContext(long hostId, VMInstanceVO vm, Event cause) throws OperationTimedoutException, ResourceUnavailableException,
NoTransitionException, InsufficientAddressCapacityException {
@@ -3095,22 +2613,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
for (Command cmd : cmds) {
if (cmd instanceof PingRoutingCommand) {
PingRoutingCommand ping = (PingRoutingCommand)cmd;
- if (ping.getNewStates() != null && ping.getNewStates().size() > 0) {
- if (!VmJobEnabled.value()) {
- Commands commands = deltaHostSync(agentId, ping.getNewStates());
- if (commands.size() > 0) {
- try {
- _agentMgr.send(agentId, commands, this);
- } catch (final AgentUnavailableException e) {
- s_logger.warn("Agent is now unavailable", e);
- }
- }
- }
- }
- if(VmJobEnabled.value()) {
- if (ping.getHostVmStateReport() != null) {
- _syncMgr.processHostVmStatePingReport(agentId, ping.getHostVmStateReport());
- }
+ if (ping.getHostVmStateReport() != null) {
+ _syncMgr.processHostVmStatePingReport(agentId, ping.getHostVmStateReport());
}
// take the chance to scan VMs that are stuck in transitional states
@@ -3141,9 +2645,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
if(s_logger.isDebugEnabled())
s_logger.debug("Received startup command from hypervisor host. host id: " + agent.getId());
- if(VmJobEnabled.value()) {
- _syncMgr.resetHostSyncState(agent.getId());
- }
+ _syncMgr.resetHostSyncState(agent.getId());
if (forRebalance) {
s_logger.debug("Not processing listener " + this + " as connect happens on rebalance process");
@@ -3159,13 +2661,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
long agentId = agent.getId();
if (agent.getHypervisorType() == HypervisorType.XenServer) { // only for Xen
- if (!VmJobEnabled.value()) {
- StartupRoutingCommand startup = (StartupRoutingCommand)cmd;
- HashMap<String, Pair<String, State>> allStates = startup.getClusterVMStateChanges();
- if (allStates != null) {
- fullSync(clusterId, allStates);
- }
- }
// initiate the cron job
ClusterVMMetaDataSyncCommand syncVMMetaDataCmd = new ClusterVMMetaDataSyncCommand(ClusterVMMetaDataSyncInterval.value(), clusterId);
try {
@@ -3174,35 +2669,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
} catch (AgentUnavailableException e) {
s_logger.fatal("The Cluster VM metadata sync process failed for cluster id " + clusterId + " with ", e);
}
- } else { // for others KVM and VMWare
- if (!VmJobEnabled.value()) {
- StartupRoutingCommand startup = (StartupRoutingCommand)cmd;
- Commands commands = fullHostSync(agentId, startup);
-
- if (commands.size() > 0) {
- s_logger.debug("Sending clean commands to the agent");
-
- try {
- boolean error = false;
- Answer[] answers = _agentMgr.send(agentId, commands);
- for (Answer answer : answers) {
- if (!answer.getResult()) {
- s_logger.warn("Unable to stop a VM due to " + answer.getDetails());
- error = true;
- }
- }
- if (error) {
- throw new ConnectionException(true, "Unable to stop VMs");
- }
- } catch (final AgentUnavailableException e) {
- s_logger.warn("Agent is unavailable now", e);
- throw new ConnectionException(true, "Unable to sync", e);
- } catch (final OperationTimedoutException e) {
- s_logger.warn("Agent is unavailable now", e);
- throw new ConnectionException(true, "Unable to sync", e);
- }
- }
- }
}
}
@@ -3239,28 +2705,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
}
- protected class AgentVmInfo {
- public String name;
- public State state;
- public String hostUuid;
- public VMInstanceVO vm;
-
- public AgentVmInfo(String name, VMInstanceVO vm, State state, String host) {
- this.name = name;
- this.state = state;
- this.vm = vm;
- hostUuid = host;
- }
-
- public AgentVmInfo(String name, VMInstanceVO vm, State state) {
- this(name, vm, state, null);
- }
-
- public String getHostUuid() {
- return hostUuid;
- }
- }
-
@Override
public VMInstanceVO findById(long vmId) {
return _vmDao.findById(vmId);
@@ -3345,12 +2789,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
return orchestrateAddVmToNetwork(vm, network, requested);
} finally {
@@ -3460,12 +2902,10 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws ConcurrentOperationException, ResourceUnavailableException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
return orchestrateRemoveNicFromVm(vm, nic);
} finally {
@@ -3712,13 +3152,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
public void migrateForScale(String vmUuid, long srcHostId, DeployDestination dest, Long oldSvcOfferingId)
throws ResourceUnavailableException, ConcurrentOperationException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
orchestrateMigrateForScale(vmUuid, srcHostId, dest, oldSvcOfferingId);
} finally {
@@ -3977,13 +3415,11 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throws ResourceUnavailableException, InsufficientServerCapacityException, ConcurrentOperationException {
AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
- if (!VmJobEnabled.value() || jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
+ if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
// avoid re-entrance
VmWorkJobVO placeHolder = null;
- if (VmJobEnabled.value()) {
- VirtualMachine vm = _vmDao.findByUuid(vmUuid);
- placeHolder = createPlaceHolderWork(vm.getId());
- }
+ VirtualMachine vm = _vmDao.findByUuid(vmUuid);
+ placeHolder = createPlaceHolderWork(vm.getId());
try {
return orchestrateReConfigureVm(vmUuid, oldServiceOffering, reconfiguringOnExistingHost);
} finally {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java
index ae07455..865b066 100644
--- a/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java
+++ b/engine/orchestration/test/com/cloud/vm/VirtualMachineManagerImplTest.java
@@ -102,6 +102,7 @@ import com.cloud.utils.db.EntityManager;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.VirtualMachine.Event;
import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachine.PowerState;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;
@@ -397,7 +398,7 @@ public class VirtualMachineManagerImplTest {
CheckVirtualMachineAnswer checkVmAnswerMock = mock(CheckVirtualMachineAnswer.class);
when(checkVmAnswerMock.getResult()).thenReturn(true);
- when(checkVmAnswerMock.getState()).thenReturn(State.Running);
+ when(checkVmAnswerMock.getState()).thenReturn(PowerState.PowerOn);
when(_agentMgr.send(anyLong(), isA(CheckVirtualMachineCommand.class))).thenReturn(checkVmAnswerMock);
// Mock the state transitions of vm.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
index 17a9f79..c204d29 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
@@ -137,7 +137,7 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
HostVO host = hostDao.findById(hostId);
GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion());
- CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), target, volumeTOs, guestOS.getDisplayName(), userVm.getState());
+ CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), target, volumeTOs, guestOS.getDisplayName());
if (guestOsMapping == null) {
ccmd.setPlatformEmulator(null);
} else {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
index ff62fb8..e90770e 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
@@ -124,7 +124,7 @@ public class HypervisorHelperImpl implements HypervisorHelper {
GuestOSVO guestOS = guestOSDao.findById(virtualMachine.getGuestOSId());
List<VolumeObjectTO> volumeTOs = vmSnapshotHelper.getVolumeTOList(virtualMachine.getId());
CreateVMSnapshotCommand ccmd =
- new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName(), virtualMachine.getState());
+ new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName());
HostVO host = hostDao.findById(hostId);
GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion());
ccmd.setPlatformEmulator(guestOsMapping.getGuestOsName());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
index 8285337..fedfb8b 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java
@@ -67,9 +67,7 @@ import com.cloud.utils.script.Script;
import com.cloud.utils.script.Script2;
import com.cloud.utils.script.Script2.ParamType;
import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.dao.VMInstanceDao;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -85,7 +83,6 @@ import java.util.concurrent.TimeUnit;
@Local(value = ServerResource.class)
public class BareMetalResourceBase extends ManagerBase implements ServerResource {
private static final Logger s_logger = Logger.getLogger(BareMetalResourceBase.class);
- protected HashMap<String, State> _vms = new HashMap<String, State>(2);
protected String _name;
protected String _uuid;
protected String _zone;
@@ -116,17 +113,6 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
protected ConfigurationDao configDao;
protected VMInstanceDao vmDao;
- private void changeVmState(String vmName, VirtualMachine.State state) {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
- }
-
- private State removeVmState(String vmName) {
- synchronized (_vms) {
- return _vms.remove(vmName);
- }
- }
@Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
@@ -341,37 +327,6 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
return com.cloud.host.Host.Type.Routing;
}
- protected State getVmState() {
- OutputInterpreter.AllLinesParser interpreter = new OutputInterpreter.AllLinesParser();
- if (!doScript(_getStatusCommand, interpreter)) {
- s_logger.warn("Cannot get power status of " + _name + ", assume VM state was not changed");
- return null;
- }
- if (isPowerOn(interpreter.getLines())) {
- return State.Running;
- } else {
- return State.Stopped;
- }
- }
-
- protected Map<String, State> fullSync() {
- Map<String, State> states = new HashMap<String, State>();
- if (hostId != null) {
- final List<? extends VMInstanceVO> vms = vmDao.listByHostId(hostId);
- for (VMInstanceVO vm : vms) {
- states.put(vm.getInstanceName(), vm.getState());
- }
- }
- /*
- * Map<String, State> changes = new HashMap<String, State>();
- *
- * if (_vmName != null) { State state = getVmState(); if (state != null)
- * { changes.put(_vmName, state); } }
- */
-
- return states;
- }
-
protected Map<String, HostVmStateReportEntry> getHostVmStateReport() {
Map<String, HostVmStateReportEntry> states = new HashMap<String, HostVmStateReportEntry>();
if (hostId != null) {
@@ -380,25 +335,18 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
states.put(
vm.getInstanceName(),
new HostVmStateReportEntry(
- vm.getState() == State.Running ? PowerState.PowerOn : PowerState.PowerOff, "host-" + hostId
+ vm.getPowerState(), "host-" + hostId
)
);
}
}
- /*
- * Map<String, State> changes = new HashMap<String, State>();
- *
- * if (_vmName != null) { State state = getVmState(); if (state != null)
- * { changes.put(_vmName, state); } }
- */
-
return states;
}
@Override
public StartupCommand[] initialize() {
StartupRoutingCommand cmd = new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.BareMetal,
- new HashMap<String, String>(), null, null);
+ new HashMap<String, String>());
cmd.setDataCenter(_zone);
cmd.setPod(_pod);
@@ -413,7 +361,6 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
cmd.setMemory(_memCapacity);
cmd.setPrivateMacAddress(_mac);
cmd.setPublicMacAddress(_mac);
- cmd.setStateChanges(fullSync());
return new StartupCommand[] { cmd };
}
@@ -439,15 +386,15 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
if (hostId != null) {
final List<? extends VMInstanceVO> vms = vmDao.listByHostId(hostId);
if (vms.isEmpty()) {
- return new PingRoutingCommand(getType(), id, deltaSync(), getHostVmStateReport());
+ return new PingRoutingCommand(getType(), id, getHostVmStateReport());
} else {
VMInstanceVO vm = vms.get(0);
SecurityGroupHttpClient client = new SecurityGroupHttpClient();
HashMap<String, Pair<Long, Long>> nwGrpStates = client.sync(vm.getInstanceName(), vm.getId(), vm.getPrivateIpAddress());
- return new PingRoutingWithNwGroupsCommand(getType(), id, null, getHostVmStateReport(), nwGrpStates);
+ return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(), nwGrpStates);
}
} else {
- return new PingRoutingCommand(getType(), id, deltaSync(), getHostVmStateReport());
+ return new PingRoutingCommand(getType(), id, getHostVmStateReport());
}
}
@@ -487,7 +434,7 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
}
protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) {
- return new CheckVirtualMachineAnswer(cmd, State.Stopped, null);
+ return new CheckVirtualMachineAnswer(cmd, PowerState.PowerOff, null);
}
protected Answer execute(IpmiBootorResetCommand cmd) {
@@ -608,85 +555,33 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource
protected StartAnswer execute(StartCommand cmd) {
VirtualMachineTO vm = cmd.getVirtualMachine();
- State state = State.Stopped;
-
- try {
- changeVmState(vm.getName(), State.Starting);
- OutputInterpreter.AllLinesParser interpreter = new OutputInterpreter.AllLinesParser();
- if (!doScript(_getStatusCommand, interpreter)) {
- return new StartAnswer(cmd, "Cannot get current power status of " + _name);
- }
+ OutputInterpreter.AllLinesParser interpreter = new OutputInterpreter.AllLinesParser();
+ if (!doScript(_getStatusCommand, interpreter)) {
+ return new StartAnswer(cmd, "Cannot get current power status of " + _name);
+ }
- if (isPowerOn(interpreter.getLines())) {
- if (!doScript(_rebootCommand)) {
- return new StartAnswer(cmd, "IPMI reboot failed");
- }
- } else {
- if (!doScript(_powerOnCommand)) {
- return new StartAnswer(cmd, "IPMI power on failed");
- }
+ if (isPowerOn(interpreter.getLines())) {
+ if (!doScript(_rebootCommand)) {
+ return new StartAnswer(cmd, "IPMI reboot failed");
}
-
- if (_isEchoScAgent) {
- SecurityGroupHttpClient hc = new SecurityGroupHttpClient();
- boolean echoRet = hc.echo(vm.getNics()[0].getIp(), TimeUnit.MINUTES.toMillis(30), TimeUnit.MINUTES.toMillis(1));
- if (!echoRet) {
- return new StartAnswer(cmd, String.format("Call security group agent on vm[%s] timeout", vm.getNics()[0].getIp()));
- }
+ } else {
+ if (!doScript(_powerOnCommand)) {
+ return new StartAnswer(cmd, "IPMI power on failed");
}
+ }
- s_logger.debug("Start bare metal vm " + vm.getName() + "successfully");
- state = State.Running;
- _vmName = vm.getName();
- return new StartAnswer(cmd);
- } finally {
- if (state != State.Stopped) {
- changeVmState(vm.getName(), state);
- } else {
- removeVmState(vm.getName());
+ if (_isEchoScAgent) {
+ SecurityGroupHttpClient hc = new SecurityGroupHttpClient();
+ boolean echoRet = hc.echo(vm.getNics()[0].getIp(), TimeUnit.MINUTES.toMillis(30), TimeUnit.MINUTES.toMillis(1));
+ if (!echoRet) {
+ return new StartAnswer(cmd, String.format("Call security group agent on vm[%s] timeout", vm.getNics()[0].getIp()));
}
}
- }
-
- protected HashMap<String, State> deltaSync() {
- final HashMap<String, State> changes = new HashMap<String, State>();
- /*
- * Disable sync until we find a way that only tracks status but not does
- * action
- *
- * The scenario is: Baremetal will reboot host when creating template.
- * Given most servers take a long time to boot up, there would be a
- * period that mgmt server finds the host is stopped through fullsync.
- * Then mgmt server updates database with marking the host as stopped,
- * after that, the host comes up and full sync then indicates it's
- * running. Because in database the host is already stopped, mgmt server
- * sends out a stop command. As a result, creating image gets never
- * happened.
- *
- * if (_vmName == null) { return null; }
- *
- * State newState = getVmState(); if (newState == null) {
- * s_logger.warn("Cannot get power state of VM " + _vmName); return
- * null; }
- *
- * final State oldState = removeVmState(_vmName); if (oldState == null)
- * { changeVmState(_vmName, newState); changes.put(_vmName, newState); }
- * else if (oldState == State.Starting) { if (newState == State.Running)
- * { changeVmState(_vmName, newState); } else if (newState ==
- * State.Stopped) { s_logger.debug("Ignoring vm " + _vmName +
- * " because of a lag in starting the vm."); } } else if (oldState ==
- * State.Migrating) {
- * s_logger.warn("How can baremetal VM get into migrating state???"); }
- * else if (oldState == State.Stopping) { if (newState == State.Stopped)
- * { changeVmState(_vmName, newState); } else if (newState ==
- * State.Running) { s_logger.debug("Ignoring vm " + _vmName +
- * " because of a lag in stopping the vm. "); } } else if (oldState !=
- * newState) { changeVmState(_vmName, newState); changes.put(_vmName,
- * newState); }
- */
- return changes;
+ s_logger.debug("Start bare metal vm " + vm.getName() + "successfully");
+ _vmName = vm.getName();
+ return new StartAnswer(cmd);
}
protected ReadyAnswer execute(ReadyCommand cmd) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
index 8e7acde..0d3cdce 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResourceBase.java
@@ -42,7 +42,6 @@ import com.cloud.agent.api.StartupExternalDhcpCommand;
import com.cloud.host.Host.Type;
import com.cloud.resource.ServerResource;
import com.cloud.utils.component.ManagerBase;
-import com.cloud.vm.VirtualMachine.State;
public class BaremetalDhcpResourceBase extends ManagerBase implements ServerResource {
private static final Logger s_logger = Logger.getLogger(BaremetalDhcpResourceBase.class);
@@ -126,7 +125,7 @@ public class BaremetalDhcpResourceBase extends ManagerBase implements ServerReso
@Override
public PingCommand getCurrentStatus(long id) {
//TODO: check server
- return new PingRoutingCommand(getType(), id, new HashMap<String, State>(), new HashMap<String, HostVmStateReportEntry>());
+ return new PingRoutingCommand(getType(), id, new HashMap<String, HostVmStateReportEntry>());
}
protected ReadyAnswer execute(ReadyCommand cmd) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
index aab936c..8fd2c35 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpdResource.java
@@ -39,7 +39,6 @@ import com.cloud.agent.api.PingRoutingCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.utils.script.Script;
import com.cloud.utils.ssh.SSHCmdHelper;
-import com.cloud.vm.VirtualMachine.State;
public class BaremetalDhcpdResource extends BaremetalDhcpResourceBase {
private static final Logger s_logger = Logger.getLogger(BaremetalDhcpdResource.class);
@@ -107,7 +106,7 @@ public class BaremetalDhcpdResource extends BaremetalDhcpResourceBase {
return null;
} else {
SSHCmdHelper.releaseSshConnection(sshConnection);
- return new PingRoutingCommand(getType(), id, new HashMap<String, State>(), new HashMap<String, HostVmStateReportEntry>());
+ return new PingRoutingCommand(getType(), id, new HashMap<String, HostVmStateReportEntry>());
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
index 19c1f19..79f23cc 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDnsmasqResource.java
@@ -39,7 +39,6 @@ import com.cloud.agent.api.PingRoutingCommand;
import com.cloud.agent.api.routing.DhcpEntryCommand;
import com.cloud.utils.script.Script;
import com.cloud.utils.ssh.SSHCmdHelper;
-import com.cloud.vm.VirtualMachine.State;
public class BaremetalDnsmasqResource extends BaremetalDhcpResourceBase {
private static final Logger s_logger = Logger.getLogger(BaremetalDnsmasqResource.class);
@@ -99,7 +98,7 @@ public class BaremetalDnsmasqResource extends BaremetalDhcpResourceBase {
return null;
} else {
SSHCmdHelper.releaseSshConnection(sshConnection);
- return new PingRoutingCommand(getType(), id, new HashMap<String, State>(), new HashMap<String, HostVmStateReportEntry>());
+ return new PingRoutingCommand(getType(), id, new HashMap<String, HostVmStateReportEntry>());
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
index b677a63..260f4f1 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java
@@ -38,7 +38,6 @@ import com.cloud.agent.api.routing.VmDataCommand;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
import com.cloud.utils.ssh.SSHCmdHelper;
-import com.cloud.vm.VirtualMachine.State;
public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase {
private static final Logger s_logger = Logger.getLogger(BaremetalKickStartPxeResource.class);
@@ -107,7 +106,7 @@ public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase {
return null;
} else {
SSHCmdHelper.releaseSshConnection(sshConnection);
- return new PingRoutingCommand(getType(), id, new HashMap<String, State>(), new HashMap<String, HostVmStateReportEntry>());
+ return new PingRoutingCommand(getType(), id, new HashMap<String, HostVmStateReportEntry>());
}
}
[2/3] completed the new vmsync TODOs in the code. removed old vmsync
logic
Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
index a7fd77e..80827a2 100755
--- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
+++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPingPxeResource.java
@@ -43,7 +43,6 @@ import com.cloud.agent.api.baremetal.PrepareCreateTemplateCommand;
import com.cloud.agent.api.routing.VmDataCommand;
import com.cloud.utils.script.Script;
import com.cloud.utils.ssh.SSHCmdHelper;
-import com.cloud.vm.VirtualMachine.State;
public class BaremetalPingPxeResource extends BaremetalPxeResourceBase {
private static final Logger s_logger = Logger.getLogger(BaremetalPingPxeResource.class);
@@ -143,7 +142,7 @@ public class BaremetalPingPxeResource extends BaremetalPxeResourceBase {
return null;
} else {
SSHCmdHelper.releaseSshConnection(sshConnection);
- return new PingRoutingCommand(getType(), id, new HashMap<String, State>(), new HashMap<String, HostVmStateReportEntry>());
+ return new PingRoutingCommand(getType(), id, new HashMap<String, HostVmStateReportEntry>());
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
index 1816baf..2671b20 100644
--- a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
+++ b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java
@@ -90,7 +90,6 @@ import com.cloud.agent.api.SetupGuestNetworkCommand;
import com.cloud.agent.api.StartCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupRoutingCommand.VmState;
import com.cloud.agent.api.StartupStorageCommand;
import com.cloud.agent.api.UnPlugNicAnswer;
import com.cloud.agent.api.UnPlugNicCommand;
@@ -211,8 +210,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
// Create default StartupRoutingCommand, then customise
StartupRoutingCommand defaultStartRoutCmd =
- new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal, new HashMap<String, VmState>(),
- new HashMap<String, HostVmStateReportEntry>());
+ new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal);
// Identity within the data centre is decided by CloudStack kernel,
// and passed via ServerResource.configure()
@@ -224,7 +222,6 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
defaultStartRoutCmd.setPrivateIpAddress(_agentIp);
defaultStartRoutCmd.setStorageIpAddress(_agentIp);
defaultStartRoutCmd.setPool(_clusterGuid);
- defaultStartRoutCmd.setHostVmStateReport(getHostVmStateReport());
s_logger.debug("Generated StartupRoutingCommand for _agentIp \"" + _agentIp + "\"");
@@ -316,7 +313,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S
@Override
public final PingCommand getCurrentStatus(final long id) {
- PingCommand pingCmd = new PingRoutingCommand(getType(), id, null, getHostVmStateReport());
+ PingCommand pingCmd = new PingRoutingCommand(getType(), id, getHostVmStateReport());
if (s_logger.isDebugEnabled()) {
s_logger.debug("Ping host " + _name + " (IP " + _agentIp + ")");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java b/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
index d4f1c9f..75a864b 100644
--- a/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
+++ b/plugins/hypervisors/hyperv/test/com/cloud/hypervisor/hyperv/test/HypervDirectConnectResourceTest.java
@@ -63,7 +63,6 @@ import com.cloud.agent.api.StartAnswer;
import com.cloud.agent.api.StartCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupRoutingCommand.VmState;
import com.cloud.agent.api.StartupStorageCommand;
import com.cloud.agent.api.StopAnswer;
import com.cloud.agent.api.StopCommand;
@@ -252,8 +251,7 @@ public class HypervDirectConnectResourceTest {
public final void testStartupCommand() {
StartupRoutingCommand defaultStartRoutCmd =
- new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal, new HashMap<String, VmState>(),
- new HashMap<String, HostVmStateReportEntry>());
+ new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal);
// Identity within the data centre is decided by CloudStack kernel,
// and passed via ServerResource.configure()
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 457e173..1be797c 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -68,6 +68,7 @@ import org.libvirt.Connect;
import org.libvirt.Domain;
import org.libvirt.DomainBlockStats;
import org.libvirt.DomainInfo;
+import org.libvirt.DomainInfo.DomainState;
import org.libvirt.DomainInterfaceStats;
import org.libvirt.DomainSnapshot;
import org.libvirt.LibvirtException;
@@ -268,7 +269,6 @@ import com.cloud.utils.ssh.SshHelper;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
/**
* LibvirtComputingResource execute requests on the computing/routing host using
@@ -461,31 +461,17 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
protected int _cmdsTimeout;
protected int _stopTimeout;
- // TODO vmsync {
- protected static final HashMap<DomainInfo.DomainState, State> s_statesTable;
+ protected static final HashMap<DomainState, PowerState> s_powerStatesTable;
static {
- s_statesTable = new HashMap<DomainInfo.DomainState, State>();
- s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF, State.Stopped);
- s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_PAUSED, State.Running);
- s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_RUNNING, State.Running);
- s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_BLOCKED, State.Running);
- s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_NOSTATE, State.Unknown);
- s_statesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTDOWN, State.Stopping);
+ s_powerStatesTable = new HashMap<DomainState, PowerState>();
+ s_powerStatesTable.put(DomainState.VIR_DOMAIN_SHUTOFF, PowerState.PowerOff);
+ s_powerStatesTable.put(DomainState.VIR_DOMAIN_PAUSED, PowerState.PowerOn);
+ s_powerStatesTable.put(DomainState.VIR_DOMAIN_RUNNING, PowerState.PowerOn);
+ s_powerStatesTable.put(DomainState.VIR_DOMAIN_BLOCKED, PowerState.PowerOn);
+ s_powerStatesTable.put(DomainState.VIR_DOMAIN_NOSTATE, PowerState.PowerUnknown);
+ s_powerStatesTable.put(DomainState.VIR_DOMAIN_SHUTDOWN, PowerState.PowerOff);
}
- // TODO vmsync }
- protected static final HashMap<DomainInfo.DomainState, PowerState> s_powerStatesTable;
- static {
- s_powerStatesTable = new HashMap<DomainInfo.DomainState, PowerState>();
- s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF, PowerState.PowerOff);
- s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_PAUSED, PowerState.PowerOn);
- s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_RUNNING, PowerState.PowerOn);
- s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_BLOCKED, PowerState.PowerOn);
- s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_NOSTATE, PowerState.PowerUnknown);
- s_powerStatesTable.put(DomainInfo.DomainState.VIR_DOMAIN_SHUTDOWN, PowerState.PowerOff);
- }
-
- protected HashMap<String, State> _vms = new HashMap<String, State>(20);
protected List<String> _vmsKilled = new ArrayList<String>();
private VirtualRoutingResource _virtRouterResource;
@@ -2335,7 +2321,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
String vmName = cmd.getVmName();
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
- DomainInfo.DomainState state = null;
+ DomainState state = null;
Domain vm = null;
if (vmName != null) {
try {
@@ -2349,7 +2335,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
KVMStoragePool primaryPool = _storagePoolMgr.getStoragePool(cmd.getPool().getType(), cmd.getPool().getUuid());
KVMPhysicalDisk disk = primaryPool.getPhysicalDisk(cmd.getVolumePath());
- if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryPool.isExternalSnapshot()) {
+ if (state == DomainState.VIR_DOMAIN_RUNNING && !primaryPool.isExternalSnapshot()) {
String vmUuid = vm.getUUIDString();
Object[] args = new Object[] {snapshotName, vmUuid};
String snapshot = SnapshotXML.format(args);
@@ -2367,7 +2353,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
*/
vm = getDomain(conn, cmd.getVmName());
state = vm.getInfo().state;
- if (state == DomainInfo.DomainState.VIR_DOMAIN_PAUSED) {
+ if (state == DomainState.VIR_DOMAIN_PAUSED) {
vm.resume();
}
} else {
@@ -2525,7 +2511,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
/* Delete the snapshot on primary */
- DomainInfo.DomainState state = null;
+ DomainState state = null;
Domain vm = null;
if (vmName != null) {
try {
@@ -2537,7 +2523,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
KVMStoragePool primaryStorage = _storagePoolMgr.getStoragePool(cmd.getPool().getType(), cmd.getPool().getUuid());
- if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryStorage.isExternalSnapshot()) {
+ if (state == DomainState.VIR_DOMAIN_RUNNING && !primaryStorage.isExternalSnapshot()) {
String vmUuid = vm.getUUIDString();
Object[] args = new Object[] {snapshotName, vmUuid};
String snapshot = SnapshotXML.format(args);
@@ -2551,7 +2537,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
*/
vm = getDomain(conn, cmd.getVmName());
state = vm.getInfo().state;
- if (state == DomainInfo.DomainState.VIR_DOMAIN_PAUSED) {
+ if (state == DomainState.VIR_DOMAIN_PAUSED) {
vm.resume();
}
} else {
@@ -2965,23 +2951,18 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return new ReadyAnswer(cmd);
}
- protected State convertToState(DomainInfo.DomainState ps) {
- final State state = s_statesTable.get(ps);
- return state == null ? State.Unknown : state;
- }
-
- protected PowerState convertToPowerState(DomainInfo.DomainState ps) {
+ protected PowerState convertToPowerState(DomainState ps) {
final PowerState state = s_powerStatesTable.get(ps);
return state == null ? PowerState.PowerUnknown : state;
}
- protected State getVmState(Connect conn, final String vmName) {
+ protected PowerState getVmState(Connect conn, final String vmName) {
int retry = 3;
Domain vms = null;
while (retry-- > 0) {
try {
vms = conn.domainLookupByName(vmName);
- State s = convertToState(vms.getInfo().state);
+ PowerState s = convertToPowerState(vms.getInfo().state);
return s;
} catch (final LibvirtException e) {
s_logger.warn("Can't get vm state " + vmName + e.getMessage() + "retry:" + retry);
@@ -2995,20 +2976,16 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
}
- return State.Stopped;
+ return PowerState.PowerOff;
}
private Answer execute(CheckVirtualMachineCommand cmd) {
try {
Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
- final State state = getVmState(conn, cmd.getVmName());
+ final PowerState state = getVmState(conn, cmd.getVmName());
Integer vncPort = null;
- if (state == State.Running) {
+ if (state == PowerState.PowerOn) {
vncPort = getVncPort(conn, cmd.getVmName());
-
- synchronized (_vms) {
- _vms.put(cmd.getVmName(), State.Running);
- }
}
return new CheckVirtualMachineAnswer(cmd, state, vncPort);
@@ -3055,12 +3032,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
private Answer execute(MigrateCommand cmd) {
String vmName = cmd.getVmName();
- State state = null;
String result = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
List<InterfaceDef> ifaces = null;
List<DiskDef> disks = null;
@@ -3119,7 +3091,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
// pause vm if we meet the vm.migrate.pauseafter threshold and not already paused
- if (_migratePauseAfter > 0 && sleeptime > _migratePauseAfter && dm.getInfo().state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING ) {
+ if (_migratePauseAfter > 0 && sleeptime > _migratePauseAfter && dm.getInfo().state == DomainState.VIR_DOMAIN_RUNNING ) {
s_logger.info("Pausing VM " + vmName + " due to property vm.migrate.pauseafter setting to " + _migratePauseAfter+ "ms to complete migration");
try {
dm.suspend();
@@ -3170,9 +3142,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
if (result != null) {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
} else {
destroy_network_rules_for_vm(conn, vmName);
for (InterfaceDef iface : ifaces) {
@@ -3243,10 +3212,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return new PrepareForMigrationAnswer(cmd, "failed to connect physical disks to host");
}
- synchronized (_vms) {
- _vms.put(vm.getName(), State.Migrating);
- }
-
skipDisconnect = true;
return new PrepareForMigrationAnswer(cmd);
@@ -3419,10 +3384,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
private Answer execute(RebootCommand cmd) {
- synchronized (_vms) {
- _vms.put(cmd.getVmName(), State.Starting);
- }
-
try {
Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
final String result = rebootVM(conn, cmd.getVmName());
@@ -3440,10 +3401,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
} catch (LibvirtException e) {
return new RebootAnswer(cmd, e.getMessage(), false);
- } finally {
- synchronized (_vms) {
- _vms.put(cmd.getVmName(), State.Running);
- }
}
}
@@ -3504,7 +3461,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
Domain vm = conn.domainLookupByName(cmd.getVmName());
- if (vm != null && vm.getInfo().state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING) {
+ if (vm != null && vm.getInfo().state == DomainState.VIR_DOMAIN_RUNNING) {
return new StopAnswer(cmd, "vm is still running on host", false);
}
} catch (Exception e) {
@@ -3512,11 +3469,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
- State state = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
try {
Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
@@ -3538,18 +3490,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
- state = State.Stopped;
return new StopAnswer(cmd, result, true);
} catch (LibvirtException e) {
return new StopAnswer(cmd, e.getMessage(), false);
- } finally {
- synchronized (_vms) {
- if (state != null) {
- _vms.put(vmName, state);
- } else {
- _vms.remove(vmName);
- }
- }
}
}
@@ -3799,13 +3742,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
String vmName = vmSpec.getName();
LibvirtVMDef vm = null;
- State state = State.Stopped;
+ DomainState state = DomainState.VIR_DOMAIN_SHUTOFF;
Connect conn = null;
try {
- synchronized (_vms) {
- _vms.put(vmName, State.Starting);
- }
-
NicTO[] nics = vmSpec.getNics();
for (NicTO nic : nics) {
@@ -3874,7 +3813,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
- state = State.Running;
+ state = DomainState.VIR_DOMAIN_RUNNING;
return new StartAnswer(cmd);
} catch (LibvirtException e) {
s_logger.warn("LibvirtException ", e);
@@ -3895,14 +3834,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
return new StartAnswer(cmd, e.getMessage());
} finally {
- synchronized (_vms) {
- if (state != State.Stopped) {
- _vms.put(vmName, state);
- } else {
- _vms.remove(vmName);
- }
- }
- if (state != State.Running) {
+ if (state != DomainState.VIR_DOMAIN_RUNNING) {
_storagePoolMgr.disconnectPhysicalDisksViaVmSpec(vmSpec);
}
}
@@ -4221,13 +4153,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
@Override
public PingCommand getCurrentStatus(long id) {
- final HashMap<String, State> newStates = sync();
if (!_canBridgeFirewall) {
- return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, newStates, this.getHostVmStateReport());
+ return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, this.getHostVmStateReport());
} else {
HashMap<String, Pair<Long, Long>> nwGrpStates = syncNetworkGroups(id);
- return new PingRoutingWithNwGroupsCommand(getType(), id, newStates, this.getHostVmStateReport(), nwGrpStates);
+ return new PingRoutingWithNwGroupsCommand(getType(), id, this.getHostVmStateReport(), nwGrpStates);
}
}
@@ -4249,19 +4180,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
@Override
public StartupCommand[] initialize() {
- Map<String, State> changes = null;
-
- synchronized (_vms) {
- _vms.clear();
- changes = sync();
- }
final List<Object> info = getHostInfo();
final StartupRoutingCommand cmd =
new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), _hypervisorType,
RouterPrivateIpStrategy.HostLocal);
- cmd.setStateChanges(changes);
cmd.setCpuSockets((Integer)info.get(5));
fillNetworkInformation(cmd);
_privateIp = cmd.getPrivateIpAddress();
@@ -4269,7 +4193,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
cmd.setPool(_pool);
cmd.setCluster(_clusterId);
cmd.setGatewayIpAddress(_localGateway);
- cmd.setHostVmStateReport(getHostVmStateReport());
cmd.setIqn(getIqn());
StartupStorageCommand sscmd = null;
@@ -4322,138 +4245,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
}
- protected HashMap<String, State> sync() {
- HashMap<String, State> newStates;
- HashMap<String, State> oldStates = null;
-
- final HashMap<String, State> changes = new HashMap<String, State>();
-
- synchronized (_vms) {
- newStates = getAllVms();
- if (newStates == null) {
- s_logger.debug("Unable to get the vm states so no state sync at this point.");
- return changes;
- }
-
- oldStates = new HashMap<String, State>(_vms.size());
- oldStates.putAll(_vms);
-
- for (final Map.Entry<String, State> entry : newStates.entrySet()) {
- final String vm = entry.getKey();
-
- State newState = entry.getValue();
- final State oldState = oldStates.remove(vm);
-
- if (newState == State.Stopped && oldState != State.Stopping && oldState != null && oldState != State.Stopped) {
- newState = getRealPowerState(vm);
- }
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": libvirt has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null"));
- }
-
- if (vm.startsWith("migrating")) {
- s_logger.debug("Migration detected. Skipping");
- continue;
- }
- if (oldState == null) {
- _vms.put(vm, newState);
- s_logger.debug("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm);
- changes.put(vm, newState);
- } else if (oldState == State.Starting) {
- if (newState == State.Running) {
- _vms.put(vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm.");
- }
- } else if (oldState == State.Migrating) {
- if (newState == State.Running) {
- s_logger.debug("Detected that an migrating VM is now running: " + vm);
- _vms.put(vm, newState);
- }
- } else if (oldState == State.Stopping) {
- if (newState == State.Stopped) {
- _vms.put(vm, newState);
- } else if (newState == State.Running) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. ");
- }
- } else if (oldState != newState) {
- _vms.put(vm, newState);
- if (newState == State.Stopped) {
- if (_vmsKilled.remove(vm)) {
- s_logger.debug("VM " + vm + " has been killed for storage. ");
- newState = State.Error;
- }
- }
- changes.put(vm, newState);
- }
- }
-
- for (final Map.Entry<String, State> entry : oldStates.entrySet()) {
- final String vm = entry.getKey();
- final State oldState = entry.getValue();
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + " is now missing from libvirt so reporting stopped");
- }
-
- if (oldState == State.Stopping) {
- s_logger.debug("Ignoring VM " + vm + " in transition state stopping.");
- _vms.remove(vm);
- } else if (oldState == State.Starting) {
- s_logger.debug("Ignoring VM " + vm + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- _vms.remove(vm);
- } else if (oldState == State.Migrating) {
- s_logger.debug("Ignoring VM " + vm + " in migrating state.");
- } else {
- _vms.remove(vm);
- State state = State.Stopped;
- if (_vmsKilled.remove(entry.getKey())) {
- s_logger.debug("VM " + vm + " has been killed by storage monitor");
- state = State.Error;
- }
- changes.put(entry.getKey(), state);
- }
- }
- }
-
- return changes;
- }
-
- protected State getRealPowerState(String vm) {
- int i = 0;
- s_logger.trace("Checking on the HALTED State");
- Domain dm = null;
- for (; i < 5; i++) {
- try {
- Connect conn = LibvirtConnection.getConnectionByVmName(vm);
- dm = conn.domainLookupByName(vm);
- DomainInfo.DomainState vps = dm.getInfo().state;
- if (vps != null && vps != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF && vps != DomainInfo.DomainState.VIR_DOMAIN_NOSTATE) {
- return convertToState(vps);
- }
- } catch (final LibvirtException e) {
- s_logger.trace("Ignoring libvirt error.", e);
- } finally {
- try {
- if (dm != null) {
- dm.free();
- }
- } catch (final LibvirtException l) {
- s_logger.trace("Ignoring libvirt error.", l);
- }
- }
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- s_logger.trace("Ignoring InterruptedException.", e);
- }
- }
- return State.Stopped;
- }
-
protected List<String> getAllVmNames(Connect conn) {
ArrayList<String> la = new ArrayList<String>();
try {
@@ -4494,104 +4285,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return la;
}
- private HashMap<String, State> getAllVms() {
- final HashMap<String, State> vmStates = new HashMap<String, State>();
- Connect conn = null;
-
- if (_hypervisorType == HypervisorType.LXC) {
- try {
- conn = LibvirtConnection.getConnectionByType(HypervisorType.LXC.toString());
- vmStates.putAll(getAllVms(conn));
- conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString());
- vmStates.putAll(getAllVms(conn));
- } catch (LibvirtException e) {
- s_logger.debug("Failed to get connection: " + e.getMessage());
- }
- }
-
- if (_hypervisorType == HypervisorType.KVM) {
- try {
- conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString());
- vmStates.putAll(getAllVms(conn));
- } catch (LibvirtException e) {
- s_logger.debug("Failed to get connection: " + e.getMessage());
- }
- }
-
- return vmStates;
- }
-
- private HashMap<String, State> getAllVms(Connect conn) {
- final HashMap<String, State> vmStates = new HashMap<String, State>();
-
- String[] vms = null;
- int[] ids = null;
-
- try {
- ids = conn.listDomains();
- } catch (final LibvirtException e) {
- s_logger.warn("Unable to listDomains", e);
- return null;
- }
- try {
- vms = conn.listDefinedDomains();
- } catch (final LibvirtException e) {
- s_logger.warn("Unable to listDomains", e);
- return null;
- }
-
- Domain dm = null;
- for (int i = 0; i < ids.length; i++) {
- try {
- dm = conn.domainLookupByID(ids[i]);
-
- DomainInfo.DomainState ps = dm.getInfo().state;
-
- final State state = convertToState(ps);
-
- s_logger.trace("VM " + dm.getName() + ": powerstate = " + ps + "; vm state=" + state.toString());
- String vmName = dm.getName();
- vmStates.put(vmName, state);
- } catch (final LibvirtException e) {
- s_logger.warn("Unable to get vms", e);
- } finally {
- try {
- if (dm != null) {
- dm.free();
- }
- } catch (LibvirtException e) {
- s_logger.trace("Ignoring libvirt error.", e);
- }
- }
- }
-
- for (int i = 0; i < vms.length; i++) {
- try {
-
- dm = conn.domainLookupByName(vms[i]);
-
- DomainInfo.DomainState ps = dm.getInfo().state;
- final State state = convertToState(ps);
- String vmName = dm.getName();
- s_logger.trace("VM " + vmName + ": powerstate = " + ps + "; vm state=" + state.toString());
-
- vmStates.put(vmName, state);
- } catch (final LibvirtException e) {
- s_logger.warn("Unable to get vms", e);
- } finally {
- try {
- if (dm != null) {
- dm.free();
- }
- } catch (LibvirtException e) {
- s_logger.trace("Ignoring libvirt error.", e);
- }
- }
- }
-
- return vmStates;
- }
-
private HashMap<String, HostVmStateReportEntry> getHostVmStateReport() {
final HashMap<String, HostVmStateReportEntry> vmStates = new HashMap<String, HostVmStateReportEntry>();
Connect conn = null;
@@ -4643,7 +4336,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
try {
dm = conn.domainLookupByID(ids[i]);
- DomainInfo.DomainState ps = dm.getInfo().state;
+ DomainState ps = dm.getInfo().state;
final PowerState state = convertToPowerState(ps);
@@ -4674,7 +4367,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
dm = conn.domainLookupByName(vms[i]);
- DomainInfo.DomainState ps = dm.getInfo().state;
+ DomainState ps = dm.getInfo().state;
final PowerState state = convertToPowerState(ps);
String vmName = dm.getName();
s_logger.trace("VM " + vmName + ": powerstate = " + ps + "; vm state=" + state.toString());
@@ -4807,7 +4500,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
}
protected String stopVM(Connect conn, String vmName) {
- DomainInfo.DomainState state = null;
+ DomainState state = null;
Domain dm = null;
s_logger.debug("Try to stop the vm at first");
@@ -4844,7 +4537,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return null;
}
- if (state != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF) {
+ if (state != DomainState.VIR_DOMAIN_SHUTOFF) {
s_logger.debug("Try to destroy the vm");
ret = stopVM(conn, vmName, true);
if (ret != null) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
index 1414502..736f2ee 100755
--- a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
+++ b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
@@ -134,7 +134,6 @@ import com.cloud.utils.ssh.SSHCmdHelper;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
public class OvmResourceBase implements ServerResource, HypervisorResource {
private static final Logger s_logger = Logger.getLogger(OvmResourceBase.class);
@@ -158,17 +157,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
private final Map<String, Pair<Long, Long>> _vmNetworkStats = new ConcurrentHashMap<String, Pair<Long, Long>>();
private static String s_ovsAgentPath = "/opt/ovs-agent-latest";
- // TODO vmsync {
- static HashMap<String, State> s_stateMaps;
- protected HashMap<String, State> _vms = new HashMap<String, State>(50);
- static {
- s_stateMaps = new HashMap<String, State>();
- s_stateMaps.put("RUNNING", State.Running);
- s_stateMaps.put("DOWN", State.Stopped);
- s_stateMaps.put("ERROR", State.Error);
- s_stateMaps.put("SUSPEND", State.Stopped);
- }
- // TODO vmsync }
static HashMap<String, PowerState> s_powerStateMaps;
static {
@@ -315,7 +303,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
//TODO: introudce PIF
cmd.setPrivateIpAddress(_ip);
cmd.setStorageIpAddress(_ip);
- cmd.setHostVmStateReport(getHostVmStateReport());
String defaultBridge = OvmBridge.getBridgeByIp(_conn, _ip);
if (_publicNetworkName == null) {
@@ -390,12 +377,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
try {
StartupRoutingCommand cmd = new StartupRoutingCommand();
fillHostInfo(cmd);
- Map<String, State> changes = null;
- synchronized (_vms) {
- _vms.clear();
- changes = sync();
- }
- cmd.setStateChanges(changes);
cmd.setCaps("hvm");
return new StartupCommand[] {cmd};
} catch (Exception e) {
@@ -408,8 +389,7 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
public PingCommand getCurrentStatus(long id) {
try {
OvmHost.ping(_conn);
- HashMap<String, State> newStates = sync();
- return new PingRoutingCommand(getType(), id, newStates, getHostVmStateReport());
+ return new PingRoutingCommand(getType(), id, getHostVmStateReport());
} catch (XmlRpcException e) {
s_logger.debug("Check agent status failed", e);
return null;
@@ -668,13 +648,8 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
public synchronized StartAnswer execute(StartCommand cmd) {
VirtualMachineTO vmSpec = cmd.getVirtualMachine();
String vmName = vmSpec.getName();
- State state = State.Stopped;
OvmVm.Details vmDetails = null;
try {
- synchronized (_vms) {
- _vms.put(vmName, State.Starting);
- }
-
vmDetails = new OvmVm.Details();
applySpecToVm(vmDetails, vmSpec);
createVbds(vmDetails, vmSpec);
@@ -691,21 +666,11 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
}
}
- state = State.Running;
return new StartAnswer(cmd);
} catch (Exception e) {
s_logger.debug("Start vm " + vmName + " failed", e);
cleanup(vmDetails);
return new StartAnswer(cmd, e.getMessage());
- } finally {
- synchronized (_vms) {
- //FIXME: where to come to Stopped???
- if (state != State.Stopped) {
- _vms.put(vmName, state);
- } else {
- _vms.remove(vmName);
- }
- }
}
}
@@ -729,12 +694,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
@Override
public StopAnswer execute(StopCommand cmd) {
String vmName = cmd.getVmName();
- State state = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
-
try {
OvmVm.Details vm = null;
try {
@@ -747,29 +706,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
deleteAllNetworkRulesForVm(vmName);
OvmVm.stop(_conn, vmName);
cleanup(vm);
-
- state = State.Stopped;
return new StopAnswer(cmd, "success", true);
} catch (Exception e) {
s_logger.debug("Stop " + vmName + "failed", e);
return new StopAnswer(cmd, e.getMessage(), false);
- } finally {
- synchronized (_vms) {
- if (state != null) {
- _vms.put(vmName, state);
- } else {
- _vms.remove(vmName);
- }
- }
}
}
@Override
public RebootAnswer execute(RebootCommand cmd) {
String vmName = cmd.getVmName();
- synchronized (_vms) {
- _vms.put(vmName, State.Starting);
- }
try {
Map<String, String> res = OvmVm.reboot(_conn, vmName);
@@ -778,22 +724,9 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
} catch (Exception e) {
s_logger.debug("Reboot " + vmName + " failed", e);
return new RebootAnswer(cmd, e.getMessage(), false);
- } finally {
- synchronized (_vms) {
- _vms.put(cmd.getVmName(), State.Running);
- }
}
}
- private State toState(String vmName, String s) {
- State state = s_stateMaps.get(s);
- if (state == null) {
- s_logger.debug("Unkown state " + s + " for " + vmName);
- state = State.Unknown;
- }
- return state;
- }
-
private PowerState toPowerState(String vmName, String s) {
PowerState state = s_powerStateMaps.get(s);
if (state == null) {
@@ -813,111 +746,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
return vmStates;
}
- protected HashMap<String, State> getAllVms() throws XmlRpcException {
- final HashMap<String, State> vmStates = new HashMap<String, State>();
+ protected HashMap<String, PowerState> getAllVms() throws XmlRpcException {
+ final HashMap<String, PowerState> vmStates = new HashMap<String, PowerState>();
Map<String, String> vms = OvmHost.getAllVms(_conn);
for (final Map.Entry<String, String> entry : vms.entrySet()) {
- State state = toState(entry.getKey(), entry.getValue());
- vmStates.put(entry.getKey(), state);
+ PowerState powerState = toPowerState(entry.getKey(), entry.getValue());
+ vmStates.put(entry.getKey(), powerState);
}
return vmStates;
}
- protected HashMap<String, State> sync() {
- HashMap<String, State> newStates;
- HashMap<String, State> oldStates = null;
-
- try {
- final HashMap<String, State> changes = new HashMap<String, State>();
- newStates = getAllVms();
- if (newStates == null) {
- s_logger.debug("Unable to get the vm states so no state sync at this point.");
- return null;
- }
-
- synchronized (_vms) {
- oldStates = new HashMap<String, State>(_vms.size());
- oldStates.putAll(_vms);
-
- for (final Map.Entry<String, State> entry : newStates.entrySet()) {
- final String vm = entry.getKey();
-
- State newState = entry.getValue();
- final State oldState = oldStates.remove(vm);
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": ovm has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null"));
- }
-
- /*
- * TODO: what is migrating ??? if
- * (vm.startsWith("migrating")) {
- * s_logger.debug("Migrating from xen detected. Skipping");
- * continue; }
- */
-
- if (oldState == null) {
- _vms.put(vm, newState);
- s_logger.debug("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm);
- changes.put(vm, newState);
- } else if (oldState == State.Starting) {
- if (newState == State.Running) {
- _vms.put(vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm.");
- }
- } else if (oldState == State.Migrating) {
- if (newState == State.Running) {
- s_logger.debug("Detected that an migrating VM is now running: " + vm);
- _vms.put(vm, newState);
- }
- } else if (oldState == State.Stopping) {
- if (newState == State.Stopped) {
- _vms.put(vm, newState);
- } else if (newState == State.Running) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. ");
- }
- } else if (oldState != newState) {
- _vms.put(vm, newState);
- if (newState == State.Stopped) {
- //TODO: need anything here?
- }
- changes.put(vm, newState);
- }
- }
-
- for (final Map.Entry<String, State> entry : oldStates.entrySet()) {
- final String vm = entry.getKey();
- final State oldState = entry.getValue();
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + " is now missing from ovm server so reporting stopped");
- }
-
- if (oldState == State.Stopping) {
- s_logger.debug("Ignoring VM " + vm + " in transition state stopping.");
- _vms.remove(vm);
- } else if (oldState == State.Starting) {
- s_logger.debug("Ignoring VM " + vm + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- _vms.remove(vm);
- } else if (oldState == State.Migrating) {
- s_logger.debug("Ignoring VM " + vm + " in migrating state.");
- } else {
- _vms.remove(vm);
- State state = State.Stopped;
- // TODO: need anything here???
- changes.put(entry.getKey(), state);
- }
- }
- }
-
- return changes;
- } catch (Exception e) {
- s_logger.debug("Ovm full sync failed", e);
- return null;
- }
- }
protected GetStorageStatsAnswer execute(final GetStorageStatsCommand cmd) {
try {
@@ -998,9 +836,6 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
getNetwork(nic);
}
- synchronized (_vms) {
- _vms.put(vm.getName(), State.Migrating);
- }
return new PrepareForMigrationAnswer(cmd);
} catch (Exception e) {
s_logger.warn("Catch Exception " + e.getClass().getName() + " prepare for migration failed due to " + e.toString(), e);
@@ -1010,28 +845,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
protected MigrateAnswer execute(final MigrateCommand cmd) {
final String vmName = cmd.getVmName();
- State state = null;
-
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
-
try {
OvmVm.Details vm = OvmVm.getDetails(_conn, vmName);
String destIp = cmd.getDestinationIp();
OvmVm.migrate(_conn, vmName, destIp);
- state = State.Stopping;
cleanup(vm);
return new MigrateAnswer(cmd, true, "migration succeeded", null);
} catch (Exception e) {
String msg = "Catch Exception " + e.getClass().getName() + ": Migration failed due to " + e.toString();
s_logger.debug(msg, e);
return new MigrateAnswer(cmd, false, msg, null);
- } finally {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
}
}
@@ -1040,23 +863,17 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
try {
Map<String, String> res = OvmVm.register(_conn, vmName);
Integer vncPort = Integer.parseInt(res.get("vncPort"));
- HashMap<String, State> states = getAllVms();
- State vmState = states.get(vmName);
- if (vmState == null) {
+ HashMap<String, PowerState> states = getAllVms();
+ PowerState vmPowerState = states.get(vmName);
+ if (vmPowerState == null) {
s_logger.warn("Check state of " + vmName + " return null in CheckVirtualMachineCommand");
- vmState = State.Stopped;
- }
-
- if (vmState == State.Running) {
- synchronized (_vms) {
- _vms.put(vmName, State.Running);
- }
+ vmPowerState = PowerState.PowerOff;
}
- return new CheckVirtualMachineAnswer(cmd, vmState, vncPort);
+ return new CheckVirtualMachineAnswer(cmd, vmPowerState, vncPort);
} catch (Exception e) {
s_logger.debug("Check migration for " + vmName + " failed", e);
- return new CheckVirtualMachineAnswer(cmd, State.Stopped, null);
+ return new CheckVirtualMachineAnswer(cmd, PowerState.PowerOff, null);
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java
index 2d75c6d..d99c742 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java
@@ -67,7 +67,6 @@ public class AgentRoutingResource extends AgentStorageResource {
private static final Logger s_logger = Logger.getLogger(AgentRoutingResource.class);
private static final Gson s_gson = GsonHelper.getGson();
- protected Map<String, State> _vms = new HashMap<String, State>();
private Map<String, Pair<Long, Long>> _runningVms = new HashMap<String, Pair<Long, Long>>();
long usedCpu = 0;
long usedMem = 0;
@@ -159,23 +158,12 @@ public class AgentRoutingResource extends AgentStorageResource {
if (isStopped()) {
return null;
}
- synchronized (_vms) {
- if (_vms.size() == 0) {
- //load vms state from database
- _vms.putAll(_simMgr.getVmStates(hostGuid));
- }
- }
- final HashMap<String, State> newStates = sync();
HashMap<String, Pair<Long, Long>> nwGrpStates = _simMgr.syncNetworkGroups(hostGuid);
- return new PingRoutingWithNwGroupsCommand(getType(), id, newStates, getHostVmStateReport(), nwGrpStates);
+ return new PingRoutingWithNwGroupsCommand(getType(), id, getHostVmStateReport(), nwGrpStates);
}
@Override
public StartupCommand[] initialize() {
- synchronized (_vms) {
- _vms.clear();
- }
- Map<String, State> changes = _simMgr.getVmStates(this.hostGuid);
Map<String, MockVMVO> vmsMaps = _simMgr.getVms(this.hostGuid);
totalCpu = agentHost.getCpuCount() * agentHost.getCpuSpeed();
totalMem = agentHost.getMemorySize();
@@ -191,7 +179,6 @@ public class AgentRoutingResource extends AgentStorageResource {
StartupRoutingCommand cmd =
new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), HypervisorType.Simulator,
RouterPrivateIpStrategy.HostLocal);
- cmd.setStateChanges(changes);
Map<String, String> hostDetails = new HashMap<String, String>();
hostDetails.put(RouterPrivateIpStrategy.class.getCanonicalName(), RouterPrivateIpStrategy.DcGlobal.toString());
@@ -240,11 +227,6 @@ public class AgentRoutingResource extends AgentStorageResource {
if (this.totalCpu < (vmSpec.getCpus() * vmSpec.getMaxSpeed() + this.usedCpu) || this.totalMem < (vmSpec.getMaxRam() + this.usedMem)) {
return new StartAnswer(cmd, "Not enough resource to start the vm");
}
- State state = State.Stopped;
- synchronized (_vms) {
- _vms.put(vmName, State.Starting);
- }
-
try {
Answer result = _simMgr.simulate(cmd, hostGuid);
if (!result.getResult()) {
@@ -254,12 +236,7 @@ public class AgentRoutingResource extends AgentStorageResource {
this.usedCpu += vmSpec.getCpus() * vmSpec.getMaxSpeed();
this.usedMem += vmSpec.getMaxRam();
_runningVms.put(vmName, new Pair<Long, Long>(Long.valueOf(vmSpec.getCpus() * vmSpec.getMaxSpeed()), vmSpec.getMaxRam()));
- state = State.Running;
- } finally {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
}
return new StartAnswer(cmd);
@@ -271,11 +248,6 @@ public class AgentRoutingResource extends AgentStorageResource {
StopAnswer answer = null;
String vmName = cmd.getVmName();
- State state = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
try {
Answer result = _simMgr.simulate(cmd, hostGuid);
@@ -289,12 +261,7 @@ public class AgentRoutingResource extends AgentStorageResource {
this.usedCpu -= data.first();
this.usedMem -= data.second();
}
- state = State.Stopped;
- } finally {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
}
return answer;
@@ -303,12 +270,6 @@ public class AgentRoutingResource extends AgentStorageResource {
protected CheckVirtualMachineAnswer execute(final CheckVirtualMachineCommand cmd) {
final String vmName = cmd.getVmName();
CheckVirtualMachineAnswer result = (CheckVirtualMachineAnswer)_simMgr.simulate(cmd, hostGuid);
- State state = result.getState();
- if (state == State.Running) {
- synchronized (_vms) {
- _vms.put(vmName, State.Running);
- }
- }
return result;
}
@@ -346,73 +307,6 @@ public class AgentRoutingResource extends AgentStorageResource {
return report;
}
- protected HashMap<String, State> sync() {
- Map<String, State> newStates;
- Map<String, State> oldStates = null;
-
- HashMap<String, State> changes = new HashMap<String, State>();
-
- synchronized (_vms) {
- oldStates = new HashMap<String, State>(_vms.size());
- oldStates.putAll(_vms);
- newStates = new HashMap<String, State>(_vms.size());
- newStates.putAll(_vms);
-
- for (Map.Entry<String, State> entry : newStates.entrySet()) {
- String vm = entry.getKey();
-
- State newState = entry.getValue();
- State oldState = oldStates.remove(vm);
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null"));
- }
-
- if (oldState == null) {
- _vms.put(vm, newState);
- changes.put(vm, newState);
- } else if (oldState == State.Starting) {
- if (newState == State.Running) {
- _vms.put(vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm.");
- }
- } else if (oldState == State.Stopping) {
- if (newState == State.Stopped) {
- _vms.put(vm, newState);
- } else if (newState == State.Running) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. ");
- }
- } else if (oldState != newState) {
- _vms.put(vm, newState);
- changes.put(vm, newState);
- }
- }
-
- for (Map.Entry<String, State> entry : oldStates.entrySet()) {
- String vm = entry.getKey();
- State oldState = entry.getValue();
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + " is now missing from simulator agent so reporting stopped");
- }
-
- if (oldState == State.Stopping) {
- s_logger.debug("Ignoring VM " + vm + " in transition state stopping.");
- _vms.remove(vm);
- } else if (oldState == State.Starting) {
- s_logger.debug("Ignoring VM " + vm + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- _vms.remove(vm);
- } else {
- changes.put(entry.getKey(), State.Stopped);
- }
- }
- }
-
- return changes;
- }
-
private Answer execute(ShutdownCommand cmd) {
this.stopped = true;
return new Answer(cmd);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/330c4ba5/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 6a803af..b87e4ea 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -269,7 +269,6 @@ import com.cloud.utils.net.NetUtils;
import com.cloud.utils.ssh.SshHelper;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VirtualMachineName;
import com.cloud.vm.VmDetailConstants;
@@ -333,19 +332,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
s_powerStatesTable.put(VirtualMachinePowerState.SUSPENDED, PowerState.PowerOn);
}
- // TODO vmsync {
- // deprecated, will delete after full replacement
- //
- protected static HashMap<VirtualMachinePowerState, State> s_statesTable;
- static {
- s_statesTable = new HashMap<VirtualMachinePowerState, State>();
- s_statesTable.put(VirtualMachinePowerState.POWERED_ON, State.Running);
- s_statesTable.put(VirtualMachinePowerState.POWERED_OFF, State.Stopped);
- s_statesTable.put(VirtualMachinePowerState.SUSPENDED, State.Stopped);
- }
-
- // TODO vmsync }
-
public Gson getGson() {
return _gson;
}
@@ -1314,11 +1300,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
try {
VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
- // mark VM as starting state so that sync can know not to report stopped too early
- synchronized (_vms) {
- _vms.put(vmInternalCSName, State.Starting);
- }
-
VmwareHypervisorHost hyperHost = getHyperHost(context);
DiskTO[] disks = validateDisks(vmSpec.getDisks());
assert (disks.length > 0);
@@ -1727,13 +1708,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
s_logger.warn(msg, e);
return new StartAnswer(cmd, msg);
} finally {
- synchronized (_vms) {
- if (state != State.Stopped) {
- _vms.put(vmInternalCSName, state);
- } else {
- _vms.remove(vmInternalCSName);
- }
- }
}
}
@@ -2570,7 +2544,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
HashMap<String, VmStatsEntry> vmStatsMap = null;
try {
- HashMap<String, State> newStates = getVmStates();
+ HashMap<String, PowerState> vmPowerStates = getVmStates()
// getVmNames should return all i-x-y values.
List<String> requestedVmNames = cmd.getVmNames();
@@ -2578,7 +2552,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
if (requestedVmNames != null) {
for (String vmName : requestedVmNames) {
- if (newStates.get(vmName) != null) {
+ if (vmPowerStates.get(vmName) != null) {
vmNames.add(vmName);
}
}
@@ -2653,40 +2627,25 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
}
- State state = null;
- synchronized (_vms) {
- state = _vms.get(cmd.getVmName());
- _vms.put(cmd.getVmName(), State.Stopping);
- }
-
try {
vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, "0");
if (getVmPowerState(vmMo) != PowerState.PowerOff) {
if (vmMo.safePowerOff(_shutdownWaitMs)) {
- state = State.Stopped;
return new StopAnswer(cmd, "Stop VM " + cmd.getVmName() + " Succeed", true);
} else {
String msg = "Have problem in powering off VM " + cmd.getVmName() + ", let the process continue";
s_logger.warn(msg);
return new StopAnswer(cmd, msg, true);
}
- } else {
- state = State.Stopped;
}
String msg = "VM " + cmd.getVmName() + " is already in stopped state";
s_logger.info(msg);
return new StopAnswer(cmd, msg, true);
} finally {
- synchronized (_vms) {
- _vms.put(cmd.getVmName(), state);
- }
}
} else {
- synchronized (_vms) {
- _vms.remove(cmd.getVmName());
- }
String msg = "VM " + cmd.getVmName() + " is no longer in vSphere";
s_logger.info(msg);
@@ -2773,7 +2732,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
final String vmName = cmd.getVmName();
- State state = State.Unknown;
+ PowerState powerState = PowerState.Unknown;
Integer vncPort = null;
VmwareContext context = getServiceContext();
@@ -2782,16 +2741,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
try {
VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName);
if (vmMo != null) {
- state = getVmState(vmMo);
- if (state == State.Running) {
- synchronized (_vms) {
- _vms.put(vmName, State.Running);
- }
- }
- return new CheckVirtualMachineAnswer(cmd, state, vncPort);
+ powerState = getVmPowerState(vmMo);
+ return new CheckVirtualMachineAnswer(cmd, powerState, vncPort);
} else {
s_logger.warn("Can not find vm " + vmName + " to execute CheckVirtualMachineCommand");
- return new CheckVirtualMachineAnswer(cmd, state, vncPort);
+ return new CheckVirtualMachineAnswer(cmd, powerState, vncPort);
}
} catch (Throwable e) {
@@ -2801,7 +2755,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
s_logger.error("Unexpected exception: " + VmwareHelper.getExceptionMessage(e), e);
- return new CheckVirtualMachineAnswer(cmd, state, vncPort);
+ return new CheckVirtualMachineAnswer(cmd, powerState, vncPort);
}
}
@@ -2875,13 +2829,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
final String vmName = cmd.getVmName();
-
- State state = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
-
try {
VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext());
ManagedObjectReference morDc = hyperHost.getHyperHostDatacenter();
@@ -2905,7 +2852,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
throw new Exception("Migration failed");
}
- state = State.Stopping;
return new MigrateAnswer(cmd, true, "migration succeeded", null);
} catch (Throwable e) {
if (e instanceof RemoteException) {
@@ -2916,10 +2862,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
String msg = "MigrationCommand failed due to " + VmwareHelper.getExceptionMessage(e);
s_logger.warn(msg, e);
return new MigrateAnswer(cmd, false, msg, null);
- } finally {
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
}
}
@@ -2932,12 +2874,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
VirtualMachineTO vmTo = cmd.getVirtualMachine();
final String vmName = vmTo.getName();
- State state = null;
- synchronized (_vms) {
- state = _vms.get(vmName);
- _vms.put(vmName, State.Stopping);
- }
-
VmwareHypervisorHost srcHyperHost = null;
VmwareHypervisorHost tgtHyperHost = null;
VirtualMachineMO vmMo = null;
@@ -3082,7 +3018,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
s_logger.debug("Successfully relocated VM " + vmName + " from " + _hostName + " to " + tgtHyperHost.getHyperHostName());
}
- state = State.Stopping;
return new MigrateWithStorageAnswer(cmd, volumeToList);
} catch (Throwable e) {
if (e instanceof RemoteException) {
@@ -3105,9 +3040,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
s_logger.debug("Successfully unmounted datastore " + mountedDatastore + " at " + _hostName);
}
- synchronized (_vms) {
- _vms.put(vmName, state);
- }
}
}
@@ -3922,12 +3854,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
@Override
public PingCommand getCurrentStatus(long id) {
gcAndKillHungWorkerVMs();
-
- HashMap<String, State> newStates = sync();
- if (newStates == null) {
- return null;
- }
-
VmwareContext context = getServiceContext();
VmwareHypervisorHost hyperHost = getHyperHost(context);
try {
@@ -3938,7 +3864,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
s_logger.error("Unexpected exception", e);
return null;
}
- return new PingRoutingCommand(getType(), id, newStates, syncHostVmStates());
+ return new PingRoutingCommand(getType(), id, syncHostVmStates());
}
private void gcAndKillHungWorkerVMs() {
@@ -4043,22 +3969,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
StartupRoutingCommand cmd = new StartupRoutingCommand();
fillHostInfo(cmd);
-
- Map<String, State> changes = null;
- synchronized (_vms) {
- _vms.clear();
- changes = sync();
- }
-
cmd.setHypervisorType(HypervisorType.VMware);
-
- // TODO vmsync {
- // deprecated after full replacement
- cmd.setStateChanges(changes);
- // TODO vmsync}
-
- cmd.setHostVmStateReport(syncHostVmStates());
-
cmd.setCluster(_cluster);
cmd.setHypervisorVersion(hostApiVersion);
@@ -4246,114 +4157,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
}
- protected HashMap<String, State> sync() {
- HashMap<String, State> changes = new HashMap<String, State>();
- HashMap<String, State> oldStates = null;
-
- try {
- synchronized (_vms) {
- HashMap<String, State> newStates = getVmStates();
- oldStates = new HashMap<String, State>(_vms.size());
- oldStates.putAll(_vms);
-
- for (final Map.Entry<String, State> entry : newStates.entrySet()) {
- final String vm = entry.getKey();
-
- State newState = entry.getValue();
- final State oldState = oldStates.remove(vm);
-
- if (s_logger.isTraceEnabled()) {
- s_logger.trace("VM " + vm + ": vSphere has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null"));
- }
-
- if (vm.startsWith("migrating")) {
- s_logger.debug("Migrating detected. Skipping");
- continue;
- }
-
- if (oldState == null) {
- _vms.put(vm, newState);
- s_logger.debug("Detecting a new state but couldn't find a old state so adding it to the changes: " + vm);
- changes.put(vm, newState);
- } else if (oldState == State.Starting) {
- if (newState == State.Running) {
- _vms.put(vm, newState);
- } else if (newState == State.Stopped) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in starting the vm.");
- }
- } else if (oldState == State.Migrating) {
- if (newState == State.Running) {
- s_logger.debug("Detected that an migrating VM is now running: " + vm);
- _vms.put(vm, newState);
- }
- } else if (oldState == State.Stopping) {
- if (newState == State.Stopped) {
- _vms.put(vm, newState);
- } else if (newState == State.Running) {
- s_logger.debug("Ignoring vm " + vm + " because of a lag in stopping the vm. ");
- }
- } else if (oldState != newState) {
- _vms.put(vm, newState);
- if (newState == State.Stopped) {
- /*
- * if (_vmsKilled.remove(vm)) { s_logger.debug("VM " + vm + " has been killed for storage. ");
- * newState = State.Error; }
- */
- }
- changes.put(vm, newState);
- }
- }
-
- for (final Map.Entry<String, State> entry : oldStates.entrySet()) {
- final String vm = entry.getKey();
- final State oldState = entry.getValue();
-
- if (isVmInCluster(vm)) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("VM " + vm + " is now missing from host report but we detected that it might be migrated to other host by vCenter");
- }
-
- if (oldState != State.Starting && oldState != State.Migrating) {
- s_logger.debug("VM " + vm +
- " is now missing from host report and VM is not at starting/migrating state, remove it from host VM-sync map, oldState: " + oldState);
- _vms.remove(vm);
- } else {
- s_logger.debug("VM " + vm + " is missing from host report, but we will ignore VM " + vm + " in transition state " + oldState);
- }
- continue;
- }
-
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("VM " + vm + " is now missing from host report");
- }
-
- if (oldState == State.Stopping) {
- s_logger.debug("Ignoring VM " + vm + " in transition state stopping.");
- _vms.remove(vm);
- } else if (oldState == State.Starting) {
- s_logger.debug("Ignoring VM " + vm + " in transition state starting.");
- } else if (oldState == State.Stopped) {
- _vms.remove(vm);
- } else if (oldState == State.Migrating) {
- s_logger.debug("Ignoring VM " + vm + " in migrating state.");
- } else {
- State state = State.Stopped;
- changes.put(entry.getKey(), state);
- }
- }
- }
- } catch (Throwable e) {
- if (e instanceof RemoteException) {
- s_logger.warn("Encounter remote exception to vCenter, invalidate VMware session context");
- invalidateServiceContext();
- }
-
- s_logger.error("Unable to perform sync information collection process at this point due to " + VmwareHelper.getExceptionMessage(e), e);
- return null;
- }
- return changes;
- }
-
private boolean isVmInCluster(String vmName) throws Exception {
VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext());
@@ -4515,8 +4318,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return newStates;
}
- // TODO vmsync {
- private HashMap<String, State> getVmStates() throws Exception {
+
+ private HashMap<String, PowerState> getVmStates() throws Exception {
VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext());
int key = ((HostMO)hyperHost).getCustomFieldKey("VirtualMachine", CustomFieldConstants.CLOUD_VM_INTERNAL_NAME);
@@ -4560,7 +4363,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
name = VMInternalCSName;
if (!isTemplate) {
- newStates.put(name, convertState(powerState));
+ newStates.put(name, convertPowerState(powerState));
}
}
}
@@ -4568,6 +4371,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return newStates;
}
+
+
private HashMap<String, VmStatsEntry> getVmStats(List<String> vmNames) throws Exception {
VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext());
HashMap<String, VmStatsEntry> vmResponseMap = new HashMap<String, VmStatsEntry>();
@@ -4690,7 +4495,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return vmResponseMap;
}
- // TODO vmsync }
protected String networkUsage(final String privateIpAddress, final String option, final String ethName) {
String args = null;
@@ -4788,19 +4592,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return connect(vmname, ipAddress, 3922);
}
- // TODO vmsync {
- // deprecated after full replacement
- private static State convertState(VirtualMachinePowerState powerState) {
- return s_statesTable.get(powerState);
- }
-
- public static State getVmState(VirtualMachineMO vmMo) throws Exception {
- VirtualMachineRuntimeInfo runtimeInfo = vmMo.getRuntimeInfo();
- return convertState(runtimeInfo.getPowerState());
- }
-
- // TODO vmsync }
-
private static PowerState convertPowerState(VirtualMachinePowerState powerState) {
return s_powerStatesTable.get(powerState);
}