Skip to content

Commit e2c590d

Browse files
Update MS state after executing cluster cmd in the target MS, and some code improvements
1 parent 0f945ba commit e2c590d

File tree

4 files changed

+46
-28
lines changed

4 files changed

+46
-28
lines changed

engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,6 @@ public boolean configure(final String name, final Map<String, Object> params) th
273273

274274
_executor = new ThreadPoolExecutor(agentTaskThreads, agentTaskThreads, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new NamedThreadFactory("AgentTaskPool"));
275275

276-
initConnectExecutor();
277-
278276
maxConcurrentNewAgentConnections = RemoteAgentMaxConcurrentNewConnections.value();
279277

280278
_connection = new NioServer("AgentManager", Port.value(), Workers.value() + 10,
@@ -828,6 +826,7 @@ public boolean start() {
828826
return true;
829827
}
830828

829+
initConnectExecutor();
831830
startDirectlyConnectedHosts(false);
832831

833832
if (_connection != null) {

plugins/maintenance/src/main/java/org/apache/cloudstack/maintenance/ManagementServerMaintenanceManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public interface ManagementServerMaintenanceManager {
8585
// Indicates whether the current management server is preparing to maintenance
8686
boolean isPreparingForMaintenance();
8787

88-
void resetPreparingForMaintenance();
88+
void resetMaintenanceParams();
8989

9090
long getMaintenanceStartTime();
9191

plugins/maintenance/src/main/java/org/apache/cloudstack/maintenance/ManagementServerMaintenanceManagerImpl.java

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,20 @@ public boolean isPreparingForShutdown() {
198198
return preparingForShutdown;
199199
}
200200

201+
private void resetShutdownParams() {
202+
logger.debug("Resetting shutdown params");
203+
preparingForShutdown = false;
204+
shutdownTriggered = false;
205+
}
206+
201207
@Override
202208
public boolean isPreparingForMaintenance() {
203209
return preparingForMaintenance;
204210
}
205211

206212
@Override
207-
public void resetPreparingForMaintenance() {
213+
public void resetMaintenanceParams() {
214+
logger.debug("Resetting maintenance params");
208215
preparingForMaintenance = false;
209216
maintenanceStartTime = 0;
210217
lbAlgorithm = null;
@@ -237,6 +244,8 @@ public void triggerShutdown() {
237244
}
238245
this.shutdownTriggered = true;
239246
prepareForShutdown(true);
247+
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
248+
msHostDao.updateState(msHost.getId(), State.ShuttingDown);
240249
}
241250

242251
private void prepareForShutdown(boolean postTrigger) {
@@ -259,19 +268,22 @@ private void prepareForShutdown(boolean postTrigger) {
259268
@Override
260269
public void prepareForShutdown() {
261270
prepareForShutdown(false);
271+
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
272+
msHostDao.updateState(msHost.getId(), State.PreparingForShutDown);
262273
}
263274

264275
@Override
265276
public void cancelShutdown() {
266-
if (!this.preparingForShutdown) {
277+
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
278+
if (!this.preparingForShutdown && !(State.PreparingForShutDown.equals(msHost.getState()) || State.ReadyToShutDown.equals(msHost.getState()))) {
267279
throw new CloudRuntimeException("Shutdown has not been triggered");
268280
}
269281

270-
this.preparingForShutdown = false;
271-
this.shutdownTriggered = false;
272-
resetPreparingForMaintenance();
282+
resetShutdownParams();
283+
resetMaintenanceParams();
273284
jobManager.enableAsyncJobs();
274285
cancelWaitForPendingJobs();
286+
msHostDao.updateState(msHost.getId(), State.Up);
275287
}
276288

277289
@Override
@@ -289,19 +301,20 @@ public void prepareForMaintenance(String lbAlorithm, boolean forced) {
289301
jobManager.disableAsyncJobs();
290302
onPreparingForMaintenance();
291303
waitForPendingJobs(forced);
304+
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
305+
msHostDao.updateState(msHost.getId(), State.PreparingForMaintenance);
292306
}
293307

294308
@Override
295309
public void cancelMaintenance() {
296-
if (!this.preparingForMaintenance) {
310+
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
311+
if (!this.preparingForMaintenance && !(State.Maintenance.equals(msHost.getState()) || State.PreparingForMaintenance.equals(msHost.getState()))) {
297312
throw new CloudRuntimeException("Maintenance has not been initiated");
298313
}
299-
resetPreparingForMaintenance();
300-
this.preparingForShutdown = false;
301-
this.shutdownTriggered = false;
314+
resetMaintenanceParams();
315+
resetShutdownParams();
302316
jobManager.enableAsyncJobs();
303317
cancelWaitForPendingJobs();
304-
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
305318
if (msHost != null) {
306319
if (State.PreparingForMaintenance.equals(msHost.getState())) {
307320
onCancelPreparingForMaintenance();
@@ -310,6 +323,8 @@ public void cancelMaintenance() {
310323
onCancelMaintenance();
311324
}
312325
}
326+
327+
msHostDao.updateState(msHost.getId(), State.Up);
313328
}
314329

315330
private void waitForPendingJobs(boolean forceMaintenance) {
@@ -352,7 +367,6 @@ public ManagementServerMaintenanceResponse prepareForShutdown(PrepareForShutdown
352367
cmds[0] = new PrepareForShutdownManagementServerHostCommand(msHost.getMsid());
353368
executeCmd(msHost, cmds);
354369

355-
msHostDao.updateState(msHost.getId(), State.PreparingForShutDown);
356370
return prepareMaintenanceResponse(cmd.getManagementServerId());
357371
}
358372

@@ -378,7 +392,6 @@ public ManagementServerMaintenanceResponse triggerShutdown(TriggerShutdownCmd cm
378392
cmds[0] = new TriggerShutdownManagementServerHostCommand(msHost.getMsid());
379393
executeCmd(msHost, cmds);
380394

381-
msHostDao.updateState(msHost.getId(), State.ShuttingDown);
382395
return prepareMaintenanceResponse(cmd.getManagementServerId());
383396
}
384397

@@ -398,7 +411,6 @@ public ManagementServerMaintenanceResponse cancelShutdown(CancelShutdownCmd cmd)
398411
cmds[0] = new CancelShutdownManagementServerHostCommand(msHost.getMsid());
399412
executeCmd(msHost, cmds);
400413

401-
msHostDao.updateState(msHost.getId(), State.Up);
402414
return prepareMaintenanceResponse(cmd.getManagementServerId());
403415
}
404416

@@ -444,7 +456,6 @@ public ManagementServerMaintenanceResponse prepareForMaintenance(PrepareForMaint
444456
cmds[0] = new PrepareForMaintenanceManagementServerHostCommand(msHost.getMsid(), cmd.getAlgorithm(), cmd.isForced());
445457
executeCmd(msHost, cmds);
446458

447-
msHostDao.updateState(msHost.getId(), State.PreparingForMaintenance);
448459
return prepareMaintenanceResponse(cmd.getManagementServerId());
449460
}
450461

@@ -464,12 +475,11 @@ public ManagementServerMaintenanceResponse cancelMaintenance(CancelMaintenanceCm
464475
cmds[0] = new CancelMaintenanceManagementServerHostCommand(msHost.getMsid());
465476
executeCmd(msHost, cmds);
466477

467-
msHostDao.updateState(msHost.getId(), State.Up);
468-
469478
if (cmd.getRebalance()) {
470479
logger.info("Propagate MS list and rebalance indirect agents");
471480
indirectAgentLB.propagateMSListToAgents(true);
472481
}
482+
473483
return prepareMaintenanceResponse(cmd.getManagementServerId());
474484
}
475485

@@ -494,9 +504,8 @@ private void executeCmd(ManagementServerHostVO msHost, Command[] cmds) {
494504

495505
@Override
496506
public void cancelPreparingForMaintenance(ManagementServerHostVO msHost) {
497-
resetPreparingForMaintenance();
498-
this.preparingForShutdown = false;
499-
this.shutdownTriggered = false;
507+
resetMaintenanceParams();
508+
resetShutdownParams();
500509
jobManager.enableAsyncJobs();
501510
if (msHost == null) {
502511
msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
@@ -602,8 +611,8 @@ protected void runInContext() {
602611

603612
long totalAgents = totalAgentsInMs();
604613

605-
String msg = String.format("Checking for triggered maintenance or shutdown... shutdownTriggered [%b] AllowAsyncJobs [%b] PendingJobCount [%d] AgentsCount [%d]",
606-
managementServerMaintenanceManager.isShutdownTriggered(), managementServerMaintenanceManager.isAsyncJobsEnabled(), totalPendingJobs, totalAgents);
614+
String msg = String.format("Checking for triggered maintenance or shutdown... shutdownTriggered [%b] preparingForShutdown[%b] preparingForMaintenance[%b] AllowAsyncJobs [%b] PendingJobCount [%d] AgentsCount [%d]",
615+
managementServerMaintenanceManager.isShutdownTriggered(), managementServerMaintenanceManager.isPreparingForShutdown(), managementServerMaintenanceManager.isPreparingForMaintenance(), managementServerMaintenanceManager.isAsyncJobsEnabled(), totalPendingJobs, totalAgents);
607616
logger.debug(msg);
608617

609618
if (totalPendingJobs > 0) {

plugins/maintenance/src/test/java/org/apache/cloudstack/maintenance/ManagementServerMaintenanceManagerImplTest.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ public void countPendingJobs() {
9292
@Test
9393
public void prepareForShutdown() {
9494
Mockito.doNothing().when(jobManagerMock).disableAsyncJobs();
95+
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
96+
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
9597
spy.prepareForShutdown();
9698
Mockito.verify(jobManagerMock).disableAsyncJobs();
9799

@@ -106,6 +108,9 @@ public void prepareForShutdown() {
106108

107109
@Test
108110
public void cancelShutdown() {
111+
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
112+
Mockito.when(msHost.getState()).thenReturn(ManagementServerHost.State.Up);
113+
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
109114
Assert.assertThrows(CloudRuntimeException.class, () -> {
110115
spy.cancelShutdown();
111116
});
@@ -115,6 +120,8 @@ public void cancelShutdown() {
115120
public void triggerShutdown() {
116121
Mockito.doNothing().when(jobManagerMock).disableAsyncJobs();
117122
Mockito.lenient().when(spy.isShutdownTriggered()).thenReturn(false);
123+
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
124+
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
118125
spy.triggerShutdown();
119126
Mockito.verify(jobManagerMock).disableAsyncJobs();
120127

@@ -305,16 +312,16 @@ public void triggerShutdownCmd() {
305312
@Test
306313
public void prepareForMaintenanceAndCancelFromMaintenanceState() {
307314
Mockito.doNothing().when(jobManagerMock).disableAsyncJobs();
315+
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
316+
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
308317
spy.prepareForMaintenance("static", false);
309318
Mockito.verify(jobManagerMock).disableAsyncJobs();
310319

311320
Assert.assertThrows(CloudRuntimeException.class, () -> {
312321
spy.prepareForMaintenance("static", false);
313322
});
314323

315-
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
316324
Mockito.when(msHost.getState()).thenReturn(ManagementServerHost.State.Maintenance);
317-
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
318325
Mockito.doNothing().when(jobManagerMock).enableAsyncJobs();
319326
spy.cancelMaintenance();
320327
Mockito.verify(jobManagerMock).enableAsyncJobs();
@@ -324,16 +331,16 @@ public void prepareForMaintenanceAndCancelFromMaintenanceState() {
324331
@Test
325332
public void prepareForMaintenanceAndCancelFromPreparingForMaintenanceState() {
326333
Mockito.doNothing().when(jobManagerMock).disableAsyncJobs();
334+
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
335+
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
327336
spy.prepareForMaintenance("static", false);
328337
Mockito.verify(jobManagerMock).disableAsyncJobs();
329338

330339
Assert.assertThrows(CloudRuntimeException.class, () -> {
331340
spy.prepareForMaintenance("static", false);
332341
});
333342

334-
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
335343
Mockito.when(msHost.getState()).thenReturn(ManagementServerHost.State.PreparingForMaintenance);
336-
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
337344
Mockito.doNothing().when(jobManagerMock).enableAsyncJobs();
338345
spy.cancelMaintenance();
339346
Mockito.verify(jobManagerMock).enableAsyncJobs();
@@ -342,6 +349,9 @@ public void prepareForMaintenanceAndCancelFromPreparingForMaintenanceState() {
342349

343350
@Test
344351
public void cancelMaintenance() {
352+
ManagementServerHostVO msHost = mock(ManagementServerHostVO.class);
353+
Mockito.when(msHost.getState()).thenReturn(ManagementServerHost.State.Up);
354+
Mockito.when(msHostDao.findByMsid(anyLong())).thenReturn(msHost);
345355
Assert.assertThrows(CloudRuntimeException.class, () -> {
346356
spy.cancelMaintenance();
347357
});

0 commit comments

Comments
 (0)