Skip to content

Commit a5f30f2

Browse files
masseykejoegallo
authored andcommitted
Fixing DataStream::getEffectiveSettings for component templates (#127515)
1 parent 00fd098 commit a5f30f2

File tree

3 files changed

+73
-9
lines changed

3 files changed

+73
-9
lines changed

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

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.elasticsearch.action.datastreams.GetDataStreamAction;
1212
import org.elasticsearch.cluster.ClusterName;
1313
import org.elasticsearch.cluster.ClusterState;
14+
import org.elasticsearch.cluster.metadata.ComponentTemplate;
1415
import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
1516
import org.elasticsearch.cluster.metadata.DataStream;
1617
import org.elasticsearch.cluster.metadata.DataStreamFailureStoreSettings;
@@ -38,6 +39,7 @@
3839
import java.time.temporal.ChronoUnit;
3940
import java.util.ArrayList;
4041
import java.util.List;
42+
import java.util.Map;
4143
import java.util.Set;
4244
import java.util.stream.Collectors;
4345

@@ -548,10 +550,41 @@ public void testGetEffectiveSettingsTemplateOnlySettings() {
548550
GetDataStreamAction.Request req = new GetDataStreamAction.Request(TEST_REQUEST_TIMEOUT, new String[] {});
549551
final String templatePolicy = "templatePolicy";
550552
final String templateIndexMode = IndexMode.LOOKUP.getName();
551-
final String dataStreamPolicy = "dataStreamPolicy";
552-
final String dataStreamIndexMode = IndexMode.LOGSDB.getName();
553553

554554
ClusterState state = getClusterStateWithDataStreamWithSettings(
555+
Settings.builder()
556+
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
557+
.put(IndexSettings.MODE.getKey(), templateIndexMode)
558+
.build(),
559+
Settings.EMPTY,
560+
Settings.EMPTY
561+
);
562+
563+
GetDataStreamAction.Response response = TransportGetDataStreamsAction.innerOperation(
564+
state,
565+
req,
566+
resolver,
567+
systemIndices,
568+
ClusterSettings.createBuiltInClusterSettings(),
569+
dataStreamGlobalRetentionSettings,
570+
emptyDataStreamFailureStoreSettings,
571+
new IndexSettingProviders(Set.of()),
572+
null
573+
);
574+
assertNotNull(response.getDataStreams());
575+
assertThat(response.getDataStreams().size(), equalTo(1));
576+
assertThat(response.getDataStreams().get(0).getIlmPolicy(), equalTo(templatePolicy));
577+
assertThat(response.getDataStreams().get(0).getIndexModeName(), equalTo(templateIndexMode));
578+
}
579+
580+
public void testGetEffectiveSettingsComponentTemplateOnlySettings() {
581+
// Set a lifecycle only in the template, and make sure that is in the response:
582+
GetDataStreamAction.Request req = new GetDataStreamAction.Request(TEST_REQUEST_TIMEOUT, new String[] {});
583+
final String templatePolicy = "templatePolicy";
584+
final String templateIndexMode = IndexMode.LOOKUP.getName();
585+
586+
ClusterState state = getClusterStateWithDataStreamWithSettings(
587+
Settings.EMPTY,
555588
Settings.builder()
556589
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
557590
.put(IndexSettings.MODE.getKey(), templateIndexMode)
@@ -584,6 +617,10 @@ public void testGetEffectiveSettings() {
584617
final String dataStreamIndexMode = IndexMode.LOGSDB.getName();
585618
// Now set a lifecycle in both the template and the data stream, and make sure the response has the data stream one:
586619
ClusterState state = getClusterStateWithDataStreamWithSettings(
620+
Settings.builder()
621+
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
622+
.put(IndexSettings.MODE.getKey(), templateIndexMode)
623+
.build(),
587624
Settings.builder()
588625
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
589626
.put(IndexSettings.MODE.getKey(), templateIndexMode)
@@ -610,7 +647,11 @@ public void testGetEffectiveSettings() {
610647
assertThat(response.getDataStreams().get(0).getIndexModeName(), equalTo(dataStreamIndexMode));
611648
}
612649

613-
private static ClusterState getClusterStateWithDataStreamWithSettings(Settings templateSettings, Settings dataStreamSettings) {
650+
private static ClusterState getClusterStateWithDataStreamWithSettings(
651+
Settings templateSettings,
652+
Settings componentTemplateSettings,
653+
Settings dataStreamSettings
654+
) {
614655
String dataStreamName = "data-stream-1";
615656
int numberOfBackingIndices = randomIntBetween(1, 5);
616657
long currentTime = System.currentTimeMillis();
@@ -623,8 +664,16 @@ private static ClusterState getClusterStateWithDataStreamWithSettings(Settings t
623664
.indexPatterns(List.of("*"))
624665
.template(Template.builder().settings(templateSettings))
625666
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
667+
.componentTemplates(List.of("component_template_1"))
626668
.build()
627669
);
670+
ComponentTemplate componentTemplate = new ComponentTemplate(
671+
Template.builder().settings(componentTemplateSettings).build(),
672+
null,
673+
null,
674+
null
675+
);
676+
builder.componentTemplates(Map.of("component_template_1", componentTemplate));
628677

629678
List<IndexMetadata> backingIndices = new ArrayList<>();
630679
for (int backingIndexNumber = 1; backingIndexNumber <= numberOfBackingIndices; backingIndexNumber++) {

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -376,12 +376,7 @@ public ComposableIndexTemplate getEffectiveIndexTemplate(Metadata metadata) {
376376

377377
public Settings getEffectiveSettings(Metadata metadata) {
378378
ComposableIndexTemplate template = getMatchingIndexTemplate(metadata);
379-
final Settings templateSettings;
380-
if (template.template() == null || template.template().settings() == null) {
381-
templateSettings = Settings.EMPTY;
382-
} else {
383-
templateSettings = template.template().settings();
384-
}
379+
Settings templateSettings = MetadataIndexTemplateService.resolveSettings(template, metadata.componentTemplates());
385380
return templateSettings.merge(settings);
386381
}
387382

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2444,6 +2444,26 @@ public void testGetEffectiveSettingsTemplateSettingsOnly() {
24442444
assertThat(dataStream.getEffectiveSettings(metadataBuilder.build()), equalTo(templateSettings));
24452445
}
24462446

2447+
public void testGetEffectiveSettingsComponentTemplateSettingsOnly() {
2448+
// We only have settings from a component template, so we expect to get those back
2449+
DataStream dataStream = createDataStream(Settings.EMPTY);
2450+
Settings templateSettings = Settings.EMPTY;
2451+
Template.Builder indexTemplateBuilder = Template.builder().settings(templateSettings);
2452+
ComposableIndexTemplate indexTemplate = ComposableIndexTemplate.builder()
2453+
.indexPatterns(List.of(dataStream.getName()))
2454+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2455+
.template(indexTemplateBuilder)
2456+
.componentTemplates(List.of("component-template-1"))
2457+
.build();
2458+
Settings componentSettings = randomSettings();
2459+
Template.Builder componentTemplateBuilder = Template.builder().settings(componentSettings);
2460+
ComponentTemplate componentTemplate1 = new ComponentTemplate(componentTemplateBuilder.build(), null, null, null);
2461+
Metadata.Builder projectMetadataBuilder = Metadata.builder()
2462+
.indexTemplates(Map.of(dataStream.getName(), indexTemplate))
2463+
.componentTemplates(Map.of("component-template-1", componentTemplate1));
2464+
assertThat(dataStream.getEffectiveSettings(projectMetadataBuilder.build()), equalTo(componentSettings));
2465+
}
2466+
24472467
public void testGetEffectiveSettingsDataStreamSettingsOnly() {
24482468
// We only have settings from the data stream, so we expect to get those back
24492469
Settings dataStreamSettings = randomSettings();

0 commit comments

Comments
 (0)