elastic / elasticsearch-java

Official Elasticsearch Java Client
Apache License 2.0
14 stars 242 forks source link

BulkIngester retry policies #478

Open swallez opened 1 year ago

swallez commented 1 year ago

The BulkProcessor in the High Level Rest Client (HLRC) has two kinds of retries:

The new BulkIngester added in #474 doesn't retry for now:

A way to handle this in the new BulkIngester would be to define a retry policy by means of delay behavior (linear, exponential, etc) like in HLRC and also a predicate to select the failed items that need to be retried.

Medo42 commented 1 year ago

for the 429 handling, we can argue that this belongs to the transport layer (low level rest client), that already retries on all cluster nodes in case of failure and should also handle 429 responses.

I would just like to point out this issue where adding such behavior to the low level rest client was discussed: https://github.com/elastic/elasticsearch/issues/21141#issuecomment-256941807

I also think that is more of a feature for a high level client, rather than a low level one.

That is to say, please get some consensus on where this would belong, because right now it seems like every application developer has to roll their own solution.

marcreichman-pfi commented 11 months ago

@swallez Do you by chance have any update to this ticket? It's a year old, and retry policies would be a good idea. This work seems to be stalled.

Thanks for looking!

hesller commented 9 months ago

Hi @swallez, hope this message finds you well. did you get opportunity to look on this ticket? I am working on update from 7.17.X to the new elasticsearch-java 8.X. Retry policy is part of our application flow.

best regards

fabriziofortino commented 2 months ago

hi @swallez ,

I totally agree the BulkProcessor in HLRC was retrying even in cases this should not have done. On the other side, I think that retrying only on 429s can be not enough.

What would happen in cases when there is a temporary network issue? I guess the low level client would close the connection. Is there any way to configure the low level client to support custom policies in terms of retries?

cc @l-trotta