Pavel Zdeněk wrote:
Hello everybody,
i am having serious problems with my application based on
DemuxingProtocolCodecFactory. By progressive stripping of the code to
get minimal presentable part, i had ended up recognizing that
example.sumup (which is the only example based on DemuxingP.C.F.)
produces the same misbehavior.
I have taken vanilla sumup.codec example, making two following
modifications:
- changing the timeouts on read/write to ease debugging
- in Server, adding one more LoggingFilter BEFORE codec, making it
first filter in the chain
On executing "Client 1 2" the log is saying
CREATED
CREATED
OPENED
OPENED
SENT: HeapBuffer[pos=0 lim=10 cap=16: 00 01 00 00 00 00 00 00 00 01]
SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
SENT: 0:ADD(1)
SENT: HeapBuffer[pos=0 lim=10 cap=16: 00 01 00 00 00 01 00 00 00 02]
SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
SENT: 1:ADD(2)
My understanding is, that IoHandler produces only one message as
expected, but there are actually two messages written by codec. The
second one is always of zero size, but the action is taken anyway
(filterWrite is executed).
I have tracked the dual chain execution to method
ProtocolCodecFilter.filterWrite, where you first call
((ProtocolEncoderOutputImpl)encoderOut).flushWithoutFuture();
and then immediately
nextFilter.filterWrite(session, new MessageWriteRequest(writeRequest));
where only the encoderOut holds the required encoded content (16
bytes) and and the second call only shuffles a bogus request with zero
data. This behavior is unusable for me, because i have used the filter
chain facility for somewhat elaborate purposes and all that machinery
is fired twice for every outgoing message. Yes i could easily write
very simple filter throwing away any write request with zero data, but
this is so strangely serious misbehavior that i am asking someone to
reproduce first or tell me my sins.
Cheers,
Pavel Zdenek
Ok, so I checked the code. It hasn't changed since the first version of
MINA so it's not a regression. Funny enough, I have posted the same
question one year ago :
http://mail-archives.apache.org/mod_mbox/mina-dev/200804.mbox/%[email protected]%3e
So basically, as dumb as it sounds, the empty message is written *just*
to increment a counter of sent messages. There is obviously a better way
to do that, but I didn't had time yet to find a solution.
Hope it helps...
--
--
cordialement, regards,
Emmanuel Lécharny
www.iktek.com
directory.apache.org