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