diff --git a/engine/components-api/src/com/cloud/resource/ResourceManager.java b/engine/components-api/src/com/cloud/resource/ResourceManager.java index e623b9c6da9..95fb3853717 100755 --- a/engine/components-api/src/com/cloud/resource/ResourceManager.java +++ b/engine/components-api/src/com/cloud/resource/ResourceManager.java @@ -1,3 +1,4 @@ + // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -83,6 +84,8 @@ public interface ResourceManager extends ResourceService { public boolean maintain(final long hostId) throws AgentUnavailableException; + public boolean checkAndMaintain(final long hostId); + @Override public boolean deleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage); diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java index cdfe744841f..d51df220195 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -1475,20 +1475,12 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl List hosts = sc.list(); for (HostVO host : hosts) { - long hostId = host.getId(); - DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId()); - HostPodVO podVO = _podDao.findById(host.getPodId()); - String hostDesc = "name: " + host.getName() + " (id:" + hostId + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName(); - - if (host.getType() != Host.Type.Storage) { -// List vos = _vmDao.listByHostId(hostId); -// List vosMigrating = _vmDao.listVmsMigratingFromHost(hostId); -// if (vos.isEmpty() && vosMigrating.isEmpty()) { -// _alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Migration Complete for host " + hostDesc, "Host [" -// + hostDesc -// + "] is ready for maintenance"); -// _resourceMgr.resourceStateTransitTo(host, ResourceState.Event.InternalEnterMaintenance, _msId); -// } + if (_resourceMgr.checkAndMaintain(host.getId())) { + DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId()); + HostPodVO podVO = _podDao.findById(host.getPodId()); + String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName(); + _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Migration Complete for host " + hostDesc, "Host [" + + hostDesc + "] is ready for maintenance"); } } } catch (Throwable th) { diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index c961ce16a1a..d1eba117a16 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -1232,6 +1232,26 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager, } } + @Override + public boolean checkAndMaintain(final long hostId) { + boolean hostInMaintenance = false; + HostVO host = _hostDao.findById(hostId); + + try { + if (host.getType() != Host.Type.Storage) { + List vos = _vmDao.listByHostId(hostId); + List vosMigrating = _vmDao.listVmsMigratingFromHost(hostId); + if (vos.isEmpty() && vosMigrating.isEmpty()) { + resourceStateTransitTo(host, ResourceState.Event.InternalEnterMaintenance, _nodeId); + hostInMaintenance = true; + } + } + } catch (NoTransitionException e) { + s_logger.debug("Cannot transmit host " + host.getId() + "to Maintenance state", e); + } + return hostInMaintenance; + } + @Override public Host updateHost(UpdateHostCmd cmd) throws NoTransitionException { Long hostId = cmd.getId(); diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java b/server/test/com/cloud/resource/MockResourceManagerImpl.java index 70f88b3bd50..5599e8c42b9 100644 --- a/server/test/com/cloud/resource/MockResourceManagerImpl.java +++ b/server/test/com/cloud/resource/MockResourceManagerImpl.java @@ -308,6 +308,15 @@ public class MockResourceManagerImpl extends ManagerBase implements ResourceMana return false; } + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#maintain(long) + */ + @Override + public boolean checkAndMaintain(long hostId) { + // TODO Auto-generated method stub + return false; + } + /* (non-Javadoc) * @see com.cloud.resource.ResourceManager#deleteHost(long, boolean, boolean) */