- Use the Zookeeper-provided mtime of a node as the last_modified
attribute, instead of client specific time.time()
- Use GUID from new Zookeeper recipe to handle connection loss which
still results in a created node.
- Add safe-call to ensure that commands run reliably in the face of a
connection loss exception during their call, and have lock code run
in a separate thread to ensure it doesn’t deadlock the ZK event
- Removed zc-zookeeper-static requirement as some OS distributions include
the python zookeeper binding as a system package.
- Fix ZkNode issues with dead-locks due to having locking code inside
- Removed ZkNodeDict which establishes a questionable amount of watches on
the server. Setting too many watches has multiple drawbacks, larger values
should be stored as JSON in a single node.
- Added context manager return to lock to allow use of the ‘with’
- Refactored to use zc.zk ZooKeeper library for higher level Zookeeper
abstraction with automatic watch re-establishment.
- Node object to retrieve ZNode data from Zookeeper and keep it up
- Node objects can have data and children subscribers.
- NodeDict object that maps a shallow tree (one level of children)
into a dict-like object.
- SharedZkLock has been refactored into ZkWriteLock and ZkReadLock.
- revoked is a property of Locks, not a method.
- ZkConnection is gone, lock objects, ZkNode, and ZkNodeDict all expect
zc.zk ZooKeeper instances.
- Lock implementation, with revokable shared locks.
- Zookeeper connection object with automatic reconnect.