Repository: accumulo
Updated Branches:
  refs/heads/1.6.1-SNAPSHOT dcb081cae -> e1c9a1f6c


ACCUMULO-3140 made user initiated majC wait for current minC to finish


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

Branch: refs/heads/1.6.1-SNAPSHOT
Commit: ad1c807568a7271facad6a729e03378aae4b2841
Parents: 52d30c7
Author: Keith Turner <ktur...@apache.org>
Authored: Thu Sep 18 15:24:30 2014 -0400
Committer: Keith Turner <ktur...@apache.org>
Committed: Fri Sep 19 17:16:16 2014 -0400

----------------------------------------------------------------------
 .../accumulo/server/tabletserver/Tablet.java    | 24 ++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/ad1c8075/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java
----------------------------------------------------------------------
diff --git 
a/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java 
b/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java
index bb13ff8..9bbae89 100644
--- a/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java
+++ b/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java
@@ -404,6 +404,14 @@ public class Tablet {
   private long lastFlushID = -1;
   private long lastCompactID = -1;
   
+  private static class CompactionWaitInfo {
+    long flushID = -1;
+    long compactionID = -1;
+  }
+
+  // stores info about user initiated major compaction that is waiting on a 
minor compaction to finish
+  private CompactionWaitInfo compactionWaitInfo = new CompactionWaitInfo();
+
   private KeyExtent extent;
   
   private TabletResourceManager tabletResources;
@@ -3900,10 +3908,22 @@ public class Tablet {
     synchronized (this) {
       if (lastCompactID >= compactionId)
         return;
-      
+
+      if (minorCompactionInProgress) {
+        // want to wait for running minc to finish before starting majc, see 
ACCUMULO-3041
+        if (compactionWaitInfo.compactionID == compactionId) {
+          if (lastFlushID == compactionWaitInfo.flushID)
+            return;
+        } else {
+          compactionWaitInfo.compactionID = compactionId;
+          compactionWaitInfo.flushID = lastFlushID;
+          return;
+        }
+      }
+
       if (closing || closed || 
majorCompactionQueued.contains(MajorCompactionReason.USER) || 
majorCompactionInProgress)
         return;
-      
+
       if (datafileManager.getDatafileSizes().size() == 0) {
         // no files, so jsut update the metadata table
         majorCompactionInProgress = true;

Reply via email to