You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by es...@apache.org on 2018/07/11 08:26:03 UTC

hbase git commit: HBASE-20542-ADDENDUM: fix TestHStore

Repository: hbase
Updated Branches:
  refs/heads/master 1e0650955 -> 1804b6d05


HBASE-20542-ADDENDUM: fix TestHStore


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

Branch: refs/heads/master
Commit: 1804b6d0593e335c126d3f67cbc3a90964dd1639
Parents: 1e06509
Author: eshcar <es...@oath.com>
Authored: Wed Jul 11 11:25:49 2018 +0300
Committer: eshcar <es...@oath.com>
Committed: Wed Jul 11 11:25:49 2018 +0300

----------------------------------------------------------------------
 .../hbase/regionserver/CompactingMemStore.java  | 35 ++++++++++++--------
 .../hbase/regionserver/MemStoreCompactor.java   | 18 +++++-----
 .../hadoop/hbase/regionserver/TestHStore.java   | 17 ++++++----
 3 files changed, 40 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/1804b6d0/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
index 157441d..2eb05b4 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java
@@ -240,6 +240,15 @@ public class CompactingMemStore extends AbstractMemStore {
     return mss.getDataSize() > 0? mss: getActive().getMemStoreSize();
   }
 
+
+  public void setInMemoryCompactionCompleted() {
+    inMemoryCompactionInProgress.set(false);
+  }
+
+  protected boolean setInMemoryCompactionFlag() {
+    return inMemoryCompactionInProgress.compareAndSet(false, true);
+  }
+
   @Override
   protected long keySize() {
     // Need to consider dataSize/keySize of all segments in pipeline and active
@@ -419,7 +428,7 @@ public class CompactingMemStore extends AbstractMemStore {
     if (shouldFlushInMemory(currActive, cellToAdd, memstoreSizing)) {
       if (currActive.setInMemoryFlushed()) {
         flushInMemory(currActive);
-        if (inMemoryCompactionInProgress.compareAndSet(false, true)) {
+        if (setInMemoryCompactionFlag()) {
           // The thread is dispatched to do in-memory compaction in the background
           InMemoryCompactionRunnable runnable = new InMemoryCompactionRunnable();
           if (LOG.isTraceEnabled()) {
@@ -455,21 +464,19 @@ public class CompactingMemStore extends AbstractMemStore {
     // setting the inMemoryCompactionInProgress flag again for the case this method is invoked
     // directly (only in tests) in the common path setting from true to true is idempotent
     inMemoryCompactionInProgress.set(true);
+    // Used by tests
+    if (!allowCompaction.get()) {
+      return;
+    }
     try {
-      // Used by tests
-      if (!allowCompaction.get()) {
-        return;
-      }
-      try {
-        // Speculative compaction execution, may be interrupted if flush is forced while
-        // compaction is in progress
-        compactor.start();
-      } catch (IOException e) {
-        LOG.warn("Unable to run in-memory compaction on {}/{}; exception={}",
-            getRegionServices().getRegionInfo().getEncodedName(), getFamilyName(), e);
+      // Speculative compaction execution, may be interrupted if flush is forced while
+      // compaction is in progress
+      if(!compactor.start()) {
+        setInMemoryCompactionCompleted();
       }
-    } finally {
-      inMemoryCompactionInProgress.set(false);
+    } catch (IOException e) {
+      LOG.warn("Unable to run in-memory compaction on {}/{}; exception={}",
+          getRegionServices().getRegionInfo().getEncodedName(), getFamilyName(), e);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/1804b6d0/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
index 9973742..2dafcee 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java
@@ -147,20 +147,19 @@ public class MemStoreCompactor {
   private void doCompaction() {
     ImmutableSegment result = null;
     boolean resultSwapped = false;
-    if (isInterrupted.get()) {      // if the entire process is interrupted cancel flattening
-      return;           // the compaction also doesn't start when interrupted
-    }
-
     MemStoreCompactionStrategy.Action nextStep = strategy.getAction(versionedList);
-    boolean merge =
-        (nextStep == MemStoreCompactionStrategy.Action.MERGE ||
-            nextStep == MemStoreCompactionStrategy.Action.MERGE_COUNT_UNIQUE_KEYS);
+    boolean merge = (nextStep == MemStoreCompactionStrategy.Action.MERGE ||
+        nextStep == MemStoreCompactionStrategy.Action.MERGE_COUNT_UNIQUE_KEYS);
     try {
+      if (isInterrupted.get()) {      // if the entire process is interrupted cancel flattening
+        return;           // the compaction also doesn't start when interrupted
+      }
+
       if (nextStep == MemStoreCompactionStrategy.Action.NOOP) {
         return;
       }
-      if (nextStep == MemStoreCompactionStrategy.Action.FLATTEN ||
-          nextStep == MemStoreCompactionStrategy.Action.FLATTEN_COUNT_UNIQUE_KEYS) {
+      if (nextStep == MemStoreCompactionStrategy.Action.FLATTEN
+          || nextStep == MemStoreCompactionStrategy.Action.FLATTEN_COUNT_UNIQUE_KEYS) {
         // some Segment in the pipeline is with SkipList index, make it flat
         compactingMemStore.flattenOneSegment(versionedList.getVersion(), nextStep);
         return;
@@ -195,6 +194,7 @@ public class MemStoreCompactor {
         result.close();
       }
       releaseResources();
+      compactingMemStore.setInMemoryCompactionCompleted();
     }
 
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/1804b6d0/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java
index 12df8f1..72a9c75 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java
@@ -1738,15 +1738,15 @@ public class TestHStore {
     @Override
     public boolean start() throws IOException {
       boolean isFirst = RUNNER_COUNT.getAndIncrement() == 0;
-      boolean rval = super.start();
       if (isFirst) {
         try {
           START_COMPACTOR_LATCH.await();
+          return super.start();
         } catch (InterruptedException ex) {
           throw new RuntimeException(ex);
         }
       }
-      return rval;
+      return super.start();
     }
   }
 
@@ -1765,12 +1765,15 @@ public class TestHStore {
     }
 
     @Override
-    void inMemoryCompaction() {
-      RUNNER_COUNT.incrementAndGet();
-      if (LOG.isDebugEnabled()) {
-        LOG.debug("runner count: " + RUNNER_COUNT.get());
+    protected boolean setInMemoryCompactionFlag() {
+      boolean rval = super.setInMemoryCompactionFlag();
+      if (rval) {
+        RUNNER_COUNT.incrementAndGet();
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("runner count: " + RUNNER_COUNT.get());
+        }
       }
-      super.inMemoryCompaction();
+      return rval;
     }
   }