Skip to content

Commit 8f178e2

Browse files
committed
Add tests
Signed-off-by: Aleksandr Tuliakov <tulyakov@yandex-team.ru>
1 parent 86f7ece commit 8f178e2

File tree

3 files changed

+121
-6
lines changed

3 files changed

+121
-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: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
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+
assertFalse(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LATEST, new Lucene101Codec())));
40+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_10_2_0, new Lucene100Codec())));
41+
assertTrue(
42+
openSearchMergePolicy.shouldUpgrade(
43+
createSegmentCommitInfo(Version.LATEST, new Lucene101Codec(Lucene101Codec.Mode.BEST_COMPRESSION))
44+
)
45+
);
46+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_9_12_2, new Lucene912Codec())));
47+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LATEST, new Composite101Codec())));
48+
49+
openSearchMergePolicy.setUpgradeInProgress(true, true);
50+
assertTrue(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_9_12_2, new Lucene912Codec())));
51+
assertFalse(openSearchMergePolicy.shouldUpgrade(createSegmentCommitInfo(Version.LUCENE_10_0_0, new Lucene100Codec())));
52+
}
53+
54+
/**
55+
* Very simple equal checks for {@link Lucene90StoredFieldsFormatComparator}
56+
*/
57+
public void testLucene90StoredFieldsFormatComparatorEqual() {
58+
assertTrue(Lucene90StoredFieldsFormatComparator.equal(new Lucene90StoredFieldsFormat(), new Lucene90StoredFieldsFormat()));
59+
assertTrue(
60+
Lucene90StoredFieldsFormatComparator.equal(new Lucene90StoredFieldsFormat(), new Lucene90StoredFieldsFormat(BEST_SPEED))
61+
);
62+
assertTrue(
63+
Lucene90StoredFieldsFormatComparator.equal(
64+
new Lucene90StoredFieldsFormat(BEST_SPEED),
65+
new Lucene90StoredFieldsFormat(BEST_SPEED)
66+
)
67+
);
68+
assertTrue(
69+
Lucene90StoredFieldsFormatComparator.equal(
70+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION),
71+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION)
72+
)
73+
);
74+
assertFalse(
75+
Lucene90StoredFieldsFormatComparator.equal(new Lucene90StoredFieldsFormat(), new Lucene90StoredFieldsFormat(BEST_COMPRESSION))
76+
);
77+
assertFalse(
78+
Lucene90StoredFieldsFormatComparator.equal(
79+
new Lucene90StoredFieldsFormat(BEST_SPEED),
80+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION)
81+
)
82+
);
83+
assertFalse(
84+
Lucene90StoredFieldsFormatComparator.equal(
85+
new Lucene90StoredFieldsFormat(BEST_COMPRESSION),
86+
new Lucene90StoredFieldsFormat(BEST_SPEED)
87+
)
88+
);
89+
}
90+
91+
private SegmentCommitInfo createSegmentCommitInfo(Version version, Codec codec) {
92+
var id = new byte[16];
93+
var mockDir = Mockito.mock(Directory.class);
94+
var segmentInfo = new SegmentInfo(
95+
mockDir,
96+
version,
97+
version,
98+
"",
99+
Integer.MAX_VALUE,
100+
false,
101+
false,
102+
codec,
103+
Map.of(),
104+
id,
105+
Map.of(),
106+
null
107+
);
108+
return new SegmentCommitInfo(segmentInfo, 0, 0, 0, 0, 0, id);
109+
}
110+
}

0 commit comments

Comments
 (0)