Follower.followLeader throws SocketException, then shutdown Follower
--------------------------------------------------------------------

                 Key: ZOOKEEPER-1017
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1017
             Project: ZooKeeper
          Issue Type: Bug
          Components: quorum
    Affects Versions: 3.3.3
         Environment: JDK1.6.0_17/CentOS5.5
            Reporter: tom liu


i use three node to deploy zkcluster. but follower node throws SocketException 
twice every day.
2011-03-15 14:15:48,260 - WARN  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:Follower@90] 
- Exception when following the leader
java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at 
java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at 
org.apache.zookeeper.server.quorum.Learner.writePacket(Learner.java:126)
        at org.apache.zookeeper.server.quorum.Learner.ping(Learner.java:361)
        at 
org.apache.zookeeper.server.quorum.Follower.processPacket(Follower.java:116)
        at 
org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:80)
        at 
org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:644)

i found the reason is that Follower do not reponse Leader's Ping just on time.
so, i add some logs. finnally, i found that, in 
org.apache.zookeeper.server.SyncRequestProcessor: 
{noformat}
    public void processRequest(Request request) {
        // request.addRQRec(">sync");
        //TODO tom liu added
        if(LOG.isDebugEnabled()) {
                LOG.debug("Processing request::" + request);
        }
        queuedRequests.add(request);
        //TODO tom liu added
        if(LOG.isDebugEnabled()) {
                LOG.debug("Processing request::" + request);
        }
    }
{noformat}

that log is:
2011-03-15 14:15:34,515 - DEBUG 
[QuorumPeer:/0:0:0:0:0:0:0:0:2181:SyncRequestProcessor@189] - Processing 
request::sessionid:0x22e9907b5d50000 type:setData cxid:0x70b55 
zxid:0xd50000a73f txntype:5 reqpath:n/a
2011-03-15 14:15:48,259 - DEBUG 
[QuorumPeer:/0:0:0:0:0:0:0:0:2181:SyncRequestProcessor@194] - Processing 
request::sessionid:0x22e9907b5d50000 type:setData cxid:0x70b55 
zxid:0xd50000a73f txntype:5 reqpath:n/a

so: elapsed time=13744, LearnerHandler's ia.readRecord TimeOut on run method, 
then Leader shutdown, and re-elect Leader process.

my question is: why the queuedRequests.add statement take so long time?

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to