[ 
https://issues.apache.org/jira/browse/DIRMINA-1040?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15405598#comment-15405598
 ] 

Silver Cheng commented on DIRMINA-1040:
---------------------------------------

to debug further , do you think below logger is enough to fullfill your 
requirement on logger?

" I'd like to know how many bytes are written for each call, and that is what 
the localWrittenBytes variable will contain (of course, we also need to know 
about the buffer being written)."

1. print the buf.buf() in write method to know what exactly sent to the channel
{noformat}
    protected int write(NioSession session, IoBuffer buf, int length) throws 
Exception {
        if (buf.remaining() <= length) {
                //add by silver
                if (DEBUG) {
                Object msg = session.getCurrentWriteMessage();           
                LOGGER.debug( "***4.0 Enter Mina NioProcessor write method 
buf.remaining: {}; msg: {};", buf.remaining(), msg);
                LOGGER.debug( "***4.0 Enter Mina NioProcessor write method 
length: {};buf: {}", length,buf.getHexDump());
                LOGGER.debug( "***4.0 Enter Mina NioProcessor write method 
buf.buf(): {}", buf.buf()); 
            } 

            return session.getChannel().write(buf.buf());
        }
{noformat}

2. print the localWrittenBytes in writeBuffer method. 
{noformat}
private int writeBuffer(S session, WriteRequest req, boolean hasFragmentation, 
int maxLength, long currentTime)
            throws Exception {
        IoBuffer buf = (IoBuffer) req.getMessage();
        int localWrittenBytes = 0;
        
        //add by silver
        if (DEBUG) {
            LOGGER.debug( "***3 Mina AbstractPollingIoProcessor writeBuffer  
session's hasFragmentation: {} ;  session: {}; ", 
hasFragmentation,session.getCurrentWriteMessage());
            LOGGER.debug( "***3 Mina AbstractPollingIoProcessor writeBuffer  
session's maxWrittenBytes: {} ;  buf: {};", maxLength,buf.getHexDump());
            }

        if (buf.hasRemaining()) {
            int length;

            if (hasFragmentation) {
                length = Math.min(buf.remaining(), maxLength);
            } else {
                length = buf.remaining();
            }

            try {
                localWrittenBytes = write(session, buf, length);
            } catch (IOException ioe) {
                // We have had an issue while trying to send data to the
                // peer : let's close the session.
                buf.free();
                session.close(true);
                destroy(session);

                return 0;
            }

        }

        session.increaseWrittenBytes(localWrittenBytes, currentTime);
        //add by silver
        if(localWrittenBytes!=0){
                if (DEBUG) {
            LOGGER.debug( "***5.0  After NioProcessor write method, in Mina 
AbstractPollingIoProcessor writeBuffer  session's localWrittenBytes: {}  ", 
localWrittenBytes);
            }
        }else{
                if (DEBUG) {
            LOGGER.debug( "***5.1  After NioProcessor write method, in Mina 
AbstractPollingIoProcessor writeBuffer  session's localWrittenBytes is ZERO ");
            }
        }

        if (!buf.hasRemaining() || (!hasFragmentation && (localWrittenBytes != 
0))) {
            // Buffer has been sent, clear the current request.
            int pos = buf.position();
            buf.reset();

            fireMessageSent(session, req);

            // And set it back to its position
            buf.position(pos);
        }

        return localWrittenBytes;
    }
{noformat}

3. any other loggers you want to propose to locate the cause?

> Mina 2.0.4 truncated the PDU
> ----------------------------
>
>                 Key: DIRMINA-1040
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1040
>             Project: MINA
>          Issue Type: Bug
>          Components: Filter
>    Affects Versions: 2.0.4
>         Environment: Mina 2.0.4 version
> pl-1@ECE8000-Z1 ~ # /usr/java/latest/bin/java -version
> java version "1.6.0_45"
> Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
> Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
>            Reporter: Silver Cheng
>              Labels: PDU, truncated
>         Attachments: Mina-2.0.13-code delta.docx, mina log and tcpdump.zip, 
> mina-debug-logging.zip, ms-mc1.zip, tcpdump-10001.zip
>
>
> Background:
> our app messaging-server is to handle the SMPP protocol messages, and we use 
> Mina 2.0.4 for the lower TCP transport function.
> Problem:
> sometime, not often, I found that the PDU could be truncated by Mina from 
> tcpdump. I added some debug loggers to mina codes, and found that indeed the 
> PDU truncated is occuring at Mina. 
> from below logs, you can see in #3, the buf which got from WriteRequest got 
> truncated the first 16 bytes in Mina.  could you know if it's a known issue 
> in 2.0.4?
> Debug loggers & Logs: 
> 1. IoHandler:
>         WriteFuture future = iosession.write(deliverSm);
> 2016-07-14 01:52:19,865 DEBUG (62451235@WebForward 0.0.0.0:5001-21) 
> (bbfa6690c88ab98aec4e) com.ipx.cpsmscapis.smpp.NorthSmppIoHandler - Sending 
> DeliverSM: 00 00 00 be 00 00 00 05 00 00 00 00 00 00 03 02 00 01 01 31 32 30 
> 32 34 36 30 38 39 33 33 00 04 09 37 36 32 32 36 35 00 04 00 00 00 00 00 00 00 
> 00 6f 69 64 3a 32 31 36 30 37 31 34 30 31 30 30 31 32 34 32 32 38 35 38 20 73 
> 75 62 3a 30 30 31 20 64 6c 76 72 64 3a 30 30 31 20 73 75 62 6d 69 74 20 64 61 
> 74 65 3a 31 36 30 37 31 34 30 31 35 32 20 64 6f 6e 65 20 64 61 74 65 3a 31 36 
> 30 37 31 34 30 31 35 32 20 73 74 61 74 3a 44 45 4c 49 56 52 44 20 65 72 72 3a 
> 30 30 30 20 74 65 78 74 3a 04 27 00 01 02 00 1e 00 14 32 31 36 30 37 31 34 30 
> 31 30 30 31 32 34 32 32 38 35 38 00
> 2. AbstractIoSession:
>     public WriteFuture write(Object message, SocketAddress remoteAddress) {
>         if (message == null) {
>             throw new IllegalArgumentException("message");
>         }
>         
>       //added by Silver
>         if (DEBUG) {
>               if 
> (message.getClass().getName().equals("org.smpp.pdu.DeliverSM")) {
>                       LOGGER.debug( "***1 Enter Mina AbstractIoSession write 
> method Object message: {};",message);
>               }               
>         }
> 2016-07-14 01:52:19,866 DEBUG (62451235@WebForward 0.0.0.0:5001-21) 
> (bbfa6690c88ab98aec4e) org.apache.mina.core.session.AbstractIoSession - ***1 
> Enter Mina AbstractIoSession write method Object message: 00 00 00 be 00 00 
> 00 05 00 00 00 00 00 00 03 02 00 01 01 31 32 30 32 34 36 30 38 39 33 33 00 04 
> 09 37 36 32 32 36 35 00 04 00 00 00 00 00 00 00 00 6f 69 64 3a 32 31 36 30 37 
> 31 34 30 31 30 30 31 32 34 32 32 38 35 38 20 73 75 62 3a 30 30 31 20 64 6c 76 
> 72 64 3a 30 30 31 20 73 75 62 6d 69 74 20 64 61 74 65 3a 31 36 30 37 31 34 30 
> 31 35 32 20 64 6f 6e 65 20 64 61 74 65 3a 31 36 30 37 31 34 30 31 35 32 20 73 
> 74 61 74 3a 44 45 4c 49 56 52 44 20 65 72 72 3a 30 30 30 20 74 65 78 74 3a 04 
> 27 00 01 02 00 1e 00 14 32 31 36 30 37 31 34 30 31 30 30 31 32 34 32 32 38 35 
> 38 00;
> 3. AbstractPollingIoProcessor:
>     private int writeBuffer(S session, WriteRequest req,
>             boolean hasFragmentation, int maxLength, long currentTime)
>             throws Exception {
>         IoBuffer buf = (IoBuffer) req.getMessage();
>         
>         //add by silver
>         if (DEBUG) {
>             LOGGER.debug( "***3 Mina AbstractPollingIoProcessor writeBuffer  
> session's hasFragmentation: {} ;  session: {}; ", 
> hasFragmentation,session.getCurrentWriteMessage());
>             LOGGER.debug( "***3 Mina AbstractPollingIoProcessor writeBuffer  
> session's maxWrittenBytes: {} ;  buf: {};", maxLength,buf.getHexDump());
>             }
> 2016-07-14 01:52:19,866 DEBUG (NioProcessor-3) () 
> org.apache.mina.core.polling.AbstractPollingIoProcessor - ***3 Mina 
> AbstractPollingIoProcessor writeBuffer  session's maxWrittenBytes: 98304 ;  
> buf: 00 01 01 31 32 30 32 34 36 30 38 39 33 33 00 04 09 37 36 32 32 36 35 00 
> 04 00 00 00 00 00 00 00 00 6F 69 64 3A 32 31 36 30 37 31 34 30 31 30 30 31 32 
> 34 32 32 38 35 38 20 73 75 62 3A 30 30 31 20 64 6C 76 72 64 3A 30 30 31 20 73 
> 75 62 6D 69 74 20 64 61 74 65 3A 31 36 30 37 31 34 30 31 35 32 20 64 6F 6E 65 
> 20 64 61 74 65 3A 31 36 30 37 31 34 30 31 35 32 20 73 74 61 74 3A 44 45 4C 49 
> 56 52 44 20 65 72 72 3A 30 30 30 20 74 65 78 74 3A 04 27 00 01 02 00 1E 00 14 
> 32 31 36 30 37 31 34 30 31 30 30 31 32 34 32 32 38 35 38 00;



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to