• Loose lower bound of packaging library version

  • fix: correctly pass ssl_ca_certs to sentinel when enabled

  • Remove old excludes

  • pre-commit: Bump version, add doc8

  • Remove unnecessary dependencies

  • Remove use of distutils


  • Make authentication/SSL for redis sentinel optional

  • reno: Update master for unmaintained/wallaby

  • reno: Update master for unmaintained/victoria


  • Fix sentinel tests not running

  • Fix broken redis sentinel support


  • redis: Fix wrong type used to parse socket_keepalive

  • redis: support healthcheck interval

  • Prevent potential ReDoS attack

  • Show coverage report

  • Redis: Fix missing ssl/auth options for sentinel

  • redis: Fix parsing of sentinel fallbacks containing IPv6 address

  • redis: Add username

  • Move driver tests to drivers directory

  • Bump hacking

  • Update python classifier in setup.cfg

  • Ignore .eggs directory

  • Fix handling of timeout and blocking


  • tox: Bump python runtime versions in the default envlist

  • Deprecate zake driver because of unmaintained library

  • etcd3gw: Discover API version automatically

  • Redis: Allow customizing ssl ca certificates path

  • Remove etcd3 drvier

  • Fix bindep for Debian 12


  • Add missing % in diagnostic_lines.append call

  • Update the default etcd3gw endpoint to v3

  • Replace en-dash with ASCII minus in a docstring

  • Cleanup py27 support


  • Fix: Add timeout for mysql driver


  • Revert “Moves supported python runtimes from version 3.8 to 3.10”


  • Fix mysql timeout

  • Moves supported python runtimes from version 3.8 to 3.10

  • redis: Make socket_connect_timeout configurable

  • Accept float values for socket_timeout

  • Change StrictRedis usage to Redis

  • tox: set allowlist_externals

  • Allow to pass ssl-related args for zookeeper

  • Loosen protobuf version that’s used for docs/renos

  • Add grouping support in etcd to compatibility matrix



  • Support etcd3gw api version

  • remove unicode from code


  • Cap protobuf < 4.x

  • Fix inappropriate logic in memcachedlock.release()

  • [etcd3gw] create new lease if expired

  • Drop python3.6/3.7 support in testing runtime

  • Enable watch functionality for Etcd3Driver


  • Fix getting group with prefix in etcd3gw driver


  • Bump tenacity dependency to >= 5.0.0

  • Support later tenacity versions

  • Update CI to use unversioned jobs template

  • Deprecate the etcd3 driver


  • Fix docstring for get_members()

  • Add TLS support for MySQL driver


  • Enable retries in redis driver

  • setup.cfg: Replace dashes with underscores


  • setup.cfg: Replace dashes with underscores

  • Fix formatting of release list

  • Move flake8 as a pre-commit local target

  • Retry on redis connection errors

  • Update master for stable/wallaby

  • Cap tenacity to unblock the gate

  • Bump hacking and flake8 version to fix pep8 job

  • Use py3 as the default runtime for tox


  • Replace md5 with oslo version

  • Adding pre-commit

  • Blacklist etcd3gw 0.2.6

  • Add Python3 wallaby unit tests

  • Update master for stable/victoria


  • Use safe_decode for decoding in zookeeper driver


  • Fix breakage with PyMySQL 0.10.0

  • hashring: allow choosing hash function

  • Remove six library


  • Implements Group API for the Consul driver



  • Stop to use the __future__ module

  • Switch to newer openstackdocstheme and reno versions

  • Add python 3.8 to classifiers


  • Use unittest.mock instead of third party mock

  • Add support for Consul ACL token parameter

  • Switch to Victoria tests

  • Add nose as test-requirement

  • Fix mysql driver comparison operator

  • Add release notes links to doc index

  • Update master for stable/ussuri


  • Add TLS support in etcd3 and etcd3gw drivers

  • Drop requirements-check job

  • ignore reno generated artifacts


  • Adds heartbeating to the consul driver



  • [ussuri][goal] Drop python 2.7 support and testing


  • RedisLock release() should not check if the lock has been acquired



  • Drop os-testr test-requirement and

  • Update master for stable/train

  • Add shared arg in metaclass Lock


  • Fix membership lease issue on the etcd3gw driver


  • Fix wrong log level during heartbeat


  • Add Python 3 Train unit tests

  • Move grpcio from requirements.txt to extras

  • Blacklist sphinx 2.1.0


  • Move test deps to test-requirements.txt

  • Remove unused requirements

  • Update Sphinx requirement and uncap grpcio

  • Avoid redis lock’s expire_time exceeding timeout

  • Referencing testenv deps now works

  • Update master for stable/stein

  • Replace URLs with URLs

  • Remove py35, add py37 classifiers

  • Unblock tooz gate

  • OpenDev Migration Patch

  • add python 3.7 unit test job



  • Fixed UnicodeEncodeError for Python2 unicode objects


  • More explicitly document driver connection strings

  • Unblock tooz gate

  • Change openstack-dev to openstack-discuss



  • coordination: do not retry the whole heartbeat on fail

  • Use templates for cover

  • Migrate to stestr

  • Fix coverage tests

  • Switch to autodoc_default_options

  • Ensure consistent encoding of strings for ID

  • add lib-forward-testing-python3 test job

  • add python 3.6 unit test job

  • import zuul job settings from project-config

  • Update reno for stable/rocky

  • Add release note link in README

  • fix tox python3 overrides


  • Trivial: Update pypi url to new url

  • set default python to python3

  • Implement group support for etcd3gw


  • Zuul: Remove project name

  • Zuul: Remove project name

  • Update reno for stable/queens

  • partitioner: do not use hash() to determine object identity

  • msgpack-python has been renamed to msgpack

  • Follow the new PTI for document build

  • Remove

  • Use native Zuul v3 tox jobs

  • Add doc/requirements.txt

  • Remove setting of version/release from releasenotes

  • Zuul: add file extension to playbook path

  • Move legacy jobs to project


  • Acquire fails with “ToozError: Not found”

  • redis: always remove lock from acquired lock when release()ing

  • redis: log an error on release failure

  • Use the same default timeout for async result

  • Update reno for stable/pike


  • Update URLs in documents according to document migration

  • doc: use list-table for driver support tables

  • rearrange existing documentation to fit the new standard layout


  • Switch from oslosphinx to openstackdocstheme

  • Turn on warning-is-error in doc build

  • Add etcd3 group support


  • Make sure Lock.heartbeat() returns True/False

  • etcd3: skip ProcessPool based test

  • etcd3: replace custom lock code by more recent etcd3 lock code

  • pgsql: fix self._conn.close() being called without connection

  • test: leverage existing helper method in test_partitioner

  • coordination: remove double serialization of capabilities

  • tests: fix missing .get() on some group operations

  • Mutualize executor code in a mixin class

  • coordination: fix reversed fiels for __repr__ for events

  • Fix docstring for group and member id


  • {my,pg}sql: close connections when out of retry

  • Disable test_get_lock_serial_locking_two_lock_process for etcd3

  • Simplify env list and test running

  • Factorize tox envlist for better readability


  • consul: remove unused executor


  • Separate etcd3gw driver that uses the etcd3 grpc gateway

  • 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