Skip to content

Commit 0c0536f

Browse files
committed
Break bwc to test tests
Signed-off-by: John Mazanec <[email protected]>
1 parent 84ec421 commit 0c0536f

File tree

5 files changed

+58
-8
lines changed

5 files changed

+58
-8
lines changed

qa/restart-upgrade/src/test/java/org/opensearch/knn/bwc/DerivedSourceBWCRestartIT.java

+4
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ private void testIndexAndForceMergeOnOld_injectOnNew(List<IndexConfigContext> in
5252

5353
// Delete
5454
testDelete(indexConfigContexts);
55+
assertDocsMatch(indexConfigContexts);
5556
} else {
57+
assertDocsMatch(indexConfigContexts);
5658
// Search
5759
testSearch(indexConfigContexts);
5860

@@ -81,7 +83,9 @@ private void testIndexOnOld_forceMergeAndInjectOnNew(List<IndexConfigContext> in
8183
if (isRunningAgainstOldCluster()) {
8284
prepareOriginalIndices(indexConfigContexts);
8385
} else {
86+
assertDocsMatch(indexConfigContexts);
8487
testMerging(indexConfigContexts);
88+
assertDocsMatch(indexConfigContexts);
8589
// Update. Skipping update tests for nested docs for now. Will add in the future.
8690
if (indexConfigContexts.get(0).isNested() == false) {
8791
testUpdate(indexConfigContexts);

src/main/java/org/opensearch/knn/index/codec/KNN10010Codec/KNN10010DerivedSourceStoredFieldsWriter.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,14 @@ public int merge(MergeState mergeState) throws IOException {
8181
// In case of backwards compatibility, with old segments, we need to perform a non-optimal merge. Basically, it
8282
// will repopulate each source and then inject the vector and then remove it. This allows us to migrate
8383
// segments from filter approach to mask approach
84-
if (KNN9120DerivedSourceStoredFieldsReader.doesMergeContainLegacySegments(mergeState)) {
85-
super.merge(mergeState);
86-
}
84+
// if (KNN9120DerivedSourceStoredFieldsReader.doesMergeContainLegacySegments(mergeState)) {
85+
// super.merge(mergeState);
86+
// }
8787

8888
// We wrap the segments to avoid injecting back vectors and then removing. If this is not done, then we will
8989
// inject and then just write to disk potentially.
9090
for (int i = 0; i < mergeState.storedFieldsReaders.length; i++) {
91+
mergeState.storedFieldsReaders[i] = KNN9120DerivedSourceStoredFieldsReader.wrapForMerge(mergeState.storedFieldsReaders[i]);
9192
mergeState.storedFieldsReaders[i] = KNN10010DerivedSourceStoredFieldsReader.wrapForMerge(mergeState.storedFieldsReaders[i]);
9293
}
9394
return delegate.merge(mergeState);

src/main/java/org/opensearch/knn/index/codec/backward_codecs/KNN9120Codec/KNN9120DerivedSourceStoredFieldsReader.java

+28
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,32 @@ private static boolean doesSegmentContainLegacyFields(FieldInfos fieldInfos) {
132132
}
133133
return false;
134134
}
135+
136+
private StoredFieldsReader cloneForMerge() {
137+
try {
138+
return new KNN9120DerivedSourceStoredFieldsReader(
139+
delegate.getMergeInstance(),
140+
derivedVectorFields,
141+
derivedSourceReadersSupplier,
142+
segmentReadState,
143+
false
144+
);
145+
} catch (IOException e) {
146+
throw new RuntimeException(e);
147+
}
148+
}
149+
150+
/**
151+
* For merging, we need to tell the derived source stored fields reader to skip injecting the source. Otherwise,
152+
* on merge we will end up just writing the source to disk
153+
*
154+
* @param storedFieldsReader stored fields reader to wrap
155+
* @return wrapped stored fields reader
156+
*/
157+
public static StoredFieldsReader wrapForMerge(StoredFieldsReader storedFieldsReader) {
158+
if (storedFieldsReader instanceof KNN9120DerivedSourceStoredFieldsReader) {
159+
return ((KNN9120DerivedSourceStoredFieldsReader) storedFieldsReader).cloneForMerge();
160+
}
161+
return storedFieldsReader;
162+
}
135163
}

src/testFixtures/java/org/opensearch/knn/DerivedSourceTestCase.java

+21-4
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
import static org.opensearch.knn.common.KNNConstants.VECTOR_DATA_TYPE_FIELD;
3232

3333
public class DerivedSourceTestCase extends KNNRestTestCase {
34-
protected final int TEST_DIMENSION = 128;
35-
protected final int DOCS = 50;
34+
protected final int TEST_DIMENSION = 16;
35+
protected final int DOCS = 500;
3636
protected final static String NESTED_NAME = "test_nested";
3737
protected final static String FIELD_NAME = "test_vector";
3838

@@ -78,6 +78,8 @@ protected void prepareOriginalIndices(List<IndexConfigContext> indexConfigContex
7878
derivedSourceDisabledContext.indexName,
7979
derivedSourceEnabledContext.indexName
8080
);
81+
flush(derivedSourceEnabledContext.indexName, true);
82+
flush(derivedSourceDisabledContext.indexName, true);
8183
}
8284

8385
@SneakyThrows
@@ -86,8 +88,9 @@ protected void testMerging(List<IndexConfigContext> indexConfigContexts) {
8688
IndexConfigContext derivedSourceDisabledContext = indexConfigContexts.get(1);
8789
String originalIndexNameDerivedSourceEnabled = derivedSourceEnabledContext.indexName;
8890
String originalIndexNameDerivedSourceDisabled = derivedSourceDisabledContext.indexName;
89-
forceMergeKnnIndex(originalIndexNameDerivedSourceEnabled, 10);
90-
forceMergeKnnIndex(originalIndexNameDerivedSourceDisabled, 10);
91+
forceMergeKnnIndex(originalIndexNameDerivedSourceEnabled, 1);
92+
forceMergeKnnIndex(originalIndexNameDerivedSourceDisabled, 1);
93+
9194
refreshAllIndices();
9295
assertIndexBigger(originalIndexNameDerivedSourceDisabled, originalIndexNameDerivedSourceEnabled);
9396
assertDocsMatch(
@@ -105,6 +108,20 @@ protected void testMerging(List<IndexConfigContext> indexConfigContexts) {
105108
originalIndexNameDerivedSourceDisabled,
106109
originalIndexNameDerivedSourceEnabled
107110
);
111+
flush(derivedSourceEnabledContext.indexName, true);
112+
flush(derivedSourceDisabledContext.indexName, true);
113+
}
114+
115+
public void assertDocsMatch(List<IndexConfigContext> indexConfigContexts) {
116+
IndexConfigContext derivedSourceEnabledContext = indexConfigContexts.get(0);
117+
IndexConfigContext derivedSourceDisabledContext = indexConfigContexts.get(1);
118+
String originalIndexNameDerivedSourceEnabled = derivedSourceEnabledContext.indexName;
119+
String originalIndexNameDerivedSourceDisabled = derivedSourceDisabledContext.indexName;
120+
assertDocsMatch(
121+
derivedSourceDisabledContext.docCount,
122+
originalIndexNameDerivedSourceDisabled,
123+
originalIndexNameDerivedSourceEnabled
124+
);
108125
}
109126

110127
@SneakyThrows

src/testFixtures/java/org/opensearch/knn/KNNRestTestCase.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ protected void addKnnDoc(String index, String docId, List<String> fieldNames, Li
772772
* Adds a doc where document is represented as a string.
773773
*/
774774
protected void addKnnDoc(final String index, final String docId, final String document) throws IOException {
775-
Request request = new Request("POST", "/" + index + "/_doc/" + docId);
775+
Request request = new Request("POST", "/" + index + "/_doc/" + docId + "?refresh=true");
776776
request.setJsonEntity(document);
777777
client().performRequest(request);
778778
}

0 commit comments

Comments
 (0)