bug 11448: simulator: move vm state into memory

status 11448: resolved fixed
This commit is contained in:
Edison Su 2011-09-15 13:53:14 -07:00
parent bcf48de212
commit 72d987aa23
4 changed files with 37 additions and 19 deletions

View File

@ -26,6 +26,7 @@ import com.cloud.agent.api.Command;
import com.cloud.agent.api.StoragePoolInfo;
import com.cloud.utils.Pair;
import com.cloud.utils.component.Manager;
import com.cloud.vm.VirtualMachine.State;
public interface SimulatorManager extends Manager {
public static final String Name = "simulator manager";
@ -57,4 +58,6 @@ public interface SimulatorManager extends Manager {
boolean configureSimulator(Long zoneId, Long podId, Long clusterId, Long hostId, String command, String values);
public HashMap<String, Pair<Long, Long>> syncNetworkGroups(String hostGuid);
Map<String, State> getVmStates(String hostGuid);
}

View File

@ -71,6 +71,7 @@ import com.cloud.utils.db.ConnectionConcierge;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.VirtualMachine.State;
@Local(value = { SimulatorManager.class })
public class SimulatorManagerImpl implements SimulatorManager {
private static final Logger s_logger = Logger.getLogger(SimulatorManagerImpl.class);
@ -130,23 +131,23 @@ public class SimulatorManagerImpl implements SimulatorManager {
@DB
@Override
public Answer simulate(Command cmd, String hostGuid) {
MockHost host = _mockHost.findByGuid(hostGuid);
MockConfigurationVO config = _mockConfigDao.findByCommand(host.getDataCenterId(), host.getPodId(), host.getClusterId(), host.getId(), cmd.toString());
if (config == null) {
config = _mockConfigDao.findByGlobal(cmd.toString());
}
if (config != null) {
Map<String, String> configParameters = config.getParameters();
if (configParameters.get("enabled").equalsIgnoreCase("false")) {
return new Answer(cmd, false, "cmd is disabled");
}
}
Transaction txn = Transaction.currentTxn();
txn.transitToUserManagedConnection(_concierge.conn());
try {
MockHost host = _mockHost.findByGuid(hostGuid);
MockConfigurationVO config = _mockConfigDao.findByCommand(host.getDataCenterId(), host.getPodId(), host.getClusterId(), host.getId(), cmd.toString());
if (config == null) {
config = _mockConfigDao.findByGlobal(cmd.toString());
}
if (config != null) {
Map<String, String> configParameters = config.getParameters();
if (configParameters.get("enabled").equalsIgnoreCase("false")) {
return new Answer(cmd, false, "cmd is disabled");
}
}
if (cmd instanceof GetHostStatsCommand) {
return _mockAgentMgr.getHostStatistic((GetHostStatsCommand)cmd);
} else if (cmd instanceof CheckHealthCommand) {
@ -266,6 +267,18 @@ public class SimulatorManagerImpl implements SimulatorManager {
_mockConfigDao.persist(config);
return true;
}
@Override
@DB
public Map<String, State> getVmStates(String hostGuid) {
Transaction txn = Transaction.currentTxn();
txn.transitToUserManagedConnection(_concierge.conn());
try {
return _mockVmMgr.getVmStates(hostGuid);
} finally {
txn.transitToAutoManagedConnection(Transaction.CLOUD_DB);
}
}
@Override
public HashMap<String, Pair<Long, Long>> syncNetworkGroups(String hostGuid) {

View File

@ -245,9 +245,10 @@ public class AgentRoutingResource extends AgentStorageResource {
HashMap<String, State> changes = new HashMap<String, State>();
synchronized (_vms) {
newStates = getVmMgr().getVmStates(hostGuid);
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();

View File

@ -11,15 +11,16 @@
</adapters>
<adapters key="com.cloud.resource.Discoverer">
<adapter name="Simulator Agent" class="com.cloud.resource.SimulatorDiscoverer"/>
<adapter name="XCP Agent" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer"/>
<adapter name="SecondaryStorage" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer"/>
<adapter name="KVM Agent" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer"/>
<adapter name="SecondaryStorage" class="com.cloud.resource.SimulatorSecondaryDiscoverer"/>
</adapters>
<adapters key="com.cloud.alert.AlertAdapter">
<adapter name="ClusterAlert" class="com.cloud.alert.ClusterAlertAdapter"/>
<adapter name="ConsoleProxyAlert" class="com.cloud.alert.ConsoleProxyAlertAdapter"/>
<adapter name="SecondaryStorageVmAlert" class="com.cloud.alert.SecondaryStorageVmAlertAdapter"/>
</adapters>
<adapters key="com.cloud.hypervisor.HypervisorGuru">
<adapter name="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru"/>
<adapter name="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru"/>
<adapter name="KVMGuru" class="com.cloud.hypervisor.KVMGuru"/>
</adapters>
<adapters key="com.cloud.agent.StartupCommandProcessor">
<adapter name="BasicAgentAuthorizer" class="com.cloud.agent.manager.authn.impl.BasicAgentAuthManager"/>