diff --git a/dragonflow/neutron/ml2/mech_driver.py b/dragonflow/neutron/ml2/mech_driver.py index 196a8d2ce..ab6d7da5f 100644 --- a/dragonflow/neutron/ml2/mech_driver.py +++ b/dragonflow/neutron/ml2/mech_driver.py @@ -32,7 +32,6 @@ from dragonflow.common import exceptions as df_exceptions from dragonflow.common import utils as df_utils from dragonflow.db import api_nb from dragonflow.db.neutron import lockedobjects_db as lock_db -from dragonflow.db.neutron import versionobjects_db as version_db from dragonflow.neutron.common import constants as df_const LOG = log.getLogger(__name__) @@ -458,11 +457,6 @@ class DFMechDriver(driver_api.MechanismDriver): LOG.info(_LI("DFMechDriver: delete subnet %s"), subnet_id) - def create_port_precommit(self, context): - port_version = version_db._create_db_version_row( - context._plugin_context.session, context.current['id']) - context.current['db_version'] = port_version - @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE) def create_port_postcommit(self, context): port = context.current @@ -495,7 +489,7 @@ class DFMechDriver(driver_api.MechanismDriver): name=port.get('name', df_const.DF_PORT_DEFAULT_NAME), enabled=port.get('admin_state_up', False), chassis=chassis, tunnel_key=tunnel_key, - version=port['db_version'], + version=port['revision_number'], device_owner=port.get('device_owner', None), device_id=port.get('device_id', None), security_groups=port.get('security_groups', []), @@ -528,11 +522,6 @@ class DFMechDriver(driver_api.MechanismDriver): else: return False - def update_port_precommit(self, context): - port_version = version_db._update_db_version_row( - context._plugin_context.session, context.current['id']) - context.current['db_version'] = port_version - @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE) def update_port_postcommit(self, context): updated_port = context.current @@ -595,15 +584,11 @@ class DFMechDriver(driver_api.MechanismDriver): []), binding_profile=updated_port.get(portbindings.PROFILE, None), binding_vnic_type=updated_port.get(portbindings.VNIC_TYPE, None), - version=updated_port['db_version'], remote_vtep=remote_vtep) + version=updated_port['revision_number'], remote_vtep=remote_vtep) LOG.info(_LI("DFMechDriver: update port %s"), updated_port['id']) return updated_port - def delete_port_precommit(self, context): - version_db._delete_db_version_row(context._plugin_context.session, - context.current['id']) - @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE) def delete_port_postcommit(self, context): port = context.current diff --git a/dragonflow/tests/fullstack/test_object_version.py b/dragonflow/tests/fullstack/test_object_version.py index 36755d932..b3d06aad2 100644 --- a/dragonflow/tests/fullstack/test_object_version.py +++ b/dragonflow/tests/fullstack/test_object_version.py @@ -59,13 +59,12 @@ class TestObjectVersion(test_base.DFTestBase): self.neutron, self.nb_api, network_id)) port_id = port.create() self.assertTrue(port.exists()) - version = self.nb_api.get_logical_port(port_id).get_version() - self.assertEqual(version, 0) + prev_version = self.nb_api.get_logical_port(port_id).get_version() port.update() self.assertTrue(port.exists()) version = self.nb_api.get_logical_port(port_id).get_version() - self.assertEqual(version, 1) + self.assertGreater(version, prev_version) port.close() self.assertFalse(port.exists()) diff --git a/dragonflow/tests/unit/test_mech_driver.py b/dragonflow/tests/unit/test_mech_driver.py index 173328266..b6df43cc3 100644 --- a/dragonflow/tests/unit/test_mech_driver.py +++ b/dragonflow/tests/unit/test_mech_driver.py @@ -32,7 +32,6 @@ mock.patch('dragonflow.db.neutron.lockedobjects_db.wrap_db_lock', stub_wrap_db_lock).start() from dragonflow.db.neutron import versionobjects_db as version_db from dragonflow.neutron.ml2 import mech_driver -from neutron.db import securitygroups_db from neutron.tests import base from neutron.tests.unit.plugins.ml2 import test_plugin @@ -77,8 +76,6 @@ class TestDFMechDriver(base.BaseTestCase): tunnel_key = '9999' binding_profile = {"port_key": "remote_port", "host_ip": "20.0.0.2"} - securitygroups_db.SecurityGroupDbMixin._get_security_groups_on_port = \ - mock.Mock(return_value=None) self.driver._get_allowed_mac_addresses_from_port = mock.Mock( return_value=allowed_macs) self.driver.nb_api.allocate_tunnel_key = mock.Mock( @@ -105,9 +102,6 @@ class TestDFMechDriver(base.BaseTestCase): tunnel_key = '9999' binding_profile = {"port_key": "remote_port", "host_ip": "20.0.0.2"} - securitygroups_db.SecurityGroupDbMixin._get_security_groups_on_port = \ - mock.Mock(return_value=None) - self.driver.nb_api.allocate_tunnel_key = mock.Mock( return_value=tunnel_key) port_context = self._get_port_context(tenant_id, network_id, port_id, @@ -178,7 +172,7 @@ class TestDFMechDriver(base.BaseTestCase): 'network_id': net_id, 'binding:profile': binding_profile, 'binding:vnic_type': 'ovs', - 'db_version': self.dbversion} + 'revision_number': self.dbversion} return FakeContext(port) def _get_network_context(self, tenant_id, net_id, network_type, seg_id): @@ -341,6 +335,52 @@ class TestDFMechDriverRevision(test_plugin.Ml2PluginV2TestCase): subnet_id, network['id'], subnet['tenant_id'], nw_version=new_network['revision_number']) + def test_create_update_port_revision(self): + with self.port(name='port', device_owner='fake_owner', + device_id='fake_id') as p: + port = p['port'] + self.assertGreater(port['revision_number'], 0) + self.nb_api.create_lport.assert_called_with( + id=port['id'], + lswitch_id=port['network_id'], + topic=port['tenant_id'], + macs=[port['mac_address']], ips=mock.ANY, + subnets=mock.ANY, name=port['name'], + enabled=port['admin_state_up'], + chassis=mock.ANY, tunnel_key=mock.ANY, + version=port['revision_number'], + device_owner=port['device_owner'], + device_id=port['device_id'], + security_groups=mock.ANY, + port_security_enabled=mock.ANY, + remote_vtep=False, + allowed_address_pairs=mock.ANY, + binding_profile=mock.ANY, + binding_vnic_type=mock.ANY) + + data = {'port': {'name': 'updated'}} + req = self.new_update_request('ports', data, port['id']) + req.get_response(self.api) + prev_version = port['revision_number'] + port = self.driver.get_port(self.context, port['id']) + self.assertGreater(port['revision_number'], prev_version) + self.nb_api.update_lport.assert_called_with( + id=port['id'], + topic=port['tenant_id'], + macs=[port['mac_address']], ips=mock.ANY, + subnets=mock.ANY, name=port['name'], + enabled=port['admin_state_up'], + chassis=mock.ANY, + version=port['revision_number'], + device_owner=port['device_owner'], + device_id=port['device_id'], + remote_vtep=False, + security_groups=mock.ANY, + port_security_enabled=mock.ANY, + allowed_address_pairs=mock.ANY, + binding_profile=mock.ANY, + binding_vnic_type=mock.ANY) + class FakeNetworkContext(object): """To generate network context for testing purposes only."""