@Override public MergeSpecification findMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos, MergeContext mergeContext) throws IOException { return in.findMerges(mergeTrigger, segmentInfos, mergeContext); }
@Override public boolean useCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo, MergeContext mergeContext) throws IOException { return in.useCompoundFile(infos, mergedInfo, mergeContext); }
@Override public final void setNoCFSRatio(double noCFSRatio) { in.setNoCFSRatio(noCFSRatio); }
/** * Returns true if a new segment (regardless of its origin) should use the * compound file format. The default implementation returns <code>true</code> * iff the size of the given mergedInfo is less or equal to * {@link #getMaxCFSSegmentSizeMB()} and the size is less or equal to the * TotalIndexSize * {@link #getNoCFSRatio()} otherwise <code>false</code>. */ public boolean useCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo, MergeContext mergeContext) throws IOException { if (getNoCFSRatio() == 0.0) { return false; } long mergedInfoSize = size(mergedInfo, mergeContext); if (mergedInfoSize > maxCFSSegmentSize) { return false; } if (getNoCFSRatio() >= 1.0) { return true; } long totalSize = 0; for (SegmentCommitInfo info : infos) { totalSize += size(info, mergeContext); } return mergedInfoSize <= getNoCFSRatio() * totalSize; }
/** Returns true if this single info is already fully merged (has no * pending deletes, is in the same dir as the * writer, and matches the current compound file setting */ protected final boolean isMerged(SegmentInfos infos, SegmentCommitInfo info, MergeContext mergeContext) throws IOException { assert mergeContext != null; int delCount = mergeContext.numDeletesToMerge(info); assert assertDelCount(delCount, info); return delCount == 0 && useCompoundFile(infos, info, mergeContext) == info.info.getUseCompoundFile(); }
"Expected EXPLICT or MERGE_FINISHED as trigger even with maxNumSegments set but was: " + trigger.name(); spec = mergePolicy.findForcedMerges(segmentInfos, maxNumSegments, Collections.unmodifiableMap(segmentsToMerge), this); newMergesFound = spec != null; if (newMergesFound) { spec = mergePolicy.findMerges(trigger, segmentInfos, this);
@Override public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, MergeContext mergeContext) throws IOException { return in.findForcedDeletesMerges(segmentInfos, mergeContext); }
@Override public MergeSpecification findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, Map<SegmentCommitInfo,Boolean> segmentsToMerge, MergeContext mergeContext) throws IOException { return in.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, mergeContext); }
private static void configureRandom(Random r, MergePolicy mergePolicy) { if (r.nextBoolean()) { mergePolicy.setNoCFSRatio(0.1 + r.nextDouble()*0.8); } else { mergePolicy.setNoCFSRatio(r.nextBoolean() ? 1.0 : 0.0); } if (rarely(r)) { mergePolicy.setMaxCFSSegmentSizeMB(0.2 + r.nextDouble() * 2.0); } else { mergePolicy.setMaxCFSSegmentSizeMB(Double.POSITIVE_INFINITY); } }
@Override public void setMaxCFSSegmentSizeMB(double v) { super.setMaxCFSSegmentSizeMB(v); }
@Override public double getNoCFSRatio() { return in.getNoCFSRatio(); }
@Override protected long size(SegmentCommitInfo info, MergeContext context) throws IOException { return in.size(info, context); }
MergePolicyStatus(final MergePolicy mergePolicy) { type = mergePolicy.getClass().getTypeName(); maxCfsSegmentSizeMb = mergePolicy.getMaxCFSSegmentSizeMB(); noCfsRatio = mergePolicy.getNoCFSRatio(); if (mergePolicy instanceof TieredMergePolicy) { TieredMergePolicy tmp = (TieredMergePolicy) mergePolicy; maxMergeAtOnce = tmp.getMaxMergeAtOnce(); maxMergedSegmentMb = tmp.getMaxMergedSegmentMB(); segmentsPerTier = tmp.getSegmentsPerTier(); } else { maxMergeAtOnce = null; maxMergedSegmentMb = null; segmentsPerTier = null; } } }
@Override public final double getMaxCFSSegmentSizeMB() { return in.getMaxCFSSegmentSizeMB(); }
"Expected EXPLICT or MERGE_FINISHED as trigger even with maxNumSegments set but was: " + trigger.name(); spec = mergePolicy.findForcedMerges(segmentInfos, maxNumSegments, Collections.unmodifiableMap(segmentsToMerge), this); newMergesFound = spec != null; if (newMergesFound) { spec = mergePolicy.findMerges(trigger, segmentInfos, this);
@Override public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, MergeContext mergeContext) throws IOException { return wrapSpec(in.findForcedDeletesMerges(segmentInfos, mergeContext)); }
/** * Returns true if a new segment (regardless of its origin) should use the * compound file format. The default implementation returns <code>true</code> * iff the size of the given mergedInfo is less or equal to * {@link #getMaxCFSSegmentSizeMB()} and the size is less or equal to the * TotalIndexSize * {@link #getNoCFSRatio()} otherwise <code>false</code>. */ public boolean useCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo, IndexWriter writer) throws IOException { if (getNoCFSRatio() == 0.0) { return false; } long mergedInfoSize = size(mergedInfo, writer); if (mergedInfoSize > maxCFSSegmentSize) { return false; } if (getNoCFSRatio() >= 1.0) { return true; } long totalSize = 0; for (SegmentCommitInfo info : infos) { totalSize += size(info, writer); } return mergedInfoSize <= getNoCFSRatio() * totalSize; }
@Override public MergeSpecification findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, Map<SegmentCommitInfo,Boolean> segmentsToMerge, MergeContext mergeContext) throws IOException { return wrapSpec(in.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, mergeContext)); }
@Override public final void setMaxCFSSegmentSizeMB(double v) { in.setMaxCFSSegmentSizeMB(v); }
@Override public double getNoCFSRatio() { return super.getNoCFSRatio(); }