summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-02-20 14:14:34 +0000
committerGerrit Code Review <review@openstack.org>2023-02-20 14:14:34 +0000
commitdd45d5baa0bf8b269233b3d166aa3c48766f4cb5 (patch)
tree2b411afec013646e7d26bcfa3690f3adde161b13
parent76c9f44b25916e5d28843d3bd325ff3fe5100fbf (diff)
parentccd9d47cba5af6ec18c5289893d57b965404392c (diff)
downloadneutron-dd45d5baa0bf8b269233b3d166aa3c48766f4cb5.tar.gz
Merge "[OVN] Bump the port revision number in trunk driver" into stable/xena
-rw-r--r--neutron/services/trunk/drivers/ovn/trunk_driver.py24
-rw-r--r--neutron/tests/functional/services/trunk/drivers/ovn/test_trunk_driver.py4
-rw-r--r--neutron/tests/unit/services/trunk/drivers/ovn/test_trunk_driver.py2
3 files changed, 25 insertions, 5 deletions
diff --git a/neutron/services/trunk/drivers/ovn/trunk_driver.py b/neutron/services/trunk/drivers/ovn/trunk_driver.py
index ea9186c2f6..721cdc5292 100644
--- a/neutron/services/trunk/drivers/ovn/trunk_driver.py
+++ b/neutron/services/trunk/drivers/ovn/trunk_driver.py
@@ -22,6 +22,8 @@ from oslo_config import cfg
from oslo_log import log
from neutron.common.ovn import constants as ovn_const
+from neutron.db import db_base_plugin_common
+from neutron.db import ovn_revision_numbers_db as db_rev
from neutron.objects import ports as port_obj
from neutron.services.trunk.drivers import base as trunk_base
@@ -47,20 +49,23 @@ class OVNTrunkHandler(object):
context = n_context.get_admin_context()
db_parent_port = port_obj.Port.get_object(context, id=parent_port)
parent_port_status = db_parent_port.status
- for port in subports:
+ for subport in subports:
with db_api.CONTEXT_WRITER.using(context), (
txn(check_error=True)) as ovn_txn:
- self._set_binding_profile(context, port, parent_port,
- parent_port_status, ovn_txn)
+ port = self._set_binding_profile(context, subport, parent_port,
+ parent_port_status, ovn_txn)
+ db_rev.bump_revision(context, port, ovn_const.TYPE_PORTS)
def _unset_sub_ports(self, subports):
txn = self.plugin_driver.nb_ovn.transaction
context = n_context.get_admin_context()
- for port in subports:
+ for subport in subports:
with db_api.CONTEXT_WRITER.using(context), (
txn(check_error=True)) as ovn_txn:
- self._unset_binding_profile(context, port, ovn_txn)
+ port = self._unset_binding_profile(context, subport, ovn_txn)
+ db_rev.bump_revision(context, port, ovn_const.TYPE_PORTS)
+ @db_base_plugin_common.convert_result_to_dict
def _set_binding_profile(self, context, subport, parent_port,
parent_port_status, ovn_txn):
LOG.debug("Setting parent %s for subport %s",
@@ -71,6 +76,9 @@ class OVNTrunkHandler(object):
"binding_profile: %s",
subport.port_id)
return
+ check_rev_cmd = self.plugin_driver.nb_ovn.check_revision_number(
+ db_port.id, db_port, ovn_const.TYPE_PORTS)
+ ovn_txn.add(check_rev_cmd)
try:
# NOTE(flaviof): We expect binding's host to be set. Otherwise,
# sub-port will not transition from DOWN to ACTIVE.
@@ -103,7 +111,9 @@ class OVNTrunkHandler(object):
))
LOG.debug("Done setting parent %s for subport %s",
parent_port, subport.port_id)
+ return db_port
+ @db_base_plugin_common.convert_result_to_dict
def _unset_binding_profile(self, context, subport, ovn_txn):
LOG.debug("Unsetting parent for subport %s", subport.port_id)
db_port = port_obj.Port.get_object(context, id=subport.port_id)
@@ -112,6 +122,9 @@ class OVNTrunkHandler(object):
"binding_profile: %s",
subport.port_id)
return
+ check_rev_cmd = self.plugin_driver.nb_ovn.check_revision_number(
+ db_port.id, db_port, ovn_const.TYPE_PORTS)
+ ovn_txn.add(check_rev_cmd)
try:
db_port.device_owner = ''
for binding in db_port.bindings:
@@ -140,6 +153,7 @@ class OVNTrunkHandler(object):
external_ids_update=ext_ids,
))
LOG.debug("Done unsetting parent for subport %s", subport.port_id)
+ return db_port
def trunk_created(self, trunk):
# Check if parent port is handled by OVN.
diff --git a/neutron/tests/functional/services/trunk/drivers/ovn/test_trunk_driver.py b/neutron/tests/functional/services/trunk/drivers/ovn/test_trunk_driver.py
index 0c42fbff3d..fed86fabbb 100644
--- a/neutron/tests/functional/services/trunk/drivers/ovn/test_trunk_driver.py
+++ b/neutron/tests/functional/services/trunk/drivers/ovn/test_trunk_driver.py
@@ -64,10 +64,13 @@ class TestOVNTrunkDriver(base.TestOVNFunctionalBase):
if row.parent_name and row.tag:
device_owner = row.external_ids[
ovn_const.OVN_DEVICE_OWNER_EXT_ID_KEY]
+ revision_number = row.external_ids[
+ ovn_const.OVN_REV_NUM_EXT_ID_KEY]
ovn_trunk_info.append({'port_id': row.name,
'parent_port_id': row.parent_name,
'tag': row.tag,
'device_owner': device_owner,
+ 'revision_number': revision_number,
})
return ovn_trunk_info
@@ -80,6 +83,7 @@ class TestOVNTrunkDriver(base.TestOVNFunctionalBase):
'parent_port_id': [trunk['port_id']],
'tag': [subport['segmentation_id']],
'device_owner': trunk_consts.TRUNK_SUBPORT_OWNER,
+ 'revision_number': '2',
})
# Check that the subport has the binding is active.
binding = obj_reg.load_class('PortBinding').get_object(
diff --git a/neutron/tests/unit/services/trunk/drivers/ovn/test_trunk_driver.py b/neutron/tests/unit/services/trunk/drivers/ovn/test_trunk_driver.py
index 986380e598..894520bf86 100644
--- a/neutron/tests/unit/services/trunk/drivers/ovn/test_trunk_driver.py
+++ b/neutron/tests/unit/services/trunk/drivers/ovn/test_trunk_driver.py
@@ -87,6 +87,8 @@ class TestTrunkHandler(base.BaseTestCase):
"neutron.objects.ports.PortBinding.update_object").start()
self.mock_clear_levels = mock.patch(
"neutron.objects.ports.PortBindingLevel.delete_objects").start()
+ self.mock_bump_revision = mock.patch(
+ "neutron.db.ovn_revision_numbers_db.bump_revision").start()
def _get_fake_port_obj(self, port_id):
with mock.patch('uuid.UUID') as mock_uuid: