You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "May (Jira)" <ji...@apache.org> on 2023/11/27 11:05:00 UTC

[jira] [Created] (ZOOKEEPER-4773) Ephemeral node is not deleted when all followers are blocked with leader

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)