From c522e5be023182b4b89b3721c5be3870366325a5 Mon Sep 17 00:00:00 2001 From: Simon Westphahl Date: Mon, 4 Dec 2023 08:13:07 +0100 Subject: [PATCH] Check if suspended callback is set before calling The suspended callback is curently only used by the schedulers. Check if the callback is set before calling it to avoid the following exception: ERROR zuul.zk.base.ZooKeeperClient: Exception calling listener: Traceback (most recent call last): File "/opt/zuul/lib/python3.11/site-packages/kazoo/protocol/connection.py", line 602, in _connect_attempt response = self._read_socket(read_timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/zuul/lib/python3.11/site-packages/kazoo/protocol/connection.py", line 435, in _read_socket header, buffer, offset = self._read_header(read_timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/zuul/lib/python3.11/site-packages/kazoo/protocol/connection.py", line 225, in _read_header b = self._read(4, timeout) ^^^^^^^^^^^^^^^^^^^^^^ File "/opt/zuul/lib/python3.11/site-packages/kazoo/protocol/connection.py", line 260, in _read raise ConnectionDropped('socket connection broken') kazoo.exceptions.ConnectionDropped: socket connection broken During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/zuul/lib/python3.11/site-packages/zuul/zk/__init__.py", line 98, in _connectionListener listener() File "/opt/zuul/lib/python3.11/site-packages/zuul/zk/nodepool.py", line 103, in _onSuspended self.connection_suspended_callback() TypeError: 'NoneType' object is not callable Change-Id: I5402096d0c7239f357d385841d1d886f97221ec2 --- zuul/zk/nodepool.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zuul/zk/nodepool.py b/zuul/zk/nodepool.py index 1d7ddab3a1..cbac983718 100644 --- a/zuul/zk/nodepool.py +++ b/zuul/zk/nodepool.py @@ -100,7 +100,8 @@ class ZooKeeperNodepool(ZooKeeperBase): self._node_tree = None def _onSuspended(self): - self.connection_suspended_callback() + if self.connection_suspended_callback: + self.connection_suspended_callback() def _nodePath(self, node): return "%s/%s" % (self.NODES_ROOT, node)