From 8ce6eba549bcd3fa007aaf10a29c3a2fef9ffaaa Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Mon, 25 Aug 2014 12:59:40 +0530 Subject: [PATCH] CLOUDSTACK-7415. Host remains in Alert after vCenter restart. Management server PingTask should update PingMap entry for an agent only if it is already present in the Management Server's PingMap. --- .../src/com/cloud/agent/manager/AgentManagerImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java index 847e0000e49..f1f6eb9e589 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -170,7 +170,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl private int _directAgentThreadCap; protected StateMachine2 _statusStateMachine = Status.getStateMachine(); - private final Map _pingMap = new ConcurrentHashMap(10007); + private final ConcurrentHashMap _pingMap = new ConcurrentHashMap(10007); @Inject ResourceManager _resourceMgr; @@ -1469,7 +1469,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl } public void pingBy(long agentId) { - _pingMap.put(agentId, InaccurateClock.getTimeInSeconds()); + // Update PingMap with the latest time if agent entry exists in the PingMap + if (_pingMap.replace(agentId, InaccurateClock.getTimeInSeconds()) == null) { + s_logger.info("PingMap for agent: " + agentId + " will not be updated because agent is no longer in the PingMap"); + } } protected class MonitorTask extends ManagedContextRunnable {