diff --git a/docs/changelog/104259.yaml b/docs/changelog/104259.yaml new file mode 100644 index 0000000000000..461d6f039136a --- /dev/null +++ b/docs/changelog/104259.yaml @@ -0,0 +1,6 @@ +pr: 104259 +summary: Fix cancellation order in `CancellableRateLimitedFluxIterator` +area: Snapshot/Restore +type: bug +issues: + - 103054 diff --git a/plugins/repository-azure/src/main/java/org/elasticsearch/repositories/azure/CancellableRateLimitedFluxIterator.java b/plugins/repository-azure/src/main/java/org/elasticsearch/repositories/azure/CancellableRateLimitedFluxIterator.java index aab052a4acdb0..cc16d20687fc2 100644 --- a/plugins/repository-azure/src/main/java/org/elasticsearch/repositories/azure/CancellableRateLimitedFluxIterator.java +++ b/plugins/repository-azure/src/main/java/org/elasticsearch/repositories/azure/CancellableRateLimitedFluxIterator.java @@ -166,9 +166,9 @@ public void onNext(T element) { } public void cancel() { + done = true; cancelSubscription(); clearQueue(); - done = true; // cancel should be called from the consumer // thread, but to avoid potential deadlocks // we just try to release a possibly blocked @@ -178,9 +178,9 @@ public void cancel() { @Override public void onError(Throwable t) { + done = true; clearQueue(); error = t; - done = true; signalConsumer(); }