-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
This issue follows up on #883. Some idempotent methods can report an exception when retries. This was observed for example within #808 and #816. The intuition is that there are cases when the socket connection reports a timeout while waiting for a server response. A subsequent retry then receives an error because the operation finished in the meantime.
We introduced a new attribute rejected
in BaseServiceException which indicates if an error has been certainly refused by the server (for example when quota has been exceeded). We need to adjust error handling in all the modules to properly work with idempotent
and rejected
attributes. The discussion regarding create and delete operations in #883 should be kept in mind.
We established that 500-type errors should not be treated as rejected
because we cannot guarantee that the server did not process anything. We should assume that we can get a 500 while the request has been processed and committed on the service side.