From 2085d31c0e4d9e81166fb19c3d8134797e448315 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Wed, 22 Aug 2018 14:37:03 -0600 Subject: [PATCH 1/9] HLRC: Add Lifecycle delete to the HLRC Adds support for Lifecycle deletion to the Java High-Level Rest Client. Also includes some stopgap measures to support using the new Client package structure which should be replaced once the structure refactoring is complete. Relates to #33100 --- .../client/IndexLifecycleClient.java | 30 ++++++++ .../client/MasterTimeoutRequest.java | 47 +++++++++++++ .../client/RequestConverters.java | 12 ++++ .../DeleteLifecycleRequest.java | 55 +++++++++++++++ .../client/IndexLifecycleIT.java | 69 +++++++++++++++++++ .../client/RequestConvertersTests.java | 23 +++++++ .../DeleteLifecycleRequestTests.java | 43 ++++++++++++ 7 files changed, 279 insertions(+) create mode 100644 client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java create mode 100644 client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java create mode 100644 client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java index 21fb4a0062402..7cc0a7e41e340 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java @@ -21,6 +21,7 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.master.AcknowledgedResponse; +import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleResponse; import org.elasticsearch.protocol.xpack.indexlifecycle.SetIndexLifecyclePolicyRequest; @@ -39,6 +40,35 @@ public class IndexLifecycleClient { this.restHighLevelClient = restHighLevelClient; } + /** + * Delete a lifecycle definition + * See + * the docs for more. + * @param request the request + * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized + * @return the response + * @throws IOException in case there is a problem sending the request or parsing back the response + */ + public AcknowledgedResponse deleteLifecycle(DeleteLifecycleRequest request, + RequestOptions options) throws IOException { + return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::deleteLifecycle, options, + AcknowledgedResponse::fromXContent, emptySet()); + } + + /** + * Asynchronously delete a lifecycle definition + * See + * the docs for more. + * @param request the request + * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized + * @param listener the listener to be notified upon request completion + */ + public void deleteLifecycleAsync(DeleteLifecycleRequest request, RequestOptions options, + ActionListener listener) { + restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::deleteLifecycle, options, + AcknowledgedResponse::fromXContent, listener, emptySet()); + } + /** * Set the index lifecycle policy for an index * See diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java new file mode 100644 index 0000000000000..4c35383529158 --- /dev/null +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java @@ -0,0 +1,47 @@ +/* + * 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.client; + +import org.elasticsearch.common.unit.TimeValue; + +// TODO: This class exists as a stopgap to allow progress in the new HLRC structure. +// It should be replaced with a version of MasterNodeRequest that will likely be +// created when everything is moved from o.e.xpack.protocol to o.e.client. +public abstract class MasterTimeoutRequest implements Validatable { + + protected TimeValue timeout; + + @SuppressWarnings("unchecked") + public Request masterNodeTimeout(TimeValue timeout) { + this.timeout = timeout; + return (Request) this; + } + + /** + * A timeout value in case the master has not been discovered yet or disconnected. + */ + public final Request masterNodeTimeout(String timeout) { + return masterNodeTimeout(TimeValue.parseTimeValue(timeout, null, getClass().getSimpleName() + ".masterNodeTimeout")); + } + + public TimeValue masterNodeTimeout() { + return timeout; + } +} diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java index 6133cd003dc85..55738bead31c3 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java @@ -108,6 +108,7 @@ import org.elasticsearch.index.rankeval.RankEvalRequest; import org.elasticsearch.protocol.xpack.XPackInfoRequest; import org.elasticsearch.protocol.xpack.XPackUsageRequest; +import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.license.DeleteLicenseRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.SetIndexLifecyclePolicyRequest; @@ -1174,6 +1175,17 @@ static Request xpackUsage(XPackUsageRequest usageRequest) { return request; } + static Request deleteLifecycle(DeleteLifecycleRequest deleteLifecycleRequest) { + Request request = new Request(HttpDelete.METHOD_NAME, + new EndpointBuilder() + .addPathPartAsIs("_ilm") + .addPathPartAsIs(deleteLifecycleRequest.getLifecycle()) + .build()); + Params params = new Params(request); + params.withMasterTimeout(deleteLifecycleRequest.masterNodeTimeout()); + return request; + } + static Request setIndexLifecyclePolicy(SetIndexLifecyclePolicyRequest setPolicyRequest) { String[] indices = setPolicyRequest.indices() == null ? Strings.EMPTY_ARRAY : setPolicyRequest.indices(); Request request = new Request(HttpPut.METHOD_NAME, diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java new file mode 100644 index 0000000000000..945b23027b081 --- /dev/null +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java @@ -0,0 +1,55 @@ +/* + * 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.client.indexlifecycle; + +import org.elasticsearch.client.MasterTimeoutRequest; + +import java.util.Objects; + +public class DeleteLifecycleRequest extends MasterTimeoutRequest { + + private final String lifecycle; + + public DeleteLifecycleRequest(String lifecycle) { + this.lifecycle = Objects.requireNonNull(lifecycle, "lifecycle cannot be null"); + } + + public String getLifecycle() { + return lifecycle; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DeleteLifecycleRequest that = (DeleteLifecycleRequest) o; + return Objects.equals(getLifecycle(), that.getLifecycle()); + } + + @Override + public int hashCode() { + return Objects.hash(getLifecycle()); + } +} diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java index ad9064cf160ad..3b723f3d4dbf8 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java @@ -27,6 +27,7 @@ import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleResponse; import org.elasticsearch.protocol.xpack.indexlifecycle.IndexLifecycleExplainResponse; @@ -36,8 +37,10 @@ import org.elasticsearch.protocol.xpack.indexlifecycle.StopILMRequest; import org.hamcrest.Matchers; +import java.io.IOException; import java.util.Map; +import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @@ -286,4 +289,70 @@ public void testExplainLifecycle() throws Exception { assertFalse(squashResponse.managedByILM()); assertEquals("squash", squashResponse.getIndex()); } + + public void testDeleteLifecycle() throws IOException { + String policy = randomAlphaOfLength(10); + + // TODO: NORELEASE convert this to using the high level client once there are APIs for it + String jsonString = "{\n" + + " \"policy\": {\n" + + " \"phases\": {\n" + + " \"hot\": {\n" + + " \"actions\": {\n" + + " \"rollover\": {\n" + + " \"max_age\": \"50d\"\n" + + " } \n" + + " }\n" + + " },\n" + + " \"warm\": {\n" + + " \"after\": \"1000s\",\n" + + " \"actions\": {\n" + + " \"allocate\": {\n" + + " \"require\": { \"_name\": \"node-1\" },\n" + + " \"include\": {},\n" + + " \"exclude\": {}\n" + + " },\n" + + " \"shrink\": {\n" + + " \"number_of_shards\": 1\n" + + " },\n" + + " \"forcemerge\": {\n" + + " \"max_num_segments\": 1000\n" + + " }\n" + + " }\n" + + " },\n" + + " \"cold\": {\n" + + " \"after\": \"2000s\",\n" + + " \"actions\": {\n" + + " \"allocate\": {\n" + + " \"number_of_replicas\": 0\n" + + " }\n" + + " }\n" + + " },\n" + + " \"delete\": {\n" + + " \"after\": \"3000s\",\n" + + " \"actions\": {\n" + + " \"delete\": {}\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + HttpEntity entity = new NStringEntity(jsonString, ContentType.APPLICATION_JSON); + Request request = new Request("PUT", "/_ilm/" + policy); + request.setEntity(entity); + client().performRequest(request); + + DeleteLifecycleRequest deleteRequest = new DeleteLifecycleRequest(policy); + assertAcked(execute(deleteRequest, highLevelClient().indexLifecycle()::deleteLifecycle, + highLevelClient().indexLifecycle()::deleteLifecycleAsync)); + + // TODO: NORELEASE convert this to using the high level client once there are APIs for it + Request getLifecycle = new Request("GET", "/_ilm/" + policy); + try { + client().performRequest(getLifecycle); + fail("index should not exist after being deleted"); + } catch (ResponseException ex) { + assertEquals(404, ex.getResponse().getStatusLine().getStatusCode()); + } + } } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index 065ff310403b7..ce0dc85db6ce9 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -127,6 +127,7 @@ import org.elasticsearch.index.rankeval.RatedRequest; import org.elasticsearch.index.rankeval.RestRankEvalAction; import org.elasticsearch.protocol.xpack.XPackInfoRequest; +import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.SetIndexLifecyclePolicyRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.StartILMRequest; @@ -2635,6 +2636,18 @@ public void testGraphExplore() throws Exception { assertToXContentBody(graphExploreRequest, request.getEntity()); } + public void testDeleteLifecycle() { + String lifecycleName = randomAlphaOfLengthBetween(2,20); + DeleteLifecycleRequest req = new DeleteLifecycleRequest(lifecycleName); + Map expectedParams = new HashMap<>(); + setRandomMasterTimeout(req, expectedParams); + + Request request = RequestConverters.deleteLifecycle(req); + assertEquals(request.getMethod(), HttpDelete.METHOD_NAME); + assertEquals(request.getEndpoint(), "/_ilm/" + lifecycleName); + assertEquals(request.getParameters(), expectedParams); + } + public void testSetIndexLifecyclePolicy() throws Exception { SetIndexLifecyclePolicyRequest req = new SetIndexLifecyclePolicyRequest(); String policyName = randomAlphaOfLength(10); @@ -2839,6 +2852,16 @@ private static void setRandomMasterTimeout(MasterNodeRequest request, Map request, Map expectedParams) { + if (randomBoolean()) { + String masterTimeout = randomTimeValue(); + request.masterNodeTimeout(masterTimeout); + expectedParams.put("master_timeout", masterTimeout); + } else { + expectedParams.put("master_timeout", MasterNodeRequest.DEFAULT_MASTER_NODE_TIMEOUT.getStringRep()); + } + } + private static void setRandomWaitForActiveShards(Consumer setter, Map expectedParams) { setRandomWaitForActiveShards(setter, ActiveShardCount.DEFAULT, expectedParams); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java new file mode 100644 index 0000000000000..a89329fe1f5c2 --- /dev/null +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java @@ -0,0 +1,43 @@ +/* + * 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.client.indexlifecycle; + +import org.elasticsearch.test.ESTestCase; + +public class DeleteLifecycleRequestTests extends ESTestCase { + + private DeleteLifecycleRequest createTestInstance() { + return new DeleteLifecycleRequest(randomAlphaOfLengthBetween(2, 20)); + } + + public void testValidate() { + if (frequently()) { + DeleteLifecycleRequest req = createTestInstance(); + assertTrue(req == null || req.validate().validationErrors().size() == 0); + } else { + try { + DeleteLifecycleRequest req = new DeleteLifecycleRequest(null); + fail("should not be able to create a DeleteLifecycleRequest with null lifecycle name"); + } catch (NullPointerException exception) { + // ok + } + } + } +} From b3cd4c3b96720aed521607e77a975023088a1b56 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Fri, 24 Aug 2018 22:54:01 -0600 Subject: [PATCH 2/9] Add default to master timeout class --- .../java/org/elasticsearch/client/MasterTimeoutRequest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java index 4c35383529158..e3b8b56a17b35 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/MasterTimeoutRequest.java @@ -26,7 +26,9 @@ // created when everything is moved from o.e.xpack.protocol to o.e.client. public abstract class MasterTimeoutRequest implements Validatable { - protected TimeValue timeout; + public static final TimeValue DEFAULT_MASTER_NODE_TIMEOUT = TimeValue.timeValueSeconds(30); + + protected TimeValue timeout = DEFAULT_MASTER_NODE_TIMEOUT; @SuppressWarnings("unchecked") public Request masterNodeTimeout(TimeValue timeout) { From 60eb04312448d9d4d7d929e03282251b9c2d5579 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Mon, 27 Aug 2018 09:02:06 -0600 Subject: [PATCH 3/9] Split up test case (#33142) --- .../DeleteLifecycleRequestTests.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java index a89329fe1f5c2..e657dd3153785 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java @@ -28,16 +28,17 @@ private DeleteLifecycleRequest createTestInstance() { } public void testValidate() { - if (frequently()) { - DeleteLifecycleRequest req = createTestInstance(); - assertTrue(req == null || req.validate().validationErrors().size() == 0); - } else { - try { - DeleteLifecycleRequest req = new DeleteLifecycleRequest(null); - fail("should not be able to create a DeleteLifecycleRequest with null lifecycle name"); - } catch (NullPointerException exception) { - // ok - } + DeleteLifecycleRequest req = createTestInstance(); + assertTrue(req.validate() == null || req.validate().validationErrors().size() == 0); + + } + + public void testValidationFailure() { + try { + DeleteLifecycleRequest req = new DeleteLifecycleRequest(null); + fail("should not be able to create a DeleteLifecycleRequest with null lifecycle name"); + } catch (NullPointerException exception) { + // ok } } } From 3f02774d78b5f07f11c3059d04aa58b5bd3ddc12 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Mon, 27 Aug 2018 11:52:17 -0600 Subject: [PATCH 4/9] Stronger validation for Delete request --- .../client/indexlifecycle/DeleteLifecycleRequest.java | 6 +++++- .../client/indexlifecycle/DeleteLifecycleRequestTests.java | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java index 945b23027b081..9b48f3e612c24 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java @@ -20,6 +20,7 @@ package org.elasticsearch.client.indexlifecycle; import org.elasticsearch.client.MasterTimeoutRequest; +import org.elasticsearch.common.Strings; import java.util.Objects; @@ -28,7 +29,10 @@ public class DeleteLifecycleRequest extends MasterTimeoutRequest Date: Mon, 27 Aug 2018 12:13:11 -0600 Subject: [PATCH 5/9] Rename delete request class Based on feedback in #33142 --- .../elasticsearch/client/IndexLifecycleClient.java | 8 ++++---- .../org/elasticsearch/client/RequestConverters.java | 8 ++++---- ...equest.java => DeleteLifecyclePolicyRequest.java} | 6 +++--- .../org/elasticsearch/client/IndexLifecycleIT.java | 4 ++-- .../elasticsearch/client/RequestConvertersTests.java | 4 ++-- ...s.java => DeleteLifecyclePolicyRequestTests.java} | 12 ++++++------ 6 files changed, 21 insertions(+), 21 deletions(-) rename client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/{DeleteLifecycleRequest.java => DeleteLifecyclePolicyRequest.java} (87%) rename client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/{DeleteLifecycleRequestTests.java => DeleteLifecyclePolicyRequestTests.java} (74%) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java index 7cc0a7e41e340..d9bd057133ef0 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java @@ -21,7 +21,7 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.support.master.AcknowledgedResponse; -import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; +import org.elasticsearch.client.indexlifecycle.DeleteLifecyclePolicyRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleResponse; import org.elasticsearch.protocol.xpack.indexlifecycle.SetIndexLifecyclePolicyRequest; @@ -49,7 +49,7 @@ public class IndexLifecycleClient { * @return the response * @throws IOException in case there is a problem sending the request or parsing back the response */ - public AcknowledgedResponse deleteLifecycle(DeleteLifecycleRequest request, + public AcknowledgedResponse deleteLifecycle(DeleteLifecyclePolicyRequest request, RequestOptions options) throws IOException { return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::deleteLifecycle, options, AcknowledgedResponse::fromXContent, emptySet()); @@ -63,8 +63,8 @@ public AcknowledgedResponse deleteLifecycle(DeleteLifecycleRequest request, * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized * @param listener the listener to be notified upon request completion */ - public void deleteLifecycleAsync(DeleteLifecycleRequest request, RequestOptions options, - ActionListener listener) { + public void deleteLifecycleAsync(DeleteLifecyclePolicyRequest request, RequestOptions options, + ActionListener listener) { restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::deleteLifecycle, options, AcknowledgedResponse::fromXContent, listener, emptySet()); } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java index 55738bead31c3..943efa5ea3f87 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java @@ -88,6 +88,7 @@ import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.action.support.WriteRequest; import org.elasticsearch.action.update.UpdateRequest; +import org.elasticsearch.client.indexlifecycle.DeleteLifecyclePolicyRequest; import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Priority; @@ -108,7 +109,6 @@ import org.elasticsearch.index.rankeval.RankEvalRequest; import org.elasticsearch.protocol.xpack.XPackInfoRequest; import org.elasticsearch.protocol.xpack.XPackUsageRequest; -import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.license.DeleteLicenseRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.SetIndexLifecyclePolicyRequest; @@ -1175,14 +1175,14 @@ static Request xpackUsage(XPackUsageRequest usageRequest) { return request; } - static Request deleteLifecycle(DeleteLifecycleRequest deleteLifecycleRequest) { + static Request deleteLifecycle(DeleteLifecyclePolicyRequest deleteLifecyclePolicyRequest) { Request request = new Request(HttpDelete.METHOD_NAME, new EndpointBuilder() .addPathPartAsIs("_ilm") - .addPathPartAsIs(deleteLifecycleRequest.getLifecycle()) + .addPathPartAsIs(deleteLifecyclePolicyRequest.getLifecycle()) .build()); Params params = new Params(request); - params.withMasterTimeout(deleteLifecycleRequest.masterNodeTimeout()); + params.withMasterTimeout(deleteLifecyclePolicyRequest.masterNodeTimeout()); return request; } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java similarity index 87% rename from client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java rename to client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java index 9b48f3e612c24..3e32635e3d27b 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequest.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java @@ -24,11 +24,11 @@ import java.util.Objects; -public class DeleteLifecycleRequest extends MasterTimeoutRequest { +public class DeleteLifecyclePolicyRequest extends MasterTimeoutRequest { private final String lifecycle; - public DeleteLifecycleRequest(String lifecycle) { + public DeleteLifecyclePolicyRequest(String lifecycle) { if (Strings.isNullOrEmpty(lifecycle)) { throw new IllegalArgumentException("lifecycle name must be present"); } @@ -48,7 +48,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - DeleteLifecycleRequest that = (DeleteLifecycleRequest) o; + DeleteLifecyclePolicyRequest that = (DeleteLifecyclePolicyRequest) o; return Objects.equals(getLifecycle(), that.getLifecycle()); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java index 3b723f3d4dbf8..fc114fcade504 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java @@ -26,8 +26,8 @@ import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest; import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse; import org.elasticsearch.action.support.master.AcknowledgedResponse; +import org.elasticsearch.client.indexlifecycle.DeleteLifecyclePolicyRequest; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleResponse; import org.elasticsearch.protocol.xpack.indexlifecycle.IndexLifecycleExplainResponse; @@ -342,7 +342,7 @@ public void testDeleteLifecycle() throws IOException { request.setEntity(entity); client().performRequest(request); - DeleteLifecycleRequest deleteRequest = new DeleteLifecycleRequest(policy); + DeleteLifecyclePolicyRequest deleteRequest = new DeleteLifecyclePolicyRequest(policy); assertAcked(execute(deleteRequest, highLevelClient().indexLifecycle()::deleteLifecycle, highLevelClient().indexLifecycle()::deleteLifecycleAsync)); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index ce0dc85db6ce9..0a3a16a47d2bf 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -97,6 +97,7 @@ import org.elasticsearch.action.support.replication.ReplicationRequest; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.RequestConverters.EndpointBuilder; +import org.elasticsearch.client.indexlifecycle.DeleteLifecyclePolicyRequest; import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.CheckedFunction; @@ -127,7 +128,6 @@ import org.elasticsearch.index.rankeval.RatedRequest; import org.elasticsearch.index.rankeval.RestRankEvalAction; import org.elasticsearch.protocol.xpack.XPackInfoRequest; -import org.elasticsearch.client.indexlifecycle.DeleteLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.ExplainLifecycleRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.SetIndexLifecyclePolicyRequest; import org.elasticsearch.protocol.xpack.indexlifecycle.StartILMRequest; @@ -2638,7 +2638,7 @@ public void testGraphExplore() throws Exception { public void testDeleteLifecycle() { String lifecycleName = randomAlphaOfLengthBetween(2,20); - DeleteLifecycleRequest req = new DeleteLifecycleRequest(lifecycleName); + DeleteLifecyclePolicyRequest req = new DeleteLifecyclePolicyRequest(lifecycleName); Map expectedParams = new HashMap<>(); setRandomMasterTimeout(req, expectedParams); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java similarity index 74% rename from client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java rename to client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java index 0e2eed567a100..19efb6fa9a652 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecycleRequestTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java @@ -21,22 +21,22 @@ import org.elasticsearch.test.ESTestCase; -public class DeleteLifecycleRequestTests extends ESTestCase { +public class DeleteLifecyclePolicyRequestTests extends ESTestCase { - private DeleteLifecycleRequest createTestInstance() { - return new DeleteLifecycleRequest(randomAlphaOfLengthBetween(2, 20)); + private DeleteLifecyclePolicyRequest createTestInstance() { + return new DeleteLifecyclePolicyRequest(randomAlphaOfLengthBetween(2, 20)); } public void testValidate() { - DeleteLifecycleRequest req = createTestInstance(); + DeleteLifecyclePolicyRequest req = createTestInstance(); assertTrue(req.validate() == null || req.validate().validationErrors().size() == 0); } public void testValidationFailure() { try { - DeleteLifecycleRequest req = new DeleteLifecycleRequest(randomFrom("", null)); - fail("should not be able to create a DeleteLifecycleRequest with null lifecycle name"); + DeleteLifecyclePolicyRequest req = new DeleteLifecyclePolicyRequest(randomFrom("", null)); + fail("should not be able to create a DeleteLifecyclePolicyRequest with null lifecycle name"); } catch (IllegalArgumentException exception) { // ok } From 24c2f6af48f9add3e7b463de6fa3d9f150264420 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Tue, 28 Aug 2018 11:01:03 -0600 Subject: [PATCH 6/9] Rename ILM client methods to match class name --- .../org/elasticsearch/client/IndexLifecycleClient.java | 8 ++++---- .../java/org/elasticsearch/client/IndexLifecycleIT.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java index d9bd057133ef0..4aee6853d1066 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java @@ -49,8 +49,8 @@ public class IndexLifecycleClient { * @return the response * @throws IOException in case there is a problem sending the request or parsing back the response */ - public AcknowledgedResponse deleteLifecycle(DeleteLifecyclePolicyRequest request, - RequestOptions options) throws IOException { + public AcknowledgedResponse deleteLifecyclePolicy(DeleteLifecyclePolicyRequest request, + RequestOptions options) throws IOException { return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::deleteLifecycle, options, AcknowledgedResponse::fromXContent, emptySet()); } @@ -63,8 +63,8 @@ public AcknowledgedResponse deleteLifecycle(DeleteLifecyclePolicyRequest request * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized * @param listener the listener to be notified upon request completion */ - public void deleteLifecycleAsync(DeleteLifecyclePolicyRequest request, RequestOptions options, - ActionListener listener) { + public void deleteLifecyclePolicyAsync(DeleteLifecyclePolicyRequest request, RequestOptions options, + ActionListener listener) { restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::deleteLifecycle, options, AcknowledgedResponse::fromXContent, listener, emptySet()); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java index fc114fcade504..c2ce908efe3e3 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/IndexLifecycleIT.java @@ -343,8 +343,8 @@ public void testDeleteLifecycle() throws IOException { client().performRequest(request); DeleteLifecyclePolicyRequest deleteRequest = new DeleteLifecyclePolicyRequest(policy); - assertAcked(execute(deleteRequest, highLevelClient().indexLifecycle()::deleteLifecycle, - highLevelClient().indexLifecycle()::deleteLifecycleAsync)); + assertAcked(execute(deleteRequest, highLevelClient().indexLifecycle()::deleteLifecyclePolicy, + highLevelClient().indexLifecycle()::deleteLifecyclePolicyAsync)); // TODO: NORELEASE convert this to using the high level client once there are APIs for it Request getLifecycle = new Request("GET", "/_ilm/" + policy); From 5f8e8d076490825f3d631d1e751afc063d72a7a5 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Tue, 28 Aug 2018 11:26:24 -0600 Subject: [PATCH 7/9] Make test utility more flexible --- .../org/elasticsearch/client/RequestConvertersTests.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index 0a3a16a47d2bf..00c4c86e5143c 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -2640,7 +2640,7 @@ public void testDeleteLifecycle() { String lifecycleName = randomAlphaOfLengthBetween(2,20); DeleteLifecyclePolicyRequest req = new DeleteLifecyclePolicyRequest(lifecycleName); Map expectedParams = new HashMap<>(); - setRandomMasterTimeout(req, expectedParams); + setRandomMasterTimeout(req::masterNodeTimeout, MasterTimeoutRequest.DEFAULT_MASTER_NODE_TIMEOUT, expectedParams); Request request = RequestConverters.deleteLifecycle(req); assertEquals(request.getMethod(), HttpDelete.METHOD_NAME); @@ -2852,13 +2852,13 @@ private static void setRandomMasterTimeout(MasterNodeRequest request, Map request, Map expectedParams) { + private static void setRandomMasterTimeout(Consumer setter, TimeValue defaultTimeout, Map expectedParams) { if (randomBoolean()) { String masterTimeout = randomTimeValue(); - request.masterNodeTimeout(masterTimeout); + setter.accept(masterTimeout); expectedParams.put("master_timeout", masterTimeout); } else { - expectedParams.put("master_timeout", MasterNodeRequest.DEFAULT_MASTER_NODE_TIMEOUT.getStringRep()); + expectedParams.put("master_timeout", defaultTimeout.getStringRep()); } } From b65b83b02139681cc540a014eb49c0af214c4043 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Wed, 29 Aug 2018 10:27:05 -0600 Subject: [PATCH 8/9] Change `lifecycle` to `lifecyclePolicy` Per review comments in #33142 --- .../client/IndexLifecycleClient.java | 4 ++-- .../elasticsearch/client/RequestConverters.java | 4 ++-- .../DeleteLifecyclePolicyRequest.java | 16 ++++++++-------- .../client/RequestConvertersTests.java | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java index 4aee6853d1066..78816a4f78703 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleClient.java @@ -51,7 +51,7 @@ public class IndexLifecycleClient { */ public AcknowledgedResponse deleteLifecyclePolicy(DeleteLifecyclePolicyRequest request, RequestOptions options) throws IOException { - return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::deleteLifecycle, options, + return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::deleteLifecyclePolicy, options, AcknowledgedResponse::fromXContent, emptySet()); } @@ -65,7 +65,7 @@ public AcknowledgedResponse deleteLifecyclePolicy(DeleteLifecyclePolicyRequest r */ public void deleteLifecyclePolicyAsync(DeleteLifecyclePolicyRequest request, RequestOptions options, ActionListener listener) { - restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::deleteLifecycle, options, + restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::deleteLifecyclePolicy, options, AcknowledgedResponse::fromXContent, listener, emptySet()); } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java index d12b08e1e4efb..4fb4edcf1afdc 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java @@ -1191,11 +1191,11 @@ static Request xpackUsage(XPackUsageRequest usageRequest) { return request; } - static Request deleteLifecycle(DeleteLifecyclePolicyRequest deleteLifecyclePolicyRequest) { + static Request deleteLifecyclePolicy(DeleteLifecyclePolicyRequest deleteLifecyclePolicyRequest) { Request request = new Request(HttpDelete.METHOD_NAME, new EndpointBuilder() .addPathPartAsIs("_ilm") - .addPathPartAsIs(deleteLifecyclePolicyRequest.getLifecycle()) + .addPathPartAsIs(deleteLifecyclePolicyRequest.getLifecyclePolicy()) .build()); Params params = new Params(request); params.withMasterTimeout(deleteLifecyclePolicyRequest.masterNodeTimeout()); diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java index 0f5ed4f1cda3b..fc029f37ac928 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequest.java @@ -26,17 +26,17 @@ public class DeleteLifecyclePolicyRequest extends TimedRequest { - private final String lifecycle; + private final String lifecyclePolicy; - public DeleteLifecyclePolicyRequest(String lifecycle) { - if (Strings.isNullOrEmpty(lifecycle)) { + public DeleteLifecyclePolicyRequest(String lifecyclePolicy) { + if (Strings.isNullOrEmpty(lifecyclePolicy)) { throw new IllegalArgumentException("lifecycle name must be present"); } - this.lifecycle = lifecycle; + this.lifecyclePolicy = lifecyclePolicy; } - public String getLifecycle() { - return lifecycle; + public String getLifecyclePolicy() { + return lifecyclePolicy; } @@ -49,11 +49,11 @@ public boolean equals(Object o) { return false; } DeleteLifecyclePolicyRequest that = (DeleteLifecyclePolicyRequest) o; - return Objects.equals(getLifecycle(), that.getLifecycle()); + return Objects.equals(getLifecyclePolicy(), that.getLifecyclePolicy()); } @Override public int hashCode() { - return Objects.hash(getLifecycle()); + return Objects.hash(getLifecyclePolicy()); } } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index a6f61cf89df6b..13de640a91fe8 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -2706,7 +2706,7 @@ public void testDeleteLifecycle() { setRandomMasterTimeout(req::setMasterTimeout, TimedRequest.DEFAULT_TIMEOUT, expectedParams); setRandomTimeoutTimeValue(req::setTimeout, TimedRequest.DEFAULT_MASTER_TIMEOUT, expectedParams); - Request request = RequestConverters.deleteLifecycle(req); + Request request = RequestConverters.deleteLifecyclePolicy(req); assertEquals(request.getMethod(), HttpDelete.METHOD_NAME); assertEquals(request.getEndpoint(), "/_ilm/" + lifecycleName); assertEquals(request.getParameters(), expectedParams); From 95dce789a9d0eac34501e1686f6f7eef2228cd33 Mon Sep 17 00:00:00 2001 From: Gordon Brown Date: Wed, 29 Aug 2018 10:37:36 -0600 Subject: [PATCH 9/9] Simplify validation test --- .../indexlifecycle/DeleteLifecyclePolicyRequestTests.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java index bcf2393ac517b..01f6288d81d4b 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/indexlifecycle/DeleteLifecyclePolicyRequestTests.java @@ -34,11 +34,6 @@ public void testValidate() { } public void testValidationFailure() { - try { - DeleteLifecyclePolicyRequest req = new DeleteLifecyclePolicyRequest(randomFrom("", null)); - fail("should not be able to create a DeleteLifecyclePolicyRequest with null lifecycle name"); - } catch (IllegalArgumentException exception) { - // ok - } + expectThrows(IllegalArgumentException.class, () -> new DeleteLifecyclePolicyRequest(randomFrom("", null))); } }