From 4f969057b2434cf09562c05a503592f661e7d83e Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Mon, 7 Jul 2014 12:01:38 +0530 Subject: [PATCH] CLOUDSTACK-7030. After the restart of MS in a clustered MS pool, not all hung worker VMs are recycled. Recycle worker VMs that originally belonged to other management servers too because in case of MS restart, the owner MS might change. --- .../cluster/src/com/cloud/cluster/ClusterManager.java | 2 ++ .../src/com/cloud/cluster/ClusterManagerImpl.java | 9 +++++++++ .../hypervisor/vmware/manager/VmwareManagerImpl.java | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManager.java b/framework/cluster/src/com/cloud/cluster/ClusterManager.java index ffdf3663f7b..86d6fb3ab9f 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterManager.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterManager.java @@ -60,6 +60,8 @@ public interface ClusterManager extends Manager { long getCurrentRunId(); + public long getManagementRunId(long msId); + public interface Dispatcher { String getName(); diff --git a/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java b/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java index 622aa62f073..4a0987f902c 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterManagerImpl.java @@ -1072,6 +1072,15 @@ public class ClusterManagerImpl extends ManagerBase implements ClusterManager, C return _runId; } + @Override + public long getManagementRunId(long msId) { + ManagementServerHostVO mshost = _mshostDao.findByMsid(msId); + if (mshost != null) { + return mshost.getRunid(); + } + return -1; + } + public boolean isManagementNodeAlive(long msid) { ManagementServerHostVO mshost = _mshostDao.findByMsid(msid); if (mshost != null) { diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 36d23229b70..3fd1a9cd1b3 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -531,7 +531,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw return true; } - if (msid == _clusterMgr.getManagementNodeId() && runid != _clusterMgr.getCurrentRunId()) { + if (runid != _clusterMgr.getManagementRunId(msid)) { if (s_logger.isInfoEnabled()) s_logger.info("Worker VM's owner management server has changed runid, recycle it"); return true;