Skip to content

Commit 8b6ae3c

Browse files
authored
Update IndexSettingProvider#getAdditionalIndexSettings() signature (#114150) (#114724)
With logsdb another index mode is available, the isTimeSeries parameter is limiting. Instead, we should just push down the index mode from template to index settings provider. Follow up from #113451 Relates to #113583
1 parent 0cf45ba commit 8b6ae3c

File tree

15 files changed

+138
-93
lines changed

15 files changed

+138
-93
lines changed

modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamIndexSettingsProvider.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class DataStreamIndexSettingsProvider implements IndexSettingProvider {
5959
public Settings getAdditionalIndexSettings(
6060
String indexName,
6161
@Nullable String dataStreamName,
62-
boolean isTimeSeries,
62+
@Nullable IndexMode templateIndexMode,
6363
Metadata metadata,
6464
Instant resolvedAt,
6565
Settings indexTemplateAndCreateRequestSettings,
@@ -70,15 +70,16 @@ public Settings getAdditionalIndexSettings(
7070
// First backing index is created and then data stream is rolled over (in a single cluster state update).
7171
// So at this point we can't check index_mode==time_series,
7272
// so checking that index_mode==null|standard and templateIndexMode == TIME_SERIES
73+
boolean isMigratingToTimeSeries = templateIndexMode == IndexMode.TIME_SERIES;
7374
boolean migrating = dataStream != null
7475
&& (dataStream.getIndexMode() == null || dataStream.getIndexMode() == IndexMode.STANDARD)
75-
&& isTimeSeries;
76+
&& isMigratingToTimeSeries;
7677
IndexMode indexMode;
7778
if (migrating) {
7879
indexMode = IndexMode.TIME_SERIES;
7980
} else if (dataStream != null) {
80-
indexMode = isTimeSeries ? dataStream.getIndexMode() : null;
81-
} else if (isTimeSeries) {
81+
indexMode = isMigratingToTimeSeries ? dataStream.getIndexMode() : null;
82+
} else if (isMigratingToTimeSeries) {
8283
indexMode = IndexMode.TIME_SERIES;
8384
} else {
8485
indexMode = null;

modules/data-streams/src/test/java/org/elasticsearch/datastreams/DataStreamIndexSettingsProviderTests.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public void testGetAdditionalIndexSettings() throws Exception {
7878
Settings result = provider.getAdditionalIndexSettings(
7979
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
8080
dataStreamName,
81-
true,
81+
IndexMode.TIME_SERIES,
8282
metadata,
8383
now,
8484
settings,
@@ -123,7 +123,7 @@ public void testGetAdditionalIndexSettingsIndexRoutingPathAlreadyDefined() throw
123123
Settings result = provider.getAdditionalIndexSettings(
124124
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
125125
dataStreamName,
126-
true,
126+
IndexMode.TIME_SERIES,
127127
metadata,
128128
now,
129129
settings,
@@ -193,7 +193,7 @@ public void testGetAdditionalIndexSettingsMappingsMerging() throws Exception {
193193
Settings result = provider.getAdditionalIndexSettings(
194194
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
195195
dataStreamName,
196-
true,
196+
IndexMode.TIME_SERIES,
197197
metadata,
198198
now,
199199
settings,
@@ -218,7 +218,7 @@ public void testGetAdditionalIndexSettingsNoMappings() {
218218
Settings result = provider.getAdditionalIndexSettings(
219219
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
220220
dataStreamName,
221-
true,
221+
IndexMode.TIME_SERIES,
222222
metadata,
223223
now,
224224
settings,
@@ -243,7 +243,7 @@ public void testGetAdditionalIndexSettingsLookAheadTime() throws Exception {
243243
Settings result = provider.getAdditionalIndexSettings(
244244
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
245245
dataStreamName,
246-
true,
246+
IndexMode.TIME_SERIES,
247247
metadata,
248248
now,
249249
settings,
@@ -268,7 +268,7 @@ public void testGetAdditionalIndexSettingsLookBackTime() throws Exception {
268268
Settings result = provider.getAdditionalIndexSettings(
269269
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
270270
dataStreamName,
271-
true,
271+
IndexMode.TIME_SERIES,
272272
metadata,
273273
now,
274274
settings,
@@ -299,7 +299,7 @@ public void testGetAdditionalIndexSettingsDataStreamAlreadyCreated() throws Exce
299299
var result = provider.getAdditionalIndexSettings(
300300
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
301301
dataStreamName,
302-
true,
302+
IndexMode.TIME_SERIES,
303303
metadata,
304304
now,
305305
settings,
@@ -336,7 +336,7 @@ public void testGetAdditionalIndexSettingsDataStreamAlreadyCreatedTimeSettingsMi
336336
() -> provider.getAdditionalIndexSettings(
337337
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
338338
dataStreamName,
339-
true,
339+
IndexMode.TIME_SERIES,
340340
metadata,
341341
now,
342342
settings,
@@ -362,7 +362,7 @@ public void testGetAdditionalIndexSettingsNonTsdbTemplate() {
362362
Settings result = provider.getAdditionalIndexSettings(
363363
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
364364
dataStreamName,
365-
false,
365+
null,
366366
metadata,
367367
Instant.ofEpochMilli(1L),
368368
settings,
@@ -382,7 +382,7 @@ public void testGetAdditionalIndexSettingsMigrateToTsdb() {
382382
Settings result = provider.getAdditionalIndexSettings(
383383
DataStream.getDefaultBackingIndexName(dataStreamName, 2),
384384
dataStreamName,
385-
true,
385+
IndexMode.TIME_SERIES,
386386
metadata,
387387
now,
388388
settings,
@@ -415,7 +415,7 @@ public void testGetAdditionalIndexSettingsDowngradeFromTsdb() {
415415
Settings result = provider.getAdditionalIndexSettings(
416416
DataStream.getDefaultBackingIndexName(dataStreamName, 2),
417417
dataStreamName,
418-
false,
418+
null,
419419
metadata,
420420
Instant.ofEpochMilli(1L),
421421
settings,
@@ -694,7 +694,7 @@ private Settings generateTsdbSettings(String mapping, Instant now) throws IOExce
694694
var result = provider.getAdditionalIndexSettings(
695695
DataStream.getDefaultBackingIndexName(dataStreamName, 1),
696696
dataStreamName,
697-
true,
697+
IndexMode.TIME_SERIES,
698698
metadata,
699699
now,
700700
settings,

server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateIndexTemplateAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ public static Template resolveTemplate(
274274
Settings result = provider.getAdditionalIndexSettings(
275275
indexName,
276276
template.getDataStreamTemplate() != null ? indexName : null,
277-
template.getDataStreamTemplate() != null && metadata.isTimeSeriesTemplate(template),
277+
metadata.retrieveIndexModeFromTemplate(template),
278278
simulatedState.getMetadata(),
279279
now,
280280
templateSettings,

server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,23 +1310,6 @@ public Map<String, ComposableIndexTemplate> templatesV2() {
13101310
.orElse(Collections.emptyMap());
13111311
}
13121312

1313-
// TODO: remove this method:
1314-
public boolean isTimeSeriesTemplate(ComposableIndexTemplate indexTemplate) {
1315-
var indexModeFromTemplate = retrieveIndexModeFromTemplate(indexTemplate);
1316-
if (indexModeFromTemplate == IndexMode.TIME_SERIES) {
1317-
// No need to check for the existence of index.routing_path here, because index.mode=time_series can't be specified without it.
1318-
// Setting validation takes care of this.
1319-
// Also no need to validate that the fields defined in index.routing_path are keyword fields with time_series_dimension
1320-
// attribute enabled. This is validated elsewhere (DocumentMapper).
1321-
return true;
1322-
}
1323-
1324-
// in a followup change: check the existence of keyword fields of type keyword and time_series_dimension attribute enabled in
1325-
// the template. In this case the index.routing_path setting can be generated from the mapping.
1326-
1327-
return false;
1328-
}
1329-
13301313
public IndexMode retrieveIndexModeFromTemplate(ComposableIndexTemplate indexTemplate) {
13311314
if (indexTemplate.getDataStreamTemplate() == null) {
13321315
return null;

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataCreateIndexService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -982,10 +982,10 @@ static Settings aggregateIndexSettings(
982982
if (sourceMetadata == null) {
983983
final Settings templateAndRequestSettings = Settings.builder().put(combinedTemplateSettings).put(request.settings()).build();
984984

985-
final boolean timeSeriesTemplate = Optional.of(request)
985+
final IndexMode templateIndexMode = Optional.of(request)
986986
.map(CreateIndexClusterStateUpdateRequest::matchingTemplate)
987-
.map(metadata::isTimeSeriesTemplate)
988-
.orElse(false);
987+
.map(metadata::retrieveIndexModeFromTemplate)
988+
.orElse(null);
989989

990990
// Loop through all the explicit index setting providers, adding them to the
991991
// additionalIndexSettings map
@@ -995,7 +995,7 @@ static Settings aggregateIndexSettings(
995995
var newAdditionalSettings = provider.getAdditionalIndexSettings(
996996
request.index(),
997997
request.dataStreamName(),
998-
timeSeriesTemplate,
998+
templateIndexMode,
999999
currentState.getMetadata(),
10001000
resolvedAt,
10011001
templateAndRequestSettings,

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataIndexTemplateService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ private void validateIndexTemplateV2(String name, ComposableIndexTemplate indexT
705705
var newAdditionalSettings = provider.getAdditionalIndexSettings(
706706
"validate-index-name",
707707
indexTemplate.getDataStreamTemplate() != null ? "validate-data-stream-name" : null,
708-
indexTemplate.getDataStreamTemplate() != null && metadata.isTimeSeriesTemplate(indexTemplate),
708+
metadata.retrieveIndexModeFromTemplate(indexTemplate),
709709
currentState.getMetadata(),
710710
now,
711711
combinedSettings,

server/src/main/java/org/elasticsearch/cluster/routing/allocation/DataTier.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.elasticsearch.common.settings.Setting.Property;
2222
import org.elasticsearch.common.settings.Settings;
2323
import org.elasticsearch.core.Nullable;
24+
import org.elasticsearch.index.IndexMode;
2425
import org.elasticsearch.index.IndexModule;
2526
import org.elasticsearch.index.IndexSettingProvider;
2627
import org.elasticsearch.snapshots.SearchableSnapshotsSettings;
@@ -226,7 +227,7 @@ public static class DefaultHotAllocationSettingProvider implements IndexSettingP
226227
public Settings getAdditionalIndexSettings(
227228
String indexName,
228229
@Nullable String dataStreamName,
229-
boolean isTimeSeries,
230+
IndexMode templateIndexMode,
230231
Metadata metadata,
231232
Instant resolvedAt,
232233
Settings indexTemplateAndCreateRequestSettings,

server/src/main/java/org/elasticsearch/index/IndexSettingProvider.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,21 @@ public interface IndexSettingProvider {
3030
* Returns explicitly set default index {@link Settings} for the given index. This should not
3131
* return null.
3232
*
33-
* @param indexName The name of the new index being created
34-
* @param dataStreamName The name of the data stream if the index being created is part of a data stream otherwise
35-
* <code>null</code>
36-
* @param isTimeSeries Whether the template is in time series mode.
37-
* @param metadata The current metadata instance that doesn't yet contain the index to be created
38-
* @param resolvedAt The time the request to create this new index was accepted.
39-
* @param indexTemplateAndCreateRequestSettings All the settings resolved from the template that matches and any settings
40-
* defined on the create index request
41-
* @param combinedTemplateMappings All the mappings resolved from the template that matches
33+
* @param indexName The name of the new index being created
34+
* @param dataStreamName The name of the data stream if the index being created is part of a data stream
35+
* otherwise <code>null</code>
36+
* @param templateIndexMode The index mode defined in template if template creates data streams,
37+
* otherwise <code>null</code> is returned.
38+
* @param metadata The current metadata instance that doesn't yet contain the index to be created
39+
* @param resolvedAt The time the request to create this new index was accepted.
40+
* @param indexTemplateAndCreateRequestSettings All the settings resolved from the template that matches and any settings
41+
* defined on the create index request
42+
* @param combinedTemplateMappings All the mappings resolved from the template that matches
4243
*/
4344
Settings getAdditionalIndexSettings(
4445
String indexName,
4546
@Nullable String dataStreamName,
46-
boolean isTimeSeries,
47+
@Nullable IndexMode templateIndexMode,
4748
Metadata metadata,
4849
Instant resolvedAt,
4950
Settings indexTemplateAndCreateRequestSettings,

server/src/test/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateIndexTemplateActionTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.elasticsearch.cluster.metadata.Template;
1818
import org.elasticsearch.common.compress.CompressedXContent;
1919
import org.elasticsearch.common.settings.Settings;
20+
import org.elasticsearch.index.IndexMode;
2021
import org.elasticsearch.index.IndexSettingProvider;
2122
import org.elasticsearch.indices.IndicesService;
2223
import org.elasticsearch.indices.SystemIndices;
@@ -69,7 +70,7 @@ public void testSettingsProviderIsOverridden() throws Exception {
6970
public Settings getAdditionalIndexSettings(
7071
String indexName,
7172
String dataStreamName,
72-
boolean timeSeries,
73+
IndexMode templateIndexMode,
7374
Metadata metadata,
7475
Instant resolvedAt,
7576
Settings allSettings,

server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.elasticsearch.core.Predicates;
3535
import org.elasticsearch.core.SuppressForbidden;
3636
import org.elasticsearch.index.Index;
37+
import org.elasticsearch.index.IndexMode;
3738
import org.elasticsearch.index.IndexNotFoundException;
3839
import org.elasticsearch.index.IndexSettings;
3940
import org.elasticsearch.index.IndexVersion;
@@ -2381,30 +2382,87 @@ public void testEnsureMetadataFieldCheckedForGlobalStateChanges() {
23812382
assertThat(unclassifiedFields, empty());
23822383
}
23832384

2384-
public void testIsTimeSeriesTemplate() throws IOException {
2385-
var template = new Template(Settings.builder().put("index.mode", "time_series").build(), new CompressedXContent("{}"), null);
2385+
public void testRetrieveIndexModeFromTemplateTsdb() throws IOException {
2386+
// tsdb:
2387+
var tsdbTemplate = new Template(Settings.builder().put("index.mode", "time_series").build(), new CompressedXContent("{}"), null);
23862388
// Settings in component template:
23872389
{
2388-
var componentTemplate = new ComponentTemplate(template, null, null);
2390+
var componentTemplate = new ComponentTemplate(tsdbTemplate, null, null);
23892391
var indexTemplate = ComposableIndexTemplate.builder()
23902392
.indexPatterns(List.of("test-*"))
23912393
.componentTemplates(List.of("component_template_1"))
23922394
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
23932395
.build();
23942396
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2395-
assertThat(m.isTimeSeriesTemplate(indexTemplate), is(true));
2397+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.TIME_SERIES));
23962398
}
23972399
// Settings in composable index template:
23982400
{
23992401
var componentTemplate = new ComponentTemplate(new Template(null, null, null), null, null);
24002402
var indexTemplate = ComposableIndexTemplate.builder()
24012403
.indexPatterns(List.of("test-*"))
2402-
.template(template)
2404+
.template(tsdbTemplate)
24032405
.componentTemplates(List.of("component_template_1"))
24042406
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
24052407
.build();
24062408
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2407-
assertThat(m.isTimeSeriesTemplate(indexTemplate), is(true));
2409+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.TIME_SERIES));
2410+
}
2411+
}
2412+
2413+
public void testRetrieveIndexModeFromTemplateLogsdb() throws IOException {
2414+
// logsdb:
2415+
var logsdbTemplate = new Template(Settings.builder().put("index.mode", "logsdb").build(), new CompressedXContent("{}"), null);
2416+
// Settings in component template:
2417+
{
2418+
var componentTemplate = new ComponentTemplate(logsdbTemplate, null, null);
2419+
var indexTemplate = ComposableIndexTemplate.builder()
2420+
.indexPatterns(List.of("test-*"))
2421+
.componentTemplates(List.of("component_template_1"))
2422+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2423+
.build();
2424+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2425+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.LOGSDB));
2426+
}
2427+
// Settings in composable index template:
2428+
{
2429+
var componentTemplate = new ComponentTemplate(new Template(null, null, null), null, null);
2430+
var indexTemplate = ComposableIndexTemplate.builder()
2431+
.indexPatterns(List.of("test-*"))
2432+
.template(logsdbTemplate)
2433+
.componentTemplates(List.of("component_template_1"))
2434+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2435+
.build();
2436+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2437+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.LOGSDB));
2438+
}
2439+
}
2440+
2441+
public void testRetrieveIndexModeFromTemplateEmpty() throws IOException {
2442+
// no index mode:
2443+
var emptyTemplate = new Template(Settings.EMPTY, new CompressedXContent("{}"), null);
2444+
// Settings in component template:
2445+
{
2446+
var componentTemplate = new ComponentTemplate(emptyTemplate, null, null);
2447+
var indexTemplate = ComposableIndexTemplate.builder()
2448+
.indexPatterns(List.of("test-*"))
2449+
.componentTemplates(List.of("component_template_1"))
2450+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2451+
.build();
2452+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2453+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), nullValue());
2454+
}
2455+
// Settings in composable index template:
2456+
{
2457+
var componentTemplate = new ComponentTemplate(new Template(null, null, null), null, null);
2458+
var indexTemplate = ComposableIndexTemplate.builder()
2459+
.indexPatterns(List.of("test-*"))
2460+
.template(emptyTemplate)
2461+
.componentTemplates(List.of("component_template_1"))
2462+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2463+
.build();
2464+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2465+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), nullValue());
24082466
}
24092467
}
24102468

0 commit comments

Comments
 (0)