You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2015/07/08 10:02:07 UTC

svn commit: r1689805 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment: ./ compaction/ file/

Author: alexparvulescu
Date: Wed Jul  8 08:02:06 2015
New Revision: 1689805

URL: http://svn.apache.org/r1689805
Log:
OAK-3052 Make compaction gain estimate threshold configurable


Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBuilder.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategy.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategyMBean.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/DefaultCompactionStrategyMBean.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/package-info.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBuilder.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBuilder.java Wed Jul  8 08:02:06 2015
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
 
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.GAIN_THRESHOLD_DEFAULT;
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.NO_COMPACTION;
 
 import java.util.concurrent.Callable;
@@ -43,6 +44,7 @@ public class SegmentNodeStoreBuilder {
     private int retryCount;
     private boolean forceAfterFail;
     private boolean persistCompactionMap;
+    private byte gainThreshold;
     private CompactionStrategy compactionStrategy;
 
     static SegmentNodeStoreBuilder newSegmentNodeStore(SegmentStore store) {
@@ -53,10 +55,20 @@ public class SegmentNodeStoreBuilder {
         this.store = store;
     }
 
+    @Deprecated
     public SegmentNodeStoreBuilder withCompactionStrategy(
             boolean pauseCompaction, boolean cloneBinaries, String cleanup,
             long cleanupTs, byte memoryThreshold, final int lockWaitTime,
             int retryCount, boolean forceAfterFail, boolean persistCompactionMap) {
+        return withCompactionStrategy(pauseCompaction, cloneBinaries, cleanup,
+                cleanupTs, memoryThreshold, lockWaitTime, retryCount,
+                forceAfterFail, persistCompactionMap, GAIN_THRESHOLD_DEFAULT);
+    }
+
+    public SegmentNodeStoreBuilder withCompactionStrategy(
+            boolean pauseCompaction, boolean cloneBinaries, String cleanup,
+            long cleanupTs, byte memoryThreshold, final int lockWaitTime,
+            int retryCount, boolean forceAfterFail, boolean persistCompactionMap, byte gainThreshold) {
         this.hasCompactionStrategy = true;
         this.pauseCompaction = pauseCompaction;
         this.cloneBinaries = cloneBinaries;
@@ -67,6 +79,7 @@ public class SegmentNodeStoreBuilder {
         this.retryCount = retryCount;
         this.forceAfterFail = forceAfterFail;
         this.persistCompactionMap = persistCompactionMap;
+        this.gainThreshold = gainThreshold;
         return this;
     }
 
@@ -96,6 +109,7 @@ public class SegmentNodeStoreBuilder {
             compactionStrategy.setRetryCount(retryCount);
             compactionStrategy.setForceAfterFail(forceAfterFail);
             compactionStrategy.setPersistCompactionMap(persistCompactionMap);
+            compactionStrategy.setGainThreshold(gainThreshold);
         } else {
             compactionStrategy = NO_COMPACTION;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Wed Jul  8 08:02:06 2015
@@ -25,6 +25,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.CLEANUP_DEFAULT;
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.CLONE_BINARIES_DEFAULT;
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.FORCE_AFTER_FAIL_DEFAULT;
+import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.GAIN_THRESHOLD_DEFAULT;
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.MEMORY_THRESHOLD_DEFAULT;
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.PAUSE_DEFAULT;
 import static org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy.PERSIST_COMPACTION_MAP_DEFAULT;
@@ -169,6 +170,14 @@ public class SegmentNodeStoreService ext
     public static final String COMPACTION_MEMORY_THRESHOLD = "compaction.memoryThreshold";
 
     @Property(
+            byteValue = GAIN_THRESHOLD_DEFAULT,
+            label = "Compaction gain threshold",
+            description = "TarMK compaction gain threshold. The gain estimation prevents compaction from running " +
+                    "if the provided threshold is not met. Value represents a percentage so an input beween 0 and 100 is expected."
+    )
+    public static final String COMPACTION_GAIN_THRESHOLD = "compaction.gainThreshold";
+
+    @Property(
             boolValue = PAUSE_DEFAULT,
             label = "Pause Compaction",
             description = "When enabled compaction would not be performed"
@@ -354,6 +363,12 @@ public class SegmentNodeStoreService ext
             memoryThreshold = Byte.valueOf(memoryThresholdS);
         }
 
+        String gainThresholdS = fallbackLookup(context, COMPACTION_GAIN_THRESHOLD);
+        byte gainThreshold = GAIN_THRESHOLD_DEFAULT;
+        if (gainThresholdS != null) {
+            gainThreshold = Byte.valueOf(gainThresholdS);
+        }
+
         final long blobGcMaxAgeInSecs = toLong(fallbackLookup(context, PROP_BLOB_GC_MAX_AGE), DEFAULT_BLOB_GC_MAX_AGE);
 
         OsgiWhiteboard whiteboard = new OsgiWhiteboard(context.getBundleContext());
@@ -374,7 +389,7 @@ public class SegmentNodeStoreService ext
                 .newSegmentNodeStore(store);
         nodeStoreBuilder.withCompactionStrategy(pauseCompaction, cloneBinaries,
                 cleanup, cleanupTs, memoryThreshold, lockWaitTime, retryCount,
-                forceCommit, persistCompactionMap);
+                forceCommit, persistCompactionMap, gainThreshold);
         delegate = nodeStoreBuilder.create();
 
         CompactionStrategy compactionStrategy = nodeStoreBuilder

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategy.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategy.java Wed Jul  8 08:02:06 2015
@@ -76,6 +76,8 @@ public abstract class CompactionStrategy
 
     public static final boolean PERSIST_COMPACTION_MAP_DEFAULT = true;
 
+    public static final byte GAIN_THRESHOLD_DEFAULT = 10;
+
     /**
      * Default value for {@link #getRetryCount()}
      */
@@ -122,6 +124,11 @@ public abstract class CompactionStrategy
 
     private long compactionStart = currentTimeMillis();
 
+    /**
+     * Compaction gain estimate threshold beyond which compaction should run
+     */
+    private byte gainThreshold = GAIN_THRESHOLD_DEFAULT;
+
     protected CompactionStrategy(boolean paused,
             boolean cloneBinaries, @Nonnull CleanupType cleanupType, long olderThan, byte memoryThreshold) {
         checkArgument(olderThan >= 0);
@@ -251,6 +258,24 @@ public abstract class CompactionStrategy
         this.retryCount = retryCount;
     }
 
+    /**
+     * Get the compaction gain estimate threshold beyond which compaction should
+     * run
+     * @return gainThreshold
+     */
+    public byte getGainThreshold() {
+        return gainThreshold;
+    }
+
+    /**
+     * Set the compaction gain estimate threshold beyond which compaction should
+     * run
+     * @param gainThreshold
+     */
+    public void setGainThreshold(byte gainThreshold) {
+        this.gainThreshold = gainThreshold;
+    }
+
     public abstract boolean compacted(@Nonnull Callable<Boolean> setHead) throws Exception;
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategyMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategyMBean.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategyMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/CompactionStrategyMBean.java Wed Jul  8 08:02:06 2015
@@ -72,4 +72,19 @@ public interface CompactionStrategyMBean
      * @param retryCount
      */
     void setRetryCount(int retryCount);
+
+    /**
+     * Get the compaction gain estimate threshold beyond which compaction should
+     * run
+     * @return gainThreshold
+     */
+    byte getGainThreshold();
+
+    /**
+     * Set the compaction gain estimate threshold beyond which compaction should
+     * run
+     * @param gainThreshold
+     */
+    void setGainThreshold(byte gainThreshold);
+
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/DefaultCompactionStrategyMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/DefaultCompactionStrategyMBean.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/DefaultCompactionStrategyMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/compaction/DefaultCompactionStrategyMBean.java Wed Jul  8 08:02:06 2015
@@ -102,4 +102,15 @@ public class DefaultCompactionStrategyMB
     public void setRetryCount(int retryCount) {
         strategy.setRetryCount(retryCount);
     }
+
+    @Override
+    public byte getGainThreshold() {
+        return strategy.getGainThreshold();
+    }
+
+    @Override
+    public void setGainThreshold(byte gainThreshold) {
+        strategy.setGainThreshold(gainThreshold);
+    }
+
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Wed Jul  8 08:02:06 2015
@@ -461,7 +461,7 @@ public class FileStore implements Segmen
 
         CompactionGainEstimate estimate = estimateCompactionGain();
         long gain = estimate.estimateCompactionGain(offset);
-        if (gain >= 10) {
+        if (gain >= compactionStrategy.getGainThreshold()) {
             gcMonitor.info(
                     "Estimated compaction in {}, gain is {}% ({}/{}) or ({}/{}), so running compaction",
                     watch, gain, estimate.getReachableSize(),

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/package-info.java?rev=1689805&r1=1689804&r2=1689805&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/package-info.java Wed Jul  8 08:02:06 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("3.0.0")
+@Version("3.1.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.plugins.segment;