Add retry logic for 409 response with specific Conflict error code #787
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.
The 422 and 409 errors are retried in combination with the
ManagementApiRequestFailed
error code as discussed in issue #497.In our case, the publisher is failing randomly on an API with a response that is not handled in the retry policy.
Sample response:
Content: {"error":{"code":"Conflict","message":"Operation on the API is in progress","details":null}}
.This pull request improves the retry logic for HTTP requests in
tools/code/common/Http.cs
, specifically for handling certain API conflict scenarios. The main change is to add more granular checks for when a retry should occur, particularly for 409 Conflict responses related to ongoing API operations.Enhanced retry logic for HTTP requests:
ShouldRetryInner
to retry when a 409 Conflict response has both the "Conflict" error code and the "Operation on the API is in progress" message.New helper methods for response inspection:
HasConflictError
to check if the response error code is "Conflict".HasOperationOnTheApiIsInProgressMessage
to check if the response error message is "Operation on the API is in progress".TryGetMessage
to extract the error message from the response JSON.These changes make the retry logic more robust and specific, reducing unnecessary retries and better handling API concurrency scenarios.