diff --git a/neutron/db/agentschedulers_db.py b/neutron/db/agentschedulers_db.py index 6c8ada03d2b..c5c0bc70b0a 100644 --- a/neutron/db/agentschedulers_db.py +++ b/neutron/db/agentschedulers_db.py @@ -407,9 +407,9 @@ class DhcpAgentSchedulerDbMixin(dhcpagentscheduler def remove_network_from_dhcp_agent(self, context, id, network_id, notify=True): agent = self._get_agent(context, id) - binding_obj = network.NetworkDhcpAgentBinding.get_object( + deleted_bindings = network.NetworkDhcpAgentBinding.delete_objects( context, network_id=network_id, dhcp_agent_id=id) - if not binding_obj: + if not deleted_bindings: raise das_exc.NetworkNotHostedByDhcpAgent( network_id=network_id, agent_id=id) @@ -428,7 +428,6 @@ class DhcpAgentSchedulerDbMixin(dhcpagentscheduler except n_exc.PortNotFound: LOG.debug("DHCP port %s has been deleted concurrently", port['id']) - binding_obj.delete() if not notify: return diff --git a/neutron/tests/unit/db/test_agentschedulers_db.py b/neutron/tests/unit/db/test_agentschedulers_db.py index c81e2f59139..f0cdbcf133c 100644 --- a/neutron/tests/unit/db/test_agentschedulers_db.py +++ b/neutron/tests/unit/db/test_agentschedulers_db.py @@ -1472,6 +1472,11 @@ class OvsDhcpAgentNotifierTestCase(test_agent.AgentDBTestMixIn, self._remove_network_from_dhcp_agent(hosta_id, network_id) + # Call it second time, it should be already deleted so should 409 be + # returned this time + self._remove_network_from_dhcp_agent( + hosta_id, network_id, + expected_code=exc.HTTPConflict.code) self.dhcp_notifier_cast.assert_called_with( mock.ANY, 'network_delete_end', {'network_id': network_id,