Skip to content

Commit b80aed6

Browse files
authored
Add template builder (#113444) (#113512)
Since we are enriching the component templates with more entries such as the data stream lifecycle and in the future the data stream options, we add a template builder to help with the code, especially tests. To highlight the value and prepare for the PRs that will add the data stream options to the template we replace calls to the constructor with all arguments by the builder: - when there are aguements with null values, or - when we copy another template and change only a few fields. This prepares the ground, so when we add data stream options, we will not need to edit all these places. (cherry picked from commit 3d7904b)
1 parent cd18cf9 commit b80aed6

File tree

22 files changed

+171
-119
lines changed

22 files changed

+171
-119
lines changed

modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamAutoshardingIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ static void putComposableIndexTemplate(String id, List<String> patterns, @Nullab
502502
request.indexTemplate(
503503
ComposableIndexTemplate.builder()
504504
.indexPatterns(patterns)
505-
.template(new Template(settings, null, null, null))
505+
.template(Template.builder().settings(settings))
506506
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
507507
.build()
508508
);

modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamIT.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2441,7 +2441,13 @@ static void putComposableIndexTemplate(
24412441
request.indexTemplate(
24422442
ComposableIndexTemplate.builder()
24432443
.indexPatterns(patterns)
2444-
.template(new Template(settings, mappings == null ? null : CompressedXContent.fromJSON(mappings), aliases, lifecycle))
2444+
.template(
2445+
Template.builder()
2446+
.settings(settings)
2447+
.mappings(mappings == null ? null : CompressedXContent.fromJSON(mappings))
2448+
.aliases(aliases)
2449+
.lifecycle(lifecycle)
2450+
)
24452451
.metadata(metadata)
24462452
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate(false, false, withFailureStore))
24472453
.build()

modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/ResolveClusterDataStreamIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ void putComposableIndexTemplate(Client client, String id, List<String> patterns,
453453
request.indexTemplate(
454454
ComposableIndexTemplate.builder()
455455
.indexPatterns(patterns)
456-
.template(new Template(null, null, aliases, null))
456+
.template(Template.builder().aliases(aliases))
457457
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
458458
.build()
459459
);

modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudSystemDataStreamLifecycleIT.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,10 @@ public Collection<SystemDataStreamDescriptor> getSystemDataStreamDescriptors() {
201201
ComposableIndexTemplate.builder()
202202
.indexPatterns(List.of(".test-data-stream"))
203203
.template(
204-
new Template(
205-
Settings.EMPTY,
206-
mappings,
207-
null,
208-
DataStreamLifecycle.newBuilder().dataRetention(randomMillisUpToYear9999()).build()
209-
)
204+
Template.builder()
205+
.settings(Settings.EMPTY)
206+
.mappings(mappings)
207+
.lifecycle(DataStreamLifecycle.newBuilder().dataRetention(randomMillisUpToYear9999()).build())
210208
)
211209
.dataStreamTemplate(new DataStreamTemplate())
212210
.build(),

modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceIT.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ public void testOriginationDate() throws Exception {
345345
request.indexTemplate(
346346
ComposableIndexTemplate.builder()
347347
.indexPatterns(List.of("index_*"))
348-
.template(new Template(null, CompressedXContent.fromJSON(mapping), null, null))
348+
.template(Template.builder().mappings(CompressedXContent.fromJSON(mapping)))
349349
.build()
350350
);
351351
client().execute(TransportPutComposableIndexTemplateAction.TYPE, request).actionGet();
@@ -1221,7 +1221,12 @@ static void putComposableIndexTemplate(
12211221
request.indexTemplate(
12221222
ComposableIndexTemplate.builder()
12231223
.indexPatterns(patterns)
1224-
.template(new Template(settings, mappings == null ? null : CompressedXContent.fromJSON(mappings), null, lifecycle))
1224+
.template(
1225+
Template.builder()
1226+
.settings(settings)
1227+
.mappings(mappings == null ? null : CompressedXContent.fromJSON(mappings))
1228+
.lifecycle(lifecycle)
1229+
)
12251230
.metadata(metadata)
12261231
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate(false, false, withFailureStore))
12271232
.build()
@@ -1268,14 +1273,12 @@ public Collection<SystemDataStreamDescriptor> getSystemDataStreamDescriptors() {
12681273
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
12691274
.indexPatterns(List.of(DataStream.BACKING_INDEX_PREFIX + SYSTEM_DATA_STREAM_NAME + "*"))
12701275
.template(
1271-
new Template(
1272-
Settings.EMPTY,
1273-
null,
1274-
null,
1275-
DataStreamLifecycle.newBuilder()
1276-
.dataRetention(TimeValue.timeValueDays(SYSTEM_DATA_STREAM_RETENTION_DAYS))
1277-
.build()
1278-
)
1276+
Template.builder()
1277+
.settings(Settings.EMPTY)
1278+
.lifecycle(
1279+
DataStreamLifecycle.newBuilder()
1280+
.dataRetention(TimeValue.timeValueDays(SYSTEM_DATA_STREAM_RETENTION_DAYS))
1281+
)
12791282
)
12801283
.build(),
12811284
Map.of(),

modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/ExplainDataStreamLifecycleIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,12 @@ static void putComposableIndexTemplate(
445445
request.indexTemplate(
446446
ComposableIndexTemplate.builder()
447447
.indexPatterns(patterns)
448-
.template(new Template(settings, mappings == null ? null : CompressedXContent.fromJSON(mappings), null, lifecycle))
448+
.template(
449+
Template.builder()
450+
.settings(settings)
451+
.mappings(mappings == null ? null : CompressedXContent.fromJSON(mappings))
452+
.lifecycle(lifecycle)
453+
)
449454
.metadata(metadata)
450455
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
451456
.build()

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,12 @@ static void putComposableIndexTemplate(
114114
request.indexTemplate(
115115
ComposableIndexTemplate.builder()
116116
.indexPatterns(patterns)
117-
.template(new Template(settings, mappings == null ? null : CompressedXContent.fromJSON(mappings), null, lifecycle))
117+
.template(
118+
Template.builder()
119+
.settings(settings)
120+
.mappings(mappings == null ? null : CompressedXContent.fromJSON(mappings))
121+
.lifecycle(lifecycle)
122+
)
118123
.metadata(metadata)
119124
.dataStreamTemplate(new ComposableIndexTemplate.DataStreamTemplate())
120125
.build()

server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComponentTemplateAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public static ComponentTemplate normalizeComponentTemplate(
7878
Settings.Builder builder = Settings.builder().put(template.settings()).normalizePrefix(IndexMetadata.INDEX_SETTING_PREFIX);
7979
Settings settings = builder.build();
8080
indexScopedSettings.validate(settings, true);
81-
template = new Template(settings, template.mappings(), template.aliases(), template.lifecycle());
81+
template = Template.builder(template).settings(settings).build();
8282
componentTemplate = new ComponentTemplate(
8383
template,
8484
componentTemplate.version(),

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,11 @@ public Builder template(Template template) {
537537
return this;
538538
}
539539

540+
public Builder template(Template.Builder template) {
541+
this.template = template.build();
542+
return this;
543+
}
544+
540545
public Builder componentTemplates(List<String> componentTemplates) {
541546
this.componentTemplates = componentTemplates;
542547
return this;

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ public static Map<String, List<String>> v2TemplateOverlaps(
693693
private void validateIndexTemplateV2(String name, ComposableIndexTemplate indexTemplate, ClusterState currentState) {
694694
// Workaround for the fact that start_time and end_time are injected by the MetadataCreateDataStreamService upon creation,
695695
// but when validating templates that create data streams the MetadataCreateDataStreamService isn't used.
696-
var finalTemplate = Optional.ofNullable(indexTemplate.template());
696+
var finalTemplate = indexTemplate.template();
697697
var finalSettings = Settings.builder();
698698
final var now = Instant.now();
699699
final var metadata = currentState.getMetadata();
@@ -717,18 +717,11 @@ private void validateIndexTemplateV2(String name, ComposableIndexTemplate indexT
717717
// Then apply setting from component templates:
718718
finalSettings.put(combinedSettings);
719719
// Then finally apply settings resolved from index template:
720-
finalSettings.put(finalTemplate.map(Template::settings).orElse(Settings.EMPTY));
721-
722-
var templateToValidate = indexTemplate.toBuilder()
723-
.template(
724-
new Template(
725-
finalSettings.build(),
726-
finalTemplate.map(Template::mappings).orElse(null),
727-
finalTemplate.map(Template::aliases).orElse(null),
728-
finalTemplate.map(Template::lifecycle).orElse(null)
729-
)
730-
)
731-
.build();
720+
if (finalTemplate != null && finalTemplate.settings() != null) {
721+
finalSettings.put(finalTemplate.settings());
722+
}
723+
724+
var templateToValidate = indexTemplate.toBuilder().template(Template.builder(finalTemplate).settings(finalSettings)).build();
732725

733726
validate(name, templateToValidate);
734727
validateDataStreamsStillReferenced(currentState, name, templateToValidate);

0 commit comments

Comments
 (0)