Skip to content

Commit caa8aaf

Browse files
committed
Bug 11522 - New agent manager
clean up events, status of agent
1 parent 66c347b commit caa8aaf

12 files changed

Lines changed: 63 additions & 214 deletions

File tree

api/src/com/cloud/host/Status.java

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ public enum Status {
3030
Down(true, true, true),
3131
Disconnected(true, true, true),
3232
Updating(true, true, false),
33-
PrepareForMaintenance(false, false, false),
34-
ErrorInMaintenance(false, false, false),
35-
Maintenance(false, false, false),
3633
Alert(true, true, true),
3734
Removed(true, false, true),
3835
Rebalancing(false, false, false);
@@ -67,20 +64,15 @@ public enum Event {
6764
AgentDisconnected(false, "Agent disconnected"),
6865
ResetRequested(true, "Reset is requested by the user"),
6966
HostDown(false, "Host is found to be down by the investigator"),
70-
PreparationComplete(false, "Preparation for PrepareForMaintenance is completed"),
71-
UnableToMigrate(false, "Migration for at least one VM didn't work"),
7267
Ping(false, "Ping is received from the host"),
73-
MaintenanceRequested(true, "PrepareForMaintenance requested by user"),
7468
ManagementServerDown(false, "Management Server that the agent is connected is going down"),
7569
WaitedTooLong(false, "Waited too long from the agent to reconnect on its own. Time to do HA"),
7670
Remove(true, "Host is removed"),
7771
Ready(false, "Host is ready for commands"),
78-
UpdatePassword(false, "Update host password from db"),
7972
RequestAgentRebalance(false, "Request rebalance for the certain host"),
8073
StartAgentRebalance(false, "Start rebalance for the certain host"),
8174
RebalanceCompleted(false, "Host is rebalanced successfully"),
8275
RebalanceFailed(false, "Failed to rebalance the host"),
83-
PrepareUnmanaged(true, "prepare for cluster entering unmanaged status"),
8476
HypervisorVersionChanged(false, " hypervisor version changed when host is reconnected");
8577

8678
private final boolean isUserRequest;
@@ -131,54 +123,26 @@ public static String[] toStrings(Status... states) {
131123
s_fsm.addTransition(Status.Connecting, Event.Ready, Status.Up);
132124
s_fsm.addTransition(Status.Connecting, Event.PingTimeout, Status.Alert);
133125
s_fsm.addTransition(Status.Connecting, Event.UpdateNeeded, Status.Updating);
134-
s_fsm.addTransition(Status.Connecting, Event.MaintenanceRequested, Status.PrepareForMaintenance);
135126
s_fsm.addTransition(Status.Connecting, Event.ShutdownRequested, Status.Disconnected);
136127
s_fsm.addTransition(Status.Connecting, Event.HostDown, Status.Alert);
137128
s_fsm.addTransition(Status.Connecting, Event.Ping, Status.Connecting);
138129
s_fsm.addTransition(Status.Connecting, Event.ManagementServerDown, Status.Disconnected);
139130
s_fsm.addTransition(Status.Connecting, Event.AgentDisconnected, Status.Alert);
140131
s_fsm.addTransition(Status.Connecting, Event.HypervisorVersionChanged, Status.Disconnected);
141132
s_fsm.addTransition(Status.Up, Event.PingTimeout, Status.Alert);
142-
s_fsm.addTransition(Status.Up, Event.MaintenanceRequested, Status.PrepareForMaintenance);
143133
s_fsm.addTransition(Status.Up, Event.AgentDisconnected, Status.Alert);
144134
s_fsm.addTransition(Status.Up, Event.ShutdownRequested, Status.Disconnected);
145135
s_fsm.addTransition(Status.Up, Event.HostDown, Status.Down);
146136
s_fsm.addTransition(Status.Up, Event.Ping, Status.Up);
147137
s_fsm.addTransition(Status.Up, Event.AgentConnected, Status.Connecting);
148138
s_fsm.addTransition(Status.Up, Event.ManagementServerDown, Status.Disconnected);
149139
s_fsm.addTransition(Status.Up, Event.StartAgentRebalance, Status.Rebalancing);
150-
s_fsm.addTransition(Status.Up, Event.PrepareUnmanaged, Status.Disconnected);
151140
s_fsm.addTransition(Status.Up, Event.HypervisorVersionChanged, Status.Disconnected);
152141
s_fsm.addTransition(Status.Updating, Event.PingTimeout, Status.Alert);
153142
s_fsm.addTransition(Status.Updating, Event.Ping, Status.Updating);
154143
s_fsm.addTransition(Status.Updating, Event.AgentConnected, Status.Connecting);
155144
s_fsm.addTransition(Status.Updating, Event.ManagementServerDown, Status.Disconnected);
156145
s_fsm.addTransition(Status.Updating, Event.WaitedTooLong, Status.Alert);
157-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.ResetRequested, Status.Disconnected);
158-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.PreparationComplete, Status.Maintenance);
159-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.AgentDisconnected, Status.PrepareForMaintenance);
160-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.AgentConnected, Status.PrepareForMaintenance);
161-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.HostDown, Status.PrepareForMaintenance);
162-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.UnableToMigrate, Status.ErrorInMaintenance);
163-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.Ping, Status.PrepareForMaintenance);
164-
s_fsm.addTransition(Status.PrepareForMaintenance, Event.ManagementServerDown, Status.PrepareForMaintenance);
165-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.MaintenanceRequested, Status.PrepareForMaintenance);
166-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.ResetRequested, Status.Disconnected);
167-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.HostDown, Status.ErrorInMaintenance);
168-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.AgentDisconnected, Status.ErrorInMaintenance);
169-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.AgentConnected, Status.ErrorInMaintenance);
170-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.Remove, Status.Removed);
171-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.UnableToMigrate, Status.ErrorInMaintenance);
172-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.PreparationComplete, Status.Maintenance);
173-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.Ping, Status.ErrorInMaintenance);
174-
s_fsm.addTransition(Status.ErrorInMaintenance, Event.ManagementServerDown, Status.ErrorInMaintenance);
175-
s_fsm.addTransition(Status.Maintenance, Event.ResetRequested, Status.Disconnected);
176-
s_fsm.addTransition(Status.Maintenance, Event.AgentDisconnected, Status.Maintenance);
177-
s_fsm.addTransition(Status.Maintenance, Event.HostDown, Status.Maintenance);
178-
s_fsm.addTransition(Status.Maintenance, Event.Remove, Status.Removed);
179-
s_fsm.addTransition(Status.Maintenance, Event.AgentConnected, Status.Maintenance);
180-
s_fsm.addTransition(Status.Maintenance, Event.Ping, Status.Maintenance);
181-
s_fsm.addTransition(Status.Maintenance, Event.ManagementServerDown, Status.Maintenance);
182146
s_fsm.addTransition(Status.Disconnected, Event.PingTimeout, Status.Alert);
183147
s_fsm.addTransition(Status.Disconnected, Event.AgentConnected, Status.Connecting);
184148
s_fsm.addTransition(Status.Disconnected, Event.Ping, Status.Up);
@@ -187,12 +151,10 @@ public static String[] toStrings(Status... states) {
187151
s_fsm.addTransition(Status.Disconnected, Event.Remove, Status.Removed);
188152
s_fsm.addTransition(Status.Disconnected, Event.HypervisorVersionChanged, Status.Disconnected);
189153
s_fsm.addTransition(Status.Disconnected, Event.AgentDisconnected, Status.Disconnected);
190-
s_fsm.addTransition(Status.Down, Event.MaintenanceRequested, Status.PrepareForMaintenance);
191154
s_fsm.addTransition(Status.Down, Event.AgentConnected, Status.Connecting);
192155
s_fsm.addTransition(Status.Down, Event.Remove, Status.Removed);
193156
s_fsm.addTransition(Status.Down, Event.ManagementServerDown, Status.Down);
194157
s_fsm.addTransition(Status.Down, Event.AgentDisconnected, Status.Down);
195-
s_fsm.addTransition(Status.Alert, Event.MaintenanceRequested, Status.PrepareForMaintenance);
196158
s_fsm.addTransition(Status.Alert, Event.AgentConnected, Status.Connecting);
197159
s_fsm.addTransition(Status.Alert, Event.Ping, Status.Up);
198160
s_fsm.addTransition(Status.Alert, Event.Remove, Status.Removed);

api/src/com/cloud/resource/ResourceState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public enum ResourceState {
99
Enabled,
1010
Disabled,
1111
Unmanaged,
12-
PrepareForMaintenace,
12+
PrepareForMaintenance,
1313
ErrorInMaintenance,
1414
Maintenance;
1515

server/src/com/cloud/agent/AgentManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,9 @@ public enum TapAgentsAction {
210210

211211
public AgentAttache findAttache(long hostId);
212212

213-
void disconnect(long hostId, Status.Event event);
213+
void disconnectWithoutInvestigation(long hostId, Status.Event event);
214+
215+
void disconnectWithInvestigation(long hostId, Status.Event event);
214216

215217
public boolean disconnectAgent(HostVO host, Status.Event e, long msId);
216218

server/src/com/cloud/agent/manager/AgentManagerImpl.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -714,11 +714,6 @@ public void removeAgent(AgentAttache attache, Status nextState) {
714714
}
715715
}
716716

717-
@Override
718-
public void updateStatus(HostVO host, Status.Event event) {
719-
_hostDao.updateStatus(host, event, _nodeId);
720-
}
721-
722717
protected AgentAttache notifyMonitorsOfConnection(AgentAttache attache, final StartupCommand[] cmd, boolean forRebalance) throws ConnectionException {
723718
long hostId = attache.getId();
724719
HostVO host = _hostDao.findById(hostId);
@@ -763,7 +758,7 @@ protected AgentAttache notifyMonitorsOfConnection(AgentAttache attache, final St
763758
handleDisconnectWithoutInvestigation(attache, Event.AgentDisconnected);
764759
}
765760

766-
_hostDao.updateStatus(host, Event.Ready, _nodeId);
761+
agentStatusTransitTo(host, Event.Ready, _nodeId);
767762
attache.ready();
768763
return attache;
769764
}
@@ -882,7 +877,7 @@ protected boolean loadDirectlyConnectedHost(HostVO host, boolean forRebalance) {
882877
} finally {
883878
if(!initialized) {
884879
if (host != null) {
885-
_hostDao.updateStatus(host, Event.AgentDisconnected, _nodeId);
880+
agentStatusTransitTo(host, Event.AgentDisconnected, _nodeId);
886881
}
887882
}
888883
}
@@ -934,7 +929,7 @@ public boolean stop() {
934929
s_logger.debug("Cant not find host " + agent.getId());
935930
}
936931
} else {
937-
_hostDao.updateStatus(host, Event.ManagementServerDown, _nodeId);
932+
agentStatusTransitTo(host, Event.ManagementServerDown, _nodeId);
938933
}
939934
}
940935
}
@@ -1736,11 +1731,11 @@ public boolean disconnectAgent(HostVO host, Status.Event e, long msId) {
17361731
return agentStatusTransitTo(host, e, msId);
17371732
}
17381733

