# BulkProcessor never executing AfterBulk

**URL:** <https://discuss.elastic.co/t/bulkprocessor-never-executing-afterbulk/194575>\
**Category:** Elasticsearch\
**Created:** [August 9, 2019, 9:06am UTC](https://discuss.elastic.co/t/bulkprocessor-never-executing-afterbulk/194575 "2019-08-09T09:06:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jozifo](https://avatars.discourse-cdn.com/v4/letter/j/b5e925/32.png) [@Jozifo](https://discuss.elastic.co/u/Jozifo)\
**Post date:** [August 9, 2019, 9:06am UTC](https://discuss.elastic.co/t/bulkprocessor-never-executing-afterbulk/194575/1 "2019-08-09T09:06:03Z")

</div>

Hello everyone,

I'm trying to insert data into ElasticSearch using RestHighLevelClient and BulkProcessor. The code I'm using for the BulkProcessor is the following.

```auto
    BulkProcessor getBulkProcessor(RestHighLevelClient restHighLevelClient) {
        BiConsumer<BulkRequest, ActionListener<BulkResponse>> consumer = (request, bulkListener) -> {
            try {
                restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
            } catch (IOException e) {
                final String message = "Failed to create BulkProcessor for ElasticSearch";
                throw new RuntimeException(message, e);
            }
        };

        return BulkProcessor.builder(consumer, getListener()).setConcurrentRequests(0).build();
    }

    BulkProcessor.Listener getListener() {
        return new BulkProcessor.Listener() {
            @Override
            public void beforeBulk(long executionId, BulkRequest request) {
                int numberOfActions = request.numberOfActions();
                System.out.println(String.format("Executing bulk %d with %d requests", executionId, numberOfActions));
            }

            @Override
            public void afterBulk(long executionId, BulkRequest request, BulkResponse bulkResponse) {
                if (bulkResponse.hasFailures()) {
                    for (BulkItemResponse bulkItemResponse : bulkResponse) {
                        if (bulkItemResponse.isFailed()) {
                            BulkItemResponse.Failure failure = bulkItemResponse.getFailure();
                            throw new RuntimeException(String.format("Adding document %s to ElasticSearch failed", failure.getId()),
                                                       failure.getCause());
                        }
                    }
                    System.out.println(String.format("Bulk %d executed with failures", executionId));
                } else {
                    System.out.println(String.format("Bulk %d completed in %d milliseconds", executionId, bulkResponse.getTook().getMillis()));
                }
            }

            @Override
            public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
                System.out.println(String.format("Failed to execute bulk %s", failure));
                throw new RuntimeException(failure);
            }
        };
    }

```

then

```auto
public static void main(String[] args) {
        BulkProcessor bulkProcessor = getBulkProcessor(/* pass RestHighLevelClient there */);
        DocWriteRequest docWriteRequest = /* logic to have a DocWriteRequest */;
        bulkProcessor.add(docWriteRequest);
        bulkProcessor.flush();
        bulkProcessor.close();
        return null;
}

```

My problem is the following :  
My ElasticSearch instance successfully add a new document. But my BulkProcessor doesn't seems to receive a response and AfterBulk is never executed (hence the program doesn't terminate because I add elements in a sync manner).

Does something seems to be wrong with what I'm doing or am I missing something ?

Thanks for you help !

---

<div class="post-metadata">

**Author:** ![Jozifo](https://avatars.discourse-cdn.com/v4/letter/j/b5e925/32.png) [@Jozifo](https://discuss.elastic.co/u/Jozifo)\
**Post date:** [August 9, 2019, 11:28am UTC](https://discuss.elastic.co/t/bulkprocessor-never-executing-afterbulk/194575/2 "2019-08-09T11:28:08Z")

</div>

Changing `bulk` to `bulkASync` in BiConsumer solved my problem.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 6, 2019, 11:41am UTC](https://discuss.elastic.co/t/bulkprocessor-never-executing-afterbulk/194575/3 "2019-09-06T11:41:34Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
