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
111 lines
2.5 KiB
ReStructuredText
111 lines
2.5 KiB
ReStructuredText
..
|
|
Copyright 2010-2011 United States Government as represented by the
|
|
Administrator of the National Aeronautics and Space Administration.
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
not use this file except in compliance with the License. You may obtain
|
|
a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
License for the specific language governing permissions and limitations
|
|
under the License.
|
|
|
|
Convention for heading levels in Neutron devref:
|
|
======= Heading 0 (reserved for the title in a document)
|
|
------- Heading 1
|
|
~~~~~~~ Heading 2
|
|
+++++++ Heading 3
|
|
''''''' Heading 4
|
|
(Avoid deeper levels because they do not render well.)
|
|
|
|
|
|
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
|
|
--------------------------------
|
|
.. toctree::
|
|
:maxdepth: 3
|
|
|
|
effective_neutron
|
|
development.environment
|
|
contribute
|
|
neutron_api
|
|
client_command_extensions
|
|
alembic_migrations
|
|
|
|
|
|
Neutron Internals
|
|
-----------------
|
|
.. toctree::
|
|
:maxdepth: 3
|
|
|
|
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
|
|
-------
|
|
.. toctree::
|
|
:maxdepth: 3
|
|
|
|
fullstack_testing
|
|
testing_coverage
|
|
template_model_sync_test
|
|
|
|
Module Reference
|
|
----------------
|
|
.. toctree::
|
|
:maxdepth: 3
|
|
|
|
.. todo::
|
|
|
|
Add in all the big modules as automodule indexes.
|
|
|
|
|
|
Indices and tables
|
|
------------------
|
|
|
|
* :ref:`genindex`
|
|
* :ref:`modindex`
|
|
* :ref:`search`
|