Merge "Wrap nb_api calls with db_lock in the SFC driver"
This commit is contained in:
commit
ff05f2b3a0
@ -50,6 +50,9 @@ RESOURCE_QOS = 9
|
||||
RESOURCE_NEUTRON_LISTENER = 10
|
||||
RESOURCE_BGP_SPEAKER = 11
|
||||
RESOURCE_BGP_PEER = 12
|
||||
RESOURCE_SFC_PORT_CHAIN = 13
|
||||
RESOURCE_SFC_PORT_PAIR_GROUP = 14
|
||||
RESOURCE_SFC_PORT_PAIR = 15
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
@ -122,6 +125,12 @@ def _get_lock_id_by_resource_type(resource_type, *args, **kwargs):
|
||||
lock_id = args[2]
|
||||
elif RESOURCE_BGP_PEER == resource_type:
|
||||
lock_id = args[2]
|
||||
elif RESOURCE_SFC_PORT_CHAIN == resource_type:
|
||||
lock_id = args[1].current['id']
|
||||
elif RESOURCE_SFC_PORT_PAIR == resource_type:
|
||||
lock_id = args[1].current['id']
|
||||
elif RESOURCE_SFC_PORT_PAIR_GROUP == resource_type:
|
||||
lock_id = args[1].current['id']
|
||||
else:
|
||||
raise df_exc.UnknownResourceException(resource_type=resource_type)
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
from networking_sfc.services.sfc.drivers import base
|
||||
|
||||
from dragonflow.db.models import sfc
|
||||
from dragonflow.db.neutron import lockedobjects_db as lock_db
|
||||
from dragonflow.neutron.services import mixins
|
||||
|
||||
|
||||
@ -37,6 +38,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
def initialize(self):
|
||||
pass
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_CHAIN)
|
||||
def create_port_chain_postcommit(self, context):
|
||||
port_chain = context.current
|
||||
pc_params = port_chain.get('chain_parameters')
|
||||
@ -53,6 +55,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_CHAIN)
|
||||
def update_port_chain_postcommit(self, context):
|
||||
port_chain = context.current
|
||||
extra_args = _get_optional_params(
|
||||
@ -70,6 +73,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_CHAIN)
|
||||
def delete_port_chain_postcommit(self, context):
|
||||
port_chain = context.current
|
||||
|
||||
@ -80,6 +84,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_PAIR_GROUP)
|
||||
def create_port_pair_group_postcommit(self, context):
|
||||
port_pair_group = context.current
|
||||
|
||||
@ -93,6 +98,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_PAIR_GROUP)
|
||||
def update_port_pair_group_postcommit(self, context):
|
||||
port_pair_group = context.current
|
||||
extra_args = _get_optional_params(port_pair_group, 'port_pairs')
|
||||
@ -106,6 +112,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_PAIR_GROUP)
|
||||
def delete_port_pair_group_postcommit(self, context):
|
||||
port_pair_group = context.current
|
||||
self.nb_api.delete(
|
||||
@ -115,6 +122,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_PAIR)
|
||||
def create_port_pair_postcommit(self, context):
|
||||
port_pair = context.current
|
||||
sf_params = port_pair.get('service_function_parameters', {})
|
||||
@ -133,6 +141,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_PAIR)
|
||||
def update_port_pair_postcommit(self, context):
|
||||
port_pair = context.current
|
||||
|
||||
@ -144,6 +153,7 @@ class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):
|
||||
),
|
||||
)
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_SFC_PORT_PAIR)
|
||||
def delete_port_pair_postcommit(self, context):
|
||||
port_pair = context.current
|
||||
|
||||
|
@ -25,7 +25,7 @@ from networking_sfc.tests.unit.db import test_flowclassifier_db
|
||||
from networking_sfc.tests.unit.db import test_sfc_db
|
||||
|
||||
from dragonflow.db.models import sfc
|
||||
from dragonflow.neutron.services.sfc import driver
|
||||
from dragonflow.tests.common import utils
|
||||
|
||||
|
||||
class TestDfSfcDriver(
|
||||
@ -76,7 +76,15 @@ class TestDfSfcDriver(
|
||||
app = config.load_paste_app('extensions_test_app')
|
||||
self.ext_api = api_ext.ExtensionMiddleware(app, ext_mgr=ext_mgr)
|
||||
self.ctx = context.get_admin_context()
|
||||
self.driver = driver.DfSfcDriver()
|
||||
|
||||
self.fake_lockedobjects = mock.patch(
|
||||
'dragonflow.db.neutron.lockedobjects_db.wrap_db_lock',
|
||||
side_effect=utils.empty_wrapper)
|
||||
self.fake_lockedobjects.start()
|
||||
self.addCleanup(self.fake_lockedobjects.stop)
|
||||
# Import must be done after mock.patch for wrap_db_lock
|
||||
self.driver = importutils.import_object(
|
||||
'dragonflow.neutron.services.sfc.driver.DfSfcDriver')
|
||||
self.driver.initialize()
|
||||
self.driver._nb_api = mock.Mock()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user