You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2014/12/10 02:29:09 UTC

[2/3] hbase git commit: HBASE-12454 Setting didPerformCompaction early in HRegion#compact

HBASE-12454 Setting didPerformCompaction early in HRegion#compact


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

Branch: refs/heads/branch-1
Commit: 7ebeb89c392214ca8527587d40783ab51dbb7331
Parents: 4a1d56a
Author: Andrew Purtell <ap...@apache.org>
Authored: Tue Dec 9 17:06:04 2014 -0800
Committer: Andrew Purtell <ap...@apache.org>
Committed: Tue Dec 9 17:07:28 2014 -0800

----------------------------------------------------------------------
 .../hadoop/hbase/regionserver/HRegion.java      |  8 ++--
 .../hadoop/hbase/regionserver/HStore.java       | 43 +++++++++++---------
 2 files changed, 29 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/7ebeb89c/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index 4989bd5..54cea5a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -1545,7 +1545,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
       return false;
     }
     MonitoredTask status = null;
-    boolean didPerformCompaction = false;
+    boolean requestNeedsCancellation = true;
     // block waiting for the lock for compaction
     lock.readLock().lock();
     try {
@@ -1582,7 +1582,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
         doRegionCompactionPrep();
         try {
           status.setStatus("Compacting store " + store);
-          didPerformCompaction = true;
+          // We no longer need to cancel the request on the way out of this
+          // method because Store#compact will clean up unconditionally
+          requestNeedsCancellation = false;
           store.compact(compaction);
         } catch (InterruptedIOException iioe) {
           String msg = "compaction interrupted";
@@ -1604,7 +1606,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
       return true;
     } finally {
       try {
-        if (!didPerformCompaction) store.cancelRequestedCompaction(compaction);
+        if (requestNeedsCancellation) store.cancelRequestedCompaction(compaction);
         if (status != null) status.cleanup();
       } finally {
         lock.readLock().unlock();

http://git-wip-us.apache.org/repos/asf/hbase/blob/7ebeb89c/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
index b3385d2..ad701b7 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
@@ -1134,25 +1134,29 @@ public class HStore implements Store {
    */
   @Override
   public List<StoreFile> compact(CompactionContext compaction) throws IOException {
-    assert compaction != null && compaction.hasSelection();
-    CompactionRequest cr = compaction.getRequest();
-    Collection<StoreFile> filesToCompact = cr.getFiles();
-    assert !filesToCompact.isEmpty();
-    synchronized (filesCompacting) {
-      // sanity check: we're compacting files that this store knows about
-      // TODO: change this to LOG.error() after more debugging
-      Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));
-    }
-
-    // Ready to go. Have list of files to compact.
-    LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "
-        + this + " of " + this.getRegionInfo().getRegionNameAsString()
-        + " into tmpdir=" + fs.getTempDir() + ", totalSize="
-        + StringUtils.humanReadableInt(cr.getSize()));
-
-    long compactionStartTime = EnvironmentEdgeManager.currentTime();
+    assert compaction != null;
     List<StoreFile> sfs = null;
+    CompactionRequest cr = compaction.getRequest();;
     try {
+      // Do all sanity checking in here if we have a valid CompactionRequest
+      // because we need to clean up after it on the way out in a finally
+      // block below
+      long compactionStartTime = EnvironmentEdgeManager.currentTime();
+      assert compaction.hasSelection();
+      Collection<StoreFile> filesToCompact = cr.getFiles();
+      assert !filesToCompact.isEmpty();
+      synchronized (filesCompacting) {
+        // sanity check: we're compacting files that this store knows about
+        // TODO: change this to LOG.error() after more debugging
+        Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));
+      }
+
+      // Ready to go. Have list of files to compact.
+      LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "
+          + this + " of " + this.getRegionInfo().getRegionNameAsString()
+          + " into tmpdir=" + fs.getTempDir() + ", totalSize="
+          + StringUtils.humanReadableInt(cr.getSize()));
+
       // Commence the compaction.
       List<Path> newFiles = compaction.compact();
 
@@ -1181,11 +1185,12 @@ public class HStore implements Store {
       }
       // At this point the store will use new files for all new scanners.
       completeCompaction(filesToCompact, true); // Archive old files & update store size.
+
+      logCompactionEndMessage(cr, sfs, compactionStartTime);
+      return sfs;
     } finally {
       finishCompactionRequest(cr);
     }
-    logCompactionEndMessage(cr, sfs, compactionStartTime);
-    return sfs;
   }
 
   private List<StoreFile> moveCompatedFilesIntoPlace(