From e8be8239709a06e58fb603f9c53a7af7c67b1d71 Mon Sep 17 00:00:00 2001 From: Sairam Cherupally Date: Sat, 15 Feb 2020 07:22:33 +0530 Subject: [PATCH] remove global lock for subscope computation --- .../java/com/uber/m3/tally/ScopeImpl.java | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/com/uber/m3/tally/ScopeImpl.java b/core/src/main/java/com/uber/m3/tally/ScopeImpl.java index 86fb667..c943a7b 100644 --- a/core/src/main/java/com/uber/m3/tally/ScopeImpl.java +++ b/core/src/main/java/com/uber/m3/tally/ScopeImpl.java @@ -331,26 +331,16 @@ private Scope subScopeHelper(String prefix, Map tags) { String key = keyForPrefixedStringMap(prefix, mergedTags); - Scope subscope; - - synchronized (registry.allocationLock) { - if (!registry.subscopes.containsKey(key)) { - registry.subscopes.put( - key, - new ScopeBuilder(scheduler, registry) - .reporter(reporter) - .prefix(prefix) - .separator(separator) - .tags(mergedTags) - .defaultBuckets(defaultBuckets) - .build() - ); - } - - subscope = registry.subscopes.get(key); - } - - return subscope; + return registry.subscopes.computeIfAbsent( + key, + (k) -> new ScopeBuilder(scheduler, registry) + .reporter(reporter) + .prefix(prefix) + .separator(separator) + .tags(mergedTags) + .defaultBuckets(defaultBuckets) + .build() + ); } // One iteration of reporting this scope and all its subscopes @@ -391,7 +381,6 @@ private void reportUncaughtException(Exception uncaughtException) { } static class Registry { - final Object allocationLock = new Object(); Map subscopes = new ConcurrentHashMap<>(); } }