====================
Scenraio:
====================
- A server is sending data to the MINA server which has implemented
"CumulativeProtocolDecoder"
- Server is sending x bytes
- While getting data first thread is getting data from position m instead of
position 0
- Second thread picks the data from 0 to m
- Either of the thread doesn't get the complete data and that's why protocol
decoding is failed
- Data is coming correctly to the socket as confirmed by "tcpdump logs"
- Something which is I am doing wrong or has to be taken care of? How do I
guarantee the only one thread picks up the data and in right order??
- Sorry for being little verbose, but thought it might help to give max info
in problem statement

====================
OS/Etc:
====================
Centos 6
Apache MINA 2.0.4

java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

====================
MINA LOGS:
====================
(2011-10-12
14:18:01,039)(pool-3-thread-45)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a MESSAGE_SENT event for session 35
(2011-10-12
14:18:01,039)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
MESSAGE_RECEIVED has been fired for session 35
(2011-10-12
14:18:01,039)(pool-3-thread-45)(INFO)(LoggingFilter.java)(log)(141)--SENT:
HeapBuffer[pos=0 lim=0 cap=0: empty]
(2011-10-12
14:18:01,039)(pool-3-thread-45)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
MESSAGE_SENT has been fired for session 35
(2011-10-12
14:18:03,039)(pool-3-thread-45)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a SESSION_IDLE event for session 98
(2011-10-12
14:18:03,039)(pool-3-thread-45)(INFO)(LoggingFilter.java)(log)(159)--IDLE
(2011-10-12
14:18:03,039)(pool-3-thread-45)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
SESSION_IDLE has been fired for session 98
(2011-10-12
14:18:04,589)(pool-3-thread-45)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a MESSAGE_RECEIVED event for session 35
(2011-10-12
14:18:04,589)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a MESSAGE_RECEIVED event for session 35
(2011-10-12
14:18:04,590)(pool-3-thread-44)(INFO)(LoggingFilter.java)(log)(141)--RECEIVE
D: HeapBuffer[pos=0 lim=86 cap=256: 10 09 00 00 10 10 00 00 10 11 00 00 10
12 00 00...]
(2011-10-12
14:18:04,590)(pool-3-thread-44)(DEBUG)(ProtocolCodecFilter.java)(messageRece
ived)(220)--Processing a MESSAGE_RECEIVED for session 35
(2011-10-12
14:18:04,590)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(30)
--in.remaining()=86
(2011-10-12
14:18:04,589)(pool-3-thread-45)(INFO)(LoggingFilter.java)(log)(141)--RECEIVE
D: HeapBuffer[pos=0 lim=128 cap=128: 00 D4 60 07 92 80 88 00 CD 01 01 60 07
92 00 00...]
(2011-10-12
14:18:04,590)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(31)
--markValue()=-1
(2011-10-12
14:18:04,590)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(32)
--capacity()=256
(2011-10-12
14:18:04,590)(pool-3-thread-44)(DEBUG)(NewCentralDecoder.java)(doDecode)(36)
--At TOP Remaining=86
(2011-10-12
14:18:04,591)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(60)
--in.remaining()=86
(2011-10-12
14:18:04,592)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(61)
--markValue()=-1
(2011-10-12
14:18:04,592)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(62)
--capacity()=256
(2011-10-12
14:18:04,590)(pool-3-thread-45)(DEBUG)(ProtocolCodecFilter.java)(messageRece
ived)(220)--Processing a MESSAGE_RECEIVED for session 35
(2011-10-12
14:18:04,592)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(64)
--session.getCreationTime()=Wed Oct 12 12:22:12 IST 2011
(2011-10-12
14:18:04,592)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(66)
--getId()=35
(2011-10-12
14:18:04,593)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(70)
--getLastIoTime()=Wed Oct 12 14:18:04 IST 2011
(2011-10-12
14:18:04,593)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(71)
--getLastReaderIdleTime()=Wed Oct 12 12:22:12 IST 2011
(2011-10-12
14:18:04,593)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(72)
--getLastReadTime()=1318409284589
(2011-10-12
14:18:04,593)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(73)
--getLastWriterIdleTime()=Wed Oct 12 12:22:12 IST 2011
(2011-10-12
14:18:04,593)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(74)
--getLastWriteTime()=Wed Oct 12 14:18:01 IST 2011
(2011-10-12
14:18:04,593)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(75)
--getLocalAddress()=/192.168.101.48:8279
(2011-10-12
14:18:04,594)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(76)
--getRemoteAddress()=/121.242.8.166:8974
(2011-10-12
14:18:04,594)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(80)
--getReadMessages()=8
(2011-10-12
14:18:04,594)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(84)
--getWrittenBytes()=715
(2011-10-12
14:18:04,594)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(86)
--getWrittenMessages()=8
(2011-10-12
14:18:04,594)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(91)
--INSIDE HEADER 2 bytes
(2011-10-12
14:18:04,594)(pool-3-thread-44)(TRACE)(NewCentralDecoder.java)(doDecode)(97)
--remainingBytes <= 2048
(2011-10-12
14:18:04,595)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(166
)--This is really a bad packet closing the connection, shall never happen
(2011-10-12
14:18:04,596)(pool-3-thread-44)(ERROR)(NewCentralDecoder.java)(doDecode)(182
)--Session closed, in buffer cleared
(2011-10-12
14:18:04,597)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(30)
--in.remaining()=128
(2011-10-12
14:18:04,597)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(31)
--markValue()=-1
(2011-10-12
14:18:04,597)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(32)
--capacity()=128
(2011-10-12
14:18:04,597)(pool-3-thread-45)(DEBUG)(NewCentralDecoder.java)(doDecode)(36)
--At TOP Remaining=128
 (2011-10-12
14:18:04,598)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(60)
--in.remaining()=128
(2011-10-12
14:18:04,598)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(61)
--markValue()=-1
(2011-10-12
14:18:04,598)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(62)
--capacity()=128
(2011-10-12
14:18:04,598)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(63)
--logging session info for all requests coming to decoder
(2011-10-12
14:18:04,597)(pool-3-thread-46)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a SESSION_CLOSED event for session 35
(2011-10-12
14:18:04,599)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(64)
--session.getCreationTime()=Wed Oct 12 12:22:12 IST 2011
(2011-10-12
14:18:04,599)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(66)
--getId()=35
(2011-10-12
14:18:04,599)(pool-3-thread-46)(INFO)(LoggingFilter.java)(log)(159)--CLOSED
(2011-10-12
14:18:04,599)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(70)
--getLastIoTime()=Wed Oct 12 14:18:04 IST 2011
(2011-10-12
14:18:04,599)(pool-3-thread-46)(ERROR)(CentralMessageHandler.java)(sessionCl
osed)(80)--session closed
(2011-10-12
14:18:04,599)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(71)
--getLastReaderIdleTime()=Wed Oct 12 12:22:12 IST 2011
(2011-10-12
14:18:04,600)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(72)
--getLastReadTime()=1318409284589
(2011-10-12
14:18:04,600)(pool-3-thread-46)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
SESSION_CLOSED has been fired for session 35
(2011-10-12
14:18:04,600)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(73)
--getLastWriterIdleTime()=Wed Oct 12 12:22:12 IST 2011
(2011-10-12
14:18:04,600)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(74)
--getLastWriteTime()=Wed Oct 12 14:18:01 IST 2011
(2011-10-12
14:18:04,600)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(75)
--getLocalAddress()=/192.168.101.48:8279
(2011-10-12
14:18:04,601)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(76)
--getRemoteAddress()=null
(2011-10-12
14:18:04,601)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(80)
--getReadMessages()=8
(2011-10-12
14:18:04,601)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(84)
--getWrittenBytes()=715
(2011-10-12
14:18:04,601)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(86)
--getWrittenMessages()=8
(2011-10-12
14:18:04,601)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(91)
--INSIDE HEADER 2 bytes
(2011-10-12
14:18:04,601)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(97)
--remainingBytes <= 2048
(2011-10-12
14:18:04,602)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(108
)--
(2011-10-12
14:18:04,600)(pool-3-thread-44)(ERROR)(CentralMessageHandler.java)(exception
Caught)(29)--I GOT AN ERROR3 HERE....
(2011-10-12
14:18:04,604)(pool-3-thread-44)(ERROR)(CentralMessageHandler.java)(exception
Caught)(31)--Found a suspect txn, abrupt disconnection from terminal
(2011-10-12
14:18:04,604)(pool-3-thread-45)(TRACE)(NewCentralDecoder.java)(doDecode)(311
)--PartialData=null
(2011-10-12
14:18:04,605)(pool-3-thread-45)(ERROR)(NewCentralDecoder.java)(doDecode)(321
)--got the bytes but are not enough as per the len thats why reading the
data and adding it to prevBytes
(2011-10-12
14:18:04,605)(pool-3-thread-45)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
MESSAGE_RECEIVED has been fired for session 35
(2011-10-12
14:18:04,604)(pool-3-thread-44)(ERROR)(CentralMessageHandler.java)(exception
Caught)(34)--org.apache.mina.filter.codec.ProtocolDecoderException:
java.lang.Exception: Invalid data with invalid TPDU (Hexdump: 10 09 00 00 10
10 00 00 10 11 00 00 10 12 00 00 10 13 00 00 10 14 00 00 10 15 00 00 10 16
00 00 10 18 00 00 10 19 00 00 10 20 00 00 10 21 00 00 10 22 00 00 10 24 00
00 10 25 00 00 10 26 00 00 10 30 00 00 10 31 00 00 10 33 00 00 10 34 64 34
36 38 30 39 34 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00)
(2011-10-12
14:18:04,607)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
MESSAGE_RECEIVED has been fired for session 35
(2011-10-12
14:18:04,708)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a SESSION_IDLE event for session 1
(2011-10-12
14:18:04,708)(pool-3-thread-44)(INFO)(LoggingFilter.java)(log)(159)--IDLE
(2011-10-12
14:18:04,708)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
SESSION_IDLE has been fired for session 1
(2011-10-12
14:18:05,072)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(69)--Firing
a SESSION_IDLE event for session 105
(2011-10-12
14:18:05,072)(pool-3-thread-44)(INFO)(LoggingFilter.java)(log)(159)--IDLE
(2011-10-12
14:18:05,072)(pool-3-thread-44)(DEBUG)(IoFilterEvent.java)(fire)(118)--Event
SESSION_IDLE has been fired for session 105

