Skip to content

Commit 8c3d19b

Browse files
authored
Update IndexSettingProvider#getAdditionalIndexSettings() signature (#114150)
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 4c15cc0 commit 8c3d19b

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
@@ -1316,23 +1316,6 @@ public Map<String, ComposableIndexTemplate> templatesV2() {
13161316
.orElse(Collections.emptyMap());
13171317
}
13181318

1319-
// TODO: remove this method:
1320-
public boolean isTimeSeriesTemplate(ComposableIndexTemplate indexTemplate) {
1321-
var indexModeFromTemplate = retrieveIndexModeFromTemplate(indexTemplate);
1322-
if (indexModeFromTemplate == IndexMode.TIME_SERIES) {
1323-
// No need to check for the existence of index.routing_path here, because index.mode=time_series can't be specified without it.
1324-
// Setting validation takes care of this.
1325-
// Also no need to validate that the fields defined in index.routing_path are keyword fields with time_series_dimension
1326-
// attribute enabled. This is validated elsewhere (DocumentMapper).
1327-
return true;
1328-
}
1329-
1330-
// in a followup change: check the existence of keyword fields of type keyword and time_series_dimension attribute enabled in
1331-
// the template. In this case the index.routing_path setting can be generated from the mapping.
1332-
1333-
return false;
1334-
}
1335-
13361319
public IndexMode retrieveIndexModeFromTemplate(ComposableIndexTemplate indexTemplate) {
13371320
if (indexTemplate.getDataStreamTemplate() == null) {
13381321
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
@@ -35,6 +35,7 @@
3535
import org.elasticsearch.core.SuppressForbidden;
3636
import org.elasticsearch.core.UpdateForV9;
3737
import org.elasticsearch.index.Index;
38+
import org.elasticsearch.index.IndexMode;
3839
import org.elasticsearch.index.IndexNotFoundException;
3940
import org.elasticsearch.index.IndexSettings;
4041
import org.elasticsearch.index.IndexVersion;
@@ -2412,30 +2413,87 @@ public void testEnsureMetadataFieldCheckedForGlobalStateChanges() {
24122413
assertThat(unclassifiedFields, empty());
24132414
}
24142415

2415-
public void testIsTimeSeriesTemplate() throws IOException {
2416-
var template = new Template(Settings.builder().put("index.mode", "time_series").build(), new CompressedXContent("{}"), null);
2416+
public void testRetrieveIndexModeFromTemplateTsdb() throws IOException {
2417+
// tsdb:
2418+
var tsdbTemplate = new Template(Settings.builder().put("index.mode", "time_series").build(), new CompressedXContent("{}"), null);
24172419
// Settings in component template:
24182420
{
2419-
var componentTemplate = new ComponentTemplate(template, null, null);
2421+
var componentTemplate = new ComponentTemplate(tsdbTemplate, null, null);
24202422
var indexTemplate = ComposableIndexTemplate.builder()
24212423
.indexPatterns(List.of("test-*"))
24222424
.componentTemplates(List.of("component_template_1"))
24232425
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
24242426
.build();
24252427
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2426-
assertThat(m.isTimeSeriesTemplate(indexTemplate), is(true));
2428+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.TIME_SERIES));
24272429
}
24282430
// Settings in composable index template:
24292431
{
24302432
var componentTemplate = new ComponentTemplate(new Template(null, null, null), null, null);
24312433
var indexTemplate = ComposableIndexTemplate.builder()
24322434
.indexPatterns(List.of("test-*"))
2433-
.template(template)
2435+
.template(tsdbTemplate)
24342436
.componentTemplates(List.of("component_template_1"))
24352437
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
24362438
.build();
24372439
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2438-
assertThat(m.isTimeSeriesTemplate(indexTemplate), is(true));
2440+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.TIME_SERIES));
2441+
}
2442+
}
2443+
2444+
public void testRetrieveIndexModeFromTemplateLogsdb() throws IOException {
2445+
// logsdb:
2446+
var logsdbTemplate = new Template(Settings.builder().put("index.mode", "logsdb").build(), new CompressedXContent("{}"), null);
2447+
// Settings in component template:
2448+
{
2449+
var componentTemplate = new ComponentTemplate(logsdbTemplate, null, null);
2450+
var indexTemplate = ComposableIndexTemplate.builder()
2451+
.indexPatterns(List.of("test-*"))
2452+
.componentTemplates(List.of("component_template_1"))
2453+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2454+
.build();
2455+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2456+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.LOGSDB));
2457+
}
2458+
// Settings in composable index template:
2459+
{
2460+
var componentTemplate = new ComponentTemplate(new Template(null, null, null), null, null);
2461+
var indexTemplate = ComposableIndexTemplate.builder()
2462+
.indexPatterns(List.of("test-*"))
2463+
.template(logsdbTemplate)
2464+
.componentTemplates(List.of("component_template_1"))
2465+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2466+
.build();
2467+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2468+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), is(IndexMode.LOGSDB));
2469+
}
2470+
}
2471+
2472+
public void testRetrieveIndexModeFromTemplateEmpty() throws IOException {
2473+
// no index mode:
2474+
var emptyTemplate = new Template(Settings.EMPTY, new CompressedXContent("{}"), null);
2475+
// Settings in component template:
2476+
{
2477+
var componentTemplate = new ComponentTemplate(emptyTemplate, null, null);
2478+
var indexTemplate = ComposableIndexTemplate.builder()
2479+
.indexPatterns(List.of("test-*"))
2480+
.componentTemplates(List.of("component_template_1"))
2481+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2482+
.build();
2483+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2484+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), nullValue());
2485+
}
2486+
// Settings in composable index template:
2487+
{
2488+
var componentTemplate = new ComponentTemplate(new Template(null, null, null), null, null);
2489+
var indexTemplate = ComposableIndexTemplate.builder()
2490+
.indexPatterns(List.of("test-*"))
2491+
.template(emptyTemplate)
2492+
.componentTemplates(List.of("component_template_1"))
2493+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2494+
.build();
2495+
Metadata m = Metadata.builder().put("component_template_1", componentTemplate).put("index_template_1", indexTemplate).build();
2496+
assertThat(m.retrieveIndexModeFromTemplate(indexTemplate), nullValue());
24392497
}
24402498
}
24412499

0 commit comments

Comments
 (0)