Repository: hbase Updated Branches: refs/heads/branch-1 968e464ae -> 7983d2f45 refs/heads/master 64804a049 -> 66fb697f8
HBASE-16275 Change ServerManager#onlineServers from ConcurrentHashMap to ConcurrentSkipListMap (Huaxiang Sun) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/66fb697f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/66fb697f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/66fb697f Branch: refs/heads/master Commit: 66fb697f816cc94030079ce9f3c60aea5b3a6a0c Parents: 64804a0 Author: Matteo Bertozzi <[email protected]> Authored: Thu Jul 28 11:13:58 2016 -0700 Committer: Matteo Bertozzi <[email protected]> Committed: Thu Jul 28 11:13:58 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/master/ServerManager.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/66fb697f/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java index 612a8d0..531883a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java @@ -135,8 +135,8 @@ public class ServerManager { new ConcurrentSkipListMap<byte[], ConcurrentNavigableMap<byte[], Long>>(Bytes.BYTES_COMPARATOR); /** Map of registered servers to their current load */ - private final ConcurrentHashMap<ServerName, ServerLoad> onlineServers = - new ConcurrentHashMap<ServerName, ServerLoad>(); + private final ConcurrentNavigableMap<ServerName, ServerLoad> onlineServers = + new ConcurrentSkipListMap<ServerName, ServerLoad>(); /** * Map of admin interfaces per registered regionserver; these interfaces we use to control @@ -439,8 +439,14 @@ public class ServerManager { */ private ServerName findServerWithSameHostnamePortWithLock( final ServerName serverName) { - for (ServerName sn: this.onlineServers.keySet()) { - if (ServerName.isSameHostnameAndPort(serverName, sn)) return sn; + ServerName end = ServerName.valueOf(serverName.getHostname(), serverName.getPort(), + Long.MAX_VALUE); + + ServerName r = onlineServers.lowerKey(end); + if (r != null) { + if (ServerName.isSameHostnameAndPort(r, serverName)) { + return r; + } } return null; }
