diff --git a/docs/changelog/154972.yaml b/docs/changelog/154972.yaml new file mode 100644 index 0000000000000..bccf36f0ffb5e --- /dev/null +++ b/docs/changelog/154972.yaml @@ -0,0 +1,6 @@ +area: ES|QL +issues: + - 154866 +pr: 154972 +summary: Addressing inference timeout issues on inference operator tests +type: bug diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/inference/InferenceOperator.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/inference/InferenceOperator.java index a6babe277a6e8..320fa15889be9 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/inference/InferenceOperator.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/inference/InferenceOperator.java @@ -377,7 +377,10 @@ public BulkInferenceRequestItem pollNextRequest() { } synchronized (checkpoint) { - if (requestItemIterator.hasNext() == false) { + // Re-check under the lock: completeIfFinished() releases the request iterator (and its backing block) while holding + // this lock when a failure occurs. Without re-checking, a concurrent poller that passed the guard above could invoke + // requestItemIterator.next() on an already-released block. See https://github.com/elastic/elasticsearch/issues/154866 + if (hasFailure() || completed.get() || requestItemIterator.hasNext() == false) { return null; }