zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Patrick Hunt <ph...@apache.org>
Subject Re: Testing SessionExipred based on FAQ
Date Wed, 27 Jul 2011 18:05:39 GMT
On Wed, Jul 27, 2011 at 10:58 AM, Will Johnson
<willjohnsonsearch@gmail.com> wrote:
> I was just about to ask about the JMX route since it seems to work but i do
> observe the 1->4 behavior you mentioned.  I ended up doing my best code wise
> and then did some basic testing with iptables but it's not what i would
> consider robust testing and far from automated.  Anything that can be done
> to allow end users to test their client code in real world-ish situation
> would be a huge help since handling these error cases seems to be so
> critical to a correctly operating zookeeper application.

I agree. There are many corner cases (1->4 is actually possible, but
unlikely) that would be good to verify a client, or clients, can
handle. We probably need some combination of mock ZK client as well as
a mock server in order to be able to cover more of these during client
testing.

Patrick

>
> On Wed, Jul 27, 2011 at 1:20 PM, Patrick Hunt <phunt@apache.org> wrote:
>
>> On second thought there is one other way - JMX allows you to close a
>> session, this could be used similarly. See tests using
>> src/java/test/org/apache/zookeeper/test/JMXEnv.java
>>
>> I think there's an issue with each of these mechanisms though. In a
>> real situation you typically see:
>>
>> 1) client connected successfully to server with session A
>> 2) client gets disconnected from server
>> 3) time passes (ie the session is expired)
>> 4) client regains connectivity to server, gets notified that session is
>> expired
>>
>> In these other cases step 2 is skipped - we go from 1 directly to 4
>> (client notified session is expired). Seems like we should have some
>> way to simulate this that more closely replicates what the code will
>> see in a real situation. I suspect this would be hard w/o a mock
>> ZooKeeper though. The more I think about it the more I feel we should
>> add such, to enable more/better client side unit testing/verification.
>>
>> Patrick
>>
>> On Wed, Jul 27, 2011 at 10:11 AM, Patrick Hunt <phunt@apache.org> wrote:
>> > At this point I'm not sure you can reliably do so without
>> > https://issues.apache.org/jira/browse/ZOOKEEPER-829
>> >
>> > Anyone?
>> >
>> > Patrick
>> >
>> > On Fri, Jul 22, 2011 at 6:17 AM, Will Johnson
>> > <willjohnsonsearch@gmail.com> wrote:
>> >> So give the ticket I created and ZOOKEEPER-710 how do i go about testing
>> >> session timeouts programmatically?
>> >>
>> >> On Fri, Jul 22, 2011 at 8:57 AM, Will Johnson
>> >> <willjohnsonsearch@gmail.com>wrote:
>> >>
>> >>> Created: https://issues.apache.org/jira/browse/ZOOKEEPER-1132
>> >>>
>> >>>
>> >>> On Thu, Jul 21, 2011 at 6:25 PM, Patrick Hunt <phunt@apache.org>
>> wrote:
>> >>>
>> >>>> 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
>> >>>> <willjohnsonsearch@gmail.com> 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));
>> >>>> >
>> >>>> >  }
>> >>>> >
>> >>>>
>> >>>
>> >>>
>> >>
>> >
>>
>

Mime
View raw message