Skip to content

Commit e2a6450

Browse files
committed
fix for one managment server shutdown
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent a3aa8ff commit e2a6450

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,8 @@ public boolean stop() {
11221122

11231123
_executor.shutdown();
11241124

1125+
_haDao.markServerPendingWorksAsInvestigating(_msServer.getId());
1126+
11251127
return true;
11261128
}
11271129

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,5 @@ public interface HighAvailabilityDao extends GenericDao<HaWorkVO, Long> {
8787
List<HaWorkVO> listPendingMigrationsForVm(long vmId);
8888
int expungeByVmList(List<Long> vmIds, Long batchSize);
8989
void markPendingWorksAsInvestigating();
90+
void markServerPendingWorksAsInvestigating(long managementServerId);
9091
}

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,30 @@ public int expungeByVmList(List<Long> vmIds, Long batchSize) {
272272
return batchExpunge(sc, batchSize);
273273
}
274274

275+
protected void updatePendingWorkToInvestigating(SearchCriteria<HaWorkVO> sc) {
276+
HaWorkVO haWorkVO = createForUpdate();
277+
haWorkVO.setStep(Step.Investigating);
278+
UpdateBuilder updateBuilder = getUpdateBuilder(haWorkVO);
279+
update(updateBuilder, sc, null);
280+
}
281+
275282
@Override
276283
public void markPendingWorksAsInvestigating() {
277284
final SearchCriteria<HaWorkVO> sc = TBASearch.create();
278285
sc.setParameters("time", System.currentTimeMillis() >> 10);
279286
sc.setParameters("step", Step.Done, Step.Cancelled);
280-
HaWorkVO haWorkVO = createForUpdate();
281-
haWorkVO.setStep(Step.Investigating);
282-
UpdateBuilder updateBuilder = getUpdateBuilder(haWorkVO);
283-
update(updateBuilder, sc, null);
287+
updatePendingWorkToInvestigating(sc);
288+
}
289+
290+
@Override
291+
public void markServerPendingWorksAsInvestigating(long managementServerId) {
292+
SearchBuilder<HaWorkVO> sb = createSearchBuilder();
293+
sb.and("server", sb.entity().getServerId(), Op.EQ);
294+
sb.and("step", sb.entity().getStep(), Op.NIN);
295+
sb.done();
296+
SearchCriteria<HaWorkVO> sc = sb.create();
297+
sc.setParameters("server", managementServerId);
298+
sc.setParameters("step", Step.Done, Step.Cancelled);
299+
updatePendingWorkToInvestigating(sc);
284300
}
285301
}

server/src/test/java/com/cloud/ha/dao/HighAvailabilityDaoImplTest.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public void testExpungeByVmList() {
7171
.batchExpunge(sc, batchSize);
7272
}
7373

74-
7574
@Test
7675
public void testMarkPendingWorksAsInvestigating() throws Exception {
7776
SearchBuilder<HaWorkVO> mockTBASearch = Mockito.mock(SearchBuilder.class);
@@ -96,4 +95,31 @@ public void testMarkPendingWorksAsInvestigating() throws Exception {
9695
Mockito.verify(highAvailabilityDaoImpl).update(Mockito.eq(mockUpdateBuilder), Mockito.eq(mockSearchCriteria), Mockito.isNull());
9796
}
9897
}
98+
99+
@Test
100+
public void testMarkServerPendingWorksAsInvestigating() {
101+
SearchBuilder<HaWorkVO> mockSearch = Mockito.mock(SearchBuilder.class);
102+
Mockito.doReturn(Mockito.mock(HaWorkVO.class)).when(mockSearch).entity();
103+
Mockito.doReturn(mockSearch).when(highAvailabilityDaoImpl).createSearchBuilder();
104+
SearchCriteria<HaWorkVO> mockSearchCriteria = Mockito.mock(SearchCriteria.class);
105+
UpdateBuilder mockUpdateBuilder = Mockito.mock(UpdateBuilder.class);
106+
Mockito.when(mockSearch.create()).thenReturn(mockSearchCriteria);
107+
Mockito.doNothing().when(mockSearchCriteria).setParameters(Mockito.eq("server"), Mockito.eq(1L));
108+
Mockito.doNothing().when(mockSearchCriteria).setParameters(Mockito.eq("step"), Mockito.eq(HighAvailabilityManager.Step.Done), Mockito.eq(HighAvailabilityManager.Step.Cancelled));
109+
HaWorkVO haWorkVO = new HaWorkVO(1L, VirtualMachine.Type.User, null,
110+
null, 1L, null, 0, 0,
111+
HighAvailabilityManager.ReasonType.HostMaintenance);
112+
Mockito.when(highAvailabilityDaoImpl.createForUpdate()).thenReturn(haWorkVO);
113+
Mockito.when(highAvailabilityDaoImpl.createForUpdate()).thenReturn(haWorkVO);
114+
try(MockedStatic<GenericDaoBase> genericDaoBaseMockedStatic = Mockito.mockStatic(GenericDaoBase.class)) {
115+
genericDaoBaseMockedStatic.when(() -> GenericDaoBase.getUpdateBuilder(Mockito.any())).thenReturn(mockUpdateBuilder);
116+
Mockito.doReturn(5).when(highAvailabilityDaoImpl).update(Mockito.any(UpdateBuilder.class), Mockito.any(), Mockito.nullable(Integer.class));
117+
highAvailabilityDaoImpl.markServerPendingWorksAsInvestigating(1L);
118+
Mockito.verify(mockSearch).create();
119+
Mockito.verify(mockSearchCriteria).setParameters(Mockito.eq("server"), Mockito.eq(1L));
120+
Mockito.verify(mockSearchCriteria).setParameters(Mockito.eq("step"), Mockito.eq(HighAvailabilityManager.Step.Done), Mockito.eq(HighAvailabilityManager.Step.Cancelled));
121+
Assert.assertEquals(HighAvailabilityManager.Step.Investigating, haWorkVO.getStep()); // Ensure the step is set correctly
122+
Mockito.verify(highAvailabilityDaoImpl).update(Mockito.eq(mockUpdateBuilder), Mockito.eq(mockSearchCriteria), Mockito.isNull());
123+
}
124+
}
99125
}

0 commit comments

Comments
 (0)