Skip to content

Commit 46c3657

Browse files
authored
Fix and unmute SemanticInferenceMetadataFieldsRecoveryTests (#126784)
Use the TranslogOperationAsserter to compare the raw operations. Closes #124383 Closes #124384 Closes #124385
1 parent 9584bb8 commit 46c3657

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
@@ -240,15 +240,6 @@ tests:
240240
- class: org.elasticsearch.smoketest.MlWithSecurityIT
241241
method: test {yaml=ml/3rd_party_deployment/Test start and stop multiple deployments}
242242
issue: https://github.com/elastic/elasticsearch/issues/124315
243-
- class: org.elasticsearch.xpack.inference.mapper.SemanticInferenceMetadataFieldsRecoveryTests
244-
method: testSnapshotRecovery {p0=false p1=true}
245-
issue: https://github.com/elastic/elasticsearch/issues/124383
246-
- class: org.elasticsearch.xpack.inference.mapper.SemanticInferenceMetadataFieldsRecoveryTests
247-
method: testSnapshotRecovery {p0=true p1=false}
248-
issue: https://github.com/elastic/elasticsearch/issues/124384
249-
- class: org.elasticsearch.xpack.inference.mapper.SemanticInferenceMetadataFieldsRecoveryTests
250-
method: testSnapshotRecovery {p0=false p1=false}
251-
issue: https://github.com/elastic/elasticsearch/issues/124385
252243
- class: org.elasticsearch.env.NodeEnvironmentTests
253244
method: testIndexCompatibilityChecks
254245
issue: https://github.com/elastic/elasticsearch/issues/124388

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
@@ -1400,7 +1400,8 @@ public static void assertConsistentHistoryBetweenTranslogAndLuceneIndex(Engine e
14001400
assertThat(luceneOp.toString(), luceneOp.primaryTerm(), equalTo(translogOp.primaryTerm()));
14011401
assertThat(luceneOp.opType(), equalTo(translogOp.opType()));
14021402
if (luceneOp.opType() == Translog.Operation.Type.INDEX) {
1403-
if (engine.engineConfig.getIndexSettings().isRecoverySourceSyntheticEnabled()) {
1403+
if (engine.engineConfig.getIndexSettings().isRecoverySourceSyntheticEnabled()
1404+
|| engine.engineConfig.getMapperService().mappingLookup().inferenceFields().isEmpty() == false) {
14041405
assertTrue(
14051406
"luceneOp=" + luceneOp + " != translogOp=" + translogOp,
14061407
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
@@ -205,7 +205,8 @@ public static ChunkedInferenceEmbedding randomChunkedInferenceEmbeddingByte(Mode
205205
for (String input : inputs) {
206206
byte[] values = new byte[embeddingLength];
207207
for (int j = 0; j < values.length; j++) {
208-
values[j] = randomByte();
208+
// to avoid vectors with zero magnitude
209+
values[j] = (byte) Math.max(1, randomByte());
209210
}
210211
chunks.add(
211212
new EmbeddingResults.Chunk(
@@ -226,7 +227,8 @@ public static ChunkedInferenceEmbedding randomChunkedInferenceEmbeddingFloat(Mod
226227
for (String input : inputs) {
227228
float[] values = new float[embeddingLength];
228229
for (int j = 0; j < values.length; j++) {
229-
values[j] = randomFloat();
230+
// to avoid vectors with zero magnitude
231+
values[j] = Math.max(1e-6f, randomFloat());
230232
}
231233
chunks.add(
232234
new EmbeddingResults.Chunk(
@@ -247,7 +249,7 @@ public static ChunkedInferenceEmbedding randomChunkedInferenceEmbeddingSparse(Li
247249
for (String input : inputs) {
248250
var tokens = new ArrayList<WeightedToken>();
249251
for (var token : input.split("\\s+")) {
250-
tokens.add(new WeightedToken(token, withFloats ? randomFloat() : randomIntBetween(1, 255)));
252+
tokens.add(new WeightedToken(token, withFloats ? Math.max(Float.MIN_NORMAL, randomFloat()) : randomIntBetween(1, 255)));
251253
}
252254
chunks.add(
253255
new EmbeddingResults.Chunk(

0 commit comments

Comments
 (0)