You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Jonathan Valliere (JIRA)" <ji...@apache.org> on 2018/10/01 14:12:00 UTC

[jira] [Comment Edited] (DIRMINA-1095) Seems like the management f UDP sessions is really unneficient

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

Jonathan Valliere edited comment on DIRMINA-1095 at 10/1/18 2:11 PM:
---------------------------------------------------------------------

Never mind, looks like MINA is virtualizing the DatagramChannel.  I thought it was creating new Sockets.  The list of virtualized channels should really be associated with the DatagramChannel and only loop on the NioSessions which belong to that specific DatagramChannel.  Need something like {{getManagedSessions(DatagramChannel)}}.


was (Author: johnnyv):
Never mind, looks like MINA is virtualizing the DatagramChannel.  I thought it was creating new Sockets.  The list of virtualized channels should really be associated with the DatagramChannel and only loop on the NioSessions which belong to that specific DatagramChannel.  Need something like `getManagedSessions(DatagramChannel)`.

> Seems like the management f UDP sessions is really unneficient
> --------------------------------------------------------------
>
>                 Key: DIRMINA-1095
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1095
>             Project: MINA
>          Issue Type: Improvement
>    Affects Versions: 2.0.19
>            Reporter: Emmanuel Lecharny
>            Priority: Major
>             Fix For: 2.0.20
>
>
> When we process incoming UDP messages, we iterate over the activated {{SelectionKey}}s. That's ok, but for each one of them, we read the data and try to flush the scheduled messages. The loop where it's done seems to iterate on *all* the managed sessions, for each keys we are processing :
> {code:java}
>    private void processReadySessions(Set<SelectionKey> handles) {
>         Iterator<SelectionKey> iterator = handles.iterator();
>         while (iterator.hasNext()) {
>             SelectionKey key = iterator.next();
>             DatagramChannel handle = (DatagramChannel) key.channel();
>             iterator.remove();
>             try {
>                 if (key.isValid() && key.isReadable()) {
>                     readHandle(handle);
>                 }
>                 if (key.isValid() && key.isWritable()) {
>                     for (IoSession session : getManagedSessions().values()) {
>                         scheduleFlush((NioSession) session);
> ...
> {code}
> There is no reason to do so. First, we should not iterate on all the managed sessions (we may have thousands), but only the sessions which have something to write, and we certainly should not do that for every active key...



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)