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

Emmanuel Lécharny commented on DIRMINA-1146:
--------------------------------------------

Hi [~eissam_yassin], if the *maxscheduledwriterequests* keep increasing, it's 
because messages never get written to the remote peer.

There are two places this counter get decremented:

1) When the message get actually written (at the very end, we decrement the 
scheduled messages counter)
{code:java}
    /**
     * Increase the number of written messages
     * 
     * @param request The written message
     * @param currentTime The current tile
     */
    public final void increaseWrittenMessages(WriteRequest request, long 
currentTime) {
        Object message = request.getMessage();

        if (message instanceof IoBuffer) {
            IoBuffer b = (IoBuffer) message;

            if (b.hasRemaining()) {
                return;
            }
        }

        writtenMessages++;
        lastWriteTime = currentTime;

        if (getService() instanceof AbstractIoService) {
            ((AbstractIoService) 
getService()).getStatistics().increaseWrittenMessages(currentTime);
        }

        decreaseScheduledWriteMessages();
    }

{code}
This method is called when the {{messageSent}} event is received:

 

{code:java}
        @Override
        public void messageSent(NextFilter nextFilter, IoSession session, 
WriteRequest writeRequest) throws Exception {
            long now = System.currentTimeMillis();
            ((AbstractIoSession) session).increaseWrittenMessages(writeRequest, 
now);

{code}

2) When we get an error:

{code:java}
        private void clearWriteRequestQueue(S session) {
            ...
            // Create an exception and notify.
            if (!failedRequests.isEmpty()) {
                WriteToClosedSessionException cause = new 
WriteToClosedSessionException(failedRequests);

                for (WriteRequest r : failedRequests) {
                    session.decreaseScheduledBytesAndMessages(r);
                    r.getFuture().setException(cause);
                }

                IoFilterChain filterChain = session.getFilterChain();
                filterChain.fireExceptionCaught(cause);
            }
        }
{code}

called by:

{code:java}
        private boolean removeNow(S session) {
            clearWriteRequestQueue(session);

{code}

which is part of the session cleanup.

> TLS enabled session got disconnected when outbound messages add up to the 
> value of maxscheduledwriterequests
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-1146
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1146
>             Project: MINA
>          Issue Type: Bug
>            Reporter: Chily
>            Assignee: Jonathan Valliere
>            Priority: Blocker
>             Fix For: 2.2.2
>
>
> Slow Consumer Protection Feature does not work on TLS enabled session
> -> ioSession.getScheduledWriteMessages() never decreases in 
> IoSessionResponder#send method
> internal.engine.session.maxscheduledwriterequests=10000
> Our TLS enabled session got disconneced when the outbound messages added up 
> to 10000.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org
For additional commands, e-mail: dev-h...@mina.apache.org

Reply via email to