I think the FAQ is out of date, iirc it's probably due to this change
https://issues.apache.org/jira/browse/ZOOKEEPER-710
specifically
"the leader needs to drop the connection when it sees the MOVED error
so that the client can reestablish the session properly with another
machine"
which I believe you are seeing here.

Also see this thread, there are other issues:
http://markmail.org/message/wqj347dlrsd74qya

I would think though that zoo1 should eventually see the session
expiration - it will get disconnected but will then re-attempt to
connect to the server, at which point it will be notice the session is
expired.

Would you mind entering a JIRA for this (to update the FAQ). Thanks!

Patrick

On Thu, Jul 21, 2011 at 1:36 PM, Will Johnson
<[email protected]> wrote:
> i'm trying to test SessionExpired based on the FAQ (
> http://wiki.apache.org/hadoop/ZooKeeper/FAQ)  can anyone point out why i'm
> getting ConnectionLoss exceptions instead of SessionExpiredExceptions based
> on the unit test below:
>
> @Test
>  public void testSimpleConnection() throws Exception {
>    String hostPort = "localhost:9999";
>    ZooKeeper zoo1 = new ZooKeeper(hostPort, 1000, null);
>
>    // just make sure we can talk to zookeeper
>    Assert.assertNull(zoo1.exists("/foo", false));
>    zoo1.create("/foo", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
>    Assert.assertNotNull(zoo1.exists("/foo", false));
>
>    // construct another client with the same id
>    ZooKeeper zoo2 = new ZooKeeper(hostPort, zoo1.getSessionTimeout(), null,
> zoo1.getSessionId(), null);
>    // closing this session should invalidate the first:
> http://wiki.apache.org/hadoop/ZooKeeper/FAQ
>    zoo2.close();
>
>    // sleep just to make sure everything gets evicted
>    Thread.sleep(zoo1.getSessionTimeout() * 2);
>
>    // closing this session should invalidate the first:
> http://wiki.apache.org/hadoop/ZooKeeper/FAQ
>    // this is where i always get ConnectionLoss instead of SessionExpired
>    Assert.assertNull(zoo1.exists("/foo", false));
>
>  }
>

Reply via email to