From 02ea48cb6beeb1304347de843cf9fc2ab7113ba7 Mon Sep 17 00:00:00 2001 From: Lee Hinman Date: Thu, 8 Feb 2024 16:11:08 -0700 Subject: [PATCH] Always show `composed_of` field for composable index templates Prior to e786cfa7061b427cf6185ad907069838dd679574 we inadvertently always added composable index templates with `composed_of: []` beacuse https://github.com/elastic/elasticsearch/commit/e786cfa7061b427cf6185ad907069838dd679574#diff-5081302eb39033199deb1977d544d1cd7867212a92b8d77e0aa0ded361272b11L618-L630 created a new `ComposableIndexTemplate` from an existing one, and the `.composedOf()` field returned an empty list of no component templates were provided: https://github.com/elastic/elasticsearch/blob/89e714ee5dc60db8b4979ab6372ff767e108e9da/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java#L172-L177 This meant that before 8.12.0 we would always show `composed_of: []` for composable index templates. This commit recreates this behavior, and always displays the empty list even if no component templates are used by a composable index template. Resolves #104627 --- .../test/indices.get_index_template/10_basic.yml | 13 +++++++++++++ .../cluster/metadata/ComposableIndexTemplate.java | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.get_index_template/10_basic.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.get_index_template/10_basic.yml index 41e5506c412cd..fcf4a75af2227 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.get_index_template/10_basic.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.get_index_template/10_basic.yml @@ -188,3 +188,16 @@ setup: type: keyword lifecycle: data_retention: "30d" + +--- +"Get index template always shows composed_of": + - skip: + version: " - 8.12.99" + reason: "A bug was fixed in 8.13.0 to make `composed_of` always returned" + + - do: + indices.get_index_template: + name: test + + - match: {index_templates.0.name: test} + - match: {index_templates.0.index_template.composed_of: []} diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java b/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java index dfd4431eb073c..f645eaf827a56 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/ComposableIndexTemplate.java @@ -27,6 +27,7 @@ import org.elasticsearch.xcontent.XContentParser; import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -273,7 +274,9 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params, @Nulla builder.field(TEMPLATE.getPreferredName()); this.template.toXContent(builder, params, rolloverConfiguration); } - if (this.componentTemplates != null) { + if (this.componentTemplates == null) { + builder.stringListField(COMPOSED_OF.getPreferredName(), Collections.emptyList()); + } else { builder.stringListField(COMPOSED_OF.getPreferredName(), this.componentTemplates); } if (this.priority != null) {