Handle IPAddressGenerationFailure during get_dhcp_port

If a network/subnet is deleted while the dhcp agent is trying
to get/create a dhcp port for that network, the exception
will be raised because no IP Allocation Range is available.

However, this particular failure mode causes just noise, because
the dhcp agent can cope with it without problems.

A follow-up patch will deal with the other exception traces during
create_dhcp_port

Partial-bug: #1253344

Change-Id: I7fe35455ce905daa22ff96367e120864a7d3fb92
This commit is contained in:
armando-migliaccio 2013-11-21 13:07:28 -08:00
parent cbe91fda7b
commit 8faa5f076b
2 changed files with 6 additions and 1 deletions

View File

@ -168,7 +168,8 @@ class DhcpRpcCallbackMixin(object):
retval = plugin.create_port(context, dict(port=port_dict)) retval = plugin.create_port(context, dict(port=port_dict))
except (db_exc.DBError, except (db_exc.DBError,
n_exc.NetworkNotFound, n_exc.NetworkNotFound,
n_exc.SubnetNotFound) as e: n_exc.SubnetNotFound,
n_exc.IpAddressGenerationFailure) as e:
LOG.warn(_("Port for network %(net_id)s could not be created: " LOG.warn(_("Port for network %(net_id)s could not be created: "
"%(reason)s") % {"net_id": network_id, 'reason': e}) "%(reason)s") % {"net_id": network_id, 'reason': e})
return return

View File

@ -138,6 +138,10 @@ class TestDhcpRpcCallackMixin(base.BaseTestCase):
self._test_get_dhcp_port_with_failures( self._test_get_dhcp_port_with_failures(
raise_create_port=n_exc.SubnetNotFound(subnet_id='b')) raise_create_port=n_exc.SubnetNotFound(subnet_id='b'))
def test_get_dhcp_port_catch_ip_generation_failure_on_create_port(self):
self._test_get_dhcp_port_with_failures(
raise_create_port=n_exc.IpAddressGenerationFailure(net_id='a'))
def _test_get_dhcp_port_create_new(self, update_port=None): def _test_get_dhcp_port_create_new(self, update_port=None):
self.plugin.get_network.return_value = dict(tenant_id='tenantid') self.plugin.get_network.return_value = dict(tenant_id='tenantid')
create_spec = dict(tenant_id='tenantid', device_id='devid', create_spec = dict(tenant_id='tenantid', device_id='devid',