This is an automated email from the ASF dual-hosted git repository.

busbey pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 8fb89b4  HBASE-21884 avoid autoboxing in ugi ref counting for secure 
bulk load
8fb89b4 is described below

commit 8fb89b4ea28862a761555069f88e8a05f900d68d
Author: Sean Busbey <bus...@apache.org>
AuthorDate: Tue Feb 12 23:26:01 2019 -0600

    HBASE-21884 avoid autoboxing in ugi ref counting for secure bulk load
    
    Signed-off-by: Peter Somogyi <psomo...@apache.org>
    (cherry picked from commit 4273e42ce56dd49437ffe25aede4a4f826ee53c9)
---
 .../hbase/regionserver/SecureBulkLoadManager.java  | 36 +++++++++++++---------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java
index 566a6b6..6b55744 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java
@@ -26,9 +26,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.BiFunction;
 import java.util.function.Consumer;
 
+import org.apache.commons.lang3.mutable.MutableInt;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
@@ -110,7 +110,7 @@ public class SecureBulkLoadManager {
   private Path baseStagingDir;
 
   private UserProvider userProvider;
-  private ConcurrentHashMap<UserGroupInformation, Integer> ugiReferenceCounter;
+  private ConcurrentHashMap<UserGroupInformation, MutableInt> 
ugiReferenceCounter;
   private Connection conn;
 
   SecureBulkLoadManager(Configuration conf, Connection conn) {
@@ -182,27 +182,33 @@ public class SecureBulkLoadManager {
 
 
   private void incrementUgiReference(UserGroupInformation ugi) {
-    ugiReferenceCounter.merge(ugi, 1, new BiFunction<Integer, Integer, 
Integer>() {
-      @Override
-      public Integer apply(Integer oldvalue, Integer value) {
-        return ++oldvalue;
+    // if we haven't seen this ugi before, make a new counter
+    ugiReferenceCounter.compute(ugi, (key, value) -> {
+      if (value == null) {
+        value = new MutableInt(1);
+      } else {
+        value.increment();
       }
+      return value;
     });
   }
 
   private void decrementUgiReference(UserGroupInformation ugi) {
-    ugiReferenceCounter.computeIfPresent(ugi,
-        new BiFunction<UserGroupInformation, Integer, Integer>() {
-          @Override
-          public Integer apply(UserGroupInformation key, Integer value) {
-            return value > 1 ? --value : null;
-          }
-      });
+    // if the count drops below 1 we remove the entry by returning null
+    ugiReferenceCounter.computeIfPresent(ugi, (key, value) -> {
+      if (value.intValue() > 1) {
+        value.decrement();
+      } else {
+        value = null;
+      }
+      return value;
+    });
   }
 
   private boolean isUserReferenced(UserGroupInformation ugi) {
-    Integer count = ugiReferenceCounter.get(ugi);
-    return count != null && count > 0;
+    // if the ugi is in the map, based on invariants above
+    // the count must be above zero
+    return ugiReferenceCounter.containsKey(ugi);
   }
 
   public Map<byte[], List<Path>> secureBulkLoadHFiles(final HRegion region,

Reply via email to