Skip to content

Commit 333f5b9

Browse files
committed
WIP
1 parent 6909e0e commit 333f5b9

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.lucene.index.LiveIndexWriterConfig;
2222
import org.apache.lucene.index.MergePolicy;
2323
import org.apache.lucene.index.MergeScheduler;
24+
import org.apache.lucene.index.MergeTrigger;
2425
import org.apache.lucene.index.SegmentCommitInfo;
2526
import org.apache.lucene.index.SegmentInfos;
2627
import org.apache.lucene.index.SoftDeletesRetentionMergePolicy;
@@ -2549,27 +2550,30 @@ public boolean forceMergeIsNoOp(int maxNumSegments, boolean onlyExpungeDeletes)
25492550
if (onlyExpungeDeletes && maxNumSegments >= 0) {
25502551
throw new IllegalArgumentException("only_expunge_deletes and max_num_segments are mutually exclusive");
25512552
}
2552-
// TODO: is there a way for us to determine no-op with no max num segments?
2553-
if (maxNumSegments <= 0) {
2554-
return false;
2555-
}
25562553
try (var reader = DirectoryReader.open(indexWriter)) {
25572554
final var segmentCommitInfos = SegmentInfos.readCommit(reader.directory(), reader.getIndexCommit().getSegmentsFileName());
2558-
final var segmentsToMerge = new HashMap<SegmentCommitInfo, Boolean>();
2559-
for (int i = 0; i < segmentCommitInfos.size(); i++) {
2560-
final var segmentInfo = segmentCommitInfos.info(i);
2561-
if (onlyExpungeDeletes && segmentInfo.hasDeletions()) {
2562-
return false;
2555+
final MergePolicy.MergeSpecification mergeSpecification;
2556+
if (maxNumSegments < 0) {
2557+
mergeSpecification = indexWriter.getConfig()
2558+
.getMergePolicy()
2559+
.findMerges(MergeTrigger.EXPLICIT, segmentCommitInfos, indexWriter);
2560+
} else {
2561+
final var segmentsToMerge = new HashMap<SegmentCommitInfo, Boolean>();
2562+
for (int i = 0; i < segmentCommitInfos.size(); i++) {
2563+
final var segmentInfo = segmentCommitInfos.info(i);
2564+
if (onlyExpungeDeletes && segmentInfo.hasDeletions()) {
2565+
return false;
2566+
}
2567+
segmentsToMerge.put(segmentInfo, Boolean.TRUE);
25632568
}
2564-
segmentsToMerge.put(segmentInfo, Boolean.TRUE);
2565-
}
25662569

2567-
if (onlyExpungeDeletes) {
2568-
return true;
2570+
if (onlyExpungeDeletes) {
2571+
return true;
2572+
}
2573+
mergeSpecification = indexWriter.getConfig()
2574+
.getMergePolicy()
2575+
.findForcedMerges(segmentCommitInfos, maxNumSegments, segmentsToMerge, indexWriter);
25692576
}
2570-
final var mergeSpecification = indexWriter.getConfig()
2571-
.getMergePolicy()
2572-
.findForcedMerges(segmentCommitInfos, maxNumSegments, segmentsToMerge, indexWriter);
25732577
return mergeSpecification == null || mergeSpecification.merges.isEmpty();
25742578
}
25752579
}

0 commit comments

Comments
 (0)