[
https://issues.apache.org/jira/browse/ZOOKEEPER-2091?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14244878#comment-14244878
]
Hongchao Deng commented on ZOOKEEPER-2091:
------------------------------------------
Thanks [~fournc] for the in-depth thinking. I do have another JIRA,
ZOOKEEPER-2069 to drive Netty things.
Back to this issue. The problem I can find here is that SendPacket() assumes a
successful write. The other problem is that Sasl process implementation is too
hackish. It stops/puts aside the nonblocking write logic. My point is that this
is a good chance to fix it.
> 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)