neutron/neutron
Ann Kamyshnikova 229856666a Make object creation methods in l3_hamode_db atomic
Methods _create_ha_network, add_ha_port don't have wrapping
transaction in them, so they are prone to race conditions.
This commit adds a transaction to them. To avoid problem with
rolling back outmost transaction during exception handling,
internal methods have been wrapped in nested transaction.

Nested transaction is required in places like this:

def create():
      create_something()
      try:
            _do_other_thing()
      except Exception:
             with excutils.save_and_reraise_exception():
                     delete_something()

def _do_other_thing():
     with context.session.begin(subtransactions=True):
         ....

When exception is raised in _do_other_thing it
is caught in except block, but the object cannot be deleted in
except section because internal transaction has been rolled back.

A new method safe_creation and has been added
that provides a common way of handling such situations.

Closes-bug: #1501686

Change-Id: I952f6f7f8684743aa7f829bd92b1dc41b2c6aecf
(cherry picked from commit 924f19e8f1)
2016-01-21 18:35:45 +03:00
..
agent Merge "Force L3 agent to resync router it could not configure" into stable/liberty 2016-01-07 15:28:55 +00:00
api Move notifications before DB retry decorator 2016-01-12 00:59:44 +00:00
callbacks Merge "Add support for PluginWorker and Process creation notification" 2015-09-04 05:02:52 +00:00
cmd Merge "move usage_audit to cmd/eventlet package" into stable/liberty 2015-12-21 20:16:41 +00:00
common Merge "Add the missing arg of RetryRequest exception in _lock_subnetpool" into stable/liberty 2015-12-01 01:43:39 +00:00
core_extensions Forbid attaching rules if policy isn't accessible 2015-08-12 09:52:33 +00:00
db Make object creation methods in l3_hamode_db atomic 2016-01-21 18:35:45 +03:00
debug Deprecate external_network_bridge option in L3 agent 2015-09-01 20:41:54 -07:00
extensions Support migrating of legacy routers to HA and back 2015-12-22 15:18:38 +02:00
hacking Restructure agent code in preparation for decomp 2015-06-26 15:06:49 +00:00
ipam Add the missing arg of RetryRequest exception in _lock_subnetpool 2015-11-27 13:11:00 +00:00
locale Imported Translations from Zanata 2016-01-16 06:27:41 +00:00
notifiers Remove hack for discovery novaclients extension 2015-09-09 14:35:26 +00:00
objects No network devices on network attached qos policies 2015-09-16 15:11:04 +02:00
openstack Switch to the oslo_utils.fileutils 2015-07-15 08:09:26 +03:00
pecan_wsgi Fix the bug of "Spelling error of a word" 2015-10-16 11:40:21 +00:00
plugins Merge "Log INFO message when setting admin state up flag to False for OVS port" into stable/liberty 2016-01-21 01:08:58 +00:00
quota Merge "ML2: Add tests to validate quota usage tracking" into stable/liberty 2016-01-05 02:51:10 +00:00
scheduler Tune _get_candidates for faster scheduling in dvr 2015-12-16 13:28:53 +03:00
server Merge "Introduce a separate RPC server" into feature/pecan 2015-09-18 16:58:54 +00:00
services Mock oslo policy HTTPCheck instead of urllib 2015-10-13 17:26:23 +02:00
tests Make object creation methods in l3_hamode_db atomic 2016-01-21 18:35:45 +03:00
__init__.py Allow users to run 'tox -epy34' 2015-05-11 16:09:51 +02:00
auth.py Migrate to oslo.log 2015-03-12 11:22:56 +01:00
context.py Add DB support for resource usage tracking 2015-07-26 15:26:10 -07:00
i18n.py oslo: migrate to namespace-less import paths 2015-02-05 15:09:32 +01:00
manager.py Mock oslo policy HTTPCheck instead of urllib 2015-10-13 17:26:23 +02:00
neutron_plugin_base_v2.py Add support for PluginWorker and Process creation notification 2015-09-03 06:40:50 +00:00
policy.py Mock oslo policy HTTPCheck instead of urllib 2015-10-13 17:26:23 +02:00
service.py Add support for PluginWorker and Process creation notification 2015-09-03 06:40:50 +00:00
version.py
worker.py Add support for PluginWorker and Process creation notification 2015-09-03 06:40:50 +00:00
wsgi.py Add support for PluginWorker and Process creation notification 2015-09-03 06:40:50 +00:00