fix(err-prop): status code propagation (attempt 2) #17962
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.
Fix error handling for MultiError with new Unwrap() method
This PR supersedes a previous approach (#17950) which implements error code propagation across sharded subqueries more effectively by supporting the
Unwrap()
method. Doing so unfortunately also broke the handling ofpkg/util/server.ClientHTTPStatusAndError
, which I refactored to account for this (some of the expected test logic felt a bit funky, but I ensured my refactor matched the current testware expectations nonetheless).Changes
1. Enhanced MultiError (
pkg/util/errors.go
)Unwrap() []error
method to enableerrors.{As,Is}()
functionality2. Updated retry logic (
pkg/querier/queryrange/queryrangebase/retry.go
)grpcutil.ErrorToStatusCode()
withgrpcutil.ErrorToStatus()
which accesses embedded errors3. Fixed error handling (
pkg/util/server/error.go
) to account for MultiError implementing Unwrap() and therefore being able to enumerate values inside an error chain