# afterBulk() метод

**URL:** <https://discuss.elastic.co/t/afterbulk/80466>\
**Category:** Вопросы на русском языке\
**Created:** [March 29, 2017, 11:12am UTC](https://discuss.elastic.co/t/afterbulk/80466 "2017-03-29T11:12:47Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Katja](https://avatars.discourse-cdn.com/v4/letter/k/0ea827/32.png) [@Katja](https://discuss.elastic.co/u/Katja)\
**Post date:** [March 29, 2017, 11:12am UTC](https://discuss.elastic.co/t/afterbulk/80466/1 "2017-03-29T11:12:47Z")

</div>

Здравствуйте, подскажите, пожалуйста, с таким вопросом. Я индексирую документы с помощью BulkProcessor. У меня такой user case:

"An application has critical data and might decide to stop passing requests to bulk processor until the Elasticsearch cluster is up again."

Я нашла, что можно добавить в afterBulk() метод request.waitForActiveShards(). Но я неуверенна, достаточно ли этого. Спасибо и мой метод:

@Override  
public void afterBulk(long executionId,  
BulkRequest request,  
Throwable failure) {  
logger.warn("There is a problem with the burk request", failure);  
request.waitForActiveShards();  
}

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [March 29, 2017, 1:36pm UTC](https://discuss.elastic.co/t/afterbulk/80466/2 "2017-03-29T13:36:01Z")

</div>

I moved your question

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 29, 2017, 1:56pm UTC](https://discuss.elastic.co/t/afterbulk/80466/3 "2017-03-29T13:56:37Z")

</div>

> [@Katja](#):
>
> Я нашла, что можно добавить в afterBurk() метод request.waitForActiveShards().

Где вы это нашли?

---

<div class="post-metadata">

**Author:** ![Katja](https://avatars.discourse-cdn.com/v4/letter/k/0ea827/32.png) [@Katja](https://discuss.elastic.co/u/Katja)\
**Post date:** [March 29, 2017, 2:49pm UTC](https://discuss.elastic.co/t/afterbulk/80466/4 "2017-03-29T14:49:35Z")

</div>

В методах, которые можно вызывать на объекте request. Теперь понимаю, что это неправильно. Остановилась на следующем, что в методе afterBulk() добавляю request: bulkProcessor.add(request). А потом уже в своей программе жду долго, а потом закрываю bulkProcessor. Но как остановить добавление документов в bulkProcessor не знаю, если в предыдущем bulk возникает ошибка.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 29, 2017, 5:12pm UTC](https://discuss.elastic.co/t/afterbulk/80466/5 "2017-03-29T17:12:53Z")

</div>

Ну так вопрос в том, от чего возникла эта ошибка. Если она произошла потому, что сервер перегружен, то BulkProcessor эти ошибки перехватывает и реагирует в соответствии с BackoffPolicy. Если индекс не доступен, то запрос на индексирование будет ждать пока праймари не появится или свалиться по [таймауту](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/docs-index_.html#timeout). Во всех остальных, ошибка скорее всего возникла из-за того, что проблема с самой записью. То есть добавляет ее снова и снова не имеет смысла.

---

<div class="post-metadata">

**Author:** ![Katja](https://avatars.discourse-cdn.com/v4/letter/k/0ea827/32.png) [@Katja](https://discuss.elastic.co/u/Katja)\
**Post date:** [March 30, 2017, 7:31am UTC](https://discuss.elastic.co/t/afterbulk/80466/6 "2017-03-30T07:31:27Z")

</div>

> [@Igor\_Motov](#):
>
> То есть добавляет ее снова и снова не имеет смысла.

Спасибо. По-моему ошибка возникла из-за java.lang.OutOfMemoryError: Java heap space. Поэтому индекс был недоступен. Попробую дать es больше памяти. Я правильно поняла, что я в afterBurk() могу поймать ошибки. А "to stop passing requests to bulk processor until the Elasticsearch cluster is up again" не получится.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 30, 2017, 12:42pm UTC](https://discuss.elastic.co/t/afterbulk/80466/7 "2017-03-30T12:42:22Z")

</div>

Теоретически, можно запрашивать state индекса время от времени и перестать добавлять новые записи в BulkProcessor до тех пор, пока индекс не позеленеет. Вопрос в том, где эти записи в это время держать? Если у вас есть очередь какая-нибудь перед elasticsearch, то можно держать из в это очереди, туда же можно добавить записи из afterBulk, если вы уверены, что имеет смысл их еще раз попытаться проиндексировать.

---

<div class="post-metadata">

**Author:** ![Katja](https://avatars.discourse-cdn.com/v4/letter/k/0ea827/32.png) [@Katja](https://discuss.elastic.co/u/Katja)\
**Post date:** [March 31, 2017, 1:35pm UTC](https://discuss.elastic.co/t/afterbulk/80466/8 "2017-03-31T13:35:08Z")

</div>

Спасибо.

---

<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:** [April 28, 2017, 1:35pm UTC](https://discuss.elastic.co/t/afterbulk/80466/9 "2017-04-28T13:35:24Z")

</div>

Closed on April 28, 2017, 1:35pm UTC

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