[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-4844?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

mutu updated ZOOKEEPER-4844:
----------------------------
    Description: 
{*}Symptom:{*}If a thread is doing a file write and stuck in writeLongToFile, 
this thread will hang. This blocking shoud be handled by the zookeeper via 
PING.  However, if the QuorumPeer executes the writeLongToFile and encounters a 
fail-slow disk, the entire follower can be stuck. The leader will abandon this 
follower, but the follower believes that it is a follower.

Callstack is as following:
{code:java}
at 
org.apache.zookeeper.common.AtomicFileOutputStream.write(AtomicFileOutputStream.java:72)
    
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)    
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)    
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)    
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)   
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)    
at java.io.BufferedWriter.flush(BufferedWriter.java:254)    
at 
org.apache.zookeeper.common.AtomicFileWritingIdiom.<init>(AtomicFileWritingIdiom.java:72)
    
at 
org.apache.zookeeper.common.AtomicFileWritingIdiom.<init>(AtomicFileWritingIdiom.java:54)
    
at 
org.apache.zookeeper.server.quorum.QuorumPeer.writeLongToFile(QuorumPeer.java:2233)
    
at 
org.apache.zookeeper.server.quorum.QuorumPeer.setAcceptedEpoch(QuorumPeer.java:2262)
    
at 
org.apache.zookeeper.server.quorum.Learner.registerWithLeader(Learner.java:510) 
   
at org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:91)   
 
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1556) 
{code}
*Root cause:* The Quorum is blocked in writeLongToFile and can not execute 
readPacket, so no timeout exception is arised to trigger the error handler.

Moreover, this  problem cannot be handle by add 
"-Dlearner.asyncSending=true"@4070

  was:
{*}Symptom:{*}If a thread is doing a file write and stuck in writeLongToFile, 
this thread will hang. This blocking shoud be handled by the zookeeper via 
PING.  However, if the QuorumPeer executes the writeLongToFile and encounters a 
fail-slow disk, the entire follower can be stuck. The leader will abandon this 
follower, but the follower believes that it is a follower.

Callstack is as following:
{code:java}
at 
org.apache.zookeeper.common.AtomicFileOutputStream.write(AtomicFileOutputStream.java:72)
    
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)    
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)    
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)    
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)   
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)    
at java.io.BufferedWriter.flush(BufferedWriter.java:254)    
at 
org.apache.zookeeper.common.AtomicFileWritingIdiom.<init>(AtomicFileWritingIdiom.java:72)
    
at 
org.apache.zookeeper.common.AtomicFileWritingIdiom.<init>(AtomicFileWritingIdiom.java:54)
    
at 
org.apache.zookeeper.server.quorum.QuorumPeer.writeLongToFile(QuorumPeer.java:2233)
    
at 
org.apache.zookeeper.server.quorum.QuorumPeer.setAcceptedEpoch(QuorumPeer.java:2262)
    
at 
org.apache.zookeeper.server.quorum.Learner.registerWithLeader(Learner.java:510) 
   
at org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:91)   
 
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1556) 
{code}
*Root cause:* The Quorum is blocked in writeLongToFile and can not execute 
readPacket, so no timeout exception is arised to trigger the error handler.


> Fail-slow disk while executing writeLongToFile can cause the follower to hang
> -----------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-4844
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4844
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.10.0
>            Reporter: mutu
>            Priority: Major
>         Attachments: system1.log, system2.log, system3.log
>
>
> {*}Symptom:{*}If a thread is doing a file write and stuck in writeLongToFile, 
> this thread will hang. This blocking shoud be handled by the zookeeper via 
> PING.  However, if the QuorumPeer executes the writeLongToFile and encounters 
> a fail-slow disk, the entire follower can be stuck. The leader will abandon 
> this follower, but the follower believes that it is a follower.
> Callstack is as following:
> {code:java}
> at 
> org.apache.zookeeper.common.AtomicFileOutputStream.write(AtomicFileOutputStream.java:72)
>     
> at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)    
> at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)    
> at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)    
> at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)   
> at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)    
> at java.io.BufferedWriter.flush(BufferedWriter.java:254)    
> at 
> org.apache.zookeeper.common.AtomicFileWritingIdiom.<init>(AtomicFileWritingIdiom.java:72)
>     
> at 
> org.apache.zookeeper.common.AtomicFileWritingIdiom.<init>(AtomicFileWritingIdiom.java:54)
>     
> at 
> org.apache.zookeeper.server.quorum.QuorumPeer.writeLongToFile(QuorumPeer.java:2233)
>     
> at 
> org.apache.zookeeper.server.quorum.QuorumPeer.setAcceptedEpoch(QuorumPeer.java:2262)
>     
> at 
> org.apache.zookeeper.server.quorum.Learner.registerWithLeader(Learner.java:510)
>     
> at org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:91) 
>    
> at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1556) 
> {code}
> *Root cause:* The Quorum is blocked in writeLongToFile and can not execute 
> readPacket, so no timeout exception is arised to trigger the error handler.
> Moreover, this  problem cannot be handle by add 
> "-Dlearner.asyncSending=true"@4070



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to