mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Bug 11522 - New agent manager
register/unregister resource state adapter in configure/stop of implementations
This commit is contained in:
parent
e8c13e10c7
commit
e5fca855c1
@ -25,6 +25,7 @@ import com.cloud.utils.fsm.StateMachine;
|
||||
import com.cloud.utils.fsm.StateMachine2;
|
||||
|
||||
public enum Status {
|
||||
Creating(true, false, false),
|
||||
Connecting(true, false, false),
|
||||
Up(true, false, false),
|
||||
Down(true, true, true),
|
||||
@ -119,6 +120,7 @@ public enum Status {
|
||||
protected static final StateMachine2<Status, Event, Host> s_fsm = new StateMachine2<Status, Event, Host>();
|
||||
static {
|
||||
s_fsm.addTransition(null, Event.AgentConnected, Status.Connecting);
|
||||
s_fsm.addTransition(Status.Creating, Event.AgentConnected, Status.Connecting);
|
||||
s_fsm.addTransition(Status.Connecting, Event.AgentConnected, Status.Connecting);
|
||||
s_fsm.addTransition(Status.Connecting, Event.Ready, Status.Up);
|
||||
s_fsm.addTransition(Status.Connecting, Event.PingTimeout, Status.Alert);
|
||||
|
||||
@ -361,7 +361,7 @@ public class HostVO implements Host {
|
||||
|
||||
public HostVO(String guid) {
|
||||
this.guid = guid;
|
||||
this.status = Status.Up;
|
||||
this.status = Status.Creating;
|
||||
this.totalMemory = 0;
|
||||
this.dom0MinMemory = 0;
|
||||
this.hostAllocationState = Host.HostAllocationState.Enabled;
|
||||
@ -712,6 +712,10 @@ public class HostVO implements Host {
|
||||
return resourceState;
|
||||
}
|
||||
|
||||
public void setResourceState(ResourceState state) {
|
||||
resourceState = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInMaintenanceStates() {
|
||||
return (getResourceState() == ResourceState.Maintenance || getResourceState() == ResourceState.ErrorInMaintenance
|
||||
|
||||
@ -45,6 +45,18 @@ public class OvmDiscoverer extends DiscovererBase implements Discoverer, Resourc
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return super.configure(name, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return super.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<? extends ServerResource, Map<String, String>> find(long dcId,
|
||||
Long podId, Long clusterId, URI url, String username,
|
||||
|
||||
@ -27,6 +27,7 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
@ -44,6 +45,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.resource.Discoverer;
|
||||
import com.cloud.resource.DiscovererBase;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceStateAdapter;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.UnableDeleteHostException;
|
||||
@ -61,7 +63,20 @@ public class BareMetalDiscoverer extends DiscovererBase implements Discoverer, R
|
||||
@Inject protected HostDao _hostDao;
|
||||
@Inject DataCenterDao _dcDao;
|
||||
@Inject VMInstanceDao _vmDao = null;
|
||||
@Inject ResourceManager _resourceMgr;
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return super.configure(name, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return super.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<? extends ServerResource, Map<String, String>> find(long dcId, Long podId, Long clusterId, URI url, String username, String password, List<String> hostTags)
|
||||
throws DiscoveryException {
|
||||
|
||||
@ -89,6 +89,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -99,6 +100,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -36,6 +36,7 @@ import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.host.Host;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.host.dao.HostDao;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceStateAdapter;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.UnableDeleteHostException;
|
||||
@ -56,13 +57,14 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap
|
||||
@Inject HostDao _hostDao;
|
||||
@Inject AgentManager _agentMgr;
|
||||
@Inject ExternalDhcpManager exDhcpMgr;
|
||||
|
||||
@Inject ResourceManager _resourceMgr;
|
||||
@Inject(adapter=PxeServerService.class)
|
||||
protected Adapters<PxeServerService> _services;
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||
_name = name;
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -73,6 +75,7 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -88,6 +88,7 @@ import com.cloud.network.NetworkVO;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceStateAdapter;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.UnableDeleteHostException;
|
||||
@ -202,6 +203,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
|
||||
StoragePoolDao _storagePoolDao;
|
||||
@Inject
|
||||
UserVmDetailsDao _vmDetailsDao;
|
||||
@Inject
|
||||
ResourceManager _resourceMgr;
|
||||
|
||||
private ConsoleProxyListener _listener;
|
||||
|
||||
@ -1003,6 +1006,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
|
||||
|
||||
this._loadScanner.stop();
|
||||
_allocProxyLock.releaseRef();
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1270,6 +1274,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
|
||||
|
||||
_loadScanner = new SystemVmLoadScanner<Long>(this);
|
||||
_loadScanner.initScan(STARTUP_DELAY, _capacityScanInterval);
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
|
||||
if (s_logger.isInfoEnabled()) {
|
||||
s_logger.info("Console Proxy Manager is configured.");
|
||||
|
||||
@ -925,62 +925,70 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateState(Status oldStatus, Event event,
|
||||
Status newStatus, Host vo, Long id) {
|
||||
HostVO host = (HostVO)vo;
|
||||
long oldPingTime = host.getLastPinged();
|
||||
public boolean updateState(Status oldStatus, Event event, Status newStatus, Host vo, Long id) {
|
||||
HostVO host = (HostVO) vo;
|
||||
long oldPingTime = host.getLastPinged();
|
||||
|
||||
SearchBuilder<HostVO> sb = createSearchBuilder();
|
||||
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
if (newStatus.checkManagementServer()) {
|
||||
sb.and("ping", sb.entity().getLastPinged(), SearchCriteria.Op.EQ);
|
||||
sb.and().op("nullmsid", sb.entity().getManagementServerId(), SearchCriteria.Op.NULL);
|
||||
sb.or("msid", sb.entity().getManagementServerId(), SearchCriteria.Op.EQ);
|
||||
sb.closeParen();
|
||||
}
|
||||
sb.done();
|
||||
SearchBuilder<HostVO> sb = createSearchBuilder();
|
||||
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
if (newStatus.checkManagementServer()) {
|
||||
sb.and("ping", sb.entity().getLastPinged(), SearchCriteria.Op.EQ);
|
||||
sb.and().op("nullmsid", sb.entity().getManagementServerId(), SearchCriteria.Op.NULL);
|
||||
sb.or("msid", sb.entity().getManagementServerId(), SearchCriteria.Op.EQ);
|
||||
sb.closeParen();
|
||||
}
|
||||
sb.done();
|
||||
|
||||
SearchCriteria<HostVO> sc = sb.create();
|
||||
SearchCriteria<HostVO> sc = sb.create();
|
||||
|
||||
sc.setParameters("status", oldStatus);
|
||||
sc.setParameters("id", host.getId());
|
||||
if (newStatus.checkManagementServer()) {
|
||||
sc.setParameters("ping", oldPingTime);
|
||||
sc.setParameters("msid", host.getManagementServerId());
|
||||
}
|
||||
sc.setParameters("status", oldStatus);
|
||||
sc.setParameters("id", host.getId());
|
||||
if (newStatus.checkManagementServer()) {
|
||||
sc.setParameters("ping", oldPingTime);
|
||||
sc.setParameters("msid", host.getManagementServerId());
|
||||
}
|
||||
|
||||
UpdateBuilder ub = getUpdateBuilder(host);
|
||||
ub.set(host, _statusAttr, newStatus);
|
||||
if (newStatus.updateManagementServer()) {
|
||||
if (newStatus.lostConnection()) {
|
||||
ub.set(host, _msIdAttr, null);
|
||||
} else {
|
||||
ub.set(host, _msIdAttr, host.getManagementServerId());
|
||||
}
|
||||
if (event.equals(Event.Ping) || event.equals(Event.AgentConnected)) {
|
||||
ub.set(host, _pingTimeAttr, System.currentTimeMillis() >> 10);
|
||||
}
|
||||
}
|
||||
if (event.equals(Event.ManagementServerDown)) {
|
||||
ub.set(host, _pingTimeAttr, ((System.currentTimeMillis() >> 10) - (10 * 60)));
|
||||
}
|
||||
int result = update(ub, sc, null);
|
||||
assert result <= 1 : "How can this update " + result + " rows? ";
|
||||
UpdateBuilder ub = getUpdateBuilder(host);
|
||||
ub.set(host, _statusAttr, newStatus);
|
||||
if (newStatus.updateManagementServer()) {
|
||||
if (newStatus.lostConnection()) {
|
||||
ub.set(host, _msIdAttr, null);
|
||||
} else {
|
||||
ub.set(host, _msIdAttr, host.getManagementServerId());
|
||||
}
|
||||
if (event.equals(Event.Ping) || event.equals(Event.AgentConnected)) {
|
||||
ub.set(host, _pingTimeAttr, System.currentTimeMillis() >> 10);
|
||||
}
|
||||
}
|
||||
if (event.equals(Event.ManagementServerDown)) {
|
||||
ub.set(host, _pingTimeAttr, ((System.currentTimeMillis() >> 10) - (10 * 60)));
|
||||
}
|
||||
int result = update(ub, sc, null);
|
||||
assert result <= 1 : "How can this update " + result + " rows? ";
|
||||
|
||||
if (s_logger.isDebugEnabled() && result == 0) {
|
||||
HostVO ho = findById(host.getId());
|
||||
assert ho != null : "How how how? : " + host.getId();
|
||||
if (s_logger.isDebugEnabled() && result == 0) {
|
||||
HostVO ho = findById(host.getId());
|
||||
assert ho != null : "How how how? : " + host.getId();
|
||||
|
||||
StringBuilder str = new StringBuilder("Unable to update host for event:").append(event.toString());
|
||||
str.append(". New=[status=").append(newStatus.toString()).append(":msid=").append(newStatus.lostConnection() ? "null" : host.getManagementServerId()).append(":lastpinged=").append(host.getLastPinged())
|
||||
.append("]");
|
||||
str.append("; Old=[status=").append(oldStatus.toString()).append(":msid=").append(host.getManagementServerId()).append(":lastpinged=").append(oldPingTime).append("]");
|
||||
str.append("; DB=[status=").append(vo.getStatus().toString()).append(":msid=").append(vo.getManagementServerId()).append(":lastpinged=").append(vo.getLastPinged()).append("]");
|
||||
s_logger.debug(str.toString());
|
||||
}
|
||||
|
||||
return result > 0;
|
||||
StringBuilder str = new StringBuilder("Unable to update host for event:").append(event.toString());
|
||||
str.append(". New=[status=").append(newStatus.toString()).append(":msid=")
|
||||
.append(newStatus.lostConnection() ? "null" : host.getManagementServerId()).append(":lastpinged=").append(host.getLastPinged()).append("]");
|
||||
str.append("; Old=[status=").append(oldStatus.toString()).append(":msid=").append(host.getManagementServerId()).append(":lastpinged=")
|
||||
.append(oldPingTime).append("]");
|
||||
str.append("; DB=[status=").append(vo.getStatus().toString()).append(":msid=").append(vo.getManagementServerId()).append(":lastpinged=")
|
||||
.append(vo.getLastPinged()).append("]");
|
||||
s_logger.debug(str.toString());
|
||||
}
|
||||
|
||||
StringBuilder msg = new StringBuilder("Agent status update: [");
|
||||
msg.append("hostId = " + host.getId());
|
||||
msg.append("; old status = " + oldStatus);
|
||||
msg.append("; event = " + event);
|
||||
msg.append("; new status = " + newStatus + "]");
|
||||
s_logger.debug(msg.toString());
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1009,6 +1017,13 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
||||
/*TODO: add defbug info*/
|
||||
}
|
||||
|
||||
StringBuilder msg = new StringBuilder("Resource state update: [");
|
||||
msg.append("hostId = " + host.getId());
|
||||
msg.append("; old state = " + oldState);
|
||||
msg.append("; event = " + event);
|
||||
msg.append("; new status = " + newState + "]");
|
||||
s_logger.debug(msg.toString());
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
|
||||
|
||||
@ -274,6 +274,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
|
||||
if (_hostIp == null) {
|
||||
throw new ConfigurationException("Can't get host IP");
|
||||
}
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -354,5 +355,12 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
|
||||
|
||||
return new DeleteHostAnswer(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return super.stop();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -230,8 +230,10 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer
|
||||
|
||||
createVmwareToolsIso();
|
||||
|
||||
if(s_logger.isInfoEnabled())
|
||||
s_logger.info("VmwareServerDiscoverer has been successfully configured");
|
||||
if(s_logger.isInfoEnabled()) {
|
||||
s_logger.info("VmwareServerDiscoverer has been successfully configured");
|
||||
}
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -279,6 +281,12 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer
|
||||
public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return super.stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -456,6 +456,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
||||
_agentMgr.registerForHostEvents(this, true, false, true);
|
||||
|
||||
createXsToolsISO();
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -651,5 +652,11 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
||||
public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return super.stop();
|
||||
}
|
||||
}
|
||||
|
||||
@ -168,6 +168,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou
|
||||
if (_externalNetworkStatsInterval > 0){
|
||||
_executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("ExternalNetworkMonitor"));
|
||||
}
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -181,6 +182,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager, Resou
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -226,6 +226,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta
|
||||
|
||||
_networkStatsInterval = NumbersUtil.parseInt(_configDao.getValue(Config.DirectNetworkStatsInterval.key()), 86400);
|
||||
_agentMgr.registerForHostEvents(new DirectNetworkStatsListener( _networkStatsInterval), true, false, false);
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -236,6 +237,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -981,7 +981,6 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
|
||||
throw new NoTransitionException("No next resource state found for current state =" + currentState + " event =" + event);
|
||||
}
|
||||
|
||||
/*TODO: adding debug trace*/
|
||||
return _hostDao.updateResourceState(currentState, event, nextState, host);
|
||||
}
|
||||
|
||||
@ -1184,41 +1183,46 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
|
||||
}
|
||||
}
|
||||
|
||||
private Object dispatchToStateAdapters(ResourceStateAdapter.Event event, boolean singleTaker, Object...args) {
|
||||
synchronized (_resourceStateAdapters) {
|
||||
Iterator it = _resourceStateAdapters.entrySet().iterator();
|
||||
Object result = null;
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<String, Pair<ResourceStateAdapter, List<String>>> item = (Map.Entry<String, Pair<ResourceStateAdapter, List<String>>>)it.next();
|
||||
ResourceStateAdapter adapter = item.getValue().first();
|
||||
if (event == ResourceStateAdapter.Event.CREATE_HOST_VO_FOR_CONNECTED) {
|
||||
result = adapter.createHostVOForConnectedAgent((HostVO)args[0], (StartupCommand[])args[1]);
|
||||
if (result != null && singleTaker) {
|
||||
break;
|
||||
}
|
||||
} else if (event == ResourceStateAdapter.Event.CREATE_HOST_VO_FOR_DIRECT_CONNECT) {
|
||||
result = adapter.createHostVOForDirectConnectAgent((HostVO)args[0], (StartupCommand[])args[1], (ServerResource)args[2], (Map<String, String>)args[3], (List<String>)args[4]);
|
||||
if (result != null && singleTaker) {
|
||||
break;
|
||||
}
|
||||
} else if (event == ResourceStateAdapter.Event.DELETE_HOST) {
|
||||
try {
|
||||
result = adapter.deleteHost((HostVO) args[0], (Boolean) args[1], (Boolean) args[2]);
|
||||
if (result != null) {
|
||||
break;
|
||||
}
|
||||
} catch (UnableDeleteHostException e) {
|
||||
s_logger.debug("Adapter " + adapter.getName() + " says unable to delete host", e);
|
||||
result = new ResourceStateAdapter.DeleteHostAnswer(false, true);
|
||||
}
|
||||
} else {
|
||||
throw new CloudRuntimeException("Unknown resource state event:" + event);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
private Object dispatchToStateAdapters(ResourceStateAdapter.Event event, boolean singleTaker, Object... args) {
|
||||
synchronized (_resourceStateAdapters) {
|
||||
Iterator it = _resourceStateAdapters.entrySet().iterator();
|
||||
Object result = null;
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<String, Pair<ResourceStateAdapter, List<String>>> item = (Map.Entry<String, Pair<ResourceStateAdapter, List<String>>>) it.next();
|
||||
ResourceStateAdapter adapter = item.getValue().first();
|
||||
|
||||
String msg = new String("Dispatching resource state event " + event + " to " + item.getKey());
|
||||
s_logger.debug(msg);
|
||||
|
||||
if (event == ResourceStateAdapter.Event.CREATE_HOST_VO_FOR_CONNECTED) {
|
||||
result = adapter.createHostVOForConnectedAgent((HostVO) args[0], (StartupCommand[]) args[1]);
|
||||
if (result != null && singleTaker) {
|
||||
break;
|
||||
}
|
||||
} else if (event == ResourceStateAdapter.Event.CREATE_HOST_VO_FOR_DIRECT_CONNECT) {
|
||||
result = adapter.createHostVOForDirectConnectAgent((HostVO) args[0], (StartupCommand[]) args[1], (ServerResource) args[2],
|
||||
(Map<String, String>) args[3], (List<String>) args[4]);
|
||||
if (result != null && singleTaker) {
|
||||
break;
|
||||
}
|
||||
} else if (event == ResourceStateAdapter.Event.DELETE_HOST) {
|
||||
try {
|
||||
result = adapter.deleteHost((HostVO) args[0], (Boolean) args[1], (Boolean) args[2]);
|
||||
if (result != null) {
|
||||
break;
|
||||
}
|
||||
} catch (UnableDeleteHostException e) {
|
||||
s_logger.debug("Adapter " + adapter.getName() + " says unable to delete host", e);
|
||||
result = new ResourceStateAdapter.DeleteHostAnswer(false, true);
|
||||
}
|
||||
} else {
|
||||
throw new CloudRuntimeException("Unknown resource state event:" + event);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCIDR(HostPodVO pod, DataCenterVO dc, String serverPrivateIP, String serverPrivateNetmask) throws IllegalArgumentException {
|
||||
@ -1283,13 +1287,13 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
|
||||
ResourceStateAdapter.Event stateEvent) {
|
||||
StartupCommand startup = cmds[0];
|
||||
HostVO host = _hostDao.findByGuid(startup.getGuid());
|
||||
boolean isNew = false;
|
||||
if (host == null) {
|
||||
host = _hostDao.findByGuid(startup.getGuidWithoutResource());
|
||||
}
|
||||
if (host == null) {
|
||||
host = new HostVO(startup.getGuid());
|
||||
host.setResource(resource.getClass().getName());
|
||||
host = _hostDao.persist(host);
|
||||
isNew = true;
|
||||
}
|
||||
// TODO: we don't allow to set ResourceState here?
|
||||
|
||||
@ -1375,9 +1379,19 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
|
||||
host.setStorageMacAddressDeux(startup.getStorageMacAddressDeux());
|
||||
host.setStorageNetmaskDeux(startup.getStorageNetmaskDeux());
|
||||
}
|
||||
if (resource != null) {
|
||||
/* null when agent is connected agent */
|
||||
host.setResource(resource.getClass().getName());
|
||||
}
|
||||
|
||||
host = (HostVO) dispatchToStateAdapters(stateEvent, true, host, cmds, resource, details, hostTags);
|
||||
_hostDao.update(host.getId(), host);
|
||||
assert host != null : "No resource state adapter response";
|
||||
|
||||
if (isNew) {
|
||||
_hostDao.persist(host);
|
||||
} else {
|
||||
_hostDao.update(host.getId(), host);
|
||||
}
|
||||
/* Agent goes to Connecting status */
|
||||
_agentMgr.agentStatusTransitTo(host, Status.Event.AgentConnected, _nodeId);
|
||||
try {
|
||||
|
||||
2
server/src/com/cloud/secstorage/PremiumSecondaryStorageManagerImpl.java
Normal file → Executable file
2
server/src/com/cloud/secstorage/PremiumSecondaryStorageManagerImpl.java
Normal file → Executable file
@ -68,7 +68,7 @@ public class PremiumSecondaryStorageManagerImpl extends SecondaryStorageManagerI
|
||||
|
||||
HostSearch.done();
|
||||
ActiveCommandSearch.done();
|
||||
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -72,6 +72,7 @@ import com.cloud.network.NetworkManager;
|
||||
import com.cloud.network.NetworkVO;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceStateAdapter;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.UnableDeleteHostException;
|
||||
@ -197,6 +198,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
||||
protected CapacityDao _capacityDao;
|
||||
@Inject
|
||||
UserVmDetailsDao _vmDetailsDao;
|
||||
@Inject
|
||||
protected ResourceManager _resourceMgr;
|
||||
|
||||
private long _capacityScanInterval = DEFAULT_CAPACITY_SCAN_INTERVAL;
|
||||
|
||||
@ -738,6 +741,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
||||
public boolean stop() {
|
||||
_loadScanner.stop();
|
||||
_allocLock.releaseRef();
|
||||
_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -813,6 +817,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
|
||||
if (s_logger.isInfoEnabled()) {
|
||||
s_logger.info("Secondary storage vm Manager is configured.");
|
||||
}
|
||||
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -699,6 +699,7 @@ CREATE TABLE `cloud`.`host` (
|
||||
`created` datetime COMMENT 'date the host first signed on',
|
||||
`removed` datetime COMMENT 'date removed if not null',
|
||||
`allocation_state` varchar(32) NOT NULL DEFAULT 'Enabled' COMMENT 'Is this host enabled for allocation for new resources',
|
||||
`resource_state` varchar(32) NOT NULL DEFAULT 'Disabled' COMMENT 'Is this host enabled for allocation for new resources',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `i_host__removed`(`removed`),
|
||||
INDEX `i_host__last_ping`(`last_ping`),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user