09c87425fa
Retrying mutating operations at the API layer caused a couple of problems. First, when components would call the core plugin using the neutron manager, they would have to handle the retriable failures on their own or undo any work they had done so far and allow retriable failures to be propagated up to the API. Second, retrying at the API makes composite operations (e.g. auto allocate, add_router_interface, etc) painful because they have to consider if exceptions are retriable before raising fatal exceptions on failures of core plugin calls. This patch begins the process of moving them down to the core operations with a new decorator called 'retry_if_session_inactive', which ensures that the retry logic isn't triggered if there is an ongoing transaction since retrying inside of a transaction is normally ineffective. Follow-up patches apply them to various parts of the code-base. Additionally, the args and kwargs of the method are automatically deep copied in retries to ensure that any mangling the methods do to their arguments don't impact their retriability. Finally, since we are leaving the API decorators in place for now, the retry logic will not be triggered by another decorator if an exception has already been retried. This prevents an exponential explosion of retries on nested retry decorators. The ultimate goal will be to get rid of the API decorators entirely so retries are up to each individual plugin. Partial-Bug: #1596075 Partial-Bug: #1612798 Change-Id: I7b8a4a105aabfa1b5f5dd7a638099007b0933e66 |
||
---|---|---|
.. | ||
source | ||
Makefile |