Use revision_number instead of DFVersionObjects(port)
Change-Id: I14a64348bafd21d82cd723abc3b701e6ff2115a4 Partial-Bug: #1618738
This commit is contained in:
parent
26af96bbf1
commit
66a2ccbde0
|
@ -32,7 +32,6 @@ from dragonflow.common import exceptions as df_exceptions
|
||||||
from dragonflow.common import utils as df_utils
|
from dragonflow.common import utils as df_utils
|
||||||
from dragonflow.db import api_nb
|
from dragonflow.db import api_nb
|
||||||
from dragonflow.db.neutron import lockedobjects_db as lock_db
|
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
|
from dragonflow.neutron.common import constants as df_const
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
@ -458,11 +457,6 @@ class DFMechDriver(driver_api.MechanismDriver):
|
||||||
|
|
||||||
LOG.info(_LI("DFMechDriver: delete subnet %s"), subnet_id)
|
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)
|
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||||
def create_port_postcommit(self, context):
|
def create_port_postcommit(self, context):
|
||||||
port = context.current
|
port = context.current
|
||||||
|
@ -495,7 +489,7 @@ class DFMechDriver(driver_api.MechanismDriver):
|
||||||
name=port.get('name', df_const.DF_PORT_DEFAULT_NAME),
|
name=port.get('name', df_const.DF_PORT_DEFAULT_NAME),
|
||||||
enabled=port.get('admin_state_up', False),
|
enabled=port.get('admin_state_up', False),
|
||||||
chassis=chassis, tunnel_key=tunnel_key,
|
chassis=chassis, tunnel_key=tunnel_key,
|
||||||
version=port['db_version'],
|
version=port['revision_number'],
|
||||||
device_owner=port.get('device_owner', None),
|
device_owner=port.get('device_owner', None),
|
||||||
device_id=port.get('device_id', None),
|
device_id=port.get('device_id', None),
|
||||||
security_groups=port.get('security_groups', []),
|
security_groups=port.get('security_groups', []),
|
||||||
|
@ -528,11 +522,6 @@ class DFMechDriver(driver_api.MechanismDriver):
|
||||||
else:
|
else:
|
||||||
return False
|
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)
|
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||||
def update_port_postcommit(self, context):
|
def update_port_postcommit(self, context):
|
||||||
updated_port = context.current
|
updated_port = context.current
|
||||||
|
@ -589,15 +578,11 @@ class DFMechDriver(driver_api.MechanismDriver):
|
||||||
[]),
|
[]),
|
||||||
binding_profile=updated_port.get(portbindings.PROFILE, None),
|
binding_profile=updated_port.get(portbindings.PROFILE, None),
|
||||||
binding_vnic_type=updated_port.get(portbindings.VNIC_TYPE, 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'])
|
LOG.info(_LI("DFMechDriver: update port %s"), updated_port['id'])
|
||||||
return updated_port
|
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)
|
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||||
def delete_port_postcommit(self, context):
|
def delete_port_postcommit(self, context):
|
||||||
port = context.current
|
port = context.current
|
||||||
|
|
|
@ -59,13 +59,12 @@ class TestObjectVersion(test_base.DFTestBase):
|
||||||
self.neutron, self.nb_api, network_id))
|
self.neutron, self.nb_api, network_id))
|
||||||
port_id = port.create()
|
port_id = port.create()
|
||||||
self.assertTrue(port.exists())
|
self.assertTrue(port.exists())
|
||||||
version = self.nb_api.get_logical_port(port_id).get_version()
|
prev_version = self.nb_api.get_logical_port(port_id).get_version()
|
||||||
self.assertEqual(version, 0)
|
|
||||||
|
|
||||||
port.update()
|
port.update()
|
||||||
self.assertTrue(port.exists())
|
self.assertTrue(port.exists())
|
||||||
version = self.nb_api.get_logical_port(port_id).get_version()
|
version = self.nb_api.get_logical_port(port_id).get_version()
|
||||||
self.assertEqual(version, 1)
|
self.assertGreater(version, prev_version)
|
||||||
|
|
||||||
port.close()
|
port.close()
|
||||||
self.assertFalse(port.exists())
|
self.assertFalse(port.exists())
|
||||||
|
|
|
@ -32,7 +32,6 @@ mock.patch('dragonflow.db.neutron.lockedobjects_db.wrap_db_lock',
|
||||||
stub_wrap_db_lock).start()
|
stub_wrap_db_lock).start()
|
||||||
from dragonflow.db.neutron import versionobjects_db as version_db
|
from dragonflow.db.neutron import versionobjects_db as version_db
|
||||||
from dragonflow.neutron.ml2 import mech_driver
|
from dragonflow.neutron.ml2 import mech_driver
|
||||||
from neutron.db import securitygroups_db
|
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests.unit.plugins.ml2 import test_plugin
|
from neutron.tests.unit.plugins.ml2 import test_plugin
|
||||||
|
|
||||||
|
@ -77,8 +76,6 @@ class TestDFMechDriver(base.BaseTestCase):
|
||||||
tunnel_key = '9999'
|
tunnel_key = '9999'
|
||||||
binding_profile = {"port_key": "remote_port", "host_ip": "20.0.0.2"}
|
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(
|
self.driver._get_allowed_mac_addresses_from_port = mock.Mock(
|
||||||
return_value=allowed_macs)
|
return_value=allowed_macs)
|
||||||
self.driver.nb_api.allocate_tunnel_key = mock.Mock(
|
self.driver.nb_api.allocate_tunnel_key = mock.Mock(
|
||||||
|
@ -105,9 +102,6 @@ class TestDFMechDriver(base.BaseTestCase):
|
||||||
tunnel_key = '9999'
|
tunnel_key = '9999'
|
||||||
binding_profile = {"port_key": "remote_port", "host_ip": "20.0.0.2"}
|
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(
|
self.driver.nb_api.allocate_tunnel_key = mock.Mock(
|
||||||
return_value=tunnel_key)
|
return_value=tunnel_key)
|
||||||
port_context = self._get_port_context(tenant_id, network_id, port_id,
|
port_context = self._get_port_context(tenant_id, network_id, port_id,
|
||||||
|
@ -178,7 +172,7 @@ class TestDFMechDriver(base.BaseTestCase):
|
||||||
'network_id': net_id,
|
'network_id': net_id,
|
||||||
'binding:profile': binding_profile,
|
'binding:profile': binding_profile,
|
||||||
'binding:vnic_type': 'ovs',
|
'binding:vnic_type': 'ovs',
|
||||||
'db_version': self.dbversion}
|
'revision_number': self.dbversion}
|
||||||
return FakeContext(port)
|
return FakeContext(port)
|
||||||
|
|
||||||
def _get_network_context(self, tenant_id, net_id, network_type, seg_id):
|
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'],
|
subnet_id, network['id'], subnet['tenant_id'],
|
||||||
nw_version=new_network['revision_number'])
|
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):
|
class FakeNetworkContext(object):
|
||||||
"""To generate network context for testing purposes only."""
|
"""To generate network context for testing purposes only."""
|
||||||
|
|
Loading…
Reference in New Issue