Skip to content

Commit bf9debd

Browse files
committed
Add tests
Signed-off-by: Aleksandr Tuliakov <[email protected]>
1 parent 188a8cd commit bf9debd

File tree

3 files changed

+122
-6
lines changed

3 files changed

+122
-6
lines changed

server/src/main/java/org/apache/lucene/codecs/lucene90/Lucene90StoredFieldsFormatComparator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
/**
1212
* This class is a custom comparator for Lucene90StoredFieldsFormat
1313
*/
14-
public class Lucene90StoredFieldsFormatComparator {
14+
public final class Lucene90StoredFieldsFormatComparator {
15+
private Lucene90StoredFieldsFormatComparator() {}
16+
1517
public static boolean equal(Lucene90StoredFieldsFormat one, Lucene90StoredFieldsFormat two) {
1618
return one.mode == two.mode;
1719
}

server/src/main/java/org/opensearch/index/shard/OpenSearchMergePolicy.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,24 @@ public MergePolicy getDelegate() {
8787
return in;
8888
}
8989

90-
private boolean shouldUpgrade(SegmentCommitInfo info) {
90+
boolean shouldUpgrade(SegmentCommitInfo info) {
9191
org.apache.lucene.util.Version old = info.info.getVersion();
9292
org.apache.lucene.util.Version cur = Version.CURRENT.luceneVersion;
9393

9494
// Something seriously wrong if this trips:
95-
assert old.major <= cur.major;
95+
assert cur.major >= old.major;
9696

9797
if (cur.major > old.major) {
9898
// Always upgrade segment if Lucene's major version is too old
9999
return true;
100100
}
101101

102-
if (upgradeOnlyAncientSegments == false && cur.minor > old.minor) {
103-
// If it's only a minor version difference, and we are not upgrading only ancient segments,
104-
// also upgrade:
102+
if (upgradeOnlyAncientSegments) {
103+
// Skip other checks, because we already check major versions and we are upgrading only ancient segments
104+
return false;
105+
}
106+
107+
if (cur.minor > old.minor) {
105108
return true;
106109
}
107110

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
* compatible open source license.
7+
*/
8+
9+
package org.opensearch.index.shard;
10+
11+
import org.apache.lucene.backward_codecs.lucene100.Lucene100Codec;
12+
import org.apache.lucene.backward_codecs.lucene912.Lucene912Codec;
13+
import org.apache.lucene.codecs.Codec;
14+
import org.apache.lucene.codecs.lucene101.Lucene101Codec;
15+
import org.apache.lucene.codecs.lucene90.Lucene90StoredFieldsFormat;
16+
import org.apache.lucene.codecs.lucene90.Lucene90StoredFieldsFormatComparator;
17+
import org.apache.lucene.index.MergePolicy;
18+
import org.apache.lucene.index.SegmentCommitInfo;
19+
import org.apache.lucene.index.SegmentInfo;
20+
import org.apache.lucene.store.Directory;
21+
import org.apache.lucene.util.Version;
22+
import org.opensearch.index.codec.composite.composite101.Composite101Codec;
23+
import org.opensearch.test.OpenSearchTestCase;
24+
25+
import java.util.Map;
26+
27+
import org.mockito.Mockito;
28+
29+
import static org.apache.lucene.codecs.lucene90.Lucene90StoredFieldsFormat.Mode.BEST_COMPRESSION;
30+
import static org.apache.lucene.codecs.lucene90.Lucene90StoredFieldsFormat.Mode.BEST_SPEED;
31+
32+
/**
33+
* Very simple checks for {@link OpenSearchMergePolicy}
34+
*/
35+
public class OpenSearchMergePolicyTests extends OpenSearchTestCase {
36+
public void testShouldUpgrade() {
37+
var mockMergePolicy = Mockito.mock(MergePolicy.class);
38+
var openSearchMergePolicy = new OpenSearchMergePolicy(mockMergePolicy, new Lucene101Codec());
39+
40+
assertFalse(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_10_1_0, new Lucene101Codec())));
41+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_10_0_0, new Lucene100Codec())));
42+
assertTrue(
43+
openSearchMergePolicy.shouldUpgrade(
44+
createSegmentCommitInfo(Version.LUCENE_10_1_0, new Lucene101Codec(Lucene101Codec.Mode.BEST_COMPRESSION))
45+
)
46+
);
47+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_9_12_2, new Lucene912Codec())));
48+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_10_1_0, new Composite101Codec())));
49+
50+
openSearchMergePolicy.setUpgradeInProgress(true, true);
51+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_9_12_2, new Lucene912Codec())));
52+
assertFalse(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_10_0_0, new Lucene100Codec())));
53+
}
54+
55+
/**
56+
* Very simple equal checks for {@link Lucene90StoredFieldsFormatComparator}
57+
*/
58+
public void testLucene90StoredFieldsFormatComparatorEqual() {
59+
assertTrue(Lucene90StoredFieldsFormatComparator.equal(new Lucene90StoredFieldsFormat(), new Lucene90StoredFieldsFormat()));
60+
assertTrue(
61+
Lucene90StoredFieldsFormatComparator.equal(new Lucene90StoredFieldsFormat(), new Lucene90StoredFieldsFormat(BEST_SPEED))
62+
);
63+
assertTrue(
64+
Lucene90StoredFieldsFormatComparator.equal(
65+
new Lucene90StoredFieldsFormat(BEST_SPEED),
66+
new Lucene90StoredFieldsFormat(BEST_SPEED)
67+
)
68+
);
69+
assertTrue(
70+
Lucene90StoredFieldsFormatComparator.equal(
71+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION),
72+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION)
73+
)
74+
);
75+
assertFalse(
76+
Lucene90StoredFieldsFormatComparator.equal(new Lucene90StoredFieldsFormat(), new Lucene90StoredFieldsFormat(BEST_COMPRESSION))
77+
);
78+
assertFalse(
79+
Lucene90StoredFieldsFormatComparator.equal(
80+
new Lucene90StoredFieldsFormat(BEST_SPEED),
81+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION)
82+
)
83+
);
84+
assertFalse(
85+
Lucene90StoredFieldsFormatComparator.equal(
86+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION),
87+
new Lucene90StoredFieldsFormat(BEST_SPEED)
88+
)
89+
);
90+
}
91+
92+
private SegmentCommitInfo createSegmentCommitInfo(Version version, Codec codec) {
93+
var id = new byte[16];
94+
var mockDir = Mockito.mock(Directory.class);
95+
var segmentInfo = new SegmentInfo(
96+
mockDir,
97+
version,
98+
version,
99+
"",
100+
Integer.MAX_VALUE,
101+
false,
102+
false,
103+
codec,
104+
Map.of(),
105+
id,
106+
Map.of(),
107+
null
108+
);
109+
return new SegmentCommitInfo(segmentInfo, 0, 0, 0, 0, 0, id);
110+
}
111+
}

0 commit comments

Comments
 (0)