Use revision_number(network subnet)
Change-Id: I5617bc29c41777a175065197e17122b81ef7f03d Partial-Bug: #1618738
This commit is contained in:
parent
be2118ecfa
commit
26af96bbf1
|
@ -197,11 +197,6 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
sg_version=sg_version)
|
||||
LOG.info(_LI("DFMechDriver: delete security group rule %s"), sgr_id)
|
||||
|
||||
def create_network_precommit(self, context):
|
||||
nw_version = version_db._create_db_version_row(
|
||||
context._plugin_context.session, context.current['id'])
|
||||
context.current['db_version'] = nw_version
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||
def create_network_postcommit(self, context):
|
||||
network = context.current
|
||||
|
@ -214,16 +209,12 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
segmentation_id=network.get('provider:segmentation_id'),
|
||||
router_external=network['router:external'],
|
||||
mtu=network.get('mtu'),
|
||||
version=network['db_version'],
|
||||
version=network['revision_number'],
|
||||
subnets=[])
|
||||
|
||||
LOG.info(_LI("DFMechDriver: create network %s"), network['id'])
|
||||
return network
|
||||
|
||||
def delete_network_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_network_postcommit(self, context):
|
||||
network = context.current
|
||||
|
@ -332,14 +323,10 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
|
||||
return None
|
||||
|
||||
def create_subnet_precommit(self, context):
|
||||
network_version = version_db._update_db_version_row(
|
||||
context._plugin_context.session, context.current['network_id'])
|
||||
context.current['db_version'] = network_version
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||
def create_subnet_postcommit(self, context):
|
||||
subnet = context.current
|
||||
network = context.network.current
|
||||
net_id = subnet['network_id']
|
||||
plugin_context = context._plugin_context
|
||||
dhcp_ip = None
|
||||
|
@ -358,7 +345,7 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
net_id,
|
||||
subnet['tenant_id'],
|
||||
name=subnet.get('name', df_const.DF_SUBNET_DEFAULT_NAME),
|
||||
nw_version=subnet['db_version'],
|
||||
nw_version=network['revision_number'],
|
||||
enable_dhcp=subnet['enable_dhcp'],
|
||||
cidr=subnet['cidr'],
|
||||
dhcp_ip=dhcp_ip,
|
||||
|
@ -412,15 +399,11 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
dhcp_ip = self._get_ip_from_port(port)
|
||||
return dhcp_ip, None
|
||||
|
||||
def update_subnet_precommit(self, context):
|
||||
network_version = version_db._update_db_version_row(
|
||||
context._plugin_context.session, context.current['network_id'])
|
||||
context.current['db_version'] = network_version
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||
def update_subnet_postcommit(self, context):
|
||||
new_subnet = context.current
|
||||
old_subnet = context.original
|
||||
network = context.network.current
|
||||
plugin_context = context._plugin_context
|
||||
dhcp_ip = None
|
||||
dhcp_port = None
|
||||
|
@ -439,7 +422,7 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
new_subnet['network_id'],
|
||||
new_subnet['tenant_id'],
|
||||
name=new_subnet.get('name', df_const.DF_SUBNET_DEFAULT_NAME),
|
||||
nw_version=new_subnet['db_version'],
|
||||
nw_version=network['revision_number'],
|
||||
enable_dhcp=new_subnet['enable_dhcp'],
|
||||
cidr=new_subnet['cidr'],
|
||||
dhcp_ip=dhcp_ip,
|
||||
|
@ -450,11 +433,6 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
LOG.info(_LI("DFMechDriver: update subnet %s"), new_subnet['id'])
|
||||
return new_subnet
|
||||
|
||||
def delete_subnet_precommit(self, context):
|
||||
network_version = version_db._update_db_version_row(
|
||||
context._plugin_context.session, context.current['network_id'])
|
||||
context.current['db_version'] = network_version
|
||||
|
||||
@lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_CORE)
|
||||
def delete_subnet_postcommit(self, context):
|
||||
"""If the subnet enabled dhcp, the dhcp server port should be deleted.
|
||||
|
@ -466,10 +444,14 @@ class DFMechDriver(driver_api.MechanismDriver):
|
|||
net_id = subnet['network_id']
|
||||
subnet_id = subnet['id']
|
||||
|
||||
# The network in context is still the network before deleting subnet
|
||||
core_plugin = manager.NeutronManager.get_plugin()
|
||||
network = core_plugin.get_network(context._plugin_context, net_id)
|
||||
|
||||
# update df controller with subnet delete
|
||||
try:
|
||||
self.nb_api.delete_subnet(subnet_id, net_id, subnet['tenant_id'],
|
||||
nw_version=subnet['db_version'])
|
||||
nw_version=network['revision_number'])
|
||||
except df_exceptions.DBKeyNotFound:
|
||||
LOG.debug("network %s is not found in DB, might have "
|
||||
"been deleted concurrently" % net_id)
|
||||
|
|
|
@ -28,19 +28,19 @@ class TestObjectVersion(test_base.DFTestBase):
|
|||
network_id = network.create()
|
||||
self.assertTrue(network.exists())
|
||||
version = self.nb_api.get_lswitch(network_id).get_version()
|
||||
self.assertEqual(version, 0)
|
||||
|
||||
subnet = self.store(objects.SubnetTestObj(
|
||||
self.neutron, self.nb_api, network_id))
|
||||
subnet.create()
|
||||
self.assertTrue(subnet.exists())
|
||||
version = self.nb_api.get_lswitch(network_id).get_version()
|
||||
self.assertEqual(version, 1)
|
||||
new_version = self.nb_api.get_lswitch(network_id).get_version()
|
||||
self.assertGreater(new_version, version)
|
||||
|
||||
subnet.close()
|
||||
self.assertFalse(subnet.exists())
|
||||
version = self.nb_api.get_lswitch(network_id).get_version()
|
||||
self.assertEqual(version, 2)
|
||||
version = new_version
|
||||
new_version = self.nb_api.get_lswitch(network_id).get_version()
|
||||
self.assertGreater(new_version, version)
|
||||
|
||||
network.close()
|
||||
self.assertFalse(network.exists())
|
||||
|
|
|
@ -52,29 +52,6 @@ class TestDFMechDriver(base.BaseTestCase):
|
|||
return_value=self.dbversion)
|
||||
version_db._delete_db_version_row = mock.Mock()
|
||||
|
||||
def test_create_network_postcommit(self):
|
||||
tenant_id = 'test'
|
||||
network_id = '123'
|
||||
network_type = 'vxlan'
|
||||
segmentation_id = 456
|
||||
|
||||
network_context = self._get_network_context(tenant_id,
|
||||
network_id,
|
||||
network_type,
|
||||
segmentation_id)
|
||||
|
||||
self.driver.create_network_postcommit(network_context)
|
||||
self.driver.nb_api.create_lswitch.assert_called_with(
|
||||
id=network_id,
|
||||
name='FakeNetwork',
|
||||
topic=tenant_id,
|
||||
network_type=network_type,
|
||||
router_external=False,
|
||||
segmentation_id=segmentation_id,
|
||||
subnets=[],
|
||||
mtu=1450,
|
||||
version=self.dbversion)
|
||||
|
||||
def test_delete_network_postcommit(self):
|
||||
tenant_id = 'test'
|
||||
network_id = '123'
|
||||
|
@ -91,73 +68,6 @@ class TestDFMechDriver(base.BaseTestCase):
|
|||
self.driver.nb_api.delete_lswitch.assert_called_with(
|
||||
id=network_id, topic=tenant_id)
|
||||
|
||||
def test_create_subnet_postcommit(self):
|
||||
tenant_id = 'test'
|
||||
network_id = '123'
|
||||
subnet_id = '122'
|
||||
cidr = '192.0.0.0/8'
|
||||
gateway_ip = '192.0.0.1'
|
||||
dhcp_ip = '1.1.1.1'
|
||||
enable_dhcp = True
|
||||
dns_nameservers = '2.2.2.2'
|
||||
port = {'fixed_ips': [{'subnet_id': subnet_id, 'ip_address': dhcp_ip}]}
|
||||
|
||||
self.driver._handle_create_subnet_dhcp = mock.Mock(
|
||||
return_value=[dhcp_ip, port])
|
||||
subnet_context = self._get_subnet_context(tenant_id, network_id,
|
||||
subnet_id, cidr, gateway_ip,
|
||||
enable_dhcp, dns_nameservers)
|
||||
|
||||
self.driver.create_subnet_postcommit(subnet_context)
|
||||
self.driver.nb_api.add_subnet.assert_called_with(
|
||||
subnet_id, network_id, tenant_id, enable_dhcp=enable_dhcp,
|
||||
cidr=cidr, dhcp_ip=dhcp_ip, gateway_ip=gateway_ip,
|
||||
dns_nameservers=dns_nameservers, name='FakeSubnet',
|
||||
host_routes=[],
|
||||
nw_version=self.dbversion)
|
||||
|
||||
def test_update_subnet_postcommit(self):
|
||||
tenant_id = 'test'
|
||||
network_id = '123'
|
||||
subnet_id = '122'
|
||||
cidr = '192.0.0.0/8'
|
||||
gateway_ip = '192.0.0.100'
|
||||
dhcp_ip = '1.1.1.1'
|
||||
enable_dhcp = True
|
||||
dns_nameservers = '2.2.2.2'
|
||||
port = {'fixed_ips': [{'subnet_id': subnet_id, 'ip_address': dhcp_ip}]}
|
||||
|
||||
self.driver._handle_update_subnet_dhcp = mock.Mock(
|
||||
return_value=[dhcp_ip, port])
|
||||
subnet_context = self._get_subnet_context(tenant_id, network_id,
|
||||
subnet_id, cidr, gateway_ip,
|
||||
enable_dhcp, dns_nameservers)
|
||||
|
||||
self.driver.update_subnet_postcommit(subnet_context)
|
||||
self.driver.nb_api.update_subnet.assert_called_with(
|
||||
subnet_id, network_id, tenant_id, enable_dhcp=enable_dhcp,
|
||||
cidr=cidr, dhcp_ip=dhcp_ip, gateway_ip=gateway_ip,
|
||||
dns_nameservers=dns_nameservers, name='FakeSubnet',
|
||||
host_routes=[],
|
||||
nw_version=self.dbversion)
|
||||
|
||||
def test_delete_subnet_postcommit(self):
|
||||
tenant_id = 'test'
|
||||
network_id = '123'
|
||||
subnet_id = '122'
|
||||
cidr = '192.0.0.0/8'
|
||||
gateway_ip = '192.0.0.1'
|
||||
enable_dhcp = True
|
||||
dns_nameservers = '2.2.2.2'
|
||||
|
||||
subnet_context = self._get_subnet_context(tenant_id, network_id,
|
||||
subnet_id, cidr, gateway_ip,
|
||||
enable_dhcp, dns_nameservers)
|
||||
|
||||
self.driver.delete_subnet_postcommit(subnet_context)
|
||||
self.driver.nb_api.delete_subnet.assert_called_with(
|
||||
subnet_id, network_id, tenant_id, nw_version=self.dbversion)
|
||||
|
||||
def test_create_port_postcommit(self):
|
||||
tenant_id = 'test'
|
||||
network_id = '123'
|
||||
|
@ -252,21 +162,6 @@ class TestDFMechDriver(base.BaseTestCase):
|
|||
self.driver.nb_api.delete_security_group.assert_called_with(
|
||||
sg_id, topic=tenant_id)
|
||||
|
||||
def _get_subnet_context(self, tenant_id, net_id, subnet_id, cidr,
|
||||
gateway_ip, enable_dhcp, dns_nameservers):
|
||||
# sample data for testing purpose only.
|
||||
subnet = {'tenant_id': tenant_id,
|
||||
'network_id': net_id,
|
||||
'id': subnet_id,
|
||||
'cidr': cidr,
|
||||
'name': 'FakeSubnet',
|
||||
'ip_version': 4,
|
||||
'gateway_ip': gateway_ip,
|
||||
'enable_dhcp': enable_dhcp,
|
||||
'dns_nameservers': dns_nameservers,
|
||||
'db_version': self.dbversion}
|
||||
return FakeContext(subnet)
|
||||
|
||||
def _get_port_context(self, tenant_id, net_id, port_id,
|
||||
fixed_ips, binding_profile):
|
||||
# sample data for testing purpose only.
|
||||
|
@ -297,7 +192,7 @@ class TestDFMechDriver(base.BaseTestCase):
|
|||
'provider:segmentation_id': seg_id,
|
||||
'router:external': False,
|
||||
'mtu': 1450,
|
||||
'db_version': self.dbversion}
|
||||
'revision_number': self.dbversion}
|
||||
segments = [{'segmentation_id': seg_id}]
|
||||
return FakeNetworkContext(network, segments)
|
||||
|
||||
|
@ -386,6 +281,66 @@ class TestDFMechDriverRevision(test_plugin.Ml2PluginV2TestCase):
|
|||
sg['id'], rule['id'], sg['tenant_id'],
|
||||
sg_version=newer_sg['revision_number'])
|
||||
|
||||
def _test_create_network_revision(self):
|
||||
with self.network() as n:
|
||||
network = n['network']
|
||||
self.assertGreater(network['revision_number'], 0)
|
||||
self.nb_api.create_lswitch.assert_called_with(
|
||||
id=network['id'], topic=network['tenant_id'],
|
||||
name=network['name'],
|
||||
network_type=network['provider:network_type'],
|
||||
segmentation_id=network['provider:segmentation_id'],
|
||||
router_external=network['router:external'],
|
||||
mtu=network['mtu'], version=network['revision_number'],
|
||||
subnets=[])
|
||||
return network
|
||||
|
||||
def test_create_network_revision(self):
|
||||
self._test_create_network_revision()
|
||||
|
||||
def test_create_update_delete_subnet_network_revision(self):
|
||||
network = self._test_create_network_revision()
|
||||
with self.subnet(network={'network': network}) as s:
|
||||
subnet = s['subnet']
|
||||
subnet_id = s['subnet']['id']
|
||||
|
||||
new_network = self.driver.get_network(self.context, network['id'])
|
||||
self.assertGreater(new_network['revision_number'],
|
||||
network['revision_number'])
|
||||
self.nb_api.add_subnet.assert_called_with(
|
||||
subnet_id, network['id'], subnet['tenant_id'], name=subnet['name'],
|
||||
nw_version=new_network['revision_number'],
|
||||
enable_dhcp=subnet['enable_dhcp'], cidr=subnet['cidr'],
|
||||
dhcp_ip=mock.ANY, gateway_ip=subnet['gateway_ip'],
|
||||
dns_nameservers=subnet['dns_nameservers'],
|
||||
host_routes=subnet['host_routes'])
|
||||
|
||||
data = {'subnet': {'name': 'updated'}}
|
||||
req = self.new_update_request('subnets', data, subnet_id)
|
||||
req.get_response(self.api)
|
||||
network = new_network
|
||||
new_network = self.driver.get_network(self.context, network['id'])
|
||||
self.assertGreater(new_network['revision_number'],
|
||||
network['revision_number'])
|
||||
self.nb_api.update_subnet.assert_called_with(
|
||||
subnet_id, network['id'], subnet['tenant_id'], name='updated',
|
||||
nw_version=new_network['revision_number'],
|
||||
enable_dhcp=subnet['enable_dhcp'], cidr=subnet['cidr'],
|
||||
dhcp_ip=mock.ANY, gateway_ip=subnet['gateway_ip'],
|
||||
dns_nameservers=subnet['dns_nameservers'],
|
||||
host_routes=subnet['host_routes'])
|
||||
|
||||
network = new_network
|
||||
req = self.new_delete_request('subnets', subnet_id)
|
||||
req.get_response(self.api)
|
||||
network = new_network
|
||||
new_network = self.driver.get_network(self.context, network['id'])
|
||||
self.assertGreater(new_network['revision_number'],
|
||||
network['revision_number'])
|
||||
self.nb_api.delete_subnet.assert_called_with(
|
||||
subnet_id, network['id'], subnet['tenant_id'],
|
||||
nw_version=new_network['revision_number'])
|
||||
|
||||
|
||||
class FakeNetworkContext(object):
|
||||
"""To generate network context for testing purposes only."""
|
||||
|
|
Loading…
Reference in New Issue