[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-3830?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17110070#comment-17110070
 ] 

Keli Wang commented on ZOOKEEPER-3830:
--------------------------------------

Since this issue and ZOOKEEPER-3829 looks pretty similar, I think it's OK to 
mark those two as duplicate issue.

 

The code about lastSeenQuorumVerifier is in 
org.apache.zookeeper.server.quorum.Leader#lead method.
{code:java}
// set quorum verifier in org.apache.zookeeper.server.quorum.Leader#lead
newLeaderProposal.addQuorumVerifier(self.getQuorumVerifier());
if (self.getLastSeenQuorumVerifier().getVersion() > 
self.getQuorumVerifier().getVersion()){
   newLeaderProposal.addQuorumVerifier(self.getLastSeenQuorumVerifier());
}

// use lastSeenQuorumVerifier in 
org.apache.zookeeper.server.quorum.Leader#startZkServer
LOG.info("Have quorum of supporters, sids: [ "
        + newLeaderProposal.ackSetsToString()
        + " ]; starting up and setting last processed zxid: 0x{}",
        Long.toHexString(zk.getZxid()));

/*
 * ZOOKEEPER-1324. the leader sends the new config it must complete
 *  to others inside a NEWLEADER message (see LearnerHandler where
 *  the NEWLEADER message is constructed), and once it has enough
 *  acks we must execute the following code so that it applies the
 *  config to itself.
 */
QuorumVerifier newQV = self.getLastSeenQuorumVerifier();

Long designatedLeader = getDesignatedLeader(newLeaderProposal, zk.getZxid());   
// check here                                      

self.processReconfig(newQV, designatedLeader, zk.getZxid(), true);
if (designatedLeader != self.getId()) {
    allowedToCommit = false;
}
{code}

> After add a new node, zookeeper cluster won't commit any proposal if this new 
> node is leader
> --------------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-3830
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3830
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.5.6, 3.5.7, 3.5.8
>         Environment: Zookeeper 3.5.8
> JDK 1.8
>            Reporter: Keli Wang
>            Assignee: Mate Szalay-Beko
>            Priority: Major
>         Attachments: reproduce-zkclusters.tar.gz
>
>
> I have a zookeeper cluster with 3 nodes, node3 is the leader of the cluster.
>  
> {code:java}
> server.1=node1
> server.2=node2
> server.3=node3 # current leader{code}
> With dynamic reconfiguration disabled, I scale this cluster to 4 nodes with 2 
> steps:
>  # Start node4 with new config, now node4 is a follower.
>  # Modify config and restart node1, node2 and node3 one by one.
> The new cluster config is:
> {code:java}
> server.1=node1
> server.2=node2
> server.3=node3 
> server.4=node4 # current leader
> {code}
> After restart, node4 is the leader of this cluster. But I cannot connect to 
> this cluster using zkCli now, zkCli keeps in CONNECTING status.
> If I restart node4, node3 will be the new leader, and now I can connected to 
> cluster using zkCli again.
> After some digging, I find node4's Leader#allowedToCommit field is false, so 
> this cluster won't commit any new proposals.
>  
> I have attached a zookeeper cluster to reproduce this problem. The cluster in 
> the attachment can run in one single machine.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to