Daniel Lord updated ZOOKEEPER-795:

    Attachment: ExpiredSessionThreadLeak.java

Here is a test class that illustrates the problem using Thread#suspend and 
Thread#resume to simulate long GC times or other halted JVM problems.  There is 
a simple wrapper around a ZooKeeper client handle that will connect another 
client in the event that its managed client receives an Expired event.  The 
longer that the test program runs the more runaway EventThreads will be created 
and displayed.

The only dependencies are on the ZooKeeper libraries.

> eventThread isn't shutdown after a connection "session expired" event coming
> ----------------------------------------------------------------------------
>                 Key: ZOOKEEPER-795
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-795
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: java client
>    Affects Versions: 3.3.1
>         Environment: ubuntu 10.04
>            Reporter: mathieu barcikowski
>            Priority: Blocker
>             Fix For: 3.3.2, 3.4.0
>         Attachments: ExpiredSessionThreadLeak.java
> Hi,
> I notice a problem with the eventThread located in ClientCnxn.java file.
> The eventThread isn't shutdown after a connection "session expired" event 
> coming (i.e. never receive EventOfDeath).
> When a session timeout occurs and the session is marked as expired, the 
> connexion is fully closed (socket, SendThread...) expect for the eventThread.
> As a result, if i create a new zookeeper object and connect through it, I got 
> a zombi thread which will never be kill (as for the previous zookeeper 
> object, the state is already close, calling close again don't do anything).
> So everytime I will create a new zookeeper connection after a expired 
> session, I will have a one more zombi EventThread.
> How to reproduce :
> - Start a zookeeper client connection in debug mode
> - Pause the jvm enough time to the expired event occur
> - Watch for example with jvisualvm the list of threads, the sendThread is 
> succesfully killed, but the EventThread go to wait state for a infinity of 
> time
> - if you reopen a new zookeeper connection, and do again the previous steps, 
> another EventThread will be present in infinite wait state

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

Reply via email to