diff options
-rw-r--r-- | kazoo/client.py | 14 | ||||
-rw-r--r-- | kazoo/retry.py | 2 |
2 files changed, 13 insertions, 3 deletions
diff --git a/kazoo/client.py b/kazoo/client.py index 304dfec..9d82920 100644 --- a/kazoo/client.py +++ b/kazoo/client.py @@ -382,18 +382,26 @@ class KazooClient(object): # ZK uses milliseconds self._timeout = int(timeout * 1000) + # Record the handler strategy used self._handler = handler if handler else SequentialThreadingHandler() + if inspect.isclass(self._handler): raise ConfigurationError("Handler must be an instance of a class, " "not the class: %s" % self._handler) self._handle = None - self._connected = False - self._connected_async_result = self._handler.async_result() + + # We use events like twitter's client to track current and desired + # state (connected, and whether to shutdown) + self._live = self._handler.event_object() + self._stopped = self._handle.event_object() + self._connection_timed_out = False self.retry = KazooRetry(max_retries) + # Curator like simplified state tracking, and listeners for state + # transitions self.state = KazooState.LOST self.state_listeners = set() @@ -446,7 +454,7 @@ class KazooClient(object): @property def connected(self): """Returns whether the Zookeeper connection has been established""" - return self._connected + return self._live.is_set() @property def client_id(self): diff --git a/kazoo/retry.py b/kazoo/retry.py index 51e0784..f363772 100644 --- a/kazoo/retry.py +++ b/kazoo/retry.py @@ -2,6 +2,7 @@ from zookeeper import ( ClosingException, ConnectionLossException, OperationTimeoutException, + SessionExpiredException ) @@ -15,6 +16,7 @@ class KazooRetry(object): ClosingException, ConnectionLossException, OperationTimeoutException, + SessionExpiredException, ForceRetryError ) |