Skip to content

Commit 8b6ae3c

Browse files
authored
Update IndexSettingProvider#getAdditionalIndexSettings() signature (elastic#114150) (elastic#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 elastic#113451 Relates to elastic#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)