zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Patrick Hunt <ph...@apache.org>
Subject Re: When session expired event fired?
Date Tue, 09 Feb 2010 01:04:12 GMT
In this case all of the _other_ zookeeper clients will see the client 
session is closed (actually they see any ephemeral znodes that the 
client created are removed, which is typically what you do for group 
membership - create an ephemeral znode that represents your client, a 
member of the cluster) and can act appropriately.

Your client will see a disconnected event:
http://hadoop.apache.org/zookeeper/docs/current/zookeeperProgrammers.html#ch_zkSessions

Given what Mahadev mentioned (you don't know if you are expired until 
you reconnect) what you do now in the disco client is up to your use 
case. If it's just group membership then it's probably fine, your client 
will be disconnected, perhaps expired. It won't know, but the rest of 
the cluster (incl any monitoring app) will know and can act 
appropriately. The disconnected client needs to decide what to do 
(perhaps, or perhaps it doesn't do anything, it's just that the other 
members of the cluster no longer consider it active, and therefore don't 
involve it in processing)

Patrick

neptune wrote:
> I saw that wiki page. And I read this paragraph "It means that the client
> was partitioned off from the ZooKeeper service for more the the session
> timeout ..."
> That's why I use Expired event for cluster membership. In my case client is
> a node in a cluster.
> 
> 2010/2/9 Patrick Hunt <phunt@apache.org>
> 
>> this? "How should I handle SESSION_EXPIRED?"
>> http://wiki.apache.org/hadoop/ZooKeeper/FAQ#A3
>>
>>
>> Benjamin Reed wrote:
>>
>>> i was looking through the docs to see if we talk about handling session
>>> expired, but i couldn't find anything. we should probably open a jira to add
>>> to the docs, unless i missed something. did i?
>>>
>>> ben
>>>
>>> -----Original Message-----
>>> From: Mahadev Konar [mailto:mahadev@yahoo-inc.com] Sent: Monday, February
>>> 08, 2010 2:43 PM
>>> To: zookeeper-user@hadoop.apache.org
>>> Subject: Re: When session expired event fired?
>>>
>>> Hi,
>>>  a zookeeper client does not expire a session until and unless it is able
>>> to
>>> connect to one of the servers. In your case if you kill all the servers,
>>> the
>>> client is not able to connect to any of the servers and will keep trying
>>> to
>>> connect to the three servers. It cannot expire a session on its own and
>>> needs to hear from the server to know if the session is expired or not.
>>>
>>> Does that help?
>>> Thanks
>>> mahadev
>>>
>>>
>>> On 2/8/10 2:37 PM, "neptune" <openneptune@gmail.com> wrote:
>>>
>>>  Hi all.
>>>> I have a question. I started zookeeper(3.2.2) on three servers.
>>>> When session expired event fired in following code?
>>>> I expected that if client can't connect to server(disconnected) for
>>>> session
>>>> timeout, zookeeper fires session expired event.
>>>> I killed three zookeeper server sequentially. Client retry to connect
>>>> zookeeper server. Never occured Expired event.
>>>>
>>>> *class WatcherTest {
>>>>  public static void main(String[] args) {
>>>>    (new **WatcherTest*()).exec();
>>>> *  }
>>>>
>>>>  private WatcherTest() throws Exception {
>>>>    zk = new ZooKeeper("server1:2181,server2:2181:server3:2181", 10 *
>>>> 1000,
>>>> this);
>>>>  }
>>>>  private void exec() {
>>>>    while(ture) {
>>>>      //do something
>>>>    }
>>>>  }
>>>>  public void process(WatchedEvent event) {
>>>>    if (event.getType() == Event.EventType.None) {
>>>>      switch (event.getState()) {
>>>>      case SyncConnected:
>>>>        System.out.println("ZK SyncConnected");
>>>>        break;
>>>>      case Disconnected:
>>>>        System.out.println("ZK Disconnected");
>>>>        break;
>>>>      case Expired:
>>>>        System.out.println("ZK Session Expired");
>>>>        System.exit(0);
>>>>        break;
>>>>      }
>>>>    }
>>>> }
>>>> *
>>>>
>>>
> 

Mime
View raw message