Bug 11522 - New agent manager

introduce ResourceState and ResourceStateAdapter
This commit is contained in:
frank 2011-09-21 16:52:39 -07:00
parent 443385471f
commit ce3d810f51
2 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,78 @@
package com.cloud.resource;
import java.util.List;
import java.util.Set;
import com.cloud.utils.fsm.StateMachine;
public enum ResourceState {
Enabled,
Disabled,
Unmanaged,
PrepareForMaintenace,
ErrorInMaintenance,
Maintenance;
public enum Action {
InternalCreating("Resource is creating"),
AdminEnable("Admin enables"),
AdminDisable("Admin disables"),
ClusterUnmanage("Cluster is unmanaged"),
ClusterManage("Cluster is managed"),
AdminAskMaintenace("Admin asks to enter maintenance"),
AdminCancelMaintenance("Admin asks to cancel maintenance"),
InternalEnterMaintenance("Resource enters maintenance"),
Unmanaged("Admin turns a host into umanaged state"),
AdminAskReconnect("Admin triggers a reconnect"),
UpdatePassword("Admin updates password of host"),
UnableToMigrate("Management server migrates VM failed"),
DeleteHost("Admin delete a host");
private final String comment;
private Action(String comment) {
this.comment = comment;
}
public String getDescription() {
return this.comment;
}
}
public ResourceState getNextState(Action a) {
return s_fsm.getNextState(this, a);
}
public ResourceState[] getFromStates(Action a) {
List<ResourceState> from = s_fsm.getFromStates(this, a);
return from.toArray(new ResourceState[from.size()]);
}
public Set<Action> getPossibleActions() {
return s_fsm.getPossibleEvents(this);
}
public static String[] toString(ResourceState... states) {
String[] strs = new String[states.length];
for (int i=0; i<states.length; i++) {
strs[i] = states[i].toString();
}
return strs;
}
protected static final StateMachine<ResourceState, Action> s_fsm = new StateMachine<ResourceState, Action>();
static {
s_fsm.addTransition(null, Action.InternalCreating, ResourceState.Enabled);
s_fsm.addTransition(ResourceState.Enabled, Action.AdminEnable, ResourceState.Enabled);
s_fsm.addTransition(ResourceState.Enabled, Action.AdminDisable, ResourceState.Disabled);
s_fsm.addTransition(ResourceState.Enabled, Action.ClusterUnmanage, ResourceState.Unmanaged);
s_fsm.addTransition(ResourceState.Enabled, Action.AdminAskMaintenace, ResourceState.PrepareForMaintenace);
s_fsm.addTransition(ResourceState.Disabled, Action.AdminEnable, ResourceState.Enabled);
s_fsm.addTransition(ResourceState.Disabled, Action.AdminDisable, ResourceState.Disabled);
s_fsm.addTransition(ResourceState.Disabled, Action.ClusterUnmanage, ResourceState.Unmanaged);
s_fsm.addTransition(ResourceState.Unmanaged, Action.ClusterUnmanage, ResourceState.Unmanaged);
s_fsm.addTransition(ResourceState.Unmanaged, Action.ClusterManage, ResourceState.Disabled);
s_fsm.addTransition(ResourceState.PrepareForMaintenace, Action.InternalEnterMaintenance, ResourceState.Maintenance);
s_fsm.addTransition(ResourceState.PrepareForMaintenace, Action.AdminCancelMaintenance, ResourceState.Enabled);
s_fsm.addTransition(ResourceState.Maintenance, Action.AdminCancelMaintenance, ResourceState.Enabled);
}
}

View File

@ -0,0 +1,47 @@
package com.cloud.resource;
import java.util.List;
import java.util.Map;
import com.cloud.agent.api.StartupAnswer;
import com.cloud.agent.api.StartupCommand;
import com.cloud.exception.ConnectionException;
import com.cloud.host.HostVO;
import com.cloud.utils.component.Adapter;
public interface ResourceStateAdapter extends Adapter {
static public enum Event {
CREATE_HOST_VO_FOR_CONNECTED,
CREATE_HOST_VO_FOR_DIRECT_CONNECT,
DELETE_HOST,
}
static public class DeleteHostAnswer {
private boolean isContinue;
private boolean isException;
public DeleteHostAnswer(boolean isContinue) {
this.isContinue = isContinue;
this.isException = false;
}
public DeleteHostAnswer(boolean isContinue, boolean isException) {
this.isContinue = isContinue;
this.isException = isException;
}
public boolean getIsContinue() {
return this.isContinue;
}
public boolean getIsException() {
return this.isException;
}
}
public HostVO createHostVO(HostVO host, StartupCommand[] cmd);
public HostVO createHostVO(HostVO host, final StartupCommand[] startup, ServerResource resource, Map<String, String> details, List<String> hostTags);
public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException;
}