Skip to content

Commit 4e622f3

Browse files
committed
server: prevent duplicate HA works and alerts
Fixes apache#10367 Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 95c2481 commit 4e622f3

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ public void scheduleRestartForVmsOnHost(final HostVO host, boolean investigate)
265265
s_logger.warn("Scheduling restart for VMs on host " + host.getId() + "-" + host.getName());
266266

267267
final List<VMInstanceVO> vms = _instanceDao.listByHostId(host.getId());
268+
final List<HaWorkVO> pendingHaWorks = _haDao.listPendingHAWorkForHost(host.getId());
268269
final DataCenterVO dcVO = _dcDao.findById(host.getDataCenterId());
269270

270271
// send an email alert that the host is down
@@ -294,6 +295,10 @@ public void scheduleRestartForVmsOnHost(final HostVO host, boolean investigate)
294295
"Host [" + hostDesc + "] is down." + ((sb != null) ? sb.toString() : ""));
295296

296297
for (VMInstanceVO vm : reorderedVMList) {
298+
VMInstanceVO finalVm = vm;
299+
if (pendingHaWorks.stream().anyMatch(h -> h.getInstanceId() == finalVm.getId())) {
300+
continue;
301+
}
297302
ServiceOfferingVO vmOffering = _serviceOfferingDao.findById(vm.getServiceOfferingId());
298303
if (_itMgr.isRootVolumeOnLocalStorage(vm.getId())) {
299304
if (s_logger.isDebugEnabled()){

server/src/main/java/com/cloud/ha/dao/HighAvailabilityDao.java

+2
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,6 @@ public interface HighAvailabilityDao extends GenericDao<HaWorkVO, Long> {
8585
List<HaWorkVO> listPendingHaWorkForVm(long vmId);
8686

8787
List<HaWorkVO> listPendingMigrationsForVm(long vmId);
88+
89+
List<HaWorkVO> listPendingHAWorkForHost(long hostId);
8890
}

server/src/main/java/com/cloud/ha/dao/HighAvailabilityDaoImpl.java

+11
Original file line numberDiff line numberDiff line change
@@ -260,4 +260,15 @@ public int releaseWorkItems(long nodeId) {
260260

261261
return update(vo, sc);
262262
}
263+
264+
@Override
265+
public List<HaWorkVO> listPendingHAWorkForHost(long hostId) {
266+
SearchBuilder<HaWorkVO> sb = createSearchBuilder();
267+
sb.and("hostId", sb.entity().getHostId(), Op.EQ);
268+
sb.and("type", sb.entity().getWorkType(), Op.EQ);
269+
SearchCriteria<HaWorkVO> sc = sb.create();
270+
sc.setParameters("hostId", hostId);
271+
sc.setParameters("type", WorkType.HA);
272+
return listBy(sc);
273+
}
263274
}

0 commit comments

Comments
 (0)