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