use of com.cloud.legacymodel.communication.command.MaintainCommand in project cosmic by MissionCriticalCloud.
the class ResourceManagerImpl method doMaintain.
private boolean doMaintain(final long hostId) {
final HostVO host = this._hostDao.findById(hostId);
final MaintainAnswer answer = (MaintainAnswer) this._agentMgr.easySend(hostId, new MaintainCommand());
if (answer == null || !answer.getResult()) {
s_logger.warn("Unable to send MaintainCommand to host: " + hostId);
return false;
}
try {
resourceStateTransitTo(host, ResourceState.Event.AdminAskMaintenace, this._nodeId);
} catch (final NoTransitionException e) {
final String err = "Cannot transmit resource state of host " + host.getId() + " to " + ResourceState.Maintenance;
s_logger.debug(err, e);
throw new CloudRuntimeException(err + e.getMessage());
}
ActionEventUtils.onStartedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventTypes.EVENT_MAINTENANCE_PREPARE, "starting maintenance for host " + hostId, true, 0);
this._agentMgr.pullAgentToMaintenance(hostId);
/* TODO: move below to listener */
if (host.getType() == HostType.Routing) {
final List<VMInstanceVO> vms = this._vmDao.listByHostId(hostId);
if (vms.size() == 0) {
return true;
}
final List<HostVO> hosts = listAllUpAndEnabledHosts(HostType.Routing, host.getClusterId(), host.getPodId(), host.getDataCenterId());
for (final VMInstanceVO vm : vms) {
if (hosts == null || hosts.isEmpty() || !answer.getMigrate() || this._serviceOfferingDetailsDao.findDetail(vm.getServiceOfferingId(), GPU.Keys.vgpuType.toString()) != null) {
// Migration is not supported for VGPU Vms so stop them.
// for the last host in this cluster, stop all the VMs
this._haMgr.scheduleStop(vm, hostId, HaWork.HaWorkType.ForceStop);
} else {
this._haMgr.scheduleMigration(vm);
}
}
}
return true;
}
Aggregations