• etcd3: use discard() rather than remove()
  • etcd: fix blocking argument
  • etcd: fix acquire(blocking=True) on request exception
  • etcd3: fix test run
  • coordination: factorize common async result futures code


  • Fix psycopg2 connection argument


  • doc: update heartbeat doc to use start_heart=True
  • sql: close connection for lock if not used
  • http->https for security
  • etcd3: add etcd3 coordination driver


  • Implement heartbeat for FileDriver
  • simplify hashring node lookup


  • redis: fix concurrent access on acquire()
  • tests: tests fail if no URL is set + run partitioner tests on basic drivers
  • tests: fix etcd and consul test run
  • add weight tests for add_nodes
  • get weight of existing members
  • coordination: do not get member list if not needed
  • Add shared filelock


  • Enhance heartbeat sleep timer


  • FileDriver:Support multiple processes
  • Switch tests to use latest etcd - 3.1.3


  • pass on partitions
  • hashring: allow to use bytes as node name


  • postgresql: only pass username and password if they are set
  • Rewrite heartbeat runner with event
  • Adds authentication support for zookeeperDriver


  • support unicode node name
  • Update reno for stable/ocata


  • Fix test function name with two underscores to have only one


  • Add partitioner implementation
  • Stop making tooz.utils depending on tooz.coordination
  • [doc] Note lack of constraints is a choice
  • The ‘moves.moved_class’ function creates a new class
  • Add weight support to the hashring
  • coordination: allow to pass capabilities in join_group_create()
  • coordination: fix moved_class usage for ToozError
  • zookeeper: switch to standard group membership watching
  • Add a hashring implementation
  • Move ToozError to root module
  • Fixup concurrent modification
  • Replaces uuid.uuid4 with uuidutils.generate_uuid()


  • Do not re-set the members cache for watchers by default
  • coordination: add __repr__ for join/leave events
  • coordination: renforce event based testing
  • Factorize member_id in the base coordinator class
  • Use the internal group of list rather than listing the groups
  • Move the cached-based watcher implementation into its own class


  • Factorize group quit on stop()
  • coordination: make get_members() return a set
  • Replace ‘assertTrue(a (not)in b)’ with ‘assert(Not)In(a, b)’
  • Changed author and author-email
  • redis: make sure we don’t release and heartbeat a lock at the same time
  • coordinator: add join_group_create
  • Replace retrying with tenacity
  • Replace ‘assertTrue(a in b)’ with ‘assertIn(a, b)’ and ‘assertFalse(a in b)’ with ‘assertNotIn(a, b)’
  • Using assertIsNone() instead of assertEqual(None, ...)
  • tox: use pretty tox output
  • tox: install docs dependency in docs target and reno
  • Bump hacking to 0.12
  • Add reno for release notes management


  • Changed the home-page link
  • file: update .metadata atomically
  • file: return converted voluptuous data
  • file: move _load_and_validate to a method
  • file: move _read_{group,member}_id to staticmethod-s
  • etcd: run tests in clustering mode too
  • Use method ensure_tree from oslo.utils
  • Switch from Python 3.4 to Python 3.5
  • Install only needed packages
  • Fix a typo in
  • Update etcd version in tests


  • Makedirs only throws oserror, so only catch that


  • etcd: don’t run heartbeat() concurrently
  • Raise tooz error when unexpected last entries found
  • etcd: properly block when using ‘wait’
  • Share _get_random_uuid() among all tests
  • Updated from global requirements
  • Clean leave group hooks when unwatching
  • Fix the test test_unwatch_elected_as_leader
  • Updated from global requirements


  • File driver: properly handle Windows paths
  • Updated from global requirements
  • Updated from global requirements


  • Add docs for new consul driver
  • Change dependency to use flavors
  • Run doc8 only in pep8 target
  • Move pep8 requirements in their own target
  • zookeeper: do not hard depend on eventlet
  • Remove unused iso8601 dependency
  • tests: remove testscenario usage
  • file: set no timeout by default
  • tests: move bad_url from scenarios to static test
  • Expose timeout capabilities and use them for tests
  • Use pifpaf to setup daemons


  • Updated from global requirements


  • Using LOG.warning instead of LOG.warn
  • Updated from global requirements
  • redis: do not force LuaLock
  • Fix coordinator typo
  • Updated from global requirements
  • Ensure etcd is in developer and driver docs


  • Remove unused consul future result
  • Updated from global requirements
  • Add a consul based driver
  • file: make python2 payload readable from python3


  • Updated from global requirements


  • Drop babel as requirement since its not used
  • Updated from global requirements
  • Updated from global requirements
  • Updated from global requirements
  • Updated from global requirements
  • coordination: expose a heartbeat loop method



  • Updated from global requirements
  • Compute requires_beating
  • Fix calling acquire(blocking=False) twice leads to a deadlock


  • Raises proper error when unwatching a group


  • Updated from global requirements
  • Updated from global requirements
  • Add .tox, *.pyo and *.egg to .gitignore
  • Enable OS_LOG_CAPTURE so that logs can be seen (on error)


  • Updated from global requirements
  • Add lock breaking
  • pgsql: fix hostname parsing
  • Updated from global requirements
  • Updated from global requirements
  • Update voluptuous requirement
  • Updated from global requirements
  • Updated from global requirements
  • Have zookeeper heartbeat perform basic get
  • Add desired characteristics strict subset validation
  • Add base64 key encoder (and validations)
  • Use voluptuous instead of jsonschema
  • Add programatic introspection of drivers characteristic(s)
  • Updated from global requirements
  • pep8: fix remaining errors and enable all checks
  • Use utils.convert_blocking to convert blocking argument
  • Adjust some of the zookeeper exception message
  • Fix etcd env setup
  • tests: do not hardcode /tmp
  • utils: replace exception_message by exception_to_unicode
  • Add a default port and default host
  • etcd: driver with lock support
  • Use utils.to_binary instead of using redis module equivalent
  • Remove tested under 2.6 from docs


  • Updated from global requirements
  • Add basic file content schema validation
  • Spice up the driver summary/info page
  • Make all locks operate the same when fetched from different coordinators
  • Add noted driver weaknesses onto the drivers docs
  • Updated from global requirements
  • File: read member id from file with suffix ”.raw”
  • Reduce duplication of code in handling multi-type blocking argument
  • Updated from global requirements
  • Add comment in memcache explaining the current situation with lock release


  • Add ‘requires_beating’ property to coordination driver
  • {pg,my}sql: fix AttributeError on connection failure
  • tests: allow ipc to bypass blocking=False test
  • pgsql: remove unused left-over code
  • Add ‘is_still_owner’ lock test function


  • Updated from global requirements
  • Updated from global requirements
  • Remove python 2.6 and cleanup tox.ini


  • Updated from global requirements
  • Allow specifying a kazoo async handler ‘kind’
  • Updated from global requirements


  • Updated from global requirements
  • Add standard code coverage configuration file
  • docs - Set pbr ‘warnerrors’ option for doc build
  • Include changelog/history in docs
  • Updated from global requirements
  • Expose Znode Stats and Capabilities
  • Allow more kazoo specific client options to be proxied through


  • Updated from global requirements


  • Changes to add driver list to the documentation
  • Updated from global requirements


  • Updated from global requirements
  • Accept blocking argument in lock’s context manager
  • Make RedisLock’s init consistent with other locks
  • Updated from global requirements


  • Raise exception on failed lock’s CM acquire fail
  • Be more restrictive on the executors users can provide


  • Updated from global requirements
  • Updated from global requirements
  • Use futurist to allow for executor providing and unifying
  • Use a lua script(s) instead of transactions


  • Updated from global requirements
  • Change to a property
  • Update .gitignore
  • Updated from global requirements
  • Fixup dependencies
  • Expose started state of coordinator to external
  • Updated from global requirements
  • Updated from global requirements


  • Remove tooz/openstack as it is empty and not used
  • Fix sp ‘seonds’ -> ‘seconds’
  • Ensure run_watchers called from mixin, not base class
  • Updated from global requirements
  • Update compatibility matrix due to file drivers new abilities


  • No longer need kazoo lock custom retry code
  • Ensure unwatch_elected_as_leader correctly clears hooks


  • Updated from global requirements
  • Updated from global requirements
  • Ensure lock(s) acquire/release returns boolean values
  • Expose ‘run_elect_coordinator’ and call it from ‘run_watchers’
  • Share most of the `run_watchers` code via a common mixin
  • Remove 2.6 classifier
  • Remove file-driver special no-async abilities
  • Delay interpolating the LOG string
  • Use `encodeutils.exception_to_unicode` for exception -> string function
  • Use the `excutils.raise_with_cause` after doing our type check
  • Updated from global requirements
  • Use the ‘driver_lock’ around read operations
  • Updated from global requirements
  • Switch badges from ‘’ to ‘’
  • Updated from global requirements
  • Add watch file driver support
  • Make the file driver more capable (with regard to groups)
  • Ensure locks can not be created outside of the root file driver directory
  • Updated from global requirements
  • Use MySQL default port when not set explicitly
  • Use fasteners library for interprocess locks
  • Implement watch/unwatch elected_as_leader for redis driver
  • Updated from global requirements
  • Use lua locks instead of pipeline locks
  • Move more string constants to class constants with docstrings
  • Updated from global requirements
  • Updated from global requirements
  • Remove support for redis < 2.6.0
  • Expose Zookeeper client class constants
  • Expose redis client class constants
  • Use a serialization/deserialization specific exception
  • Expose memcache coord. class constants
  • Explicitly start and execute most transactions
  • Provide and use a options collapsing function
  • Add zookeeper tag in setup.cfg
  • Use pymemcache pooled client
  • Use oslo.serialization msgpackutils
  • Provide ability for namespace customization for Zookeeper and Zake drivers
  • Typo in Locking doc
  • Move optional driver requirements to test-requirements.txt
  • Have run_watchers take a timeout and respect it
  • Heartbeat on acquired locks copy
  • Avoid using a thread local token storage


  • Fix param name to be its right name
  • Replace more instance(s) of exception chaining with helper
  • Just use staticmethod functions to create _dumps/_loads
  • Uncap library requirements for liberty
  • Link AOF to redis persistence docs
  • Add exception docs to developer docs
  • Add + use helper to raise + chain exceptions
  • Allow the acquired file to be closed manually
  • Updated from global requirements
  • Silence logs + errors when stopping and group membership lost
  • Make and use a thread safe pymemcache client subclass
  • Handle errors that come out of pymemcache better
  • Use rst inline code structure + link to sentinel


  • Beef up the docstrings on the various drivers
  • fix lock concurrency issues with certain drivers
  • Add pypi download + version badges
  • Denote that 2.6 testing is still happening
  • Updated from global requirements
  • Use a sentinel connection pool to manage failover
  • fix mysql driver url parsing


  • Switch to non-namespaced module imports
  • Add a driver feature compatibility matrix
  • Remove support for 3.3


  • Two locks acquired from one coord must works
  • Updated from global requirements
  • Releases locks in tests
  • Allow coordinator non-string options and use them
  • Since we use msgpack this can be more than a str
  • Updated from global requirements
  • Avoid re-using the same timeout for further watcher ops


  • retry: fix decorator
  • file: fix typo in errno.EACCES


  • Add a file based driver
  • Upgrade to hacking 0.10
  • Update sentinel support to allow multiple sentinel hosts
  • Allow to pass arguments to retry()
  • IPC simplification


  • Add support for an optional redis-sentinel
  • README.rst tweaks
  • A few more documentation tweaks
  • Sync requirements to global requirements
  • Add create/join/leave group support in IPC driver
  • Add driver autogenerated docs
  • Update links + python version supported
  • zookeeper: add support for delete group
  • redis: add support for group deletion
  • tests: minor code simplification
  • memcached: add support for group deletion
  • memcached: add support for _destroy_group
  • Switch to using oslosphinx
  • Add doc on how transaction is itself retrying internally
  • Fix .gitreview after rename/transfer
  • tests: use scenarios attributes for timeout capability
  • tests: check for leave group events on dead members cleanup
  • memcached: delete stale/dead group members on get_members()
  • tests: remove check_port
  • tests: do not skip test on connection error


  • doc: add missing new drivers
  • doc: switch examples to Zake
  • doc: add locking
  • Fix tox envlist
  • Drop Python 3.3 tests in tox
  • Allow tox with py34 and MySQL
  • Test connection error scenarios on more drivers
  • Translate psycopg2 errors/exceptions into tooz exceptions
  • Ensure ‘leave_group’ result gotten before further work
  • watch_leave_group not triggering callback on expired members
  • Add MySQL driver
  • Discard ‘self’ from ‘_joined_groups’ if we got booted out
  • Implement non-blocking locks with PostgreSQL
  • More retry code out of memcached
  • Add a PostgreSQL driver
  • Fix gate
  • Handle when a group used to exist but no longer does
  • tox: split redis/memcached env
  • Fix memcached heartbeat on start()
  • tox: splits test scenarios
  • Add a minimum redis version check while starting
  • Make requirement on redis 2.10.x explicit
  • Try to use PSETEX when possible
  • Use hdel with many keys where supported
  • Avoid logging warnings when group deleted or member gone
  • Ensure that we correctly expire (and cleanup) redis members
  • Various fixes for locks and version compatibility
  • Move sysv_ipc deps to test-requirements


  • test: try to stop() first
  • Convert the rest of memcached driver functions to futures
  • Add a assertRaisesAny helper method
  • Allow zake to be tested
  • Add a redis driver
  • Ensure groups leaving returns are gotten
  • Raise the new OperationTimedOut when futures don’t finish
  • Start to add a catch and reraise of timed out exceptions
  • Adjust the timeout to reflect the repeated retries
  • ipc: do not delete the lock if we never acquired it
  • Add home-page field


  • Split up the requirements for py2.x and py3.x
  • ipc: Fix acquire lock loop logic


  • Make lock blocking with no time out by default


  • coordination: remove destroy() from the lock protocol
  • IPC: fix a potential race condition at init
  • Fix IPC driver on OS X
  • Switch to oslo.utils
  • Blacklist retrying 1.3.0
  • Use futures to make parts of the memcached driver async
  • Have examples run in the py27 environment and make them work


  • Standardize the async result subclasses
  • Fix the comment which was borrowed from the IPC driver
  • Be more tolerant of unicode exceptions
  • Standardize on the same lock acquire method definition
  • Standardize on hiding the lock implementation
  • On lock removal validate that they key was actually deleted
  • Use a thread safe deque instead of a queue
  • Change inline docs about class fake storage variable
  • LOG a warning if the heartbeat can not be validated
  • Add doc8 to the py27 test running
  • Use the more reliable sysv_ipc instead of posix_ipc+lockutils
  • Only start zookeeper/memcached when not already running
  • Let zake act as a in-memory fully functional driver
  • Switch to a custom NotImplemented error
  • Ensure lock list isn’t mutated while iterating
  • Move Zake driver code to separated Python module
  • Work toward Python 3.4 support and testing
  • Unlock the kazoo version
  • Bump up zake to be using the newer 0.1 or greater
  • Fix zake driver with latest release
  • memcached: switch leader election implementation to a lock
  • Add the generation of the documentation in tox.ini
  • Add coverage report


  • Switch to URL for loading backends
  • Import network_utils from Oslo
  • coordination: add IPC driver
  • coordination: raise NotImplementedError as default
  • Add documentation
  • Upgrade hacking requirement
  • memcached: use retrying rather than sleeping
  • Use retrying instead of our custom code
  • Update requirements file matching global requ


  • memcached: implement leader election
  • Fix a race condition in one of the test


  • memcached: add locking
  • coordination: implement lock mechanism in ZK
  • coordination, zookeeper: add get_leader()
  • coordination, zookeeper: implement leader election
  • coordination: remove wrong comment in tests
  • memcached: add support for leave events
  • memcached: implement {un,}watch_join_group()
  • coordination: raise GroupNotCreated when watching uncreated group
  • coordination, zookeeper: add {un,}watch_leave_group
  • coordination, zookeeper: add watch_join_group
  • tests: skip test if function is not implemented
  • coordination: add hooks system
  • Add memcached driver
  • zookeeper: use bytes as input/output type
  • tests: test client disconnection
  • coordination: add heartbeat method
  • Add pbr generated and testr files to gitignore
  • coordination: enhance MemberAlreadyExist exception
  • coordination: enhance GroupNotCreated exception
  • coordination: enhance MemberNotJoined
  • coordination: enhance GroupAlreadyExist exception
  • tests: test capabilities on non existent group/member
  • tests: add a test for group already existing
  • tests: fix variable name
  • Fix the default prototype for join_group
  • Adds basic tests which deals with exceptions
  • Fixes TypeError in _leave_group_handler
  • Remove _wrap_call_kazoo
  • Add asynchronous API
  • Delete and clean get_members()
  • Add a fake ZooKeeper driver
  • Allow passing in a handler
  • First commit of Tooz
  • Added .gitreview