From eef51cf1717964fd00bccc7a2426d32ccfe47961 Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Thu, 22 Aug 2019 14:10:43 +0200 Subject: [PATCH 1/3] Added HLRC support for enrich delete policy API. This PR also adds HLRC docs. Relates to #32789 --- .../elasticsearch/client/EnrichClient.java | 49 ++++++++++++++++- .../client/EnrichRequestConverters.java | 10 ++++ .../client/enrich/DeletePolicyRequest.java | 38 +++++++++++++ .../org/elasticsearch/client/EnrichIT.java | 26 ++++++--- .../client/EnrichRequestConvertersTests.java | 14 +++++ .../documentation/EnrichDocumentationIT.java | 54 +++++++++++++++++++ .../high-level/enrich/delete_policy.asciidoc | 31 +++++++++++ .../high-level/supported-apis.asciidoc | 2 + 8 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 client/rest-high-level/src/main/java/org/elasticsearch/client/enrich/DeletePolicyRequest.java create mode 100644 docs/java-rest/high-level/enrich/delete_policy.asciidoc diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichClient.java index b70b7edb05d31..d7e7199f7cc71 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichClient.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichClient.java @@ -20,6 +20,7 @@ import org.elasticsearch.action.ActionListener; import org.elasticsearch.client.core.AcknowledgedResponse; +import org.elasticsearch.client.enrich.DeletePolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequest; import java.io.IOException; @@ -43,7 +44,7 @@ public final class EnrichClient { /** * Executes the put policy api, which stores an enrich policy. * - * See + * See * the docs for more. * * @param request the {@link PutPolicyRequest} @@ -64,7 +65,7 @@ public AcknowledgedResponse putPolicy(PutPolicyRequest request, RequestOptions o /** * Asynchronously executes the put policy api, which stores an enrich policy. * - * See + * See * the docs for more. * * @param request the {@link PutPolicyRequest} @@ -83,4 +84,48 @@ public void putPolicyAsync(PutPolicyRequest request, Collections.emptySet() ); } + + /** + * Executes the delete policy api, which deletes an enrich policy. + * + * See + * the docs for more. + * + * @param request the {@link DeletePolicyRequest} + * @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 deletePolicy(DeletePolicyRequest request, RequestOptions options) throws IOException { + return restHighLevelClient.performRequestAndParseEntity( + request, + EnrichRequestConverters::deletePolicy, + options, + AcknowledgedResponse::fromXContent, + Collections.emptySet() + ); + } + + /** + * Asynchronously executes the delete policy api, which deletes an enrich policy. + * + * See + * the docs for more. + * + * @param request the {@link DeletePolicyRequest} + * @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 deletePolicyAsync(DeletePolicyRequest request, + RequestOptions options, + ActionListener listener) { + restHighLevelClient.performRequestAsyncAndParseEntity( + request, + EnrichRequestConverters::deletePolicy, + options, + AcknowledgedResponse::fromXContent, + listener, + Collections.emptySet() + ); + } } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichRequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichRequestConverters.java index c1e9c57078ef5..6cce24cde784f 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichRequestConverters.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/EnrichRequestConverters.java @@ -18,7 +18,9 @@ */ package org.elasticsearch.client; +import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPut; +import org.elasticsearch.client.enrich.DeletePolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequest; import java.io.IOException; @@ -38,4 +40,12 @@ static Request putPolicy(PutPolicyRequest putPolicyRequest) throws IOException { return request; } + static Request deletePolicy(DeletePolicyRequest deletePolicyRequest) { + String endpoint = new RequestConverters.EndpointBuilder() + .addPathPartAsIs("_enrich", "policy") + .addPathPart(deletePolicyRequest.getName()) + .build(); + return new Request(HttpDelete.METHOD_NAME, endpoint); + } + } diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/enrich/DeletePolicyRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/enrich/DeletePolicyRequest.java new file mode 100644 index 0000000000000..c6214d3f130e1 --- /dev/null +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/enrich/DeletePolicyRequest.java @@ -0,0 +1,38 @@ +/* + * 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.enrich; + +import org.elasticsearch.client.Validatable; +import org.elasticsearch.common.Strings; + +public class DeletePolicyRequest implements Validatable { + + private final String name; + + public DeletePolicyRequest(String name) { + if (Strings.hasLength(name) == false) { + throw new IllegalArgumentException("name must be a non-null and non-empty string"); + } + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichIT.java index 8de9d1b0835ab..1dcc9b2b70a54 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichIT.java @@ -20,6 +20,7 @@ import org.apache.http.util.EntityUtils; import org.elasticsearch.client.core.AcknowledgedResponse; +import org.elasticsearch.client.enrich.DeletePolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequest; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.json.JsonXContent; @@ -45,13 +46,26 @@ public void testCRUD() throws Exception { Response getPolicyResponse = highLevelClient().getLowLevelClient().performRequest(getPolicyRequest); assertThat(getPolicyResponse.getHttpResponse().getStatusLine().getStatusCode(), equalTo(200)); Map responseBody = toMap(getPolicyResponse); - @SuppressWarnings("unchecked") - List> responsePolicies = (List>) responseBody.get("policies"); + List responsePolicies = (List) responseBody.get("policies"); assertThat(responsePolicies.size(), equalTo(1)); - assertThat(responsePolicies.get(0).get("type"), equalTo(putPolicyRequest.getType())); - assertThat(responsePolicies.get(0).get("indices"), equalTo(putPolicyRequest.getIndices())); - assertThat(responsePolicies.get(0).get("match_field"), equalTo(putPolicyRequest.getMatchField())); - assertThat(responsePolicies.get(0).get("enrich_fields"), equalTo(putPolicyRequest.getEnrichFields())); + Map responsePolicy = (Map) responsePolicies.get(0); + assertThat(responsePolicy.get("type"), equalTo(putPolicyRequest.getType())); + assertThat(responsePolicy.get("indices"), equalTo(putPolicyRequest.getIndices())); + assertThat(responsePolicy.get("match_field"), equalTo(putPolicyRequest.getMatchField())); + assertThat(responsePolicy.get("enrich_fields"), equalTo(putPolicyRequest.getEnrichFields())); + + DeletePolicyRequest deletePolicyRequest = new DeletePolicyRequest("my-policy"); + AcknowledgedResponse deletePolicyResponse = + execute(deletePolicyRequest, enrichClient::deletePolicy, enrichClient::deletePolicyAsync); + assertThat(deletePolicyResponse.isAcknowledged(), is(true)); + + // TODO: Replace with get policy hlrc code: + getPolicyRequest = new Request("get", "/_enrich/policy"); + getPolicyResponse = highLevelClient().getLowLevelClient().performRequest(getPolicyRequest); + assertThat(getPolicyResponse.getHttpResponse().getStatusLine().getStatusCode(), equalTo(200)); + responseBody = toMap(getPolicyResponse); + responsePolicies = (List) responseBody.get("policies"); + assertThat(responsePolicies.size(), equalTo(0)); } private static Map toMap(Response response) throws IOException { diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichRequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichRequestConvertersTests.java index 61d8c217d6fdb..2506c22e5da4c 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichRequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/EnrichRequestConvertersTests.java @@ -18,12 +18,15 @@ */ package org.elasticsearch.client; +import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPut; +import org.elasticsearch.client.enrich.DeletePolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequestTests; import org.elasticsearch.test.ESTestCase; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.nullValue; public class EnrichRequestConvertersTests extends ESTestCase { @@ -33,7 +36,18 @@ public void testPutPolicy() throws Exception { assertThat(result.getMethod(), equalTo(HttpPut.METHOD_NAME)); assertThat(result.getEndpoint(), equalTo("/_enrich/policy/" + request.getName())); + assertThat(result.getParameters().size(), equalTo(0)); RequestConvertersTests.assertToXContentBody(request, result.getEntity()); } + public void testDeletePolicy() throws Exception { + DeletePolicyRequest request = new DeletePolicyRequest(randomAlphaOfLength(4)); + Request result = EnrichRequestConverters.deletePolicy(request); + + assertThat(result.getMethod(), equalTo(HttpDelete.METHOD_NAME)); + assertThat(result.getEndpoint(), equalTo("/_enrich/policy/" + request.getName())); + assertThat(result.getParameters().size(), equalTo(0)); + assertThat(result.getEntity(), nullValue()); + } + } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java index 735dc6f85cd65..06c4715862be7 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java @@ -24,6 +24,7 @@ import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.core.AcknowledgedResponse; +import org.elasticsearch.client.enrich.DeletePolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequest; import java.util.List; @@ -77,4 +78,57 @@ public void onFailure(Exception e) { assertTrue(latch.await(30L, TimeUnit.SECONDS)); } + public void testDeletePolicy() throws Exception { + RestHighLevelClient client = highLevelClient(); + + { + // Add a policy, so that it can be deleted: + PutPolicyRequest putPolicyRequest = new PutPolicyRequest( + "users-policy", "exact_match", List.of("users"), + "email", List.of("address", "zip", "city", "state")); + client.enrich().putPolicy(putPolicyRequest, RequestOptions.DEFAULT); + } + + // tag::enrich-delete-policy-request + DeletePolicyRequest deletePolicyRequest = + new DeletePolicyRequest("users-policy"); + // end::enrich-delete-policy-request + + // tag::enrich-delete-policy-execute + AcknowledgedResponse deletePolicyResponse = client.enrich() + .deletePolicy(deletePolicyRequest, RequestOptions.DEFAULT); + // end::enrich-delete-policy-execute + + // tag::enrich-delete-policy-response + boolean isAcknowledged = + deletePolicyResponse.isAcknowledged(); // <1> + // end::enrich-delete-policy-response + + // tag::enrich-delete-policy-execute-listener + ActionListener listener = new ActionListener<>() { + @Override + public void onResponse(AcknowledgedResponse response) { // <1> + boolean isAcknowledged = + deletePolicyResponse.isAcknowledged(); + } + + @Override + public void onFailure(Exception e) { + // <2> + } + }; + // end::enrich-delete-policy-execute-listener + + // Replace the empty listener by a blocking listener in test + final CountDownLatch latch = new CountDownLatch(1); + listener = new LatchedActionListener<>(listener, latch); + + // tag::enrich-delete-policy-execute-async + client.enrich().deletePolicyAsync(deletePolicyRequest, + RequestOptions.DEFAULT, listener); // <1> + // end::enrich-delete-policy-execute-async + + assertTrue(latch.await(30L, TimeUnit.SECONDS)); + } + } diff --git a/docs/java-rest/high-level/enrich/delete_policy.asciidoc b/docs/java-rest/high-level/enrich/delete_policy.asciidoc new file mode 100644 index 0000000000000..9bee686cce028 --- /dev/null +++ b/docs/java-rest/high-level/enrich/delete_policy.asciidoc @@ -0,0 +1,31 @@ +-- +:api: enrich-delete-policy +:request: DeletePolicyRequest +:response: AcknowledgedResponse +-- + +[id="{upid}-{api}"] +=== Delete Policy API + +[id="{upid}-{api}-request"] +==== Request + +The Delete Policy API deletes an enrich policy from Elasticsearch. + +["source","java",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{doc-tests-file}[{api}-request] +-------------------------------------------------- + +[id="{upid}-{api}-response"] +==== Response + +The returned +{response}+ indicates if the delete policy request was acknowledged. + +["source","java",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{doc-tests-file}[{api}-response] +-------------------------------------------------- +<1> Whether delete policy request was acknowledged. + +include::../execution.asciidoc[] diff --git a/docs/java-rest/high-level/supported-apis.asciidoc b/docs/java-rest/high-level/supported-apis.asciidoc index 42e28dd4785a3..463a15c7b22b1 100644 --- a/docs/java-rest/high-level/supported-apis.asciidoc +++ b/docs/java-rest/high-level/supported-apis.asciidoc @@ -603,5 +603,7 @@ include::dataframe/stop_data_frame.asciidoc[] The Java High Level REST Client supports the following Enrich APIs: * <<{upid}-enrich-put-policy>> +* <<{upid}-enrich-delete-policy>> include::enrich/put_policy.asciidoc[] +include::enrich/delete_policy.asciidoc[] From 373b13e082d25ccf18ebef11aad292799eed7a9a Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Fri, 23 Aug 2019 11:27:53 +0200 Subject: [PATCH 2/3] fixed typo --- .../client/documentation/EnrichDocumentationIT.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java index 06c4715862be7..6ef049e2331a1 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java @@ -55,8 +55,7 @@ public void testPutPolicy() throws Exception { ActionListener listener = new ActionListener<>() { @Override public void onResponse(AcknowledgedResponse response) { // <1> - boolean isAcknowledged = - putPolicyResponse.isAcknowledged(); + boolean isAcknowledged = response.isAcknowledged(); } @Override @@ -108,8 +107,7 @@ public void testDeletePolicy() throws Exception { ActionListener listener = new ActionListener<>() { @Override public void onResponse(AcknowledgedResponse response) { // <1> - boolean isAcknowledged = - deletePolicyResponse.isAcknowledged(); + boolean isAcknowledged = response.isAcknowledged(); } @Override From 4405a01118ce9632bf9e1a283e28ababa6bd0376 Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Fri, 23 Aug 2019 13:42:44 +0200 Subject: [PATCH 3/3] cleanup policy after test --- .../client/documentation/EnrichDocumentationIT.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java index 6ef049e2331a1..536ad9ceb4e8b 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/EnrichDocumentationIT.java @@ -26,6 +26,7 @@ import org.elasticsearch.client.core.AcknowledgedResponse; import org.elasticsearch.client.enrich.DeletePolicyRequest; import org.elasticsearch.client.enrich.PutPolicyRequest; +import org.junit.After; import java.util.List; import java.util.concurrent.CountDownLatch; @@ -33,6 +34,17 @@ public class EnrichDocumentationIT extends ESRestHighLevelClientTestCase { + @After + public void cleanup() { + RestHighLevelClient client = highLevelClient(); + DeletePolicyRequest deletePolicyRequest = new DeletePolicyRequest("users-policy"); + try { + client.enrich().deletePolicy(deletePolicyRequest, RequestOptions.DEFAULT); + } catch (Exception e) { + // ignore... it is ok if policy has already been removed + } + } + public void testPutPolicy() throws Exception { RestHighLevelClient client = highLevelClient(); // tag::enrich-put-policy-request