May created ZOOKEEPER-4773: ------------------------------ Summary: Ephemeral node is not deleted when all followers are blocked with leader Key: ZOOKEEPER-4773 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4773 Project: ZooKeeper Issue Type: Bug Components: quorum, server Affects Versions: 3.9.1, 3.8.3 Reporter: May
The test case EphemeralNodeDeletionTest describes that a follower loses its connection with leader when the client writes an ephemeral node, and it should delete the node after the client closed. However, the case fails when I make all followers lose connections. To reproduce the bug, I simply modified testEphemeralNodeDeletion() as following: {code:java} // 2: inject network problem in two followers ArrayList<CustomQuorumPeer> followers = getFollowers(); for (CustomQuorumPeer follower : followers) { follower.setInjectError(true); } //CustomQuorumPeer follower = (CustomQuorumPeer) getByServerState(mt, ServerState.FOLLOWING); //follower.setInjectError(true); // 3: close the session so that ephemeral node is deleted zk.close(); // remove the error //follower.setInjectError(false); for (CustomQuorumPeer follower : followers) { follower.setInjectError(false); assertTrue(ClientBase.waitForServerUp("127.0.0.1:" + follower.getClientPort(), CONNECTION_TIMEOUT), "Faulted Follower should have joined quorum by now"); } {code} And here is added method getFollowers(): {code:java} private ArrayList<CustomQuorumPeer> getFollowers() { ArrayList<CustomQuorumPeer> followers = new ArrayList<>(); for (int i = 0; i <= mt.length - 1; i++) { QuorumPeer quorumPeer = mt[i].getQuorumPeer(); if (null != quorumPeer && ServerState.FOLLOWING == quorumPeer.getPeerState()) { followers.add((CustomQuorumPeer)quorumPeer); } } return followers; } {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)