]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Handle IPAddressGenerationFailure during get_dhcp_port
authorarmando-migliaccio <armamig@gmail.com>
Thu, 21 Nov 2013 21:07:28 +0000 (13:07 -0800)
committerarmando-migliaccio <armamig@gmail.com>
Thu, 21 Nov 2013 21:08:14 +0000 (13:08 -0800)
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

neutron/db/dhcp_rpc_base.py
neutron/tests/unit/test_db_rpc_base.py

index bf7a3d07ef3b4980a48091f6a7f9ebe214930a06..93fe58a5a8160da96d093853ccfbf0a5b778386f 100644 (file)
@@ -168,7 +168,8 @@ class DhcpRpcCallbackMixin(object):
                 retval = plugin.create_port(context, dict(port=port_dict))
             except (db_exc.DBError,
                     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: "
                            "%(reason)s") % {"net_id": network_id, 'reason': e})
                 return
index e9f4a78be1a154bad8d0c4a02121988d85c780b0..617169c56bcb39994865dafdc02fdab72ab5e925 100644 (file)
@@ -138,6 +138,10 @@ class TestDhcpRpcCallackMixin(base.BaseTestCase):
         self._test_get_dhcp_port_with_failures(
             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):
         self.plugin.get_network.return_value = dict(tenant_id='tenantid')
         create_spec = dict(tenant_id='tenantid', device_id='devid',