You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2019/02/13 22:28:23 UTC
[hbase] branch master updated: HBASE-21884 avoid autoboxing in ugi
ref counting for secure bulk load
This is an automated email from the ASF dual-hosted git repository.
busbey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new 4273e42 HBASE-21884 avoid autoboxing in ugi ref counting for secure bulk load
4273e42 is described below
commit 4273e42ce56dd49437ffe25aede4a4f826ee53c9
Author: Sean Busbey <bu...@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 <ps...@apache.org>
---
.../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,