elastic
elastic copied to clipboard
ElasticsearchEnrichClient does not return taskId when waitForCompletion is set to false.
Below are the libraries I am using. implementation group: 'org.springframework.data', name: 'spring-data-elasticsearch', version: '5.1.12' implementation group: 'org.elasticsearch.client', name: 'elasticsearch-rest-client', version: '8.6.2'
Below is my code snippet.
private void executeEnrichPolicy(ElasticsearchEnrichClient enrichClient, String policyName) throws IOException {
log.info("executing:{}", policyName);
ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(true);
ExecutePolicyRequest executePolicyRequest = ExecutePolicyRequest.of(e -> e.name(policyName).
waitForCompletion(false));
final ExecutePolicyResponse executePolicyResponse = enrichClient.executePolicy(executePolicyRequest);
String taskId = executePolicyResponse.taskId();
pollForTaskCompletion(taskId);
ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(false);
log.info("policy executed:{}", executePolicyResponse.status().toString());
}
@SneakyThrows
private void pollForTaskCompletion(String taskId) {
ElasticsearchTasksClient tasksClient = restHighLevelClient.tasks();
while (true) {
GetTasksRequest getTasksRequest = GetTasksRequest.of(builder -> builder.taskId(taskId));
GetTasksResponse getTasksResponse = tasksClient.get(getTasksRequest);
if (getTasksResponse.task() == null) {
log.info("Task completed: {}", taskId);
break;
} else {
log.info("Task {} is still running.", taskId);
}
Thread.sleep(60000);
}
}