From 856032f5db3dd1f92aa779b235356d626ff0aff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BF=E5=AF=8C?= Date: Sat, 18 Jan 2025 16:07:33 +0800 Subject: [PATCH 1/5] support boolean string for is_write_index and is_hidden in CreateIndexRequest with aliases --- .../test/indices.create/10_basic.yml | 5 +++- .../action/admin/indices/alias/Alias.java | 25 +++++++++---------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml index 9a59773893d63..9d801d3c52f09 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml @@ -99,14 +99,17 @@ is_write_index: false test_clias: is_write_index: true + test_dlias: + is_write_index: "true" - do: indices.get_alias: index: test_index - - is_false: test_index.aliases.test_alias.is_write_index + - is_false: test_index.aliases.test_alias_default.is_write_index - is_false: test_index.aliases.test_blias.is_write_index - is_true: test_index.aliases.test_clias.is_write_index + - is_true: test_index.aliases.test_dlias.is_write_index --- "Create index with invalid mappings": diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java b/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java index bb202dc6c3772..c23c13956baf3 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java @@ -41,6 +41,14 @@ public class Alias implements Writeable, ToXContentFragment { private static final ParseField SEARCH_ROUTING = new ParseField("search_routing", "searchRouting", "search-routing"); private static final ParseField IS_WRITE_INDEX = new ParseField("is_write_index"); private static final ParseField IS_HIDDEN = new ParseField("is_hidden"); + private static final Set KNOWN_FIELDS = Set.of( + FILTER.getPreferredName(), + ROUTING.getPreferredName(), + INDEX_ROUTING.getPreferredName(), + SEARCH_ROUTING.getPreferredName(), + IS_WRITE_INDEX.getPreferredName(), + IS_HIDDEN.getPreferredName() + ); private String name; @@ -233,23 +241,15 @@ public static Alias fromXContent(XContentParser parser) throws IOException { if (token == XContentParser.Token.FIELD_NAME) { currentFieldName = parser.currentName(); // check if there are any unknown fields - Set knownFieldNames = Set.of( - FILTER.getPreferredName(), - ROUTING.getPreferredName(), - INDEX_ROUTING.getPreferredName(), - SEARCH_ROUTING.getPreferredName(), - IS_WRITE_INDEX.getPreferredName(), - IS_HIDDEN.getPreferredName() - ); - if (knownFieldNames.contains(currentFieldName) == false) { + if (KNOWN_FIELDS.contains(currentFieldName) == false) { throw new IllegalArgumentException("Unknown field [" + currentFieldName + "] in alias [" + alias.name + "]"); } } else if (token == XContentParser.Token.START_OBJECT) { if (FILTER.match(currentFieldName, parser.getDeprecationHandler())) { - Map filter = parser.mapOrdered(); - alias.filter(filter); + alias.filter(parser.mapOrdered()); } - } else if (token == XContentParser.Token.VALUE_STRING) { + } else if (token.isValue()) { + System.out.println(currentFieldName+" : "+ parser.text()); if (ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { alias.routing(parser.text()); } else if (INDEX_ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { @@ -257,7 +257,6 @@ public static Alias fromXContent(XContentParser parser) throws IOException { } else if (SEARCH_ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { alias.searchRouting(parser.text()); } - } else if (token == XContentParser.Token.VALUE_BOOLEAN) { if (IS_WRITE_INDEX.match(currentFieldName, parser.getDeprecationHandler())) { alias.writeIndex(parser.booleanValue()); } else if (IS_HIDDEN.match(currentFieldName, parser.getDeprecationHandler())) { From 4e700048fab16c8e338214da0914f1af1a42a250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BF=E5=AF=8C?= Date: Mon, 20 Jan 2025 15:50:39 +0800 Subject: [PATCH 2/5] rewrite routing for search_routing & index_routing --- .../elasticsearch/action/admin/indices/alias/Alias.java | 8 ++++++-- .../action/admin/indices/RestIndexPutAliasAction.java | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java b/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java index c23c13956baf3..dd7933a99b699 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java @@ -151,8 +151,12 @@ public Alias filter(QueryBuilder filterBuilder) { * Associates a routing value to the alias */ public Alias routing(String routing) { - this.indexRouting = routing; - this.searchRouting = routing; + if (this.indexRouting == null) { + this.indexRouting = routing; + } + if (this.searchRouting == null) { + this.searchRouting = routing; + } return this; } diff --git a/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestIndexPutAliasAction.java b/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestIndexPutAliasAction.java index b915836321533..915b8a0ff0903 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestIndexPutAliasAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestIndexPutAliasAction.java @@ -89,6 +89,8 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC if ("filter".equals(currentFieldName)) { filter = parser.mapOrdered(); } + } else { + throw new IllegalArgumentException("Unknown token [" + token + "]"); } } } From b7c8b07718fd0ea360d35de6031e3c1b732b04dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BF=E5=AF=8C?= Date: Mon, 20 Jan 2025 16:14:38 +0800 Subject: [PATCH 3/5] revert test --- .../resources/rest-api-spec/test/indices.create/10_basic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml index 9d801d3c52f09..f8dc2a49222e7 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/indices.create/10_basic.yml @@ -106,7 +106,7 @@ indices.get_alias: index: test_index - - is_false: test_index.aliases.test_alias_default.is_write_index + - is_false: test_index.aliases.test_alias.is_write_index - is_false: test_index.aliases.test_blias.is_write_index - is_true: test_index.aliases.test_clias.is_write_index - is_true: test_index.aliases.test_dlias.is_write_index From fd06fb0bc5f47177726dd607edc1e1b14c265e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BF=E5=AF=8C?= Date: Mon, 20 Jan 2025 17:12:20 +0800 Subject: [PATCH 4/5] add changelog --- docs/changelog/120453.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/changelog/120453.yaml diff --git a/docs/changelog/120453.yaml b/docs/changelog/120453.yaml new file mode 100644 index 0000000000000..48b34019f855d --- /dev/null +++ b/docs/changelog/120453.yaml @@ -0,0 +1,5 @@ +pr: 120453 +summary: Support boolean strings for alias defination in CreateIndex API +area: Indices APIs +type: bug +issues: [] From 9eca230543ba45cb8ef24d6cac6593eb2835f24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B9=BF=E5=AF=8C?= Date: Mon, 20 Jan 2025 17:18:49 +0800 Subject: [PATCH 5/5] remote debug print --- .../java/org/elasticsearch/action/admin/indices/alias/Alias.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java b/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java index dd7933a99b699..d0fbe959b3293 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/alias/Alias.java @@ -253,7 +253,6 @@ public static Alias fromXContent(XContentParser parser) throws IOException { alias.filter(parser.mapOrdered()); } } else if (token.isValue()) { - System.out.println(currentFieldName+" : "+ parser.text()); if (ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { alias.routing(parser.text()); } else if (INDEX_ROUTING.match(currentFieldName, parser.getDeprecationHandler())) {