rahulgoswami commented on code in PR #3883:
URL: https://github.com/apache/solr/pull/3883#discussion_r2580006913


##########
solr/core/src/java/org/apache/solr/index/LatestVersionFilterMergePolicy.java:
##########
@@ -0,0 +1,75 @@
+package org.apache.solr.index;
+
+import java.io.IOException;
+import java.util.Map;
+import org.apache.lucene.index.FilterMergePolicy;
+import org.apache.lucene.index.MergePolicy;
+import org.apache.lucene.index.MergeTrigger;
+import org.apache.lucene.index.SegmentCommitInfo;
+import org.apache.lucene.index.SegmentInfos;
+import org.apache.lucene.util.Version;
+
+/**
+ * Prevents any older version segment (< {@link Version.LATEST}), either 
original or one derived as
+ * a result of merging with an older version segment, from being considered 
for merges. That way a
+ * snapshot of older segments remains consistent. This assists in upgrading to 
a future Lucene major
+ * version if existing documents are reindexed in the current version with 
this merge policy in
+ * place.
+ */
+public class LatestVersionFilterMergePolicy extends FilterMergePolicy {
+
+  public LatestVersionFilterMergePolicy(MergePolicy in) {
+    super(in);
+  }
+
+  @Override
+  public MergeSpecification findMerges(
+      MergeTrigger mergeTrigger, SegmentInfos infos, MergeContext 
mergeContext) throws IOException {
+    return in.findMerges(mergeTrigger, getFilteredInfosClone(infos), 
mergeContext);
+  }
+
+  @Override
+  public MergeSpecification findForcedMerges(
+      SegmentInfos infos,
+      int maxSegmentCount,
+      Map<SegmentCommitInfo, Boolean> segmentsToMerge,
+      MergeContext mergeContext)
+      throws IOException {
+    return in.findForcedMerges(
+        getFilteredInfosClone(infos), maxSegmentCount, segmentsToMerge, 
mergeContext);
+  }
+
+  @Override
+  public MergeSpecification findForcedDeletesMerges(SegmentInfos infos, 
MergeContext mergeContext)
+      throws IOException {
+    return in.findForcedDeletesMerges(getFilteredInfosClone(infos), 
mergeContext);
+  }
+
+  @Override
+  public MergeSpecification findFullFlushMerges(
+      MergeTrigger mergeTrigger, SegmentInfos infos, MergeContext 
mergeContext) throws IOException {
+    return in.findFullFlushMerges(mergeTrigger, getFilteredInfosClone(infos), 
mergeContext);
+  }
+
+  private SegmentInfos getFilteredInfosClone(SegmentInfos infos) {

Review Comment:
   Incorporated this optimization. Although I couldn't find a better place to 
do it since I also didn't want to duplicate logic. Could you please elaborate 
the following a little?
   >clone is an implementation detail that doesn't belong in the method.
   
   



-- 
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]

Reply via email to