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;