sumit agrawal created ZOOKEEPER-2977:
----------------------------------------
Summary: Concurrency for addAuth corrupts quorum packets
Key: ZOOKEEPER-2977
URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2977
Project: ZooKeeper
Issue Type: Bug
Components: quorum
Affects Versions: 3.4.9
Environment: Affects all version in 3.4.x
Reporter: sumit agrawal
When client performs multiple times addAuth with different credential at
follower concurrently, the communication between follower gets corrupt. This
causes shutdown of Follower due to the failure.
Analysis:
In org.apache.zookeeper.server.quorum.QuorumPacket.serialize method,
* call a_.startVector(authinfo,"authinfo"); which write the length of authinfo
to packet (suppose it writes length 1)
* get length of authinfo to write all details in loop (here gets length as 2)
<-- Here in concurrency scenario, buffer gets corrupt having extra bytes in
channel for additional authinfo.
So When Leader reads next quorum packet, it reads previous extra bytes
(incorrect) and possibly identify greater size of message (as corrupt byte
pattern) causes exception...
Coordination > Unexpected exception causing shutdown while sock still open
(LearnerHandler.java:633)
java.io.IOException: Unreasonable length = 1885430131
ServerCnxn.getAuthInfo returns Unmodifiable list, but while addAuthInfo, there
is no check. So this causes concurrency issue.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)