S3: Return context cancellation from Iter when applicable #62
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes
This PR returns
ctx.Err()
from the S3Iter
method instead ofnil
after exhausting theListObjects
channel.When the context passed to the S3 Iter method is cancelled, the underlying Minio client sometimes immediately closes the results channel and returns without sending the
ctx.Err()
error. Depending on when exactly the context is cancelled, this can result in theIter
method not returning any results and not returning an error indicating what happened.Discovered while debugging grafana/mimir#5433
Verification
Tested via Mimir end-to-end test used to reproduce the issue. The S3
Bucket
implementation uses the concrete MinioClient
instead of an interface so writing a unit test would be a challenge without making quite a few changes to theBucket
. I can do that if you'd like but it seemed like a lot of churn for a small change.