Comment 2 for bug 1501686

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

Reviewed: https://review.openstack.org/230481
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=924f19e8f16aebf103a3b70f2bd236afc846933b
Submitter: Jenkins
Branch: master

commit 924f19e8f16aebf103a3b70f2bd236afc846933b
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

    Change-Id: I952f6f7f8684743aa7f829bd92b1dc41b2c6aecf