There is a 3-nodes ZK cluster, i.e. A B C. A is in read only mode because of network problem, B C are working well.
And a kazoo client is configured with A B C, and it's connected to A.
Expected Behavior
The instance can find B or C, recover its ability to write something.
Actual Behavior
It can't find B C. According to the DEBUG log, it stopped to try B or C when it found A was 'ro'.
Snippet to Reproduce the Problem
Accoding the client.py code, the _ro_mode property only is recreated when a connection retry takes place. If the current connection connected to a read only server is table, it will never retry for a new connection, so the POC code below will show that it will not find the RW servers.
not find writable False
2021-08-10 20:00:27 Tue connection.py[line:121] DEBUG Pinging server for r/w: zk3:12181
not find writable False
2021-08-10 20:00:28 Tue connection.py[line:121] DEBUG Pinging server for r/w: zk3:12181
not find writable False
2021-08-10 20:00:29 Tue connection.py[line:121] DEBUG Pinging server for r/w: zk3:12181
not find writable False
2021-08-10 20:00:30 Tue connection.py[line:121] DEBUG Pinging server for r/w: zk3:12181
not find writable False
2021-08-10 20:00:31 Tue connection.py[line:121] DEBUG Pinging server for r/w: zk3:12181
not find writable False
Specifications
Kazoo version: 2.7
Result of pip list command:
Zookeeper version: 3.5.9
Zookeeper configuration: put here any useful ZK configuration (authentication, encryption, number of ZK members, number of (concurrent?) clients, Java version, krb5 version, etc.) 3 nodes
There is a 3-nodes ZK cluster, i.e. A B C. A is in read only mode because of network problem, B C are working well. And a kazoo client is configured with A B C, and it's connected to A.
Expected Behavior
The instance can find B or C, recover its ability to write something.
Actual Behavior
It can't find B C. According to the DEBUG log, it stopped to try B or C when it found A was 'ro'.
Snippet to Reproduce the Problem
Accoding the client.py code, the
_ro_mode
property only is recreated when a connection retry takes place. If the current connection connected to a read only server is table, it will never retry for a new connection, so the POC code below will show that it will not find the RW servers.Logs with logging in DEBUG mode
Specifications
pip list
command: