Hi,

Yes, connection establishment is asynchronous.
ZooKeeper client will take the watcher reference. Watchers are notified when 
any state change occurs in the client.

Following are few of the watch notification cases,

Case-1) First time connection establishment. Now after successful connect 
establishment, will be notified with 'SyncConnected' event.

Case-2) Server is not available during first time connection establishment, 
watcher will not receive any events.
In that case, your 'awaitConnection.await(timeout, unit);' will be timed out.

Case-3) The session got established and then disconnected. Now, the watcher 
will be notified with 'Disconnected' event.


Below are the different types of connection state change notifications:
        -       SyncConnected
        -       AuthFailed
        -       ConnectedReadOnly
        -       SaslAuthenticated
        -       Expired

Regards,
Rakesh
-----Original Message-----
From: Edward Capriolo [mailto:[email protected]] 
Sent: 29 January 2015 06:58
To: [email protected]
Subject: session establishment

http://zookeeper.apache.org/doc/r3.4.5/api/org/apache/zookeeper/ZooKeeper.html

Session establishment is asynchronous. This constructor will initiate 
connection to the server and return immediately - potentially (usually) before 
the session is fully established. The watcher argument specifies the watcher 
that will be notified of any changes in state.


>>This notification can come at any point before or after the 
>>constructor
call has returned.

public class DummyWatcher implements Watcher {

  private CountDownLatch awaitConnection;

  public DummyWatcher(){
    awaitConnection = new CountDownLatch(1);
  }

  public boolean connectOrThrow(long timeout, TimeUnit unit) throws 
InterruptedException{
    return awaitConnection.await(timeout, unit);
  }

  @Override
  public void process(WatchedEvent event) {
    if (event.getState() == KeeperState.SyncConnected){
      awaitConnection.countDown();
    }
  }

}

Does this mean that the following event might never fire or does it always fire?

Reply via email to