From 7c8657df0e728a4538fcf025de4f6b42e7ee1938 Mon Sep 17 00:00:00 2001 From: Sergey Novikov Date: Fri, 9 Jun 2017 19:47:47 +0200 Subject: [PATCH] Return the index name on a create index response This commit modifies the create index response so that it includes the index name. Relates #25139 --- .../indices/create/CreateIndexResponse.java | 16 ++++- .../create/TransportCreateIndexAction.java | 2 +- .../admin/indices/shrink/ShrinkResponse.java | 4 +- .../indices/shrink/TransportShrinkAction.java | 9 ++- .../admin/indices/create/CreateIndexIT.java | 8 +++ .../create/CreateIndexResponseTests.java | 65 +++++++++++++++++++ ...ActionIndicesThatCannotBeCreatedTests.java | 2 +- docs/reference/indices/create-index.asciidoc | 3 +- .../test/indices.create/10_basic.yml | 13 ++++ 9 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponseTests.java diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponse.java b/core/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponse.java index 35dd53276cd..1afed81a4e5 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponse.java +++ b/core/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponse.java @@ -19,6 +19,7 @@ package org.elasticsearch.action.admin.indices.create; +import org.elasticsearch.Version; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; @@ -32,14 +33,16 @@ import java.io.IOException; public class CreateIndexResponse extends AcknowledgedResponse { private boolean shardsAcked; + private String index; protected CreateIndexResponse() { } - protected CreateIndexResponse(boolean acknowledged, boolean shardsAcked) { + protected CreateIndexResponse(boolean acknowledged, boolean shardsAcked, String index) { super(acknowledged); assert acknowledged || shardsAcked == false; // if its not acknowledged, then shards acked should be false too this.shardsAcked = shardsAcked; + this.index = index; } @Override @@ -47,6 +50,9 @@ public class CreateIndexResponse extends AcknowledgedResponse { super.readFrom(in); readAcknowledged(in); shardsAcked = in.readBoolean(); + if (in.getVersion().onOrAfter(Version.V_6_0_0_alpha3)) { + index = in.readString(); + } } @Override @@ -54,6 +60,9 @@ public class CreateIndexResponse extends AcknowledgedResponse { super.writeTo(out); writeAcknowledged(out); out.writeBoolean(shardsAcked); + if (out.getVersion().onOrAfter(Version.V_6_0_0_alpha3)) { + out.writeString(index); + } } /** @@ -65,7 +74,12 @@ public class CreateIndexResponse extends AcknowledgedResponse { return shardsAcked; } + public String index() { + return index; + } + public void addCustomFields(XContentBuilder builder) throws IOException { builder.field("shards_acknowledged", isShardsAcked()); + builder.field("index", index()); } } diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/create/TransportCreateIndexAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/create/TransportCreateIndexAction.java index 354dcf23873..0ac8d02f977 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/create/TransportCreateIndexAction.java +++ b/core/src/main/java/org/elasticsearch/action/admin/indices/create/TransportCreateIndexAction.java @@ -79,7 +79,7 @@ public class TransportCreateIndexAction extends TransportMasterNodeAction - listener.onResponse(new CreateIndexResponse(response.isAcknowledged(), response.isShardsAcked())), + listener.onResponse(new CreateIndexResponse(response.isAcknowledged(), response.isShardsAcked(), indexName)), listener::onFailure)); } diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/ShrinkResponse.java b/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/ShrinkResponse.java index e7ad0afe3aa..0c5149f6bf3 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/ShrinkResponse.java +++ b/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/ShrinkResponse.java @@ -25,7 +25,7 @@ public final class ShrinkResponse extends CreateIndexResponse { ShrinkResponse() { } - ShrinkResponse(boolean acknowledged, boolean shardsAcked) { - super(acknowledged, shardsAcked); + ShrinkResponse(boolean acknowledged, boolean shardsAcked, String index) { + super(acknowledged, shardsAcked, index); } } diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/TransportShrinkAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/TransportShrinkAction.java index 8c482eac10c..2555299709c 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/TransportShrinkAction.java +++ b/core/src/main/java/org/elasticsearch/action/admin/indices/shrink/TransportShrinkAction.java @@ -91,8 +91,13 @@ public class TransportShrinkAction extends TransportMasterNodeAction - listener.onResponse(new ShrinkResponse(response.isAcknowledged(), response.isShardsAcked())), listener::onFailure)); + createIndexService.createIndex( + updateRequest, + ActionListener.wrap(response -> + listener.onResponse(new ShrinkResponse(response.isAcknowledged(), response.isShardsAcked(), updateRequest.index())), + listener::onFailure + ) + ); } @Override diff --git a/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexIT.java b/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexIT.java index f461be77e0c..3c55d0df9c1 100644 --- a/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexIT.java +++ b/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexIT.java @@ -335,4 +335,12 @@ public class CreateIndexIT extends ESIntegTestCase { assertTrue(createPartitionedIndex.apply(1, 1)); } + + public void testIndexNameInResponse() { + CreateIndexResponse response = prepareCreate("foo") + .setSettings(Settings.builder().build()) + .get(); + + assertEquals("Should have index name in response", "foo", response.index()); + } } diff --git a/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponseTests.java b/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponseTests.java new file mode 100644 index 00000000000..588659335e4 --- /dev/null +++ b/core/src/test/java/org/elasticsearch/action/admin/indices/create/CreateIndexResponseTests.java @@ -0,0 +1,65 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.action.admin.indices.create; + +import org.elasticsearch.Version; +import org.elasticsearch.common.io.stream.BytesStreamOutput; +import org.elasticsearch.common.io.stream.StreamInput; +import org.elasticsearch.test.ESTestCase; + +import java.io.IOException; + +public class CreateIndexResponseTests extends ESTestCase { + + public void testSerialization() throws IOException { + CreateIndexResponse response = new CreateIndexResponse(true, true, "foo"); + + try (BytesStreamOutput output = new BytesStreamOutput()) { + response.writeTo(output); + + try (StreamInput in = output.bytes().streamInput()) { + CreateIndexResponse serialized = new CreateIndexResponse(); + serialized.readFrom(in); + assertEquals(response.isShardsAcked(), serialized.isShardsAcked()); + assertEquals(response.isAcknowledged(), serialized.isAcknowledged()); + assertEquals(response.index(), serialized.index()); + } + } + } + + public void testSerializationWithOldVersion() throws IOException { + Version oldVersion = Version.V_5_4_0; + CreateIndexResponse response = new CreateIndexResponse(true, true, "foo"); + + try (BytesStreamOutput output = new BytesStreamOutput()) { + output.setVersion(oldVersion); + response.writeTo(output); + + try (StreamInput in = output.bytes().streamInput()) { + in.setVersion(oldVersion); + CreateIndexResponse serialized = new CreateIndexResponse(); + serialized.readFrom(in); + assertEquals(response.isShardsAcked(), serialized.isShardsAcked()); + assertEquals(response.isAcknowledged(), serialized.isAcknowledged()); + assertNull(serialized.index()); + } + } + } +} diff --git a/core/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionIndicesThatCannotBeCreatedTests.java b/core/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionIndicesThatCannotBeCreatedTests.java index 5ab9e1ea535..1d6b77fc747 100644 --- a/core/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionIndicesThatCannotBeCreatedTests.java +++ b/core/src/test/java/org/elasticsearch/action/bulk/TransportBulkActionIndicesThatCannotBeCreatedTests.java @@ -118,7 +118,7 @@ public class TransportBulkActionIndicesThatCannotBeCreatedTests extends ESTestCa @Override void createIndex(String index, TimeValue timeout, ActionListener listener) { // If we try to create an index just immediately assume it worked - listener.onResponse(new CreateIndexResponse(true, true) {}); + listener.onResponse(new CreateIndexResponse(true, true, index) {}); } }; action.doExecute(null, bulkRequest, null); diff --git a/docs/reference/indices/create-index.asciidoc b/docs/reference/indices/create-index.asciidoc index 11f3dac9567..6537fa74cb7 100644 --- a/docs/reference/indices/create-index.asciidoc +++ b/docs/reference/indices/create-index.asciidoc @@ -129,7 +129,8 @@ what happened: -------------------------------------------------- { "acknowledged": true, - "shards_acknowledged": true + "shards_acknowledged": true, + "index": "test" } -------------------------------------------------- // TESTRESPONSE diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yml index 34d9be5ebca..a99e9f30fbb 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yml @@ -30,6 +30,19 @@ - match: { test_index.settings.index.number_of_replicas: "0"} +--- +"Create index": + - skip: + version: " - 5.99.99" + reason: create index response contains index name since 5.6.0 + + - do: + indices.create: + index: test_index + + - match: { acknowledged: true } + - match: { index: "test_index"} + --- "Create index with wait_for_active_shards set to all":