# CHANGES

## 6.0.1

- Fix sentinel tests not running

- Fix broken redis sentinel support

## 6.0.0

- 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

## 5.0.0

- 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

## 4.3.0

- 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

## 4.2.0

- Fix: Add timeout for mysql driver

## 4.1.0

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

## 4.0.0

- 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

## 3.2.0

## 3.1.0

- Support etcd3gw api version

- remove unicode from code

## 3.0.0

- 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

## 2.11.1

- Fix getting group with prefix in etcd3gw driver

## 2.11.0

- Bump tenacity dependency to >= 5.0.0

- Support later tenacity versions

- Update CI to use unversioned jobs template

- Deprecate the etcd3 driver

## 2.10.1

- Fix docstring for get_members()

- Add TLS support for MySQL driver

## 2.10.0

- Enable retries in redis driver

- setup.cfg: Replace dashes with underscores

## 2.9.0

- 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

## 2.8.0

- Replace md5 with oslo version

- Adding pre-commit

- Blacklist etcd3gw 0.2.6

- Add Python3 wallaby unit tests

- Update master for stable/victoria

## 2.7.1

- Use safe_decode for decoding in zookeeper driver

## 2.7.0

- Fix breakage with PyMySQL 0.10.0

- hashring: allow choosing hash function

- Remove six library

## 2.6.0

- Implements Group API for the Consul driver

## 2.5.1

## 2.5.0

- Stop to use the __future__ module

- Switch to newer openstackdocstheme and reno versions

- Add python 3.8 to classifiers

## 2.4.0

- 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

## 2.3.0

- Add TLS support in etcd3 and etcd3gw drivers

- Drop requirements-check job

- ignore reno generated artifacts

## 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

this page last updated: 2024-03-11 13:06:07

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.

found an error? report a bug