1739-
public void disconnectWithoutInvestigation(AgentAttache attache, final Status.Event event) {
1734+
protected void disconnectWithoutInvestigation(AgentAttache attache, final Status.Event event) {
17401735
_executor.submit(new DisconnectTask(attache, event, false));
17411736
}
17421737

1743-
public void disconnectWithInvestigation(AgentAttache attache, final Status.Event event) {
1738+
protected void disconnectWithInvestigation(AgentAttache attache, final Status.Event event) {
17441739
_executor.submit(new DisconnectTask(attache, event, true));
17451740
}
17461741

@@ -1768,7 +1763,12 @@ private void disconnectInternal(final long hostId, final Status.Event event, boo
17681763
}
17691764

17701765
@Override
1771-
public void disconnect(final long hostId, final Status.Event event) {
1766+
public void disconnectWithInvestigation(final long hostId, final Status.Event event) {
1767+
disconnectInternal(hostId, event, true);
1768+
}
1769+
1770+
@Override
1771+
public void disconnectWithoutInvestigation(final long hostId, final Status.Event event) {
17721772
disconnectInternal(hostId, event, false);
17731773
}
17741774

server/src/com/cloud/agent/manager/AgentMonitor.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import com.cloud.host.Status;
4343
import com.cloud.host.Status.Event;
4444
import com.cloud.host.dao.HostDao;
45+
import com.cloud.resource.ResourceManager;
46+
import com.cloud.resource.ResourceState;
4547
import com.cloud.utils.component.Inject;
4648
import com.cloud.utils.db.ConnectionConcierge;
4749
import com.cloud.utils.db.DB;
@@ -63,6 +65,9 @@ public class AgentMonitor extends Thread implements Listener {
6365
private ConnectionConcierge _concierge;
6466
@Inject
6567
ClusterDao _clusterDao;
68+
@Inject
69+
ResourceManager _resourceMgr;
70+
6671
// private ConnectionConcierge _concierge;
6772
private Map<Long, Long> _pingMap;
6873

@@ -133,10 +138,10 @@ public void run() {
133138

134139
List<Long> behindAgents = findAgentsBehindOnPing();
135140
for (Long agentId : behindAgents) {
136-
_agentMgr.disconnect(agentId, Event.PingTimeout, true);
141+
_agentMgr.disconnectWithInvestigation(agentId, Event.PingTimeout);
137142
}
138143

139-
List<HostVO> hosts = _hostDao.listByStatus(Status.PrepareForMaintenance, Status.ErrorInMaintenance);
144+
List<HostVO> hosts = _hostDao.listByResourceState(ResourceState.PrepareForMaintenace, ResourceState.ErrorInMaintenance);
140145
for (HostVO host : hosts) {
141146
long hostId = host.getId();
142147
DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId());
@@ -148,7 +153,7 @@ public void run() {
148153
List<VMInstanceVO> vosMigrating = _vmDao.listVmsMigratingFromHost(hostId);
149154
if (vos.isEmpty() && vosMigrating.isEmpty()) {
150155
_alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Migration Complete for host " + hostDesc, "Host [" + hostDesc + "] is ready for maintenance");
151-
_hostDao.updateStatus(host, Event.PreparationComplete, _msId);
156+
_resourceMgr.updateResourceState(host, ResourceState.Event.InternalEnterMaintenance, _msId);
152157
}
153158
}
154159
}
@@ -227,7 +232,7 @@ protected List<HostVO> findHostsBehindOnPing() {
227232
s_logger.info("Asking agent mgr to investgate why host " + host.getId() +
228233
" is behind on ping. last ping time: " + host.getLastPinged());
229234
}
230-
_agentMgr.disconnect(host.getId(), Event.PingTimeout, true);
235+
_agentMgr.disconnectWithInvestigation(host.getId(), Event.PingTimeout);
231236
}
232237
}
233238

server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust
102102

103103
@Inject(adapter = AgentLoadBalancerPlanner.class)
104104
protected Adapters<AgentLoadBalancerPlanner> _lbPlanners;
105+
106+
@Inject
107+
protected AgentManager _agentMgr;
105108

106109
protected ClusteredAgentManagerImpl() {
107110
super();
@@ -1018,7 +1021,7 @@ protected boolean startRebalance(final long hostId) {
10181021

10191022
s_logger.debug("Updating host id=" + hostId + " with the status " + Status.Rebalancing);
10201023
host.setManagementServerId(null);
1021-
_hostDao.updateStatus(host, Event.StartAgentRebalance, _nodeId);
1024+
_agentMgr.agentStatusTransitTo(host, Event.StartAgentRebalance, _nodeId);
10221025
_hostTransferDao.startAgentTransfer(hostId);
10231026
txn.commit();
10241027

server/src/com/cloud/host/dao/HostDao.java

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@
3838
public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Status.Event, Host> {
3939
List<HostVO> listBy(Host.Type type, Long clusterId, Long podId, long dcId);
4040

41-
long countBy(long clusterId, Status... statuses);
41+
long countBy(long clusterId, ResourceState... states);
4242

4343
List<HostVO> listByDataCenter(long dcId);
4444
List<HostVO> listByHostPod(long podId);
45-
List<HostVO> listByStatus(Status... status);
45+
List<HostVO> listByStatus(Status... status);
46+
List<HostVO> listByResourceState(ResourceState...states);
4647
List<HostVO> listBy(Host.Type type, long dcId);
4748
List<HostVO> listAllBy(Host.Type type, long dcId);
4849
HostVO findSecondaryStorageHost(long dcId);
@@ -71,21 +72,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
7172
List<HostVO> findDirectlyConnectedHosts();
7273

7374
List<HostVO> findAndUpdateDirectAgentToLoad(long lastPingSecondsAfter, Long limit, long managementServerId);
74-
/**
75-
* Mark the host as disconnected if it is in one of these states.
76-
* The management server id is set to null.
77-
* The lastPinged timestamp is set to current.
78-
* The state is set to the state passed in.
79-
* The disconnectedOn timestamp is set to current.
80-
*
81-
* @param host host to be marked
82-
* @param state state to be set to.
83-
* @param ifStates only if it is one of these states.
84-
* @return true if it's updated; false if not.
85-
*/
86-
boolean disconnect(HostVO host, Event event, long msId);
87-
88-
boolean connect(HostVO host, long msId);
8975

9076
HostVO findByStorageIpAddressInDataCenter(long dcId, String privateIpAddress);
9177
HostVO findByPrivateIpAddressInDataCenter(long dcId, String privateIpAddress);
@@ -111,16 +97,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
11197
*/
11298
List<HostVO> listByType(Type type);
11399

114-
/**
115-
* update the host and changes the status depending on the Event and
116-
* the current status. If the status changed between
117-
* @param host host object to change
118-
* @param event event that happened.
119-
* @param management server who's making this update
120-
* @return true if updated; false if not.
121-
*/
122-
boolean updateStatus(HostVO host, Event event, long msId);
123-
124100
List<RunningHostCountInfo> getRunningHostCounts(Date cutTime);
125101

126102
long getNextSequence(long hostId);
@@ -152,9 +128,7 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
152128

153129
long countRoutingHostsByDataCenter(long dcId);
154130

155-
List<HostVO> listSecondaryStorageHosts(long dataCenterId);
156-
157-
boolean directConnect(HostVO host, long msId);
131+
List<HostVO> listSecondaryStorageHosts(long dataCenterId);
158132

159133
List<HostVO> listDirectHostsBy(long msId, Status status);
160134

0 commit comments

Comments
 (0)