Skip to content

Commit cc35f9d

Browse files
committed
CLOUDSTACK-10326: Prevent hosts fall into Maintenance when there are running VMs on it
1 parent e41b4ed commit cc35f9d

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java

+5
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,9 @@ public interface VMInstanceDao extends GenericDao<VMInstanceVO, Long>, StateDao<
150150
VMInstanceVO findVMByHostNameInZone(String hostName, long zoneId);
151151

152152
boolean isPowerStateUpToDate(long instanceId);
153+
154+
/**
155+
* List running VMs which host and lastHost id are the same
156+
*/
157+
List<VMInstanceVO> listRunningVmsByHostAndLastHostSameId(long hostId);
153158
}

engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java

+9
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,15 @@ public List<VMInstanceVO> listByHostId(long hostid) {
304304
return listBy(sc);
305305
}
306306

307+
@Override
308+
public List<VMInstanceVO> listRunningVmsByHostAndLastHostSameId(long hostId) {
309+
SearchCriteria<VMInstanceVO> sc = AllFieldsSearch.create();
310+
sc.setParameters("host", hostId);
311+
sc.setParameters("lastHost", hostId);
312+
sc.setParameters("state", State.Running);
313+
return listBy(sc);
314+
}
315+
307316
@Override
308317
public List<VMInstanceVO> listByZoneId(long zoneId) {
309318
SearchCriteria<VMInstanceVO> sc = AllFieldsSearch.create();

server/src/com/cloud/resource/ResourceManagerImpl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,8 @@ public boolean checkAndMaintain(final long hostId) {
12961296
if (host.getType() != Host.Type.Storage) {
12971297
final List<VMInstanceVO> vos = _vmDao.listByHostId(hostId);
12981298
final List<VMInstanceVO> vosMigrating = _vmDao.listVmsMigratingFromHost(hostId);
1299-
if (vos.isEmpty() && vosMigrating.isEmpty()) {
1299+
final List<VMInstanceVO> failedMigratedVms = _vmDao.listRunningVmsByHostAndLastHostSameId(hostId);
1300+
if (vos.isEmpty() && vosMigrating.isEmpty() && failedMigratedVms.isEmpty()) {
13001301
resourceStateTransitTo(host, ResourceState.Event.InternalEnterMaintenance, _nodeId);
13011302
hostInMaintenance = true;
13021303
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), CallContext.current().getCallingAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_MAINTENANCE_PREPARE, "completed maintenance for host " + hostId, 0);

0 commit comments

Comments
 (0)