From f47bd61279cb3d8320d5eae48e55ac5fd969de26 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 27 Mar 2025 16:47:12 +0530 Subject: [PATCH] framework/cluster: fix NPE for ms-host status when mgr stops (#10500) * framework/cluster: fix NPE for ms-host status when mgr stops This handles an NPE case for when management server host status is not found in the DB, when stopping the cluster manager. Signed-off-by: Rohit Yadav * Update framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java Co-authored-by: dahn * Update framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java --------- Signed-off-by: Rohit Yadav Co-authored-by: dahn --- .../com/cloud/cluster/ClusterManagerImpl.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java index 1b45910b88a..d2c85b498f2 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java @@ -1107,9 +1107,19 @@ public class ClusterManagerImpl extends ManagerBase implements ClusterManager, C if (_mshostId != null) { final ManagementServerHostVO mshost = _mshostDao.findByMsid(_msId); if (mshost != null) { - final ManagementServerStatusVO mshostStatus = mshostStatusDao.findByMsId(mshost.getUuid()); - mshostStatus.setLastJvmStop(new Date()); - mshostStatusDao.update(mshostStatus.getId(), mshostStatus); + ManagementServerStatusVO mshostStatus = mshostStatusDao.findByMsId(mshost.getUuid()); + if (mshostStatus != null) { + mshostStatus.setLastJvmStop(new Date()); + mshostStatusDao.update(mshostStatus.getId(), mshostStatus); + } else { + logger.warn("Found a management server host [{}] without a status. This should never happen!", mshost); + mshostStatus = new ManagementServerStatusVO(); + mshostStatus.setMsId(mshost.getUuid()); + mshostStatus.setLastSystemBoot(new Date()); + mshostStatus.setLastJvmStart(new Date()); + mshostStatus.setUpdated(new Date()); + mshostStatusDao.persist(mshostStatus); + } ManagementServerHost.State msHostState = ManagementServerHost.State.Down; if (ManagementServerHost.State.Maintenance.equals(mshost.getState()) || ManagementServerHost.State.PreparingForMaintenance.equals(mshost.getState())) {