Merge "Avoid dhcp agent race condition on subnet and network delete"

This commit is contained in:
Jenkins 2013-10-31 09:19:56 +00:00 committed by Gerrit Code Review
commit 97308f1b78
3 changed files with 12 additions and 7 deletions

View File

@ -1402,6 +1402,14 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
with context.session.begin(subtransactions=True):
self._delete_port(context, id)
def delete_ports(self, context, filters):
with context.session.begin(subtransactions=True):
ports = self._get_ports_query(
context, filters=filters).with_lockmode('update')
if ports:
for port in ports:
self.delete_port(context, port['id'])
def _delete_port(self, context, id):
port = self._get_port(context, id)

View File

@ -179,10 +179,7 @@ class DhcpRpcCallbackMixin(object):
{'network_id': network_id, 'host': host})
plugin = manager.NeutronManager.get_plugin()
filters = dict(network_id=[network_id], device_id=[device_id])
ports = plugin.get_ports(context, filters=filters)
if ports:
plugin.delete_port(context, ports[0]['id'])
plugin.delete_ports(context, filters=filters)
def release_port_fixed_ip(self, context, **kwargs):
"""Release the fixed_ip associated the subnet on a port."""

View File

@ -131,9 +131,9 @@ class TestDhcpRpcCallackMixin(base.BaseTestCase):
device_id='devid')
self.plugin.assert_has_calls([
mock.call.get_ports(mock.ANY, filters=dict(network_id=['netid'],
device_id=['devid'])),
mock.call.delete_port(mock.ANY, 'port_id')])
mock.call.delete_ports(mock.ANY,
filters=dict(network_id=['netid'],
device_id=['devid']))])
def test_release_port_fixed_ip(self):
port_retval = dict(id='port_id', fixed_ips=[dict(subnet_id='a')])