ZooKeeper
  1. ZooKeeper
  2. ZOOKEEPER-1208

Ephemeral node not removed after the client session is long gone

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: 3.3.3
    • Fix Version/s: 3.3.4, 3.4.0, 3.5.0
    • Component/s: None
    • Labels:
      None
    • Release Note:
      trunk version 1201832

      Description

      Copying from email thread.

      We found our ZK server in a state where an ephemeral node still exists after
      a client session is long gone. I used the cons command on each ZK host to
      list all connections and couldn't find the ephemeralOwner id. We are using
      ZK 3.3.3. Has anyone seen this problem?

      I got the following information from the logs.

      The node that still exists is /kafka-tracking/consumers/UserPerformanceEvent-<host>/owners/UserPerformanceEvent/529-7

      I saw that the ephemeral owner is 86167322861045079 which is session id 0x13220b93e610550.

      After searching in the transaction log of one of the ZK servers found that session expired

      9/22/11 12:17:57 PM PDT session 0x13220b93e610550 cxid 0x74 zxid 0x601bd36f7 closeSession null

      On digging further into the logs I found that there were multiple sessions created in quick succession and every session tried to create the same node. But i verified that the sessions were closed and opened in order
      9/22/11 12:17:56 PM PDT session 0x13220b93e610550 cxid 0x0 zxid 0x601bd36b5 createSession 6000
      9/22/11 12:17:57 PM PDT session 0x13220b93e610550 cxid 0x74 zxid 0x601bd36f7 closeSession null
      9/22/11 12:17:58 PM PDT session 0x13220b93e610551 cxid 0x0 zxid 0x601bd36f8 createSession 6000
      9/22/11 12:17:59 PM PDT session 0x13220b93e610551 cxid 0x74 zxid 0x601bd373a closeSession null
      9/22/11 12:18:00 PM PDT session 0x13220b93e610552 cxid 0x0 zxid 0x601bd373e createSession 6000
      9/22/11 12:18:01 PM PDT session 0x13220b93e610552 cxid 0x6c zxid 0x601bd37a0 closeSession null
      9/22/11 12:18:02 PM PDT session 0x13220b93e610553 cxid 0x0 zxid 0x601bd37e9 createSession 6000
      9/22/11 12:18:03 PM PDT session 0x13220b93e610553 cxid 0x74 zxid 0x601bd382b closeSession null
      9/22/11 12:18:04 PM PDT session 0x13220b93e610554 cxid 0x0 zxid 0x601bd383c createSession 6000
      9/22/11 12:18:05 PM PDT session 0x13220b93e610554 cxid 0x6a zxid 0x601bd388f closeSession null
      9/22/11 12:18:06 PM PDT session 0x13220b93e610555 cxid 0x0 zxid 0x601bd3895 createSession 6000
      9/22/11 12:18:07 PM PDT session 0x13220b93e610555 cxid 0x6a zxid 0x601bd38cd closeSession null
      9/22/11 12:18:10 PM PDT session 0x13220b93e610556 cxid 0x0 zxid 0x601bd38d1 createSession 6000
      9/22/11 12:18:11 PM PDT session 0x13220b93e610557 cxid 0x0 zxid 0x601bd38f2 createSession 6000
      9/22/11 12:18:11 PM PDT session 0x13220b93e610557 cxid 0x51 zxid 0x601bd396a closeSession null

      Here is the log output for the sessions that tried creating the same node

      9/22/11 12:17:54 PM PDT session 0x13220b93e61054f cxid 0x42 zxid 0x601bd366b create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:17:56 PM PDT session 0x13220b93e610550 cxid 0x42 zxid 0x601bd36ce create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:17:58 PM PDT session 0x13220b93e610551 cxid 0x42 zxid 0x601bd3711 create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:18:00 PM PDT session 0x13220b93e610552 cxid 0x42 zxid 0x601bd3777 create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:18:02 PM PDT session 0x13220b93e610553 cxid 0x42 zxid 0x601bd3802 create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:18:05 PM PDT session 0x13220b93e610554 cxid 0x44 zxid 0x601bd385d create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:18:07 PM PDT session 0x13220b93e610555 cxid 0x44 zxid 0x601bd38b0 create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7
      9/22/11 12:18:11 PM PDT session 0x13220b93e610557 cxid 0x52 zxid 0x601bd396b create '/kafka-tracking/consumers/UserPerformanceEvent-<hostname>/owners/UserPerformanceEvent/529-7

      Let me know if you need additional information.

      1. ZOOKEEPER-1208_br33.patch
        10 kB
        Patrick Hunt
      2. ZOOKEEPER-1208_br33.patch
        11 kB
        Patrick Hunt
      3. ZOOKEEPER-1208_br34.patch
        9 kB
        Patrick Hunt
      4. ZOOKEEPER-1208_trunk.patch
        9 kB
        Patrick Hunt

        Activity

        kishore gopalakrishna created issue -
        Hide
        kishore gopalakrishna added a comment -

        Comment from Camille
        So, the node was created by 0x13220b93e610550 at 12:17:56, then that session closed at 12:17:57, the node did not delete, and a bunch of other sessions later tried to create the node. These sessions got nodeexists failures I presume?

        Forgive the block of text I'm going to write instead of code:

        I'm going to bet that the problem lies in PrepRequestProcessor. If we get the ephemerals for the session while an ephemeral is still in outstandingChanges and has not been committed, then another thread commits that ephemeral and removes it from outstanding changes before synchronizing in the outstandingChagnes block, we could never put it in the ephemeral set that we are using to reflect ephemerals to delete. I think we need to move the synchronized block up before we get the ephemerals from the database. But this is a bit of speculation at the moment.

        HashSet<String> es = zks.getZKDatabase()
        .getEphemerals(request.sessionId);

        Is outside the synchronized block that deletes the ephemerals:

        synchronized (zks.outstandingChanges) {
        for (ChangeRecord c : zks.outstandingChanges) {
        if (c.stat == null)

        { // Doing a delete es.remove(c.path); }

        else if (c.stat.getEphemeralOwner() == request.sessionId)

        { es.add(c.path); }

        } for (String path2Delete : es) {
        addChangeRecord(new ChangeRecord(txnHeader.getZxid(),
        path2Delete, null, 0, null));

        Show
        kishore gopalakrishna added a comment - Comment from Camille So, the node was created by 0x13220b93e610550 at 12:17:56, then that session closed at 12:17:57, the node did not delete, and a bunch of other sessions later tried to create the node. These sessions got nodeexists failures I presume? Forgive the block of text I'm going to write instead of code: I'm going to bet that the problem lies in PrepRequestProcessor. If we get the ephemerals for the session while an ephemeral is still in outstandingChanges and has not been committed, then another thread commits that ephemeral and removes it from outstanding changes before synchronizing in the outstandingChagnes block, we could never put it in the ephemeral set that we are using to reflect ephemerals to delete. I think we need to move the synchronized block up before we get the ephemerals from the database. But this is a bit of speculation at the moment. HashSet<String> es = zks.getZKDatabase() .getEphemerals(request.sessionId); Is outside the synchronized block that deletes the ephemerals: synchronized (zks.outstandingChanges) { for (ChangeRecord c : zks.outstandingChanges) { if (c.stat == null) { // Doing a delete es.remove(c.path); } else if (c.stat.getEphemeralOwner() == request.sessionId) { es.add(c.path); } } for (String path2Delete : es) { addChangeRecord(new ChangeRecord(txnHeader.getZxid(), path2Delete, null, 0, null));
        Hide
        Vishal Kher added a comment -

        Hi Camille,

        outstandingChanges seems to be used mainly for bookeeping, no? Even if record was removed from outstandingChanges, the second for loop should add it back? Also, wouldn't the DataTree.killSession() remove the ephemeral when called through FinalRequestProcessor?

        Kishore, you metioned "I saw that the ephemeral owner is 86167322861045079 which is session id 0x13220b93e610550." sessionID 86167322861045079 is 0x13220B93E610557. This is the ID of the last session that you displayed above.

        • Can you check if there has been any error in verifying the state of the cluster?
        • Are all servers showing this znode? Were there any server failures?
        • Can you attach ZK logs and describe what happened before the cluster went into this state?

        Thanks.

        Show
        Vishal Kher added a comment - Hi Camille, outstandingChanges seems to be used mainly for bookeeping, no? Even if record was removed from outstandingChanges, the second for loop should add it back? Also, wouldn't the DataTree.killSession() remove the ephemeral when called through FinalRequestProcessor? Kishore, you metioned "I saw that the ephemeral owner is 86167322861045079 which is session id 0x13220b93e610550." sessionID 86167322861045079 is 0x13220B93E610557. This is the ID of the last session that you displayed above. Can you check if there has been any error in verifying the state of the cluster? Are all servers showing this znode? Were there any server failures? Can you attach ZK logs and describe what happened before the cluster went into this state? Thanks.
        Hide
        Camille Fournier added a comment -

        I only spent a few minutes looking at the problem, so it doesn't surprise me that my speculation might not hold up.

        Kishore, you never answered the questions I asked in my email, namely, all the other sessions that tried to create that node got NODEEXISTS exceptions? If they didn't, it should be a big red flag. As Vishal said, that ephemeral owner is 0x13220b93e610557. Are you sure you even have a problem here?

        Show
        Camille Fournier added a comment - I only spent a few minutes looking at the problem, so it doesn't surprise me that my speculation might not hold up. Kishore, you never answered the questions I asked in my email, namely, all the other sessions that tried to create that node got NODEEXISTS exceptions? If they didn't, it should be a big red flag. As Vishal said, that ephemeral owner is 0x13220b93e610557. Are you sure you even have a problem here?
        Hide
        kishore gopalakrishna added a comment -

        Hi Vishal and Camille,

        I will upload the logs soon. Yes we did see the NodeExists exception in the logs. Sorry about the sessionId used an online tool which did incorrect conversion

        The node still exists and here is the stat

        version:0
        ctime:1316719091806
        czxid:25798981995
        length:109
        EphemeralOwner:86167322861045079
        mtime:1316719091806
        mzxid:25798981995
        numChildren:0
        pzxid:25798981995
        version:0

        Yes there is a problem for sure that the node exists even after the session is closed. You can see from the log that session 0x13220b93e610557 is closed.

        Show
        kishore gopalakrishna added a comment - Hi Vishal and Camille, I will upload the logs soon. Yes we did see the NodeExists exception in the logs. Sorry about the sessionId used an online tool which did incorrect conversion The node still exists and here is the stat version:0 ctime:1316719091806 czxid:25798981995 length:109 EphemeralOwner:86167322861045079 mtime:1316719091806 mzxid:25798981995 numChildren:0 pzxid:25798981995 version:0 Yes there is a problem for sure that the node exists even after the session is closed. You can see from the log that session 0x13220b93e610557 is closed.
        Hide
        Laxman added a comment -

        Similar issue occurred in our case as well. The ephemeral exists only in one of the follower even after it's owner session is expired. I wanted to know whether this is same as ZOOKEEPER-1264. Any hints?

        Show
        Laxman added a comment - Similar issue occurred in our case as well. The ephemeral exists only in one of the follower even after it's owner session is expired. I wanted to know whether this is same as ZOOKEEPER-1264 . Any hints?
        Hide
        Patrick Hunt added a comment -

        I believe I see the issue.

        PrepRequestProcessor checks the session is valid on a create.

        However it doesn't not know about an in-progress close session request

        The session is not invalidated (session tracker) until
        FinalRequestProcessor. At which point a create in PrepRP would fail.
        However prior to that it will get into the pipeline. Resulting in the
        issue you are seeing.

        Q: what are you clients doing? It's weird that a create would come
        from the client after the session has been closed. Do you have
        multiple threads sharing a session?

        Show
        Patrick Hunt added a comment - I believe I see the issue. PrepRequestProcessor checks the session is valid on a create. However it doesn't not know about an in-progress close session request The session is not invalidated (session tracker) until FinalRequestProcessor. At which point a create in PrepRP would fail. However prior to that it will get into the pipeline. Resulting in the issue you are seeing. Q: what are you clients doing? It's weird that a create would come from the client after the session has been closed. Do you have multiple threads sharing a session?
        Hide
        Patrick Hunt added a comment -

        The client (checked java) seems to protect against this. Was the
        session expired? IC. Based on the cxid of the close session being 0
        I'm guessing it's an expiration.

        Show
        Patrick Hunt added a comment - The client (checked java) seems to protect against this. Was the session expired? IC. Based on the cxid of the close session being 0 I'm guessing it's an expiration.
        Hide
        kishore gopalakrishna added a comment -

        Hi Pat,

        I think its possible that create might come after close when there zookeeper.close is invoked in a shutdown hook. Application starts create session and waits for connected state in another thread and create an ephemeral znode. But if the application is killed immediately Ctrl C then shutdown hook can call close.

        We saw a case where the commit order was createsession, closesession and create node. Neha, will upload the logs shortly which clearly shows this and might help in narrowing down the use case and hopefully we can reproduce it.

        Show
        kishore gopalakrishna added a comment - Hi Pat, I think its possible that create might come after close when there zookeeper.close is invoked in a shutdown hook. Application starts create session and waits for connected state in another thread and create an ephemeral znode. But if the application is killed immediately Ctrl C then shutdown hook can call close. We saw a case where the commit order was createsession, closesession and create node. Neha, will upload the logs shortly which clearly shows this and might help in narrowing down the use case and hopefully we can reproduce it.
        Hide
        Patrick Hunt added a comment -

        I don't think that's the case Kishore - notice the cxid of the close session is "0", that's only possible if the server expired the session.

        Show
        Patrick Hunt added a comment - I don't think that's the case Kishore - notice the cxid of the close session is "0", that's only possible if the server expired the session.
        Hide
        Patrick Hunt added a comment -

        This initial patch demonstrates the problem. Test only so far but I'm working on a fix.

        Show
        Patrick Hunt added a comment - This initial patch demonstrates the problem. Test only so far but I'm working on a fix.
        Patrick Hunt made changes -
        Field Original Value New Value
        Attachment ZOOKEEPER-1208.patch [ 12503310 ]
        Patrick Hunt made changes -
        Fix Version/s 3.3.4 [ 12316276 ]
        Fix Version/s 3.4.0 [ 12314469 ]
        Fix Version/s 3.5.0 [ 12316644 ]
        Priority Major [ 3 ] Blocker [ 1 ]
        Patrick Hunt made changes -
        Assignee Camille Fournier [ fournc ] Patrick Hunt [ phunt ]
        Patrick Hunt made changes -
        Attachment ZOOKEEPER-1208.patch [ 12503310 ]
        Hide
        Patrick Hunt added a comment -

        This patch contains a fix against branch 33. It's working for me, all the tests are passing with this applied. The new test I added verifies that this is fixed.

        Give it a once over and I can create addl patches for 34/trunk.

        Just make sure I didn't bork something: locking, leaking, left a hole, etc...

        This will introduce more contention btw PRP and FRP, but I don't think that's avoidable.

        Show
        Patrick Hunt added a comment - This patch contains a fix against branch 33. It's working for me, all the tests are passing with this applied. The new test I added verifies that this is fixed. Give it a once over and I can create addl patches for 34/trunk. Just make sure I didn't bork something: locking, leaking, left a hole, etc... This will introduce more contention btw PRP and FRP, but I don't think that's avoidable.
        Patrick Hunt made changes -
        Attachment ZOOKEEPER-1208_br33.patch [ 12503320 ]
        Hide
        Patrick Hunt added a comment -

        An updated solution with a more elegant implementation of the fix.

        Show
        Patrick Hunt added a comment - An updated solution with a more elegant implementation of the fix.
        Patrick Hunt made changes -
        Attachment ZOOKEEPER-1208_br33.patch [ 12503346 ]
        Hide
        Mahadev konar added a comment -

        Sorry for being out of action (blame hadoop world ). Looks like you found it Pat. About the testcase, I am not sure about the session id being 0. How is it tracking that the same session is being closed and an create on the same session is being sent?

        Show
        Mahadev konar added a comment - Sorry for being out of action (blame hadoop world ). Looks like you found it Pat. About the testcase, I am not sure about the session id being 0. How is it tracking that the same session is being closed and an create on the same session is being sent?
        Hide
        Camille Fournier added a comment -

        I like the fix, Pat.

        Show
        Camille Fournier added a comment - I like the fix, Pat.
        Hide
        Patrick Hunt added a comment -

        @mahadev session id 0 just means to create a new session (see ClientCnxn). I ignore the returned sid because the session is tied to the socket (i.e. not included in subsequent requests by the client).

        Show
        Patrick Hunt added a comment - @mahadev session id 0 just means to create a new session (see ClientCnxn). I ignore the returned sid because the session is tied to the socket (i.e. not included in subsequent requests by the client).
        Hide
        Mahadev konar added a comment -

        You are right. I was worried abt the returned sid. Go ahead and upload patches for 3.4 and trunk.

        Show
        Mahadev konar added a comment - You are right. I was worried abt the returned sid. Go ahead and upload patches for 3.4 and trunk.
        Patrick Hunt made changes -
        Attachment ZOOKEEPER-1208_br34.patch [ 12503418 ]
        Patrick Hunt made changes -
        Attachment ZOOKEEPER-1208_trunk.patch [ 12503419 ]
        Hide
        Patrick Hunt added a comment -

        Added patches for 3.4 and trunk. I verified that the test fails w/o this fix on each branch. Then verified that the test passed subsequent to the fix being applied.

        Show
        Patrick Hunt added a comment - Added patches for 3.4 and trunk. I verified that the test fails w/o this fix on each branch. Then verified that the test passed subsequent to the fix being applied.
        Patrick Hunt made changes -
        Status Open [ 1 ] Patch Available [ 10002 ]
        Hide
        Hadoop QA added a comment -

        +1 overall. Here are the results of testing the latest attachment
        http://issues.apache.org/jira/secure/attachment/12503419/ZOOKEEPER-1208_trunk.patch
        against trunk revision 1201045.

        +1 @author. The patch does not contain any @author tags.

        +1 tests included. The patch appears to include 5 new or modified tests.

        +1 javadoc. The javadoc tool did not generate any warning messages.

        +1 javac. The applied patch does not increase the total number of javac compiler warnings.

        +1 findbugs. The patch does not introduce any new Findbugs (version 1.3.9) warnings.

        +1 release audit. The applied patch does not increase the total number of release audit warnings.

        +1 core tests. The patch passed core unit tests.

        +1 contrib tests. The patch passed contrib unit tests.

        Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/786//testReport/
        Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/786//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html
        Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/786//console

        This message is automatically generated.

        Show
        Hadoop QA added a comment - +1 overall. Here are the results of testing the latest attachment http://issues.apache.org/jira/secure/attachment/12503419/ZOOKEEPER-1208_trunk.patch against trunk revision 1201045. +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 5 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 1.3.9) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/786//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/786//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/786//console This message is automatically generated.
        Hide
        Camille Fournier added a comment -

        Patrick I'm going to check this in minus the printlns in the new test.

        Show
        Camille Fournier added a comment - Patrick I'm going to check this in minus the printlns in the new test.
        Hide
        Camille Fournier added a comment -

        Actually, I'm not sure... are these useful at all? I'd rather not see printlns in test output unless it's really useful, but in the case of this test I'm not sure I can tell...

        Show
        Camille Fournier added a comment - Actually, I'm not sure... are these useful at all? I'd rather not see printlns in test output unless it's really useful, but in the case of this test I'm not sure I can tell...
        Hide
        kishore gopalakrishna added a comment -

        Can some one please summarize the root cause of the issue and also explain why the create is seen in txn log after session is closed. Also what about the initial suspicion Camille had about
        HashSet<String> es = zks.getZKDatabase()
        .getEphemerals(request.sessionId);

        being outside the synchronized block.

        Show
        kishore gopalakrishna added a comment - Can some one please summarize the root cause of the issue and also explain why the create is seen in txn log after session is closed. Also what about the initial suspicion Camille had about HashSet<String> es = zks.getZKDatabase() .getEphemerals(request.sessionId); being outside the synchronized block.
        Hide
        Patrick Hunt added a comment -

        @camille I'm usually fine with leaving printlns in tests (I look at the eclipse console), but I'm also fine if you want to convert them to info level logs.

        Show
        Patrick Hunt added a comment - @camille I'm usually fine with leaving printlns in tests (I look at the eclipse console), but I'm also fine if you want to convert them to info level logs.
        Hide
        Patrick Hunt added a comment -

        @kishore I didn't copy this from the ML, here are the details:

        Yes, I realized after that the cxid is 0 in your logs - that indicates it was expired and not closed explicitly by the client.

        This holds up my theory that the PrepRequestProcessor is accepting a create from the client after the session has been expired.

        What's happen is the following
        1) client creates session
        2) leader wants to expire session, so sends message to the quorum
        3) client sends create znode to follower which fwds to leader, leader accepts (preqrequestprocessor) the request because the quorum has not yet accepted the expiration (close session) request in FinalRequestProcessor.

        The fix is for the leader to note that the session is in the process of closing and not accept changes in PRP after it sees a close session request.

        Show
        Patrick Hunt added a comment - @kishore I didn't copy this from the ML, here are the details: Yes, I realized after that the cxid is 0 in your logs - that indicates it was expired and not closed explicitly by the client. This holds up my theory that the PrepRequestProcessor is accepting a create from the client after the session has been expired. What's happen is the following 1) client creates session 2) leader wants to expire session, so sends message to the quorum 3) client sends create znode to follower which fwds to leader, leader accepts (preqrequestprocessor) the request because the quorum has not yet accepted the expiration (close session) request in FinalRequestProcessor. The fix is for the leader to note that the session is in the process of closing and not accept changes in PRP after it sees a close session request.
        Hide
        Camille Fournier added a comment -

        Committed to 3.4 and trunk, will get 3.3.4 in a second. Mahadev, feel free to cut another 3.4 RC whenever.

        Show
        Camille Fournier added a comment - Committed to 3.4 and trunk, will get 3.3.4 in a second. Mahadev, feel free to cut another 3.4 RC whenever.
        Hide
        Mahadev konar added a comment -

        Thanks Camille. I am trying to checkin ZOOKEEPER-1269 for 3.4 as well. Will do an RC right after that!

        Show
        Mahadev konar added a comment - Thanks Camille. I am trying to checkin ZOOKEEPER-1269 for 3.4 as well. Will do an RC right after that!
        Hide
        Mahadev konar added a comment -

        Sorry I meant ZOOKEEPER-1239.

        Show
        Mahadev konar added a comment - Sorry I meant ZOOKEEPER-1239 .
        Camille Fournier made changes -
        Status Patch Available [ 10002 ] Resolved [ 5 ]
        Release Note trunk version 1201832
        Resolution Fixed [ 1 ]
        Hide
        Hudson added a comment -

        Integrated in ZooKeeper-trunk #1365 (See https://builds.apache.org/job/ZooKeeper-trunk/1365/)
        ZOOKEEPER-1208. Ephemeral node not removed after the client session is long gone. (phunt via camille)

        camille : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1201832
        Files :

        • /zookeeper/trunk/CHANGES.txt
        • /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java
        • /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SessionTracker.java
        • /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SessionTrackerImpl.java
        • /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerSessionTracker.java
        • /zookeeper/trunk/src/java/test/org/apache/zookeeper/server/PrepRequestProcessorTest.java
        • /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionInvalidationTest.java
        Show
        Hudson added a comment - Integrated in ZooKeeper-trunk #1365 (See https://builds.apache.org/job/ZooKeeper-trunk/1365/ ) ZOOKEEPER-1208 . Ephemeral node not removed after the client session is long gone. (phunt via camille) camille : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1201832 Files : /zookeeper/trunk/CHANGES.txt /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SessionTracker.java /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SessionTrackerImpl.java /zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerSessionTracker.java /zookeeper/trunk/src/java/test/org/apache/zookeeper/server/PrepRequestProcessorTest.java /zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionInvalidationTest.java
        Mahadev konar made changes -
        Status Resolved [ 5 ] Closed [ 6 ]
        Transition Time In Source Status Execution Times Last Executer Last Execution Date
        Open Open Patch Available Patch Available
        44d 16h 18m 1 Patrick Hunt 11/Nov/11 20:54
        Patch Available Patch Available Resolved Resolved
        2d 22h 39m 1 Camille Fournier 14/Nov/11 19:34
        Resolved Resolved Closed Closed
        8d 23h 47m 1 Mahadev konar 23/Nov/11 19:22

          People

          • Assignee:
            Patrick Hunt
            Reporter:
            kishore gopalakrishna
          • Votes:
            3 Vote for this issue
            Watchers:
            11 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development