|
15 | 15 | import org.elasticsearch.common.bytes.BytesReference; |
16 | 16 | import org.elasticsearch.common.compress.CompressedXContent; |
17 | 17 | import org.elasticsearch.common.settings.Settings; |
| 18 | +import org.elasticsearch.core.CheckedFunction; |
18 | 19 | import org.elasticsearch.index.IndexMode; |
| 20 | +import org.elasticsearch.index.IndexSettings; |
19 | 21 | import org.elasticsearch.index.IndexVersion; |
20 | 22 | import org.elasticsearch.index.IndexVersions; |
21 | 23 | import org.elasticsearch.index.mapper.MapperService.MergeReason; |
|
27 | 29 | import java.io.IOException; |
28 | 30 | import java.util.List; |
29 | 31 | import java.util.Map; |
| 32 | +import java.util.function.BiFunction; |
| 33 | +import java.util.function.Consumer; |
30 | 34 | import java.util.function.Function; |
31 | 35 | import java.util.stream.Collectors; |
32 | 36 | import java.util.stream.StreamSupport; |
@@ -305,22 +309,53 @@ public void testMappingRecoverySkipFieldNameLengthLimit() throws Throwable { |
305 | 309 |
|
306 | 310 | public void testIsMetadataField() throws IOException { |
307 | 311 | IndexVersion version = IndexVersionUtils.randomCompatibleVersion(random()); |
308 | | - Settings settings = Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, version).build(); |
309 | 312 |
|
310 | | - MapperService mapperService = createMapperService(settings, mapping(b -> {})); |
311 | | - assertFalse(mapperService.isMetadataField(randomAlphaOfLengthBetween(10, 15))); |
| 313 | + CheckedFunction<IndexMode, MapperService, IOException> initMapperService = (indexMode) -> { |
| 314 | + Settings.Builder settingsBuilder = Settings.builder() |
| 315 | + .put(IndexMetadata.SETTING_VERSION_CREATED, version) |
| 316 | + .put(IndexSettings.MODE.getKey(), indexMode); |
312 | 317 |
|
313 | | - for (String builtIn : IndicesModule.getBuiltInMetadataFields()) { |
314 | | - if (NestedPathFieldMapper.NAME.equals(builtIn) && version.before(IndexVersions.V_8_0_0)) { |
315 | | - continue; // Nested field does not exist in the 7x line |
316 | | - } |
317 | | - if (mapperService.getIndexSettings().getMode() == IndexMode.STANDARD && (builtIn.equals("_tsid") || builtIn.equals("_ts_routing_hash"))) { |
318 | | - continue; // both these fields are not available in Standard index mode |
| 318 | + if (indexMode == IndexMode.TIME_SERIES) { |
| 319 | + settingsBuilder.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "foo"); |
319 | 320 | } |
320 | | - assertTrue("Expected " + builtIn + " to be a metadata field for version " + version, mapperService.isMetadataField(builtIn)); |
| 321 | + |
| 322 | + return createMapperService(settingsBuilder.build(), mapping(b -> {})); |
| 323 | + }; |
| 324 | + |
| 325 | + Consumer<MapperService> assertMapperService = initMapperServiceConsumer(version); |
| 326 | + |
| 327 | + for (IndexMode indexMode : IndexMode.values()) { |
| 328 | + MapperService mapperService = initMapperService.apply(indexMode); |
| 329 | + assertMapperService.accept(mapperService); |
321 | 330 | } |
322 | 331 | } |
323 | 332 |
|
| 333 | + private static Consumer<MapperService> initMapperServiceConsumer(IndexVersion version) { |
| 334 | + BiFunction<String, MapperService, Boolean> shouldSkipField = (field, mapperService) -> { |
| 335 | + if (NestedPathFieldMapper.NAME.equals(field) && version.before(IndexVersions.V_8_0_0)) { |
| 336 | + return true; // Nested field does not exist in the 7x line |
| 337 | + } |
| 338 | + |
| 339 | + boolean isTimeSeriesField = field.equals("_tsid") || field.equals("_ts_routing_hash"); |
| 340 | + // should only skip for these fields if index mode is set to time_series |
| 341 | + return isTimeSeriesField && mapperService.getIndexSettings().getMode().equals(IndexMode.TIME_SERIES) == false; |
| 342 | + }; |
| 343 | + |
| 344 | + return (mapperService) -> { |
| 345 | + assertFalse(mapperService.isMetadataField(randomAlphaOfLengthBetween(10, 15))); |
| 346 | + |
| 347 | + for (String builtIn : IndicesModule.getBuiltInMetadataFields()) { |
| 348 | + if (shouldSkipField.apply(builtIn, mapperService)) { |
| 349 | + continue; |
| 350 | + } |
| 351 | + assertTrue( |
| 352 | + "Expected " + builtIn + " to be a metadata field for version " + version, |
| 353 | + mapperService.isMetadataField(builtIn) |
| 354 | + ); |
| 355 | + } |
| 356 | + }; |
| 357 | + } |
| 358 | + |
324 | 359 | public void testMappingUpdateChecks() throws IOException { |
325 | 360 | MapperService mapperService = createMapperService(fieldMapping(b -> b.field("type", "text"))); |
326 | 361 |
|
|
0 commit comments