bug 11304: restore host status after initialization failure

This commit is contained in:
Kelven Yang 2011-09-02 15:16:41 -07:00
parent c683fda236
commit 4d3d47f01c
2 changed files with 81 additions and 68 deletions

View File

@ -180,15 +180,18 @@ public enum Status {
s_fsm.addTransition(Status.Disconnected, Event.WaitedTooLong, Status.Alert); s_fsm.addTransition(Status.Disconnected, Event.WaitedTooLong, Status.Alert);
s_fsm.addTransition(Status.Disconnected, Event.Remove, Status.Removed); s_fsm.addTransition(Status.Disconnected, Event.Remove, Status.Removed);
s_fsm.addTransition(Status.Disconnected, Event.HypervisorVersionChanged, Status.Disconnected); s_fsm.addTransition(Status.Disconnected, Event.HypervisorVersionChanged, Status.Disconnected);
s_fsm.addTransition(Status.Disconnected, Event.AgentDisconnected, Status.Disconnected);
s_fsm.addTransition(Status.Down, Event.MaintenanceRequested, Status.PrepareForMaintenance); s_fsm.addTransition(Status.Down, Event.MaintenanceRequested, Status.PrepareForMaintenance);
s_fsm.addTransition(Status.Down, Event.AgentConnected, Status.Connecting); s_fsm.addTransition(Status.Down, Event.AgentConnected, Status.Connecting);
s_fsm.addTransition(Status.Down, Event.Remove, Status.Removed); s_fsm.addTransition(Status.Down, Event.Remove, Status.Removed);
s_fsm.addTransition(Status.Down, Event.ManagementServerDown, Status.Down); s_fsm.addTransition(Status.Down, Event.ManagementServerDown, Status.Down);
s_fsm.addTransition(Status.Down, Event.AgentDisconnected, Status.Down);
s_fsm.addTransition(Status.Alert, Event.MaintenanceRequested, Status.PrepareForMaintenance); s_fsm.addTransition(Status.Alert, Event.MaintenanceRequested, Status.PrepareForMaintenance);
s_fsm.addTransition(Status.Alert, Event.AgentConnected, Status.Connecting); s_fsm.addTransition(Status.Alert, Event.AgentConnected, Status.Connecting);
s_fsm.addTransition(Status.Alert, Event.Ping, Status.Up); s_fsm.addTransition(Status.Alert, Event.Ping, Status.Up);
s_fsm.addTransition(Status.Alert, Event.Remove, Status.Removed); s_fsm.addTransition(Status.Alert, Event.Remove, Status.Removed);
s_fsm.addTransition(Status.Alert, Event.ManagementServerDown, Status.Alert); s_fsm.addTransition(Status.Alert, Event.ManagementServerDown, Status.Alert);
s_fsm.addTransition(Status.Alert, Event.AgentDisconnected, Status.Alert);
s_fsm.addTransition(Status.Rebalancing, Event.RebalanceFailed, Status.Disconnected); s_fsm.addTransition(Status.Rebalancing, Event.RebalanceFailed, Status.Disconnected);
s_fsm.addTransition(Status.Rebalancing, Event.RebalanceCompleted, Status.Connecting); s_fsm.addTransition(Status.Rebalancing, Event.RebalanceCompleted, Status.Connecting);
} }

View File

@ -1193,8 +1193,10 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager {
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
protected boolean loadDirectlyConnectedHost(HostVO host, boolean forRebalance) { protected boolean loadDirectlyConnectedHost(HostVO host, boolean forRebalance) {
String resourceName = host.getResource(); boolean initialized = false;
ServerResource resource = null; ServerResource resource = null;
try {
String resourceName = host.getResource();
try { try {
Class<?> clazz = Class.forName(resourceName); Class<?> clazz = Class.forName(resourceName);
Constructor constructor = clazz.getConstructor(); Constructor constructor = clazz.getConstructor();
@ -1253,7 +1255,6 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager {
try { try {
resource.configure(host.getName(), params); resource.configure(host.getName(), params);
} catch (ConfigurationException e) { } catch (ConfigurationException e) {
e.printStackTrace();
s_logger.warn("Unable to configure resource due to ", e); s_logger.warn("Unable to configure resource due to ", e);
return false; return false;
} }
@ -1263,6 +1264,15 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager {
return false; return false;
} }
initialized = true;
} finally {
if(!initialized) {
if (host != null) {
_hostDao.updateStatus(host, Event.AgentDisconnected, _nodeId);
}
}
}
if (forRebalance) { if (forRebalance) {
AgentAttache attache = simulateStart(host.getId(), resource, host.getDetails(), false, null, null, true); AgentAttache attache = simulateStart(host.getId(), resource, host.getDetails(), false, null, null, true);
if (attache == null) { if (attache == null) {