[ http://issues.apache.org/jira/browse/DIRMINA-65?page=all ]

Trustin Lee updated DIRMINA-65:
-------------------------------

    Fix Version: 0.7.3
        Version: 0.7.1
                 0.7

> Duplicate entries in flush-list, consequent unnecessary system-calls and 
> overzealous wakeups and calls to write(2)
> ------------------------------------------------------------------------------------------------------------------
>
>          Key: DIRMINA-65
>          URL: http://issues.apache.org/jira/browse/DIRMINA-65
>      Project: Directory MINA
>         Type: Bug
>     Versions: 0.7.2, 0.7.1, 0.7
>  Environment: All 
>     Reporter: Mark Atwell
>     Assignee: Trustin Lee
>      Fix For: 0.7.3
>  Attachments: SocketIoProcessor.java
>
> The following shows up under heavy load - writing numerous small messages 
> across a slow(ish) network and/or to a slow peer i.e. when a writer starts to 
> see back-log and writes don't necessarily complete.
> In SocketIoProcessor:
> - scheduleFlush() blindly adds the session to the queue even if it is already 
> present. This means that when the selector thread wakes up it may make 
> numerous calls to (relatively slow) write on the same session.
> - flushSession() calls scheduleFlush() and always wakes up the selector 
> thread. This means that flushSessions() and flush() is called for each 
> application write - even when the socket may already be backed up with queued 
> traffic. This is exacerbated by the problem above.
> - scheduleFlush() is called from flushSession() which is called from (at 
> least) SocketSessionManagerFilterChain for every application write.
> I 'hacked' a test fix which modified scheduleFlush() to only add the session 
> if it wasn't already in the queue and returns a boolean indicating whether 
> the session was added. flushSession() checks this return value and only wakes 
> the selector thread if the session has been added (i.e. it isn't already 
> backed up). In this way writes are not unnecessarily triggered.
> This worked though it also highlighted (or brought into greater focus? :o) an 
> apparent timing problem.
> java.io.IOException: Invalid argument
>       at sun.nio.ch.DevPollArrayWrapper.registerMultiple(Native Method)
>       at 
> sun.nio.ch.DevPollArrayWrapper.updateRegistrations(DevPollArrayWrapper.java:209)
>       at sun.nio.ch.DevPollArrayWrapper.poll(DevPollArrayWrapper.java:157)
>       at sun.nio.ch.DevPollSelectorImpl.doSelect(DevPollSelectorImpl.java:68)
>       at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
>       at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
>       at 
> org.apache.mina.io.socket.SocketIoProcessor$Worker.run(SocketIoProcessor.java:562)
> This isn't fatal though as the retry logic means that the next time 'round 
> the state - presumably of the selection keys - has been brought into 
> alignemnt?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to