[ https://issues.apache.org/jira/browse/ZOOKEEPER-2091?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14275242#comment-14275242 ]
Rakesh R commented on ZOOKEEPER-2091: ------------------------------------- OK. Thank you [~hdeng] and [~fournc] for the explanation. Will fix the case of #sendPacket() now. I'd like to learn more on the below code flow, any idea when the following condition can occur. Does this harm the clients, should we need to address the possible error resulting this. {code} if (pendingQueue.size() == 0) { throw new IOException("Nothing in the queue, but got " + replyHdr.getXid()); } {code} > Possible logic error in ClientCnxnSocketNIO > ------------------------------------------- > > Key: ZOOKEEPER-2091 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2091 > Project: ZooKeeper > Issue Type: Bug > Components: java client > Affects Versions: 3.4.6 > Reporter: Cheng > Assignee: Rakesh R > Fix For: 3.5.1 > > Attachments: ZOOKEEPER-2091.patch > > > When SASL authentication is enabled, the ZooKeeper client will finally call > ClientCnxnSocketNIO#sendPacket(Packet p) to send a packet to server: > @Override > void sendPacket(Packet p) throws IOException { > SocketChannel sock = (SocketChannel) sockKey.channel(); > if (sock == null) { > throw new IOException("Socket is null!"); > } > p.createBB(); > ByteBuffer pbb = p.bb; > sock.write(pbb); > } > One problem I can see is that the sock is non-blocking, so when the sock's > output buffer is full(theoretically), only part of the Packet is sent out and > the communication will break. -- This message was sent by Atlassian JIRA (v6.3.4#6332)