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]