Skip to content

Commit 23b7a31

Browse files
authored
Fixing DataStream::getEffectiveSettings for component templates (elastic#127515)
1 parent 63b55e4 commit 23b7a31

File tree

3 files changed

+71
-8
lines changed

3 files changed

+71
-8
lines changed

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

Lines changed: 50 additions & 2 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;
@@ -40,6 +41,7 @@
4041
import java.time.temporal.ChronoUnit;
4142
import java.util.ArrayList;
4243
import java.util.List;
44+
import java.util.Map;
4345
import java.util.Set;
4446
import java.util.stream.Collectors;
4547

@@ -543,11 +545,44 @@ public void testGetEffectiveSettingsTemplateOnlySettings() {
543545
GetDataStreamAction.Request req = new GetDataStreamAction.Request(TEST_REQUEST_TIMEOUT, new String[] {});
544546
final String templatePolicy = "templatePolicy";
545547
final String templateIndexMode = IndexMode.LOOKUP.getName();
546-
final String dataStreamPolicy = "dataStreamPolicy";
547-
final String dataStreamIndexMode = IndexMode.LOGSDB.getName();
548548

549549
ClusterState state = getClusterStateWithDataStreamWithSettings(
550550
projectId,
551+
Settings.builder()
552+
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
553+
.put(IndexSettings.MODE.getKey(), templateIndexMode)
554+
.build(),
555+
Settings.EMPTY,
556+
Settings.EMPTY
557+
);
558+
559+
GetDataStreamAction.Response response = TransportGetDataStreamsAction.innerOperation(
560+
state.projectState(projectId),
561+
req,
562+
resolver,
563+
systemIndices,
564+
ClusterSettings.createBuiltInClusterSettings(),
565+
dataStreamGlobalRetentionSettings,
566+
emptyDataStreamFailureStoreSettings,
567+
new IndexSettingProviders(Set.of()),
568+
null
569+
);
570+
assertNotNull(response.getDataStreams());
571+
assertThat(response.getDataStreams().size(), equalTo(1));
572+
assertThat(response.getDataStreams().get(0).getIlmPolicy(), equalTo(templatePolicy));
573+
assertThat(response.getDataStreams().get(0).getIndexModeName(), equalTo(templateIndexMode));
574+
}
575+
576+
public void testGetEffectiveSettingsComponentTemplateOnlySettings() {
577+
// Set a lifecycle only in the template, and make sure that is in the response:
578+
ProjectId projectId = randomProjectIdOrDefault();
579+
GetDataStreamAction.Request req = new GetDataStreamAction.Request(TEST_REQUEST_TIMEOUT, new String[] {});
580+
final String templatePolicy = "templatePolicy";
581+
final String templateIndexMode = IndexMode.LOOKUP.getName();
582+
583+
ClusterState state = getClusterStateWithDataStreamWithSettings(
584+
projectId,
585+
Settings.EMPTY,
551586
Settings.builder()
552587
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
553588
.put(IndexSettings.MODE.getKey(), templateIndexMode)
@@ -582,6 +617,10 @@ public void testGetEffectiveSettings() {
582617
// Now set a lifecycle in both the template and the data stream, and make sure the response has the data stream one:
583618
ClusterState state = getClusterStateWithDataStreamWithSettings(
584619
projectId,
620+
Settings.builder()
621+
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
622+
.put(IndexSettings.MODE.getKey(), templateIndexMode)
623+
.build(),
585624
Settings.builder()
586625
.put(IndexMetadata.LIFECYCLE_NAME, templatePolicy)
587626
.put(IndexSettings.MODE.getKey(), templateIndexMode)
@@ -611,6 +650,7 @@ public void testGetEffectiveSettings() {
611650
private static ClusterState getClusterStateWithDataStreamWithSettings(
612651
ProjectId projectId,
613652
Settings templateSettings,
653+
Settings componentTemplateSettings,
614654
Settings dataStreamSettings
615655
) {
616656
String dataStreamName = "data-stream-1";
@@ -625,8 +665,16 @@ private static ClusterState getClusterStateWithDataStreamWithSettings(
625665
.indexPatterns(List.of("*"))
626666
.template(Template.builder().settings(templateSettings))
627667
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
668+
.componentTemplates(List.of("component_template_1"))
628669
.build()
629670
);
671+
ComponentTemplate componentTemplate = new ComponentTemplate(
672+
Template.builder().settings(componentTemplateSettings).build(),
673+
null,
674+
null,
675+
null
676+
);
677+
builder.componentTemplates(Map.of("component_template_1", componentTemplate));
630678

631679
List<IndexMetadata> backingIndices = new ArrayList<>();
632680
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
@@ -381,12 +381,7 @@ public ComposableIndexTemplate getEffectiveIndexTemplate(ProjectMetadata project
381381

382382
public Settings getEffectiveSettings(ProjectMetadata projectMetadata) {
383383
ComposableIndexTemplate template = getMatchingIndexTemplate(projectMetadata);
384-
final Settings templateSettings;
385-
if (template.template() == null || template.template().settings() == null) {
386-
templateSettings = Settings.EMPTY;
387-
} else {
388-
templateSettings = template.template().settings();
389-
}
384+
Settings templateSettings = MetadataIndexTemplateService.resolveSettings(template, projectMetadata.componentTemplates());
390385
return templateSettings.merge(settings);
391386
}
392387

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2654,6 +2654,26 @@ public void testGetEffectiveSettingsTemplateSettingsOnly() {
26542654
assertThat(dataStream.getEffectiveSettings(projectMetadataBuilder.build()), equalTo(templateSettings));
26552655
}
26562656

2657+
public void testGetEffectiveSettingsComponentTemplateSettingsOnly() {
2658+
// We only have settings from a component template, so we expect to get those back
2659+
DataStream dataStream = createDataStream(Settings.EMPTY);
2660+
Settings templateSettings = Settings.EMPTY;
2661+
Template.Builder indexTemplateBuilder = Template.builder().settings(templateSettings);
2662+
ComposableIndexTemplate indexTemplate = ComposableIndexTemplate.builder()
2663+
.indexPatterns(List.of(dataStream.getName()))
2664+
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
2665+
.template(indexTemplateBuilder)
2666+
.componentTemplates(List.of("component-template-1"))
2667+
.build();
2668+
Settings componentSettings = randomSettings();
2669+
Template.Builder componentTemplateBuilder = Template.builder().settings(componentSettings);
2670+
ComponentTemplate componentTemplate1 = new ComponentTemplate(componentTemplateBuilder.build(), null, null, null);
2671+
ProjectMetadata.Builder projectMetadataBuilder = ProjectMetadata.builder(randomProjectIdOrDefault())
2672+
.indexTemplates(Map.of(dataStream.getName(), indexTemplate))
2673+
.componentTemplates(Map.of("component-template-1", componentTemplate1));
2674+
assertThat(dataStream.getEffectiveSettings(projectMetadataBuilder.build()), equalTo(componentSettings));
2675+
}
2676+
26572677
public void testGetEffectiveSettingsDataStreamSettingsOnly() {
26582678
// We only have settings from the data stream, so we expect to get those back
26592679
Settings dataStreamSettings = randomSettings();

0 commit comments

Comments
 (0)