elastic icon indicating copy to clipboard operation
elastic copied to clipboard

ElasticsearchEnrichClient does not return taskId when waitForCompletion is set to false.

Open swatisuman1990 opened this issue 9 months ago • 0 comments

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);

        }
    }

swatisuman1990 avatar Jan 20 '25 14:01 swatisuman1990