|
5 | 5 | */
|
6 | 6 | package org.elasticsearch.xpack.enrich;
|
7 | 7 |
|
| 8 | +import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskAction; |
| 9 | +import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskRequest; |
| 10 | +import org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskResponse; |
8 | 11 | import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
|
9 | 12 | import org.elasticsearch.action.bulk.BulkItemResponse;
|
10 | 13 | import org.elasticsearch.action.bulk.BulkRequest;
|
|
23 | 26 | import org.elasticsearch.xpack.core.enrich.EnrichPolicy;
|
24 | 27 | import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction;
|
25 | 28 | import org.elasticsearch.xpack.core.enrich.action.ExecuteEnrichPolicyAction;
|
| 29 | +import org.elasticsearch.xpack.core.enrich.action.ExecuteEnrichPolicyStatus; |
26 | 30 | import org.elasticsearch.xpack.core.enrich.action.PutEnrichPolicyAction;
|
27 | 31 |
|
28 | 32 | import java.util.Collection;
|
|
37 | 41 | import static org.hamcrest.Matchers.equalTo;
|
38 | 42 | import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
39 | 43 | import static org.hamcrest.Matchers.is;
|
| 44 | +import static org.hamcrest.Matchers.not; |
40 | 45 | import static org.hamcrest.Matchers.notNullValue;
|
| 46 | +import static org.hamcrest.Matchers.nullValue; |
41 | 47 |
|
42 | 48 | public class BasicEnrichTests extends ESSingleNodeTestCase {
|
43 | 49 |
|
@@ -210,6 +216,60 @@ public void testMultiplePolicies() {
|
210 | 216 | }
|
211 | 217 | }
|
212 | 218 |
|
| 219 | + public void testAsyncTaskExecute() throws Exception { |
| 220 | + String policyName = "async-policy"; |
| 221 | + String sourceIndexName = "async-policy-source"; |
| 222 | + |
| 223 | + { |
| 224 | + IndexRequest indexRequest = new IndexRequest(sourceIndexName); |
| 225 | + indexRequest.source("key", "key", "value", "val1"); |
| 226 | + client().index(indexRequest).actionGet(); |
| 227 | + client().admin().indices().refresh(new RefreshRequest(sourceIndexName)).actionGet(); |
| 228 | + } |
| 229 | + |
| 230 | + EnrichPolicy enrichPolicy = |
| 231 | + new EnrichPolicy(EnrichPolicy.MATCH_TYPE, null, List.of(sourceIndexName), "key", List.of("value")); |
| 232 | + PutEnrichPolicyAction.Request request = new PutEnrichPolicyAction.Request(policyName, enrichPolicy); |
| 233 | + client().execute(PutEnrichPolicyAction.INSTANCE, request).actionGet(); |
| 234 | + ExecuteEnrichPolicyAction.Response executeResponse = client() |
| 235 | + .execute(ExecuteEnrichPolicyAction.INSTANCE, new ExecuteEnrichPolicyAction.Request(policyName).setWaitForCompletion(false)) |
| 236 | + .actionGet(); |
| 237 | + |
| 238 | + assertThat(executeResponse.getStatus(), is(nullValue())); |
| 239 | + assertThat(executeResponse.getTaskId(), is(not(nullValue()))); |
| 240 | + GetTaskRequest getPolicyTaskRequest = new GetTaskRequest().setTaskId(executeResponse.getTaskId()).setWaitForCompletion(true); |
| 241 | + assertBusy(() -> { |
| 242 | + GetTaskResponse taskResponse = client().execute(GetTaskAction.INSTANCE, getPolicyTaskRequest).actionGet(); |
| 243 | + assertThat(((ExecuteEnrichPolicyStatus) taskResponse.getTask().getTask().getStatus()).getPhase(), |
| 244 | + is(ExecuteEnrichPolicyStatus.PolicyPhases.COMPLETE)); |
| 245 | + }); |
| 246 | + |
| 247 | + String pipelineName = "test-pipeline"; |
| 248 | + String pipelineBody = "{\"processors\": [{\"enrich\": {\"policy_name\":\"" + policyName + |
| 249 | + "\", \"field\": \"key\", \"target_field\": \"target\"}}]}"; |
| 250 | + PutPipelineRequest putPipelineRequest = new PutPipelineRequest(pipelineName, new BytesArray(pipelineBody), XContentType.JSON); |
| 251 | + client().admin().cluster().putPipeline(putPipelineRequest).actionGet(); |
| 252 | + |
| 253 | + BulkRequest bulkRequest = new BulkRequest("my-index"); |
| 254 | + int numTestDocs = randomIntBetween(3, 10); |
| 255 | + for (int i = 0; i < numTestDocs; i++) { |
| 256 | + IndexRequest indexRequest = new IndexRequest("my-index"); |
| 257 | + indexRequest.id(Integer.toString(i)); |
| 258 | + indexRequest.setPipeline(pipelineName); |
| 259 | + indexRequest.source(Map.of("key", "key")); |
| 260 | + bulkRequest.add(indexRequest); |
| 261 | + } |
| 262 | + BulkResponse bulkResponse = client().bulk(bulkRequest).actionGet(); |
| 263 | + assertThat("Expected no failure, but " + bulkResponse.buildFailureMessage(), bulkResponse.hasFailures(), is(false)); |
| 264 | + |
| 265 | + for (int i = 0; i < numTestDocs; i++) { |
| 266 | + GetResponse getResponse = client().get(new GetRequest("my-index", Integer.toString(i))).actionGet(); |
| 267 | + Map<String, Object> source = getResponse.getSourceAsMap(); |
| 268 | + assertThat(source.size(), equalTo(2)); |
| 269 | + assertThat(source.get("target"), equalTo(List.of(Map.of("key", "key", "value", "val1")))); |
| 270 | + } |
| 271 | + } |
| 272 | + |
213 | 273 | private List<String> createSourceMatchIndex(int numKeys, int numDocsPerKey) {
|
214 | 274 | Set<String> keys = new HashSet<>();
|
215 | 275 | for (int id = 0; id < numKeys; id++) {
|
|
0 commit comments