Skip to content

Commit 1df6ac2

Browse files
authored
Fix and unmute SemanticInferenceMetadataFieldsRecoveryTests (#126784) (#126815) (#132420)
Backport of #126784 to 8.18 Closes #131570 Closes #131571 Closes #131572
1 parent 20cfb3b commit 1df6ac2

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

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.randomChunkedInferenceEmbeddingByte;
4747
import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.randomChunkedInferenceEmbeddingSparse;
4848
import static org.elasticsearch.xpack.inference.mapper.SemanticTextFieldTests.semanticTextFieldFromChunkedInferenceResults;
@@ -124,7 +124,7 @@ protected String defaultMapping() {
124124
}
125125

126126
public void testSnapshotRecovery() throws IOException {
127-
List<Engine.Index> expectedOperations = new ArrayList<>();
127+
List<Translog.Index> expectedOperations = new ArrayList<>();
128128
int size = randomIntBetween(10, 50);
129129
for (int i = 0; i < size; i++) {
130130
var source = randomSource();
@@ -146,8 +146,19 @@ public void testSnapshotRecovery() throws IOException {
146146
}
147147
}
148148
var op = indexForDoc(doc);
149-
expectedOperations.add(op);
150-
engine.index(op);
149+
var result = engine.index(op);
150+
expectedOperations.add(
151+
new Translog.Index(
152+
result.getId(),
153+
result.getSeqNo(),
154+
result.getTerm(),
155+
result.getVersion(),
156+
op.source(),
157+
op.routing(),
158+
op.getAutoGeneratedIdTimestamp()
159+
)
160+
);
161+
151162
if (frequently()) {
152163
engine.flush();
153164
}
@@ -168,13 +179,12 @@ public void testSnapshotRecovery() throws IOException {
168179
IndexVersion.current()
169180
)
170181
) {
182+
var asserter = TranslogOperationAsserter.withEngineConfig(engine.config());
171183
for (int i = 0; i < size; i++) {
172184
var op = snapshot.next();
173185
assertThat(op.opType(), equalTo(Translog.Operation.Type.INDEX));
174186
Translog.Index indexOp = (Translog.Index) op;
175-
assertThat(indexOp.id(), equalTo(expectedOperations.get(i).id()));
176-
assertThat(indexOp.routing(), equalTo(expectedOperations.get(i).routing()));
177-
assertToXContentEquivalent(indexOp.source(), expectedOperations.get(i).source(), XContentType.JSON);
187+
asserter.assertSameIndexOperation(indexOp, expectedOperations.get(i));
178188
}
179189
assertNull(snapshot.next());
180190
}

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
@@ -174,7 +174,8 @@ public static ChunkedInferenceEmbeddingByte randomChunkedInferenceEmbeddingByte(
174174
for (String input : inputs) {
175175
byte[] values = new byte[model.getServiceSettings().dimensions()];
176176
for (int j = 0; j < values.length; j++) {
177-
values[j] = randomByte();
177+
// to avoid vectors with zero magnitude
178+
values[j] = (byte) Math.max(1, randomByte());
178179
}
179180
chunks.add(
180181
new ChunkedInferenceEmbeddingByte.ByteEmbeddingChunk(values, input, new ChunkedInference.TextOffset(0, input.length()))
@@ -188,7 +189,8 @@ public static ChunkedInferenceEmbeddingFloat randomChunkedInferenceEmbeddingFloa
188189
for (String input : inputs) {
189190
float[] values = new float[model.getServiceSettings().dimensions()];
190191
for (int j = 0; j < values.length; j++) {
191-
values[j] = randomFloat();
192+
// to avoid vectors with zero magnitude
193+
values[j] = Math.max(1e-6f, randomFloat());
192194
}
193195
chunks.add(
194196
new ChunkedInferenceEmbeddingFloat.FloatEmbeddingChunk(values, input, new ChunkedInference.TextOffset(0, input.length()))
@@ -206,7 +208,7 @@ public static ChunkedInferenceEmbeddingSparse randomChunkedInferenceEmbeddingSpa
206208
for (String input : inputs) {
207209
var tokens = new ArrayList<WeightedToken>();
208210
for (var token : input.split("\\s+")) {
209-
tokens.add(new WeightedToken(token, withFloats ? randomFloat() : randomIntBetween(1, 255)));
211+
tokens.add(new WeightedToken(token, withFloats ? Math.max(Float.MIN_NORMAL, randomFloat()) : randomIntBetween(1, 255)));
210212
}
211213
chunks.add(
212214
new ChunkedInferenceEmbeddingSparse.SparseEmbeddingChunk(tokens, input, new ChunkedInference.TextOffset(0, input.length()))

0 commit comments

Comments
 (0)