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


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.

Reply via email to