From 889a9287470278593888eda11a6ffd2c772eb252 Mon Sep 17 00:00:00 2001 From: Rohith Sharma K S Date: Thu, 12 May 2016 09:40:01 +0530 Subject: [PATCH] YARN-4002 --- .../server/resourcemanager/NodesListManager.java | 53 +++++++++++++++------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java index bb00e60..fd7f888 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/NodesListManager.java @@ -25,6 +25,9 @@ import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; +import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; import java.util.Map; import java.util.Iterator; @@ -61,6 +64,8 @@ private static final Log LOG = LogFactory.getLog(NodesListManager.class); + private WriteLock hostsWriteLock; + private ReadLock hostsReadLock; private HostsFileReader hostsReader; private Configuration conf; private final RMContext rmContext; @@ -75,6 +80,9 @@ public NodesListManager(RMContext rmContext) { super(NodesListManager.class.getName()); this.rmContext = rmContext; + ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); + this.hostsWriteLock = rwLock.writeLock(); + this.hostsReadLock = rwLock.readLock(); } @Override @@ -208,7 +216,8 @@ public void refreshNodes(Configuration yarnConf) throws IOException, private void refreshHostsReader(Configuration yarnConf) throws IOException, YarnException { - synchronized (hostsReader) { + this.hostsWriteLock.lock(); + try { if (null == yarnConf) { yarnConf = new YarnConfiguration(); } @@ -226,6 +235,8 @@ private void refreshHostsReader(Configuration yarnConf) throws IOException, : this.rmContext.getConfigurationProvider() .getConfigurationInputStream(this.conf, excludesFile)); printConfiguredHosts(); + } finally { + this.hostsWriteLock.unlock(); } } @@ -364,13 +375,18 @@ public void run() { public boolean isValidNode(String hostName) { String ip = resolver.resolve(hostName); - synchronized (hostsReader) { - Set hostsList = hostsReader.getHosts(); - Set excludeList = hostsReader.getExcludedHosts(); - return (hostsList.isEmpty() || hostsList.contains(hostName) || hostsList - .contains(ip)) - && !(excludeList.contains(hostName) || excludeList.contains(ip)); - } + Set hostsList; + Set excludeList; + this.hostsReadLock.lock(); + try { + hostsList = hostsReader.getHosts(); + excludeList = hostsReader.getExcludedHosts(); + } finally { + this.hostsReadLock.unlock(); + } + return (hostsList.isEmpty() || hostsList.contains(hostName) || hostsList + .contains(ip)) + && !(excludeList.contains(hostName) || excludeList.contains(ip)); } @Override @@ -467,17 +483,20 @@ private void updateInactiveNodes() { } public boolean isUntrackedNode(String hostName) { - boolean untracked; String ip = resolver.resolve(hostName); - synchronized (hostsReader) { - Set hostsList = hostsReader.getHosts(); - Set excludeList = hostsReader.getExcludedHosts(); - untracked = !hostsList.isEmpty() && - !hostsList.contains(hostName) && !hostsList.contains(ip) && - !excludeList.contains(hostName) && !excludeList.contains(ip); - } - return untracked; + Set hostsList; + Set excludeList; + this.hostsReadLock.lock(); + try { + hostsList = hostsReader.getHosts(); + excludeList = hostsReader.getExcludedHosts(); + } finally { + this.hostsReadLock.unlock(); + } + return !hostsList.isEmpty() && !hostsList.contains(hostName) + && !hostsList.contains(ip) && !excludeList.contains(hostName) + && !excludeList.contains(ip); } /** -- 1.9.2.msysgit.0