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)