==========================================
TCPDUMP:
==========================================
0000  44 87 fc f5 a7 82 00 15  17 b0 71 aa 08 00 45 00   D....... ..q...E.
0010  00 fe 00 00 00 00 35 06  dc 89 79 f2 08 a6 c0 a8   ......5. ..y.....
0020  65 30 23 0e 20 57 d5 05  86 4d 75 ca 8c 1f 50 18   e0#. W.. .Mu...P.
0030  08 00 a9 73 00 00 00 d4  60 07 92 80 88 00 cd 01   ...s.... `.......
0040  01 60 07 92 00 00 00 c4  03 20 20 10 01 00 04 80   .`...... .  .....
0050  60 29 96 01 20 12 10 11  12 15 12 07 92 31 30 31   `).. ... .....101
0060  30 31 31 00 00 00 00 99  00 10 04 31 32 33 34 04   011..... ...1234.
0070  31 32 33 34 00 20 6a 1e  26 b4 26 76 45 f4 c0 ec   1234. j. &.&vE...
0080  bf 04 72 ca ba 9c 81 89  fb 4e 00 14 08 37 30 34   ..r..... .N...704
0090  35 34 32 39 30 04 30 32  32 32 01 04 00 00 10 01   54290.02 22......
00a0  00 00 10 02 00 00 10 03  00 00 10 04 00 00 10 07   ........ ........
00b0  00 00 10 08 00 00 10 09  00 00 10 10 00 00 10 11   ........ ........
00c0  00 00 10 12 00 00 10 13  00 00 10 14 00 00 10 15   ........ ........
00d0  00 00 10 16 00 00 10 18  00 00 10 19 00 00 10 20   ........ ....... 
00e0  00 00 10 21 00 00 10 22  00 00 10 24 00 00 10 25   ...!..." ...$...%
00f0  00 00 10 26 00 00 10 30  00 00 10 31 00 00 10 33   ...&...0 ...1...3
0100  00 00 10 34 64 34 36 38  30 39 34 34               ...4d468 0944

====================
Code Snippet:
====================
DECODER
-------------------------------------------------------
public class NewCentralDecoder extends CumulativeProtocolDecoder {

        private static final String DECODER_STATE_KEY =
NewCentralDecoder.class.getName() + ".STATE";
        
        @Override
        protected boolean doDecode(org.apache.mina.core.session.IoSession
session,
                        IoBuffer in, ProtocolDecoderOutput out) throws
Exception {

                //get the number of bytes which are available to read
                int remainingBytes = in.remaining();
                logger.error("in.remaining()="+in.remaining());
                logger.error("markValue()="+in.markValue());
                logger.error("capacity()="+in.capacity());

LISTENER
-------------------------------------------------------
  public static void main(String[] args) throws IOException,Exception {

        
        IoBuffer.setUseDirectBuffer(false);

        IoAcceptor acceptor = new NioSocketAcceptor();
        acceptor.getFilterChain().addLast("threadPool", new
ExecutorFilter(Executors.newCachedThreadPool()));
        acceptor.getFilterChain().addLast( "logger", new LoggingFilter()
);//setLogLevel(IoEventType, LogLevel)//(SESSION_CREATED,TRACE)
        acceptor.getFilterChain().addLast( "logging", new LoggingFilter() );
        acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter(
new CentralCodecFactory(false)));
        
        acceptor.getSessionConfig().setReadBufferSize( 2048 );
        acceptor.getSessionConfig().setBothIdleTime(10);
        
                try
                {
                        SocketAddress arg1 = new
InetSocketAddress(Integer.parseInt(args[0])) ;
                        acceptor.setHandler(new CentralMessageHandler());
                        acceptor.bind( arg1);
                }catch(Exception e)
                {
                        logger.fatal(LoggerKeyWord.CRITICAL_ALERT + " CORE
Start Failed.");
                        System.exit(0);
                }



Reply via email to