Repository: hbase
Updated Branches:
  refs/heads/branch-1.2 9446b99a5 -> 424457540


HBASE-13970 NPE during compaction in trunk


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/42445754
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/42445754
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/42445754

Branch: refs/heads/branch-1.2
Commit: 42445754057e442ecd9c2b0117b2e3560742ef06
Parents: 9446b99
Author: zhangduo <zhang...@wandoujia.com>
Authored: Fri Jun 26 08:10:05 2015 +0800
Committer: zhangduo <zhang...@wandoujia.com>
Committed: Thu Jul 2 21:37:53 2015 +0800

----------------------------------------------------------------------
 .../regionserver/compactions/Compactor.java     | 22 ++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/42445754/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java
index d3a82dd..2c34c70 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/compactions/Compactor.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -222,6 +223,24 @@ public abstract class Compactor {
   }
 
   /**
+   * Used to prevent compaction name conflict when multiple compactions 
running parallel on the
+   * same store.
+   */
+  private static final AtomicInteger NAME_COUNTER = new AtomicInteger(0);
+
+  private String generateCompactionName() {
+    int counter;
+    for (;;) {
+      counter = NAME_COUNTER.get();
+      int next = counter == Integer.MAX_VALUE ? 0 : counter + 1;
+      if (NAME_COUNTER.compareAndSet(counter, next)) {
+        break;
+      }
+    }
+    return store.getRegionInfo().getRegionNameAsString() + "#"
+        + store.getFamily().getNameAsString() + "#" + counter;
+  }
+  /**
    * Performs the compaction.
    * @param scanner Where to read from.
    * @param writer Where to write to.
@@ -242,8 +261,7 @@ public abstract class Compactor {
     if (LOG.isDebugEnabled()) {
       lastMillis = EnvironmentEdgeManager.currentTime();
     }
-    String compactionName =
-        store.getRegionInfo().getRegionNameAsString() + "#" + 
store.getFamily().getNameAsString();
+    String compactionName = generateCompactionName();
     long now = 0;
     boolean hasMore;
     ScannerContext scannerContext =

Reply via email to