mirror of https://github.com/apache/lucene.git
LUCENE-3210: let app control how aggressive TMP is in targetting segments with deletions; default it to more aggressive than today
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1137060 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
74aac32eb3
commit
f32a6aa455
|
@ -545,6 +545,10 @@ New Features
|
||||||
|
|
||||||
* LUCENE-3179: Added OpenBitSet.prevSetBit (Paul Elschot via Mike McCandless)
|
* LUCENE-3179: Added OpenBitSet.prevSetBit (Paul Elschot via Mike McCandless)
|
||||||
|
|
||||||
|
* LUCENE-3210: Made TieredMergePolicy more aggressive in reclaiming
|
||||||
|
segments with deletions; added new methods
|
||||||
|
set/getReclaimDeletesWeight to control this. (Mike McCandless)
|
||||||
|
|
||||||
Build
|
Build
|
||||||
|
|
||||||
* LUCENE-1344: Create OSGi bundle using dev-tools/maven.
|
* LUCENE-1344: Create OSGi bundle using dev-tools/maven.
|
||||||
|
|
|
@ -82,6 +82,7 @@ public class TieredMergePolicy extends MergePolicy {
|
||||||
private double expungeDeletesPctAllowed = 10.0;
|
private double expungeDeletesPctAllowed = 10.0;
|
||||||
private boolean useCompoundFile = true;
|
private boolean useCompoundFile = true;
|
||||||
private double noCFSRatio = 0.1;
|
private double noCFSRatio = 0.1;
|
||||||
|
private double reclaimDeletesWeight = 2.0;
|
||||||
|
|
||||||
/** Maximum number of segments to be merged at a time
|
/** Maximum number of segments to be merged at a time
|
||||||
* during "normal" merging. For explicit merging (eg,
|
* during "normal" merging. For explicit merging (eg,
|
||||||
|
@ -133,6 +134,23 @@ public class TieredMergePolicy extends MergePolicy {
|
||||||
return maxMergedSegmentBytes/1024/1024.;
|
return maxMergedSegmentBytes/1024/1024.;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Controls how aggressively merges that reclaim more
|
||||||
|
* deletions are favored. Higher values favor selecting
|
||||||
|
* merges that reclaim deletions. A value of 0.0 means
|
||||||
|
* deletions don't impact merge selection. */
|
||||||
|
public TieredMergePolicy setReclaimDeletesWeight(double v) {
|
||||||
|
if (v < 0.0) {
|
||||||
|
throw new IllegalArgumentException("reclaimDeletesWeight must be >= 0.0 (got " + v + ")");
|
||||||
|
}
|
||||||
|
reclaimDeletesWeight = v;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** See {@link #setReclaimDeletesWeight}. */
|
||||||
|
public double getReclaimDeletesWeight() {
|
||||||
|
return reclaimDeletesWeight;
|
||||||
|
}
|
||||||
|
|
||||||
/** Segments smaller than this are "rounded up" to this
|
/** Segments smaller than this are "rounded up" to this
|
||||||
* size, ie treated as equal (floor) size for merge
|
* size, ie treated as equal (floor) size for merge
|
||||||
* selection. This is to prevent frequent flushing of
|
* selection. This is to prevent frequent flushing of
|
||||||
|
@ -435,7 +453,7 @@ public class TieredMergePolicy extends MergePolicy {
|
||||||
|
|
||||||
// Strongly favor merges that reclaim deletes:
|
// Strongly favor merges that reclaim deletes:
|
||||||
final double nonDelRatio = ((double) totAfterMergeBytes)/totBeforeMergeBytes;
|
final double nonDelRatio = ((double) totAfterMergeBytes)/totBeforeMergeBytes;
|
||||||
mergeScore *= nonDelRatio;
|
mergeScore *= Math.pow(nonDelRatio, reclaimDeletesWeight);
|
||||||
|
|
||||||
final double finalMergeScore = mergeScore;
|
final double finalMergeScore = mergeScore;
|
||||||
|
|
||||||
|
|
|
@ -947,6 +947,7 @@ public abstract class LuceneTestCase extends Assert {
|
||||||
tmp.setSegmentsPerTier(_TestUtil.nextInt(r, 2, 20));
|
tmp.setSegmentsPerTier(_TestUtil.nextInt(r, 2, 20));
|
||||||
tmp.setUseCompoundFile(r.nextBoolean());
|
tmp.setUseCompoundFile(r.nextBoolean());
|
||||||
tmp.setNoCFSRatio(0.1 + r.nextDouble()*0.8);
|
tmp.setNoCFSRatio(0.1 + r.nextDouble()*0.8);
|
||||||
|
tmp.setReclaimDeletesWeight(r.nextDouble()*4);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue