You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2015/01/13 01:09:38 UTC
hbase git commit: HBASE-12839 Remove synchronization in
ServerStatisticsTracker
Repository: hbase
Updated Branches:
refs/heads/master 8816fa05c -> c32a2c0b1
HBASE-12839 Remove synchronization in ServerStatisticsTracker
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/c32a2c0b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/c32a2c0b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/c32a2c0b
Branch: refs/heads/master
Commit: c32a2c0b16b1d7e41fd0ad4a2737b7f0f2806c82
Parents: 8816fa0
Author: Andrew Purtell <ap...@apache.org>
Authored: Mon Jan 12 16:06:51 2015 -0800
Committer: Andrew Purtell <ap...@apache.org>
Committed: Mon Jan 12 16:06:51 2015 -0800
----------------------------------------------------------------------
.../hbase/client/ServerStatisticTracker.java | 21 ++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/c32a2c0b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ServerStatisticTracker.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ServerStatisticTracker.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ServerStatisticTracker.java
index 0c7b683..42da0b3 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ServerStatisticTracker.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ServerStatisticTracker.java
@@ -34,7 +34,7 @@ import java.util.concurrent.ConcurrentHashMap;
@InterfaceAudience.Private
public class ServerStatisticTracker {
- private final Map<ServerName, ServerStatistics> stats =
+ private final ConcurrentHashMap<ServerName, ServerStatistics> stats =
new ConcurrentHashMap<ServerName, ServerStatistics>();
public void updateRegionStats(ServerName server, byte[] region, ClientProtos.RegionLoadStats
@@ -42,14 +42,15 @@ public class ServerStatisticTracker {
ServerStatistics stat = stats.get(server);
if (stat == null) {
- // create a stats object and update the stats
- synchronized (this) {
- stat = stats.get(server);
- // we don't have stats for that server yet, so we need to make some
- if (stat == null) {
- stat = new ServerStatistics();
- stats.put(server, stat);
- }
+ stat = stats.get(server);
+ // We don't have stats for that server yet, so we need to make an entry.
+ // If we race with another thread it's a harmless unnecessary allocation.
+ if (stat == null) {
+ stat = new ServerStatistics();
+ ServerStatistics old = stats.putIfAbsent(server, stat);
+ if (old != null) {
+ stat = old;
+ }
}
}
stat.update(region, currentStats);
@@ -71,4 +72,4 @@ public class ServerStatisticTracker {
ServerStatistics getServerStatsForTesting(ServerName server) {
return stats.get(server);
}
-}
\ No newline at end of file
+}