Revert "Switch to use cast method in dhcp_ready_on_ports method"
This reverts commit1a686fb401
. With https://review.opendev.org/#/c/709824/ and this reverted, we have seen things work better in our large scale environment. Although cast() will return immediately, it can overwhelm the server by sending a lot of messages quickly, and won't necessarily prioritize the "new" ones, which are typically more important to mark as provisioned first. Change-Id: Ie61b222eec87c5613efc6a33553844c64a655a57 Related-bug: #1864675 (cherry picked from commitf31ae53dd5
)
This commit is contained in:
parent
7b406a832c
commit
a8e526bb0f
|
@ -256,6 +256,9 @@ class DhcpAgent(manager.Manager):
|
|||
LOG.info("DHCP configuration for ports %s is completed",
|
||||
ports_to_send)
|
||||
continue
|
||||
except oslo_messaging.MessagingTimeout:
|
||||
LOG.error("Timeout notifying server of ports ready. "
|
||||
"Retrying...")
|
||||
except Exception:
|
||||
LOG.exception("Failure notifying DHCP server of "
|
||||
"ready DHCP ports. Will retry on next "
|
||||
|
@ -785,8 +788,8 @@ class DhcpPluginApi(object):
|
|||
def dhcp_ready_on_ports(self, port_ids):
|
||||
"""Notify the server that DHCP is configured for the port."""
|
||||
cctxt = self.client.prepare(version='1.5')
|
||||
cctxt.cast(self.context, 'dhcp_ready_on_ports',
|
||||
port_ids=port_ids)
|
||||
return cctxt.call(self.context, 'dhcp_ready_on_ports',
|
||||
port_ids=port_ids)
|
||||
|
||||
def get_networks(self, filters=None, fields=None):
|
||||
"""Get networks.
|
||||
|
|
|
@ -455,6 +455,20 @@ class TestDhcpAgent(base.BaseTestCase):
|
|||
dhcp.start_ready_ports_loop()
|
||||
spawn.assert_called_once_with(dhcp._dhcp_ready_ports_loop)
|
||||
|
||||
def test__dhcp_ready_ports_doesnt_log_exception_on_timeout(self):
|
||||
dhcp = dhcp_agent.DhcpAgent(HOSTNAME)
|
||||
dhcp.dhcp_ready_ports = set(range(4))
|
||||
|
||||
with mock.patch.object(dhcp.plugin_rpc, 'dhcp_ready_on_ports',
|
||||
side_effect=oslo_messaging.MessagingTimeout):
|
||||
# exit after 2 iterations
|
||||
with mock.patch.object(dhcp_agent.eventlet, 'sleep',
|
||||
side_effect=[0, 0, RuntimeError]):
|
||||
with mock.patch.object(dhcp_agent.LOG, 'exception') as lex:
|
||||
with testtools.ExpectedException(RuntimeError):
|
||||
dhcp._dhcp_ready_ports_loop()
|
||||
self.assertFalse(lex.called)
|
||||
|
||||
def test__dhcp_ready_ports_loop(self):
|
||||
dhcp = dhcp_agent.DhcpAgent(HOSTNAME)
|
||||
dhcp.dhcp_ready_ports = set(range(4))
|
||||
|
|
Loading…
Reference in New Issue