CHANGES

  • Enable retries in redis driver

  • Retry on redis connection errors

  • Cap protobuf < 4.x

  • ignore reno generated artifacts

2.3.1

  • Fix broken CI and PyMySQL support

  • Update .gitreview for stable/ussuri

2.3.0

  • Add TLS support in etcd3 and etcd3gw drivers

  • Drop requirements-check job

2.2.0

  • Adds heartbeating to the consul driver

2.1.0

2.0.0

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

1.67.2

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

1.67.1

1.67.0

  • Drop os-testr test-requirement and pretty_tox.sh

  • Update master for stable/train

  • Add shared arg in metaclass Lock

1.66.2

  • Fix membership lease issue on the etcd3gw driver

1.66.1

  • Fix wrong log level during heartbeat

1.66.0

  • Add Python 3 Train unit tests

  • Move grpcio from requirements.txt to extras

  • Blacklist sphinx 2.1.0

1.65.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 git.openstack.org URLs with opendev.org URLs

  • Remove py35, add py37 classifiers

  • Unblock tooz gate

  • OpenDev Migration Patch

  • add python 3.7 unit test job

1.64.2

1.64.1

  • Fixed UnicodeEncodeError for Python2 unicode objects

1.64.0

  • More explicitly document driver connection strings

  • Unblock tooz gate

  • Change openstack-dev to openstack-discuss

1.63.1

1.63.0

  • 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

1.62.0

  • Trivial: Update pypi url to new url

  • set default python to python3

  • Implement group support for etcd3gw

1.61.0

  • 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 tox_install.sh

  • 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

1.59.0

  • 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

1.58.0

  • 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

1.57.4

  • Switch from oslosphinx to openstackdocstheme

  • Turn on warning-is-error in doc build

  • Add etcd3 group support

1.57.3

  • 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

1.57.2

  • {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

1.57.1

  • consul: remove unused executor

1.57.0

  • 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

1.56.1

  • Fix psycopg2 connection argument

1.56.0

  • 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

1.55.0

  • Implement heartbeat for FileDriver

  • simplify hashring node lookup

1.54.0

  • 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

1.53.0

  • Enhance heartbeat sleep timer

1.52.0

  • FileDriver:Support multiple processes

  • Switch tests to use latest etcd - 3.1.3

1.51.0

  • pass on partitions

  • hashring: allow to use bytes as node name

1.50.0

  • postgresql: only pass username and password if they are set

  • Rewrite heartbeat runner with event

  • Adds authentication support for zookeeperDriver

1.49.0

  • support unicode node name

  • Update reno for stable/ocata

1.48.0

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

1.47.0

  • 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()

1.46.0

  • 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

1.45.0

  • 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

  • Add CONTRIBUTING.rst

  • 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

1.44.0

  • 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 file.py

  • Update etcd version in tests

1.43.0

  • Makedirs only throws oserror, so only catch that

1.42.0

  • 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

1.41.0

  • File driver: properly handle Windows paths

  • Updated from global requirements

  • Updated from global requirements

1.40.0

  • 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

1.39.0

  • Updated from global requirements

1.38.0

  • 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

1.37.0

  • Remove unused consul future result

  • Updated from global requirements

  • Add a consul based driver

  • file: make python2 payload readable from python3

1.36.0

  • Updated from global requirements

1.35.0

  • 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

1.34.0

1.33.0

  • Updated from global requirements

  • Compute requires_beating

  • Fix calling acquire(blocking=False) twice leads to a deadlock

1.32.0

  • Raises proper error when unwatching a group

1.31.0

  • 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)

1.30.0

  • 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

1.29.0

  • 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

1.28.0

  • 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

1.27.0

  • Updated from global requirements

  • Updated from global requirements

  • Remove python 2.6 and cleanup tox.ini

1.26.0

  • Updated from global requirements

  • Allow specifying a kazoo async handler ‘kind’

  • Updated from global requirements

1.25.0

  • 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

1.24.0

  • Updated from global requirements

1.23.0

  • Changes to add driver list to the documentation

  • Updated from global requirements

1.22.0

  • Updated from global requirements

  • Accept blocking argument in lock’s context manager

  • Make RedisLock’s init consistent with other locks

  • Updated from global requirements

1.21.0

  • Raise exception on failed lock’s CM acquire fail

  • Be more restrictive on the executors users can provide

1.20.0

  • 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

1.19.0

  • Updated from global requirements

  • Change Lock.name 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

1.18.0

  • 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

0.17.0

  • No longer need kazoo lock custom retry code

  • Ensure unwatch_elected_as_leader correctly clears hooks

0.16.0

  • 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 ‘pypip.in’ to ‘shields.io’

  • 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

0.15.0

  • 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

0.14.0

  • 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

0.13.1

  • Switch to non-namespaced module imports

  • Add a driver feature compatibility matrix

  • Remove support for 3.3

0.13.0

  • 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

0.12

  • retry: fix decorator

  • file: fix typo in errno.EACCES

0.11

  • 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

0.10

  • 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

0.9

  • 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

0.8

  • 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

0.7

  • Split up the requirements for py2.x and py3.x

  • ipc: Fix acquire lock loop logic

0.6

  • Make lock blocking with no time out by default

0.5

  • 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

0.4

  • 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

0.3

  • 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

0.2

  • memcached: implement leader election

  • Fix a race condition in one of the test

0.1

  • 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 models.py and clean get_members()

  • Add a fake ZooKeeper driver

  • Allow passing in a handler

  • First commit of Tooz

  • Added .gitreview