Skip to content

Commit 718c283

Browse files
code improvements
1 parent e2c590d commit 718c283

File tree

3 files changed

+49
-16
lines changed

3 files changed

+49
-16
lines changed

agent/src/main/java/com/cloud/agent/Agent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -943,9 +943,9 @@ private void processManagementServerList(final List<String> msList, final List<S
943943
shell.setAvoidHosts(avoidMsList);
944944
if (triggerHostLB) {
945945
logger.info("Triggering preferred host task");
946-
hostLbCheckExecutor = Executors.newSingleThreadScheduledExecutor((new NamedThreadFactory("HostLB-Executor")));
947-
ScheduledExecutorService hostLbExecutor = Executors.newScheduledThreadPool(1);
946+
ScheduledExecutorService hostLbExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("HostLB-Executor"));
948947
hostLbExecutor.schedule(new PreferredHostCheckerTask(), 0, TimeUnit.MILLISECONDS);
948+
hostLbExecutor.shutdown();
949949
}
950950
if ("shuffle".equals(lbAlgorithm)) {
951951
scheduleHostLBCheckerTask(0);

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

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.apache.cloudstack.framework.config.Configurable;
4242
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
4343
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
44+
import org.apache.cloudstack.management.ManagementServerHost;
4445
import org.apache.cloudstack.management.ManagementServerHost.State;
4546
import org.apache.cloudstack.maintenance.command.CancelMaintenanceManagementServerHostCommand;
4647
import org.apache.cloudstack.maintenance.command.CancelShutdownManagementServerHostCommand;
@@ -245,6 +246,9 @@ public void triggerShutdown() {
245246
this.shutdownTriggered = true;
246247
prepareForShutdown(true);
247248
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
249+
if (msHost == null) {
250+
throw new CloudRuntimeException("Invalid node id for the management server");
251+
}
248252
msHostDao.updateState(msHost.getId(), State.ShuttingDown);
249253
}
250254

@@ -269,12 +273,18 @@ private void prepareForShutdown(boolean postTrigger) {
269273
public void prepareForShutdown() {
270274
prepareForShutdown(false);
271275
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
276+
if (msHost == null) {
277+
throw new CloudRuntimeException("Invalid node id for the management server");
278+
}
272279
msHostDao.updateState(msHost.getId(), State.PreparingForShutDown);
273280
}
274281

275282
@Override
276283
public void cancelShutdown() {
277284
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
285+
if (msHost == null) {
286+
throw new CloudRuntimeException("Invalid node id for the management server");
287+
}
278288
if (!this.preparingForShutdown && !(State.PreparingForShutDown.equals(msHost.getState()) || State.ReadyToShutDown.equals(msHost.getState()))) {
279289
throw new CloudRuntimeException("Shutdown has not been triggered");
280290
}
@@ -295,36 +305,48 @@ public void prepareForMaintenance(String lbAlorithm, boolean forced) {
295305
if (this.preparingForMaintenance) {
296306
throw new CloudRuntimeException("Maintenance has already been initiated");
297307
}
308+
309+
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
310+
if (msHost == null) {
311+
throw new CloudRuntimeException("Invalid node id for the management server");
312+
}
298313
this.preparingForMaintenance = true;
299314
this.maintenanceStartTime = System.currentTimeMillis();
300315
this.lbAlgorithm = lbAlorithm;
301316
jobManager.disableAsyncJobs();
302317
onPreparingForMaintenance();
303318
waitForPendingJobs(forced);
304-
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
305319
msHostDao.updateState(msHost.getId(), State.PreparingForMaintenance);
306320
}
307321

308322
@Override
309323
public void cancelMaintenance() {
310324
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
325+
if (msHost == null) {
326+
throw new CloudRuntimeException("Invalid node id for the management server");
327+
}
311328
if (!this.preparingForMaintenance && !(State.Maintenance.equals(msHost.getState()) || State.PreparingForMaintenance.equals(msHost.getState()))) {
312329
throw new CloudRuntimeException("Maintenance has not been initiated");
313330
}
314331
resetMaintenanceParams();
315332
resetShutdownParams();
316333
jobManager.enableAsyncJobs();
317334
cancelWaitForPendingJobs();
318-
if (msHost != null) {
319-
if (State.PreparingForMaintenance.equals(msHost.getState())) {
320-
onCancelPreparingForMaintenance();
321-
}
322-
if (State.Maintenance.equals(msHost.getState())) {
323-
onCancelMaintenance();
324-
}
325-
}
326-
327335
msHostDao.updateState(msHost.getId(), State.Up);
336+
ScheduledExecutorService cancelMaintenanceService = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("CancelMaintenance-Job"));
337+
cancelMaintenanceService.schedule(() -> {
338+
cancelMaintenanceTask(msHost.getState());
339+
}, 0, TimeUnit.SECONDS);
340+
cancelMaintenanceService.shutdown();
341+
}
342+
343+
private void cancelMaintenanceTask(ManagementServerHost.State msState) {
344+
if (State.PreparingForMaintenance.equals(msState)) {
345+
onCancelPreparingForMaintenance();
346+
}
347+
if (State.Maintenance.equals(msState)) {
348+
onCancelMaintenance();
349+
}
328350
}
329351

330352
private void waitForPendingJobs(boolean forceMaintenance) {
@@ -509,6 +531,9 @@ public void cancelPreparingForMaintenance(ManagementServerHostVO msHost) {
509531
jobManager.enableAsyncJobs();
510532
if (msHost == null) {
511533
msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
534+
if (msHost == null) {
535+
throw new CloudRuntimeException("Invalid node id for the management server");
536+
}
512537
}
513538
onCancelPreparingForMaintenance();
514539
msHostDao.updateState(msHost.getId(), State.Up);
@@ -595,6 +620,10 @@ protected void runInContext() {
595620
if (forceMaintenance) {
596621
logger.debug("Maintenance window timeout, MS is forced to Maintenance Mode");
597622
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
623+
if (msHost == null) {
624+
logger.warn("Unable to find the management server, invalid node id");
625+
return;
626+
}
598627
msHostDao.updateState(msHost.getId(), State.Maintenance);
599628
managementServerMaintenanceManager.onMaintenance();
600629
managementServerMaintenanceManager.cancelWaitForPendingJobs();
@@ -627,6 +656,10 @@ protected void runInContext() {
627656
}
628657
if (managementServerMaintenanceManager.isPreparingForMaintenance()) {
629658
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
659+
if (msHost == null) {
660+
logger.warn("Unable to find the management server, invalid node id");
661+
return;
662+
}
630663
if (totalAgents == 0) {
631664
logger.info("MS is in Maintenance Mode");
632665
msHostDao.updateState(msHost.getId(), State.Maintenance);
@@ -654,14 +687,16 @@ protected void runInContext() {
654687
logger.warn(String.format("Unable to prepare for maintenance, cannot transfer direct agents on this management server node %d (id: %s)", ManagementServerNode.getManagementServerId(), msHost.getUuid()));
655688
managementServerMaintenanceManager.cancelPreparingForMaintenance(msHost);
656689
managementServerMaintenanceManager.cancelWaitForPendingJobs();
657-
return;
658690
}
659691
} else if (managementServerMaintenanceManager.isPreparingForShutdown()) {
660692
logger.info("MS is Ready To Shutdown");
661693
ManagementServerHostVO msHost = msHostDao.findByMsid(ManagementServerNode.getManagementServerId());
694+
if (msHost == null) {
695+
logger.warn("Unable to find the management server, invalid node id");
696+
return;
697+
}
662698
msHostDao.updateState(msHost.getId(), State.ReadyToShutDown);
663699
managementServerMaintenanceManager.cancelWaitForPendingJobs();
664-
return;
665700
}
666701
} catch (final Exception e) {
667702
logger.error("Error trying to check/run pending jobs task", e);

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,6 @@ public void prepareForMaintenanceAndCancelFromMaintenanceState() {
325325
Mockito.doNothing().when(jobManagerMock).enableAsyncJobs();
326326
spy.cancelMaintenance();
327327
Mockito.verify(jobManagerMock).enableAsyncJobs();
328-
Mockito.verify(spy, Mockito.times(1)).onCancelMaintenance();
329328
}
330329

331330
@Test
@@ -344,7 +343,6 @@ public void prepareForMaintenanceAndCancelFromPreparingForMaintenanceState() {
344343
Mockito.doNothing().when(jobManagerMock).enableAsyncJobs();
345344
spy.cancelMaintenance();
346345
Mockito.verify(jobManagerMock).enableAsyncJobs();
347-
Mockito.verify(spy, Mockito.times(1)).onCancelPreparingForMaintenance();
348346
}
349347

350348
@Test

0 commit comments

Comments
 (0)