[
https://issues.apache.org/jira/browse/ZOOKEEPER-916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12928559#action_12928559
]
Hudson commented on ZOOKEEPER-916:
----------------------------------
Integrated in ZooKeeper-trunk #991 (See
[https://hudson.apache.org/hudson/job/ZooKeeper-trunk/991/])
ZOOKEEPER-916. Problem receiving messages from subscribed channels in c++
client
> Problem receiving messages from subscribed channels in c++ client
> ------------------------------------------------------------------
>
> Key: ZOOKEEPER-916
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-916
> Project: Zookeeper
> Issue Type: Bug
> Components: contrib-hedwig
> Reporter: Ivan Kelly
> Assignee: Ivan Kelly
> Attachments: ZOOKEEPER-916.patch
>
>
> We see this bug with receiving messages from a subscribed channel. This
> problem seems to happen with larger messages. The flow is to first read at
> least 4 bytes from the socket channel. Extract the first 4 bytes to get the
> message size. If we've read enough data into the buffer already, we're done
> so invoke the messageReadCallbackHandler passing the channel and message
> size. If not, then do an async read for at least the remaining amount of
> bytes in the message from the socket channel. When done, invoke the
> messageReadCallbackHandler.
> The problem seems that when the second async read is done, the same
> sizeReadCallbackHandler is invoked instead of the messageReadCallbackHandler.
> The result is that we then try to read the first 4 bytes again from the
> buffer. This will get a random message size and screw things up. I'm not
> sure if it's an incorrect use of the boost asio async_read function or we're
> doing the boost bind to the callback function incorrectly.
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler system:0,512 channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler: size of buffer before reading message
> size: 512 channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler: size of incoming message 599,
> currently in buffer 508 channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler: Still have more data to read, 91 from
> channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler system:0, 91 channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler: size of buffer before reading message
> size: 599 channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler: size of incoming message 134287360,
> currently in buffer 595 channel(0x80b7a18)
> 101015 15:30:40.108 DEBUG hedwig.channel.cpp -
> DuplexChannel::sizeReadCallbackHandler: Still have more data to read,
> 134286765 from channel(0x80b7a18)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.