From 54ebbe55a7e199048cf683fd13c04d399a0ab5bd 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. (cherry picked from commit 8ce6eba549bcd3fa007aaf10a29c3a2fef9ffaaa) Signed-off-by: Rohit Yadav (cherry picked from commit 59ce63918e227f93d64642e881551c25738de3b3) --- .../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 2d0be24fcf8..9e0dd305065 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -168,7 +168,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; @@ -1468,7 +1468,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 {