mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel Lecharny <elecha...@apache.org>
Subject Re: IoSession in PREPARING state is not removed from queue
Date Mon, 04 May 2009 14:53:17 GMT
Hi Victor,

first, thanks for your investigation and the proposed solution.

Could you create a JIRA with all the elements you provided, so that it
don't get lost forever in the mailing list ? We probably will be able
to process this later (all of us are quite busy those days), but if
it's a JIRA, it won't get forgetten.

Many thanks !

2009/5/4 Victor <dreamland_skib2@mail333.com>:
> Seems that my patch is working - I can see that several pending sessions
> were removed during last 3 days on our servers.
> I hope that it does not have impact on some other functions of mina :)
> Anyway, it would be great to see comments from mina creators!
> Victor
> Victor wrote:
>> Sorry, I forgot to say that I use mina 2.0 M4 (unfortunately, our server
>> does not work with M5 yet - something changed).
>> If I do a simple workaround - call removeNow() for such sessions - can
>> something go wrong this way?
>> Thanks
>> Victor
>> Victor wrote:
>>> Hello mina developers!
>>> Seems I have found a bug with IoSession (or I am doing something wrong :)
>>> ) - I can see that a "PREPARING" session is not removed correctly from
>>> queue.
>>> When some session is in PREPARING state, it is removed from
>>> "removingSessions" queue but right after that it is added to this queue
>>> again! So this session is added to the queue and removed from it until
>>> forever.
>>> As a result, this give us significant garbage allocation, so CPU spends
>>> most of time in garbage collector (I can see this is JConsole).
>>> I see comments there in AbstractPollingIoProcessor class:
>>> private int remove() {
>>> ...
>>>    case PREPARING:
>>>                // Retry later if session is not yet fully initialized.
>>>                // (In case that Session.close() is called before
>>>  addSession() is processed)
>>>                scheduleRemove(session);
>>>                return removedSessions;
>>> ...
>>> }
>>> I have added logging to this code, and I can see that the SAME session is
>>> removed and added again and again.
>>> Can somebody explain this logic please? Why don't we remove the PENDING
>>>  session? Or maybe is there a workaround for this.
>>> Sorry, I can not provide a test for this issue, but it is reproduced
>>> almost every day at out production servers under some load. Maybe, you can
>>> reproduce it by adding a delay in addSession() and then closing the session
>>> during this delay.
>>> Thanks for any ideas and propositions,
>>> Victor

Emmanuel Lécharny

View raw message