Skip to content

Commit 90e8078

Browse files
committed
Add ability to provide extra custom index metadata
1 parent 1b31e05 commit 90e8078

File tree

19 files changed

+317
-101
lines changed

19 files changed

+317
-101
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.cluster.metadata.IndexMetadata;
1313
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1414
import org.elasticsearch.common.UUIDs;
15+
import org.elasticsearch.common.collect.ImmutableOpenMap;
1516
import org.elasticsearch.common.compress.CompressedXContent;
1617
import org.elasticsearch.common.settings.Settings;
1718
import org.elasticsearch.common.time.DateFormatter;
@@ -37,6 +38,7 @@
3738
import java.util.Iterator;
3839
import java.util.List;
3940
import java.util.Locale;
41+
import java.util.Map;
4042

4143
import static org.elasticsearch.cluster.metadata.IndexMetadata.INDEX_ROUTING_PATH;
4244

@@ -63,7 +65,8 @@ public Settings getAdditionalIndexSettings(
6365
ProjectMetadata projectMetadata,
6466
Instant resolvedAt,
6567
Settings indexTemplateAndCreateRequestSettings,
66-
List<CompressedXContent> combinedTemplateMappings
68+
List<CompressedXContent> combinedTemplateMappings,
69+
ImmutableOpenMap.Builder<String, Map<String, String>> extraCustomMetadata
6770
) {
6871
if (dataStreamName != null) {
6972
DataStream dataStream = projectMetadata.dataStreams().get(dataStreamName);

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.elasticsearch.cluster.metadata.ProjectMetadata;
3737
import org.elasticsearch.cluster.project.ProjectResolver;
3838
import org.elasticsearch.cluster.service.ClusterService;
39+
import org.elasticsearch.common.collect.ImmutableOpenMap;
3940
import org.elasticsearch.common.settings.ClusterSettings;
4041
import org.elasticsearch.common.settings.Settings;
4142
import org.elasticsearch.core.Nullable;
@@ -205,7 +206,8 @@ static IndexMode resolveMode(
205206
state.metadata(),
206207
Instant.now(),
207208
settings,
208-
List.of()
209+
List.of(),
210+
ImmutableOpenMap.builder()
209211
);
210212
var rawMode = addlSettinsg.get(IndexSettings.MODE.getKey());
211213
if (rawMode != null) {

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

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.cluster.metadata.DataStreamTestHelper;
1313
import org.elasticsearch.cluster.metadata.IndexMetadata;
1414
import org.elasticsearch.cluster.metadata.ProjectMetadata;
15+
import org.elasticsearch.common.collect.ImmutableOpenMap;
1516
import org.elasticsearch.common.compress.CompressedXContent;
1617
import org.elasticsearch.common.settings.Settings;
1718
import org.elasticsearch.core.Strings;
@@ -82,7 +83,8 @@ public void testGetAdditionalIndexSettings() throws Exception {
8283
projectMetadata,
8384
now,
8485
settings,
85-
List.of(new CompressedXContent(mapping))
86+
List.of(new CompressedXContent(mapping)),
87+
ImmutableOpenMap.builder()
8688
);
8789
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
8890
// (in production the index.mode setting is usually provided in an index or component template)
@@ -105,7 +107,7 @@ public void testGetAdditionalIndexSettingsIndexRoutingPathAlreadyDefined() throw
105107
"_doc": {
106108
"properties": {
107109
"field1": {
108-
"type": "keyword"
110+
"type": "keyword",
109111
"time_series_dimension": true
110112
},
111113
"field2": {
@@ -127,7 +129,8 @@ public void testGetAdditionalIndexSettingsIndexRoutingPathAlreadyDefined() throw
127129
projectMetadata,
128130
now,
129131
settings,
130-
List.of(new CompressedXContent(mapping))
132+
List.of(new CompressedXContent(mapping)),
133+
ImmutableOpenMap.builder()
131134
);
132135
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
133136
// (in production the index.mode setting is usually provided in an index or component template)
@@ -197,7 +200,8 @@ public void testGetAdditionalIndexSettingsMappingsMerging() throws Exception {
197200
projectMetadata,
198201
now,
199202
settings,
200-
List.of(new CompressedXContent(mapping1), new CompressedXContent(mapping2), new CompressedXContent(mapping3))
203+
List.of(new CompressedXContent(mapping1), new CompressedXContent(mapping2), new CompressedXContent(mapping3)),
204+
ImmutableOpenMap.builder()
201205
);
202206
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
203207
// (in production the index.mode setting is usually provided in an index or component template)
@@ -222,7 +226,8 @@ public void testGetAdditionalIndexSettingsNoMappings() {
222226
projectMetadata,
223227
now,
224228
settings,
225-
List.of()
229+
List.of(),
230+
ImmutableOpenMap.builder()
226231
);
227232
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
228233
// (in production the index.mode setting is usually provided in an index or component template)
@@ -247,7 +252,8 @@ public void testGetAdditionalIndexSettingsLookAheadTime() throws Exception {
247252
projectMetadata,
248253
now,
249254
settings,
250-
List.of(new CompressedXContent("{}"))
255+
List.of(new CompressedXContent("{}")),
256+
ImmutableOpenMap.builder()
251257
);
252258
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
253259
// (in production the index.mode setting is usually provided in an index or component template)
@@ -272,7 +278,8 @@ public void testGetAdditionalIndexSettingsLookBackTime() throws Exception {
272278
projectMetadata,
273279
now,
274280
settings,
275-
List.of(new CompressedXContent("{}"))
281+
List.of(new CompressedXContent("{}")),
282+
ImmutableOpenMap.builder()
276283
);
277284
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
278285
// (in production the index.mode setting is usually provided in an index or component template)
@@ -304,7 +311,8 @@ public void testGetAdditionalIndexSettingsDataStreamAlreadyCreated() throws Exce
304311
projectMetadata,
305312
now,
306313
settings,
307-
List.of(new CompressedXContent("{}"))
314+
List.of(new CompressedXContent("{}")),
315+
ImmutableOpenMap.builder()
308316
);
309317
assertThat(result.size(), equalTo(2));
310318
assertThat(result.get(IndexSettings.TIME_SERIES_START_TIME.getKey()), equalTo(FORMATTER.format(currentEnd)));
@@ -341,7 +349,8 @@ public void testGetAdditionalIndexSettingsDataStreamAlreadyCreatedTimeSettingsMi
341349
projectMetadata,
342350
now,
343351
settings,
344-
null
352+
null,
353+
ImmutableOpenMap.builder()
345354
)
346355
);
347356
assertThat(
@@ -367,7 +376,8 @@ public void testGetAdditionalIndexSettingsNonTsdbTemplate() {
367376
projectMetadata,
368377
Instant.ofEpochMilli(1L),
369378
settings,
370-
null
379+
null,
380+
ImmutableOpenMap.builder()
371381
);
372382
assertThat(result.size(), equalTo(0));
373383
}
@@ -389,7 +399,8 @@ public void testGetAdditionalIndexSettingsMigrateToTsdb() {
389399
projectMetadata,
390400
now,
391401
settings,
392-
List.of()
402+
List.of(),
403+
ImmutableOpenMap.builder()
393404
);
394405
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
395406
// (in production the index.mode setting is usually provided in an index or component template)
@@ -419,7 +430,8 @@ public void testGetAdditionalIndexSettingsDowngradeFromTsdb() {
419430
projectMetadata,
420431
Instant.ofEpochMilli(1L),
421432
settings,
422-
List.of()
433+
List.of(),
434+
ImmutableOpenMap.builder()
423435
);
424436
assertThat(result.size(), equalTo(0));
425437
}
@@ -698,7 +710,8 @@ private Settings generateTsdbSettings(String mapping, Instant now) throws IOExce
698710
projectMetadata,
699711
now,
700712
settings,
701-
List.of(new CompressedXContent(mapping))
713+
List.of(new CompressedXContent(mapping)),
714+
ImmutableOpenMap.builder()
702715
);
703716
// The index.time_series.end_time setting requires index.mode to be set to time_series adding it here so that we read this setting:
704717
// (in production the index.mode setting is usually provided in an index or component template)

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

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
2222
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
2323
import org.elasticsearch.cluster.metadata.ProjectMetadata;
2424
import org.elasticsearch.cluster.metadata.Template;
25+
import org.elasticsearch.common.collect.ImmutableOpenMap;
26+
import org.elasticsearch.common.compress.CompressedXContent;
2527
import org.elasticsearch.common.settings.ClusterSettings;
2628
import org.elasticsearch.common.settings.Settings;
2729
import org.elasticsearch.core.TimeValue;
2830
import org.elasticsearch.core.Tuple;
2931
import org.elasticsearch.index.Index;
3032
import org.elasticsearch.index.IndexMode;
3133
import org.elasticsearch.index.IndexNotFoundException;
34+
import org.elasticsearch.index.IndexSettingProvider;
3235
import org.elasticsearch.index.IndexSettingProviders;
3336
import org.elasticsearch.index.IndexSettings;
3437
import org.elasticsearch.indices.SystemIndices;
@@ -490,18 +493,21 @@ public void testProvidersAffectMode() {
490493
ClusterSettings.createBuiltInClusterSettings(),
491494
dataStreamGlobalRetentionSettings,
492495
emptyDataStreamFailureStoreSettings,
493-
new IndexSettingProviders(
494-
Set.of(
495-
(
496-
indexName,
497-
dataStreamName,
498-
templateIndexMode,
499-
metadata,
500-
resolvedAt,
501-
indexTemplateAndCreateRequestSettings,
502-
combinedTemplateMappings) -> Settings.builder().put("index.mode", IndexMode.LOOKUP).build()
503-
)
504-
),
496+
new IndexSettingProviders(Set.of(new IndexSettingProvider() {
497+
@Override
498+
public Settings getAdditionalIndexSettings(
499+
String indexName,
500+
String dataStreamName,
501+
IndexMode templateIndexMode,
502+
ProjectMetadata metadata,
503+
Instant resolvedAt,
504+
Settings indexTemplateAndCreateRequestSettings,
505+
List<CompressedXContent> combinedTemplateMappings,
506+
ImmutableOpenMap.Builder<String, Map<String, String>> extraCustomMetadata
507+
) {
508+
return Settings.builder().put("index.mode", IndexMode.LOOKUP).build();
509+
}
510+
})),
505511
null
506512
);
507513
assertThat(response.getDataStreams().getFirst().getIndexModeName(), equalTo("lookup"));

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.elasticsearch.cluster.project.ProjectResolver;
3030
import org.elasticsearch.cluster.service.ClusterService;
3131
import org.elasticsearch.common.UUIDs;
32+
import org.elasticsearch.common.collect.ImmutableOpenMap;
3233
import org.elasticsearch.common.compress.CompressedXContent;
3334
import org.elasticsearch.common.settings.ClusterSettings;
3435
import org.elasticsearch.common.settings.Settings;
@@ -285,7 +286,8 @@ public static Template resolveTemplate(
285286
simulatedProject,
286287
now,
287288
templateSettings,
288-
mappings
289+
mappings,
290+
ImmutableOpenMap.builder()
289291
);
290292
MetadataCreateIndexService.validateAdditionalSettings(provider, result, additionalSettings);
291293
dummySettings.put(result);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,6 +2133,11 @@ public Builder removeAllAliases() {
21332133
return this;
21342134
}
21352135

2136+
public Builder putCustom(Map<String, ? extends Map<String, String>> customMetadata) {
2137+
customMetadata.forEach(this::putCustom);
2138+
return this;
2139+
}
2140+
21362141
public Builder putCustom(String type, Map<String, String> customIndexMetadata) {
21372142
this.customMetadata.put(type, new DiffableStringMap(customIndexMetadata));
21382143
return this;

0 commit comments

Comments
 (0)