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
2.5 KiB
Developer Guide
In the Developer Guide, you will find information on Neutron's lower level programming APIs. There are sections that cover the core pieces of Neutron, including its database, message queue, and scheduler components. There are also subsections that describe specific plugins inside Neutron. Finally, the developer guide includes information about Neutron testing infrastructure.
Programming HowTos and Tutorials
effective_neutron development.environment contribute neutron_api client_command_extensions alembic_migrations
Neutron Internals
services_and_agents api_layer ml2_ext_manager calling_ml2_plugin quota api_extensions plugin-api db_layer db_models policy rpc_api rpc_callbacks layer3 l2_agents agent_extensions ovs_vhostuser quality_of_service service_extensions callbacks dns_order external_dns_integration upgrade i18n address_scopes openvswitch_firewall network_ip_availability tag provisioning_blocks retries l3_agent_extensions
Testing
fullstack_testing testing_coverage template_model_sync_test
Module Reference
Add in all the big modules as automodule indexes.
Indices and tables
genindex
modindex
search