Skip to content

Commit 63989dc

Browse files
authored
[9.0] Backport Semantic Text Mapper Test Fixes (elastic#127936)
1 parent 9a41933 commit 63989dc

File tree

3 files changed

+71
-16
lines changed

3 files changed

+71
-16
lines changed

test/framework/src/main/java/org/elasticsearch/index/mapper/MapperServiceTestCase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@ protected final MapperService createMapperService(Settings settings, String mapp
207207
return mapperService;
208208
}
209209

210+
protected final MapperService createMapperService(IndexVersion indexVersion, Settings settings, XContentBuilder mappings)
211+
throws IOException {
212+
MapperService mapperService = createMapperService(indexVersion, settings, () -> true, mappings);
213+
return mapperService;
214+
}
215+
210216
protected final MapperService createMapperService(IndexVersion version, XContentBuilder mapping) throws IOException {
211217
return createMapperService(version, getIndexSettings(), () -> true, mapping);
212218
}

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

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,44 @@ public void testIsEnabled() {
3737
assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings));
3838

3939
settings = Settings.builder()
40-
.put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), getRandomCompatibleIndexVersion(true))
41-
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), false)
40+
.put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), getRandomCompatibleIndexVersion(false))
41+
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), true)
4242
.build();
4343
assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings));
4444

4545
settings = Settings.builder()
4646
.put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), getRandomCompatibleIndexVersion(false))
47-
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), true)
47+
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), false)
48+
.build();
49+
assertTrue(InferenceMetadataFieldsMapper.isEnabled(settings));
50+
51+
// Test that index.mapping.semantic_text.use_legacy_format == false is ignored when the index version is too old to support the new
52+
// format
53+
settings = Settings.builder()
54+
.put(
55+
IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(),
56+
IndexVersionUtils.randomVersionBetween(
57+
random(),
58+
IndexVersions.SEMANTIC_TEXT_FIELD_TYPE,
59+
IndexVersionUtils.getPreviousVersion(IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT)
60+
) // 8.x version range prior to the introduction of the new format
61+
)
62+
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), false)
4863
.build();
4964
assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings));
5065

5166
settings = Settings.builder()
52-
.put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), getRandomCompatibleIndexVersion(false))
67+
.put(
68+
IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(),
69+
IndexVersionUtils.randomVersionBetween(
70+
random(),
71+
IndexVersions.UPGRADE_TO_LUCENE_10_0_0,
72+
IndexVersionUtils.getPreviousVersion(IndexVersions.INFERENCE_METADATA_FIELDS)
73+
) // 9.x version range prior to the introduction of the new format
74+
)
5375
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), false)
5476
.build();
55-
assertTrue(InferenceMetadataFieldsMapper.isEnabled(settings));
77+
assertFalse(InferenceMetadataFieldsMapper.isEnabled(settings));
5678
}
5779

5880
public void testIsEnabledByDefault() {
@@ -115,18 +137,26 @@ public MappedFieldType getMappedFieldType() {
115137

116138
static IndexVersion getRandomCompatibleIndexVersion(boolean useLegacyFormat) {
117139
if (useLegacyFormat) {
140+
// Randomly choose an index version compatible with the legacy semantic text format
118141
if (randomBoolean()) {
119-
return IndexVersionUtils.randomVersionBetween(
120-
random(),
121-
IndexVersions.UPGRADE_TO_LUCENE_10_0_0,
122-
IndexVersionUtils.getPreviousVersion(IndexVersions.INFERENCE_METADATA_FIELDS)
123-
);
142+
// 9.x+ version
143+
return IndexVersionUtils.randomVersionBetween(random(), IndexVersions.UPGRADE_TO_LUCENE_10_0_0, IndexVersion.current());
124144
}
125-
return IndexVersionUtils.randomPreviousCompatibleVersion(random(), IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT);
145+
146+
// 8.x version
147+
return IndexVersionUtils.randomVersionBetween(
148+
random(),
149+
IndexVersions.SEMANTIC_TEXT_FIELD_TYPE,
150+
IndexVersionUtils.getPreviousVersion(IndexVersions.UPGRADE_TO_LUCENE_10_0_0)
151+
);
126152
} else {
153+
// Randomly choose an index version compatible with the new semantic text format
127154
if (randomBoolean()) {
155+
// 9.x+ version
128156
return IndexVersionUtils.randomVersionBetween(random(), IndexVersions.INFERENCE_METADATA_FIELDS, IndexVersion.current());
129157
}
158+
159+
// 8.x version
130160
return IndexVersionUtils.randomVersionBetween(
131161
random(),
132162
IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT,

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

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.elasticsearch.common.settings.Settings;
3535
import org.elasticsearch.core.CheckedConsumer;
3636
import org.elasticsearch.index.IndexVersion;
37+
import org.elasticsearch.index.IndexVersions;
3738
import org.elasticsearch.index.mapper.DocumentMapper;
3839
import org.elasticsearch.index.mapper.DocumentParsingException;
3940
import org.elasticsearch.index.mapper.FieldMapper;
@@ -62,6 +63,7 @@
6263
import org.elasticsearch.search.LeafNestedDocuments;
6364
import org.elasticsearch.search.NestedDocuments;
6465
import org.elasticsearch.search.SearchHit;
66+
import org.elasticsearch.test.index.IndexVersionUtils;
6567
import org.elasticsearch.xcontent.XContentBuilder;
6668
import org.elasticsearch.xcontent.XContentType;
6769
import org.elasticsearch.xcontent.json.JsonXContent;
@@ -113,14 +115,31 @@ protected Collection<? extends Plugin> getPlugins() {
113115
}
114116

115117
private MapperService createMapperService(XContentBuilder mappings, boolean useLegacyFormat) throws IOException {
118+
IndexVersion indexVersion = SemanticInferenceMetadataFieldsMapperTests.getRandomCompatibleIndexVersion(useLegacyFormat);
119+
return createMapperService(mappings, useLegacyFormat, indexVersion, indexVersion);
120+
}
121+
122+
private MapperService createMapperService(
123+
XContentBuilder mappings,
124+
boolean useLegacyFormat,
125+
IndexVersion minIndexVersion,
126+
IndexVersion maxIndexVersion
127+
) throws IOException {
128+
validateIndexVersion(minIndexVersion, useLegacyFormat);
129+
IndexVersion indexVersion = IndexVersionUtils.randomVersionBetween(random(), minIndexVersion, maxIndexVersion);
116130
var settings = Settings.builder()
117-
.put(
118-
IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(),
119-
SemanticInferenceMetadataFieldsMapperTests.getRandomCompatibleIndexVersion(useLegacyFormat)
120-
)
131+
.put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), indexVersion)
121132
.put(InferenceMetadataFieldsMapper.USE_LEGACY_SEMANTIC_TEXT_FORMAT.getKey(), useLegacyFormat)
122133
.build();
123-
return createMapperService(settings, mappings);
134+
return createMapperService(indexVersion, settings, mappings);
135+
}
136+
137+
private static void validateIndexVersion(IndexVersion indexVersion, boolean useLegacyFormat) {
138+
if (useLegacyFormat == false
139+
&& indexVersion.before(IndexVersions.INFERENCE_METADATA_FIELDS)
140+
&& indexVersion.between(IndexVersions.INFERENCE_METADATA_FIELDS_BACKPORT, IndexVersions.UPGRADE_TO_LUCENE_10_0_0) == false) {
141+
throw new IllegalArgumentException("Index version " + indexVersion + " does not support new semantic text format");
142+
}
124143
}
125144

126145
@Override

0 commit comments

Comments
 (0)