Skip to content

Commit f7d6747

Browse files
authored
Fix and unmute SemanticInferenceMetadataFieldsRecoveryTests (elastic#126784) (elastic#126815)
Backport of elastic#126784 to 8.x
1 parent 1ec12b1 commit f7d6747

File tree

4 files changed

+24
-20
lines changed

4 files changed

+24
-20
lines changed

muted-tests.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -393,15 +393,6 @@ tests:
393393
- class: org.elasticsearch.action.admin.cluster.node.tasks.CancellableTasksIT
394394
method: testChildrenTasksCancelledOnTimeout
395395
issue: https://github.com/elastic/elasticsearch/issues/123568
396-
- class: org.elasticsearch.xpack.inference.mapper.SemanticInferenceMetadataFieldsRecoveryTests
397-
method: testSnapshotRecovery {p0=false p1=false}
398-
issue: https://github.com/elastic/elasticsearch/issues/124385
399-
- class: org.elasticsearch.xpack.inference.mapper.SemanticInferenceMetadataFieldsRecoveryTests
400-
method: testSnapshotRecovery {p0=false p1=true}
401-
issue: https://github.com/elastic/elasticsearch/issues/124383
402-
- class: org.elasticsearch.xpack.inference.mapper.SemanticInferenceMetadataFieldsRecoveryTests
403-
method: testSnapshotRecovery {p0=true p1=false}
404-
issue: https://github.com/elastic/elasticsearch/issues/124384
405396
- class: org.elasticsearch.smoketest.DocsClientYamlTestSuiteIT
406397
method: test {yaml=reference/cat/nodes/line_361}
407398
issue: https://github.com/elastic/elasticsearch/issues/124103

test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1378,7 +1378,8 @@ public static void assertConsistentHistoryBetweenTranslogAndLuceneIndex(Engine e
13781378
assertThat(luceneOp.toString(), luceneOp.primaryTerm(), equalTo(translogOp.primaryTerm()));
13791379
assertThat(luceneOp.opType(), equalTo(translogOp.opType()));
13801380
if (luceneOp.opType() == Translog.Operation.Type.INDEX) {
1381-
if (engine.engineConfig.getIndexSettings().isRecoverySourceSyntheticEnabled()) {
1381+
if (engine.engineConfig.getIndexSettings().isRecoverySourceSyntheticEnabled()
1382+
|| engine.engineConfig.getMapperService().mappingLookup().inferenceFields().isEmpty() == false) {
13821383
assertTrue(
13831384
"luceneOp=" + luceneOp + " != translogOp=" + translogOp,
13841385
translogOperationAsserter.assertSameIndexOperation((Translog.Index) luceneOp, (Translog.Index) translogOp)

x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticInferenceMetadataFieldsRecoveryTests.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.elasticsearch.index.engine.LuceneChangesSnapshot;
2222
import org.elasticsearch.index.engine.LuceneSyntheticSourceChangesSnapshot;
2323
import org.elasticsearch.index.engine.SearchBasedChangesSnapshot;
24+
import org.elasticsearch.index.engine.TranslogOperationAsserter;
2425
import org.elasticsearch.index.mapper.InferenceMetadataFieldsMapper;
2526
import org.elasticsearch.index.mapper.MapperService;
2627
import org.elasticsearch.index.mapper.SourceFieldMapper;
@@ -42,7 +43,6 @@
4243
import java.util.ArrayList;
4344
import java.util.List;
4445

45-
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertToXContentEquivalent;
4646
import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.generateRandomChunkingSettings;
4747
import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.randomChunkedInferenceEmbeddingByte;
4848
import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.randomChunkedInferenceEmbeddingFloat;
@@ -137,7 +137,7 @@ protected String defaultMapping() {
137137
}
138138

139139
public void testSnapshotRecovery() throws IOException {
140-
List<Engine.Index> expectedOperations = new ArrayList<>();
140+
List<Translog.Index> expectedOperations = new ArrayList<>();
141141
int size = randomIntBetween(10, 50);
142142
for (int i = 0; i < size; i++) {
143143
var source = randomSource();
@@ -159,8 +159,19 @@ public void testSnapshotRecovery() throws IOException {
159159
}
160160
}
161161
var op = indexForDoc(doc);
162-
expectedOperations.add(op);
163-
engine.index(op);
162+
var result = engine.index(op);
163+
expectedOperations.add(
164+
new Translog.Index(
165+
result.getId(),
166+
result.getSeqNo(),
167+
result.getTerm(),
168+
result.getVersion(),
169+
op.source(),
170+
op.routing(),
171+
op.getAutoGeneratedIdTimestamp()
172+
)
173+
);
174+
164175
if (frequently()) {
165176
engine.flush();
166177
}
@@ -181,13 +192,12 @@ public void testSnapshotRecovery() throws IOException {
181192
IndexVersion.current()
182193
)
183194
) {
195+
var asserter = TranslogOperationAsserter.withEngineConfig(engine.config());
184196
for (int i = 0; i < size; i++) {
185197
var op = snapshot.next();
186198
assertThat(op.opType(), equalTo(Translog.Operation.Type.INDEX));
187199
Translog.Index indexOp = (Translog.Index) op;
188-
assertThat(indexOp.id(), equalTo(expectedOperations.get(i).id()));
189-
assertThat(indexOp.routing(), equalTo(expectedOperations.get(i).routing()));
190-
assertToXContentEquivalent(indexOp.source(), expectedOperations.get(i).source(), XContentType.JSON);
200+
asserter.assertSameIndexOperation(indexOp, expectedOperations.get(i));
191201
}
192202
assertNull(snapshot.next());
193203
}

x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldTests.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,8 @@ public static ChunkedInferenceEmbedding randomChunkedInferenceEmbeddingByte(Mode
194194
for (String input : inputs) {
195195
byte[] values = new byte[embeddingLength];
196196
for (int j = 0; j < values.length; j++) {
197-
values[j] = randomByte();
197+
// to avoid vectors with zero magnitude
198+
values[j] = (byte) Math.max(1, randomByte());
198199
}
199200
chunks.add(
200201
new EmbeddingResults.Chunk(
@@ -215,7 +216,8 @@ public static ChunkedInferenceEmbedding randomChunkedInferenceEmbeddingFloat(Mod
215216
for (String input : inputs) {
216217
float[] values = new float[embeddingLength];
217218
for (int j = 0; j < values.length; j++) {
218-
values[j] = randomFloat();
219+
// to avoid vectors with zero magnitude
220+
values[j] = Math.max(1e-6f, randomFloat());
219221
}
220222
chunks.add(
221223
new EmbeddingResults.Chunk(
@@ -236,7 +238,7 @@ public static ChunkedInferenceEmbedding randomChunkedInferenceEmbeddingSparse(Li
236238
for (String input : inputs) {
237239
var tokens = new ArrayList<WeightedToken>();
238240
for (var token : input.split("\\s+")) {
239-
tokens.add(new WeightedToken(token, withFloats ? randomFloat() : randomIntBetween(1, 255)));
241+
tokens.add(new WeightedToken(token, withFloats ? Math.max(Float.MIN_NORMAL, randomFloat()) : randomIntBetween(1, 255)));
240242
}
241243
chunks.add(
242244
new EmbeddingResults.Chunk(

0 commit comments

Comments
 (0)