jpountz commented on code in PR #936:
URL: https://github.com/apache/lucene/pull/936#discussion_r885852033
##########
lucene/test-framework/src/java/org/apache/lucene/tests/index/BaseMergePolicyTestCase.java:
##########
@@ -328,21 +328,31 @@ public Set<String> getPendingDeletions() throws
IOException {
protected static SegmentInfos applyMerge(
SegmentInfos infos, OneMerge merge, String mergedSegmentName, IOStats
stats)
throws IOException {
- LinkedHashSet<SegmentCommitInfo> scis = new
LinkedHashSet<>(infos.asList());
+
int newMaxDoc = 0;
double newSize = 0;
for (SegmentCommitInfo sci : merge.segments) {
int numLiveDocs = sci.info.maxDoc() - sci.getDelCount();
newSize += (double) sci.sizeInBytes() * numLiveDocs / sci.info.maxDoc()
/ 1024 / 1024;
newMaxDoc += numLiveDocs;
- boolean removed = scis.remove(sci);
- assertTrue(removed);
}
+ SegmentCommitInfo mergedInfo =
+ makeSegmentCommitInfo(mergedSegmentName, newMaxDoc, 0, newSize,
IndexWriter.SOURCE_MERGE);
+
+ Set<SegmentCommitInfo> mergedAway = new HashSet<>(merge.segments);
+ boolean mergedSegmentAdded = false;
SegmentInfos newInfos = new SegmentInfos(Version.LATEST.major);
- newInfos.addAll(scis);
- // Now add the merged segment
- newInfos.add(
- makeSegmentCommitInfo(mergedSegmentName, newMaxDoc, 0, newSize,
IndexWriter.SOURCE_MERGE));
+ for (int i = 0; i < infos.size(); ++i) {
+ SegmentCommitInfo info = infos.info(i);
+ if (mergedAway.contains(info)) {
+ if (mergedSegmentAdded == false) {
+ newInfos.add(mergedInfo);
+ mergedSegmentAdded = true;
+ }
+ } else {
+ newInfos.add(info);
+ }
+ }
Review Comment:
this change maintains order of merged segments in segment infos, akin to
SegmentInfos#applyMergeChanges, which is important for LogMergePolicy
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]