Comment 7 for bug 1501686

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to neutron (stable/kilo)

Reviewed: https://review.openstack.org/273110
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=c1a6fdb9f64e3436dbbe97603df8beb7ddd6a501
Submitter: Jenkins
Branch: stable/kilo

commit c1a6fdb9f64e3436dbbe97603df8beb7ddd6a501
Author: Ann Kamyshnikova <email address hidden>
Date: Sat Dec 12 22:11:37 2015 +0300

    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

    Conflicts:
     doc/source/devref/effective_neutron.rst
     neutron/db/common_db_mixin.py
     neutron/db/l3_hamode_db.py

    Change-Id: I952f6f7f8684743aa7f829bd92b1dc41b2c6aecf
    (cherry picked from commit 924f19e8f16aebf103a3b70f2bd236afc846933b)
    (cherry picked from commit 229856666adf729172be0c4cd0231934bcbc8d23)