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