# CHANGES

## 5.5.0

- Prevent potential ReDoS attack

- redis: Support fallback servers

- Use consistent credential for Redis and Redis Sentinel

- redis: Enable SSL for sentinel

- redis: Add username

- Bump hacking

- Replace deprecated perl-style regex

- Cleanup setup.py and requirements

- Update python classifier in setup.cfg

- coveragerc: Remove non-existent path

- Fix python shebang

- Avoid endless backtraces on StorageFailure

- Fix incorrect handling of storage exceptions

- bindep: Use new mysql-* package names

- Update master for stable/2023.2

## 5.4.0

- Update redis dep to >=3.0.0

## 5.3.0

- Add job to test with SQLAlchemy master (2.x)

- db: Don’t rely on autocommit behavior

- tests: Enable SQLAlchemy 2.0 deprecation warnings

- tests: Use valid IPv6 address

## 5.2.0

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

- Moves supported python runtimes from version 3.8 to 3.10

- Upgrade development status

- Fix doc building with Sphinx 6.0

- Prepare taskflow for sqlalchemy2

- Update master for stable/2023.1

- Fix parsing of zookeeper jobboard backend options

## 5.1.0

- Fix test_while_is_not with python 3.11

- Change StrictRedis usage to Redis

- remove unicode prefix from code

- Adapt to new jsonschema versions

- Replace abc.abstractproperty with property and abc.abstractmethod

## 5.0.0

- Quote string representations

- Fix formattiing of release list

- Remove six

- Drop python3.6/3.7 support in testing runtime

- Delete the job from backend if it cannot be consumed

## 4.7.0

- Update CI to use unversioned jobs template

- Fix atomdetails failure column size

- Fix unit tests

## 4.6.4

- Handle invalid redis entries in RedisJobBoard

- Fix minor typo in ActionEngine exception message

- Use LOG.warning instead of deprecated LOG.warn

## 4.6.3

## 4.6.2

- Replace deprecated import of ABCs from collections

- Use custom JSONType columns

## 4.6.1

- Updating for OFTC IRC network

- Fix flowdetails meta size

- Use unittest.mock instead of mock

- setup.cfg: Replace dashes with underscores

- Move flake8 as a pre-commit local target

- Remove lower-constraints remnants

## 4.6.0

- Fix deprecated Alembic function args

- Dropping lower constraints testing

- Use TOX_CONSTRAINTS_FILE

- Use py3 as the default runtime for tox

- Add Python3 wallaby unit tests

- Update master for stable/victoria

- ignore reno generated artifacts

- Adding pre-commit

## 4.5.0

- [goal] Migrate testing to ubuntu focal

## 4.4.0

- Avoid endless loop on StorageFailure

- Add sentinel redis support

- Switch from unittest2 compat methods to Python 3.x methods

## 4.3.1

- Make test-setup.sh compatible with mysql8

## 4.3.0

- Stop to use the __future__ module

## 4.2.0

- Switch to newer openstackdocstheme and reno versions

- Cap jsonschema 3.2.0 as the minimal version

- Import modules, not classes

- Bump default tox env from py37 to py38

- Add py38 package metadata

- Add release notes links to doc index

- Drop use of deprecated collections classes

- Add Python3 victoria unit tests

- Update master for stable/ussuri

## 4.1.0

- Zookeeper backend SSL support

## 4.0.0

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

## 3.8.0

- Switch to Ussuri jobs

- Update TaskFlow for networkx 2.x

- Update master for stable/train

- Fix python3.8 hmac compatibility

## 3.7.1

- Use mysql LONGTEXT for atomdetails results

- Add Python 3 Train unit tests

- Add local bindep.txt

- Remove unused tools/tox_install.sh

## 3.7.0

- update git.openstack.org to opendev

- Dropping the py35 testing

- Remove debtcollector requirement

- Update Sphinx requirement

## 3.6.0

- Remove unsused tools/tox_install.sh

- Handle collections.abc deprecations

- Uncap jsonschema

- OpenDev Migration Patch

- Update master for stable/stein

- add python 3.7 unit test job

## 3.4.0

- Move test requirements out of runtime requirements

- Change openstack-dev to openstack-discuss

## 3.3.1

- Update doc/conf.py to avoid warnings with sphinx 1.8

- Use templates for cover and lower-constraints

- Remove the duplicated word

- Fix a symbol error

- Create KazooClient with taskflow logger

- add lib-forward-testing-python3 test job

- add python 3.6 unit test job

- add proper pydot3 dependency

- import zuul job settings from project-config

- Switch to use stestr for unit test

- Add pydot test dependency

- Remove PyPI downloads

- Update reno for stable/rocky

- Update various links in docs

## 3.2.0

- Remove unused link target

- Fix code to support networkx > 1.0

- add release notes to README.rst

- replace http with https

- Update links in README

- fix tox python3 overrides

- Drop py34 target in tox.ini

- Uncap networkx

- give pep8 and docs environments all of the dependencies they need

- Trivial: update pypi url to new url

- Fix doc build

- Trivial: Update pypi url to new url

- stop using tox_install.sh

- only run doc8 as part of pep8 test job

- standardize indentation in tox.ini

- set default python to python3

- don’t let tox_install.sh error if there is nothing to do

- Updated from global requirements

- add lower-constraints job

- Updated from global requirements

- Fix invalid json unit test

- Update reno for stable/queens

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

## 3.1.0

- Updated from global requirements

- Add doc8 to pep8 environment

- Use doc/requirements.txt

## 3.0.1

## 3.0.0

- Remove setting of version/release from releasenotes

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

- Remove class StopWatch from timing

## 2.17.0

## 2.16.0

- Updated from global requirements

- Updated from global requirements

- Update “indentify” to “identify” in comments

## 2.15.0

- Updated from global requirements

- Remove method blather in log adapter

- Remove kwarg timeout in executor conductor

- Updated from global requirements

- Avoid log warning when closing is underway (on purpose)

- Update reno for stable/pike

- Updated from global requirements

## 2.14.0

- Updated from global requirements

- Update URLs in documents according to document migration

- Updated from global requirements

- Fix process based executor task proxying-back events

- turn on warning-is-error in doc build

- switch from oslosphinx to openstackdocstheme

- rearrange existing documentation into the new standard layout

- Updated from global requirements

## 2.13.0

- Updated from global requirements

- Fix html_last_updated_fmt for Python3

- Replace assertRaisesRegexp with assertRaisesRegex

## 2.12.0

- Updated from global requirements

- Updated from global requirements

- do not allow redis job reclaim by same owner

## 2.11.0

- Fix py35 test failure

- Stop using oslotest.mockpatch

- Updated from global requirements

- python3.0 has deprecated LOG.warn

## 2.10.0

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

- Prepare for using standard python tests

- Use https instead of http for git.openstack.org

- Updated from global requirements

- Update reno for stable/ocata

- Protect storage better against external concurrent access

## 2.9.0

- Remove dep on monotonic

- Rename engine analyzer to be named selector

- Update author and author-email

- Updated from global requirements

- Updated from global requirements

- Add Constraints support

- Show team and repo badges on README

## 2.8.0

- Replaces uuid.uuid4 with uuidutils.generate_uuid()

- Updated from global requirements

- Remove vim header from source files

- Fix release notes gate job failure

- Updated from global requirements

- Use assertIs(Not)None to check for None

- Fix typo in tox.ini

- Fix broken link

- Replace retrying with tenacity

- Updated from global requirements

- Add reno for release notes management

- Updated from global requirements

## 2.7.0

- Changed the home-page link

- Using assertIsNone() instead of assertIs(None, ..)

- Updated from global requirements

- Fix a typo in documentation

- Fix typo: remove redundant ‘that’

- Updated from global requirements

- Fix a typo in logging.py

- Use method ensure_tree from oslo.utils

- Make failure formatter configurable for DynamicLoggingListener

- Updated from global requirements

- Some classes not define __ne__() built-in function

## 2.6.0

## 2.5.0

- Updated from global requirements

- Add logging around metadata, ignore tallying + history

## 2.4.0

- Updated from global requirements

- Start to add a location for contributed useful tasks/flows/more

- Change dependency to use flavors

- Updated from global requirements

- Remove white space between print and ()

- Updated from global requirements

- Add Python 3.5 classifier and venv

- Replace assertEqual(None, *) with assertIsNone in tests

## 2.3.0

- Updated from global requirements

- remove unused LOG

- Fixes: typo error in comments

- Updated from global requirements

- Fix some misspellings in the function name and descriptions

- Updated from global requirements

## 2.2.0

- Don’t use deprecated method timeutils.isotime

- Add tests to verify kwargs behavior on revert validation

- Make tests less dependent on transient state

## 2.1.0

- Updated from global requirements

- Ensure the fetching jobs does not fetch anything when in bad state

- Updated from global requirements

- Use the full ‘get_execute_failures’ vs the shortname

- Split revert/execute missing args messages

- Updated from global requirements

- Instead of a multiprocessing queue use sockets via asyncore

- Add a simple sanity test for pydot outputting

## 2.0.0

- Updated from global requirements

- Fix documentation related to missing BaseTask class

- Remove deprecated things for 2.0 release

- Always used the library packaged mock

## 1.32.0

- Attempt to cancel active futures when suspending is underway

- Allow for specifying green threaded to parallel engine

- Make conductor.stop stop the running engine gracefully

## 1.31.0

- Updated from global requirements

- Don’t set html_last_updated_fmt without git

- Updated from global requirements

- Add the ability to skip resolving from activating

- Fix export_to_dot for networkx package changes

- Ensure upgrade for sqlalchemy is protected by a lock

- Add periodic jobboard refreshing (incase of sync issues)

- Fallback if git is absent

- Allow for revert to have a different argument list from execute

## 1.30.0

- Updated from global requirements

- Use a automaton machine for WBE request state machine

- Sqlalchemy-utils double entry (already in test-requirements.txt)

## 1.29.0

- Updated from global requirements

- Refactor Atom/BaseTask/Task/Retry class hierarchy

- Add missing direct dependency for sqlalchemy-utils

## 1.28.0

- Add WBE worker expiry

- Some WBE protocol/executor cleanups

- Remove need for separate notify thread

- Updated from global requirements

- Don’t bother scanning for workers if no new messages arrived

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

- Allow cachedproperty to avoid locking

- Spice up WBE banner and add simple worker __main__ entrypoint

## 1.27.0

- Updated from global requirements

- Fix for WBE sporadic timeout of tasks

- Add some basic/initial engine statistics

- Handle cases where exc_args can’t be serialized as JSON in the WBE

- Enable OS_LOG_CAPTURE so that logs can be seen (on error)

- Retrieve the store from flowdetails as well, if it exists

- Disable oslotest LOG capturing

- Updated from global requirements

- Updated from global requirements

- Use helper function for post-atom-completion work

- Ensure that the engine finishes up even under sent-in failures

- 99 bottles example trace logging was not being output

- Add useful/helpful comment to retry scheduler

- Updated from global requirements

- Updated from global requirements

- Replace clear zookeeper python with clear zookeeper bash

- Remove stray LOG.blather

## 1.26.0

- Some additional engine logging

- Replace deprecated library function os.popen() with subprocess

- Add comment as to why we continue when tallying edge decider nay voters

- Add rundimentary and/or non-optimized job priorities

- Allow for alterations in decider ‘area of influence’

- Fix wrong usage of iter_utils.unique_seen

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

- Use the retrying lib. to do basic sqlalchemy engine validation

- For taskflow patterns don’t show taskflow.patterns prefix

- Rename ‘_emit’ -> ‘_try_emit’ since it is best-effort (not ensured)

- Cache atom name -> actions and provide accessor function

- Quote/standardize atom name output

- Use shared util helper for driver name + config extraction

- Fix currently broken and inactive mysql tests

- Trap and expose exception any ‘args’

- Revert “Remove failure version number”

- Move all internal blather usage/calls to trace usage/calls

- Start rename of BLATHER -> TRACE

- Add ability of job poster/job iterator to wait for jobs to complete

- Updated from global requirements

- Use ‘match_type’ utility function instead of staticmethod

- Remove failure version number

- Translate kazoo exceptions into job equivalents if register_entity fails

- Change name of misc.ensure_dict to misc.safe_copy_dict

- Avoid recreating notify details for each dispatch iteration

- fix doc change caused by the change of tooz

- Deprecated tox -downloadcache option removed

- Updated from global requirements

- Add some useful commentary on rebinding processes

- Use small helper routine to fetch atom metadata entries

- Remove ‘MANIFEST.in’

- Pass through run timeout in engine run()

- Change engine ‘self._check’ into a decorator

## 1.25.0

- Move validation of compiled unit out of compiler

- Allow provided flow to be empty

- Move engine options extraction to __init__ methods

- Updated from global requirements

- Updated from global requirements

- Convert executor proxied engine options into their correct type

- Enable conversion of the tree nodes into a digraph

- Use the misc.ensure_dict helper in conductor engine options saving

- Add optional ‘defer_reverts’ behavior

- Add public property from storage to flowdetail.meta

- Adding notification points for job completion

- Remove python 2.6 and cleanup tox.ini

- Correctly apply deciders across flow boundaries

- Move ‘convert_to_timeout’ to timing type as a helper function

- Use conductor entity class constant instead of raw string

- Add a executor backed conductor and have existing impl. use it

- Add flow durations to DurationListener

- Update docstrings on entity type

- Move ‘fill_iter’ to ‘iter_utils.fill’

## 1.24.0

- Updated from global requirements

- Updated from global requirements

- Register conductor information on jobboard

- Add atom priority ability

- Add validation of base exception type(s) in failure type

- Fix order of assertEqual for unit.test_*

- Fix order of assertEqual for unit.worker_based

- Fix order of assertEqual for unit.persistence

- Fix order of assertEqual for unit.patterns

- Fix order of assertEqual for unit.jobs

- Fix order of assertEqual for unit.action_engine

## 1.23.0

- Updated from global requirements

- feat: add max_dispatches arg to conductor’s run

- Ensure node ‘remove’ and ‘disassociate’ can not be called when frozen

- Add in-memory backend delete() in recursive/non-recursive modes

- Use batch ‘get_atoms_states’ where we can

- Use automaton’s converters/pydot

- Make more of the WBE logging and ‘__repr__’ message more useful

- Fix bad sphinx module reference

- Relabel internal engine ‘event’ -> ‘outcome’

- No need for Oslo Incubator Sync

- Use the node built-in ‘dfs_iter’ instead of recursion

## 1.22.0

- Simplify flow action engine compilation

- Fix ‘dependened upon’ spelling error

- docs - Set pbr warnerrors option for doc build

- Rename ‘history’ -> ‘Release notes’

- Remove dummy/placeholder ‘ChangeLog’ as its not needed

- Remove ./taskflow/openstack/common as it no longer exists

- Remove quotes from subshell call in bash script

- Refactor common parts of ‘get_maybe_ready_for’ methods

- Fix the sphinx build path in .gitignore file

- Change ignore-errors to ignore_errors

- Use graphs as the underlying structure of patterns

- Updated from global requirements

- Fix ‘_cache_get’ multiple keyword argument name overlap

- Use the sqlalchemy-utils json type instead of our own

## 1.21.0

- Updated from global requirements

- Fix how the dir persistence backend was not listing logbooks

- Explain that jobs arch. diagram is only for zookeeper

## 1.20.0

- Updated from global requirements

- iter_nodes method added to flows

- Updated from global requirements

- Use ‘iter_utils.count’ to determine how many unfinished nodes left

- Fix flow states link

- Avoid running this example if zookeeper is not found

- Updated from global requirements

- Have the storage class provide a ‘change_flow_state’ method

## 1.19.0

- Updated from global requirements

- Updated from global requirements

- Add nicely made task structural diagram

- Updated from global requirements

- Remove some temporary variables not needed

- Only remove all ‘next_nodes’ that were done

- Fix busted stevedore doc(s) link

- Extend and improve failure logging

- Improve docstrings in graph flow to denote exceptions raised

- Enable testr OS_DEBUG to be TRACE(blather) by default

- Updated from global requirements

- Show intermediary compilation(s) when BLATHER is enabled

## 1.18.0

- Give the GC more of a break with regard to cycles

- Base class for deciders

- Remove extra runner layer and just use use machine in engine

- Updated from global requirements

- .gitignore update

- Avoid adding 1 to a failure (if it gets triggered)

- Replace the tree ‘pformat()’ recursion with non-recursive variant

- Fix seven typos and one readability on taskflow documentation

## 1.17.0

- Bump futurist and remove waiting code in taskflow

- Use the action engine ‘_check’ helper method

- Modify listeners to handle the results now possible from revert()

- Remove no longer used ‘_was_failure’ static method

- Remove legacy py2.6 backwards logging compat. code

- Updated from global requirements

- Fix lack of space between functions

- Create and use a serial retry executor

- Just link to the worker engine docs instead of including a TOC inline

- Link to run() method in engines doc

- Add ability to reset an engine via a `reset` method

## 1.16.0

- Updated from global requirements

- Use ‘addCleanup’ instead of ‘tearDown’ in engine(s) test

- Update ‘make_client’ kazoo docs and link to them

- Remove **most** usage of taskflow.utils in examples

- Move doc8 to being a normal test requirement in test-requirements.txt

- Updated from global requirements

- Found another removal_version=? that should be removal_version=2.0

- Add deprecated module(s) for prior FSM/table code-base

- Replace internal fsm + table with automaton library

- Remove direct usage of timeutils overrides and use fixture

## 1.15.0

- Provide a deprecated alias for the now removed stop watch class

- Update all removal_version from being ? to being 2.0

- Add deprecated and only alias modules for the moved types

- Unify the zookeeper/redis jobboard iterators

- Updated from global requirements

- Run the ‘99_bottles.py’ demo at a fast rate when activated

- Use io.open vs raw open

- Retain atom ‘revert’ result (or failure)

- Update the version on the old/deprecated logbook module

- Add docs for u, v, decider on graph flow link method

- Fix mock calls

- Remove setup.cfg ‘requires-python’ incorrect entry

- Compile lists of retry/task atoms at runtime compile time

- Integrate futurist (and **remove** taskflow originating code)

- Allow the 99_bottles.py demo to run in BLATHER mode

- Make currently implemented jobs use @functools.total_ordering

- Add more useful `__str__` to redis job

- Show job posted and goodbye in 99_bottles.py example

- Rename logbook module -> models module

- Notify on the individual engine steps

## 1.14.0

- Expose strategies so doc generation can easily pick them up

- Denote mail subject should be ‘[Oslo][TaskFlow]’

- Add support for conditional execution

- Use encodeutils for exception -> string function

- Updated from global requirements

- Build-out + test a redis backed jobboard

## 0.13.0

- Just make the compiler object at __init__ time

- Remove kazoo hack/fix for issue no longer needed

- Add history.rst that uses generated ‘ChangeLog’ file

- Add docstrings on runtime objects methods and link to them in docs

## 0.12.0

- Updated from global requirements

- Update states comment to refer to task section

- Updated from global requirements

- Remove 2.6 classifier + 2.6 compatibility code

- Remove reference to ‘requirements-pyN.txt’ files

- Add smarter/better/faster impl. of `ensure_atoms`

- Add bulk `ensure_atoms` method to storage

- Make it possible to see the queries executed (in BLATHER mode)

- Add doc warning to engine components

- Perform a few optimizations to decrease persistence interactions

- Handle conductor ctrl-c more appropriately

- Cache the individual atom schedulers at compile time

- Split-off the additional retry states from the task states

- Use the `excutils.raise_with_cause` after doing our type check

- Updated from global requirements

- Use monotonic lib. to avoid finding monotonic time function

- Document more of the retry subclasses special keyword arguments

## 0.11.0

- Address concurrent mutation of sqlalchemy backend

- Add indestructible 99 bottles of beer example

- Use alembic upgrade function/command directly

- Updated from global requirements

- Remove usage of deprecated ‘task_notifier’ property in build_car example

- Add `simple_linear_listening` example to generated docs

- Handy access to INFO level

- Switch badges from ‘pypip.in’ to ‘shields.io’

- Adding a revert_all option to retry controllers

- A few jobboard documentation tweaks

- Use sphinx deprecated docstring markup

- Use a class constant for the default path based backend path

- Updated from global requirements

- Remove example not tested

- Make the default file encoding a class constant with a docstring

- Use a lru cache to limit the size of the internal file cache

- Updated from global requirements

- Use hash path lookup vs path finding

- Remove all ‘lock_utils’ now that fasteners provides equivalents

- Add a new `ls_r` method

- Updated from global requirements

- Refactor machine builder + runner into single unit

- Replace lock_utils lock(s) with fasteners package

- Updated from global requirements

- Use shared ‘_check’ function to check engine stages

- Remove a couple more useless ‘pass’ keywords found

- Add a test that checks for task result visibility

- Remove testing using persistence sqlalchemy backend with ‘mysqldb’

- Remove customized pyX.Y tox requirements

- Updated from global requirements

- Allow same deps for requires and provides in task

- Remove ‘pass’ usage not needed

- Only show state transitions to logging when in BLATHER mode

- Fix updated_at column of sqlalchemy tables

- Remove script already nuked from oslo-incubator

- Ensure path_based abstract base class is included in docs

- Beef up docs on the logbook/flow detail/atom details models

- Remove custom py26/py27 tox venvs no longer used

- Executors come in via options config, not keyword arguments

- Use newer versions of futures that adds exception tracebacks

- Ensure empty paths raise a value error

- Remove listener stack and replace with exit stack

- Expose action engine no reraising states constants

- Chain a few more exception raises that were previously missed

- Expose in memory backend split staticmethod

- Updated from global requirements

- Remove tox py33 environment no longer used

- Avoid creating temporary removal lists

## 0.10.1

- Avoid trying to copy tasks results when cloning/copying

- Avoid re-normalizing paths when following links

- Add a profiling context manager that can be easily enabled

- Updated from global requirements

## 0.10.0

- Remove validation of state on state read property access

- Make the default path a constant and tweak class docstring

- Avoid duplicating exception message

- Add speed-test tools script

- Speed up memory backend via a path -> node reverse mapping

- Updated from global requirements

- Fix a typo in taskflow docs

- Small refactoring of ‘merge_uri’ utility function

- Fix post coverage job option not recognized

- Refactor/reduce shared ‘ensure(task/retry)’ code

- Move implementations into there own sub-sections

- Remove run_cross_tests.sh

- Move zookeeper jobboard constants to class level

- Retain chain of missing dependencies

- Expose fake filesystem ‘join’ and ‘normpath’

- Add + use diagram explaining retry controller area of influence

- Add openclipart.org conductor image to conductor docs

- Use oslo_utils eventletutils to warn about eventlet patching

- Test more engine types in argument passing unit test

- Add a conductor running example

- Replace more instance(s) of exception chaining with helper

- Avoid attribute error by checking executor for being non-none

## 0.9.0

- Validate correct exception subclass in ‘raise_with_cause’

- Remove link to kazoo eventlet handler

- Add states generating venv and use pydot2

- Add strict job state transition checking

- Uncap library requirements for liberty

- Have reset state handlers go through a shared list

- Add job states in docs + states in python

- Expose r/o listener callback + details filter callback

- Expose listener notification type + docs

- Ensure listener args are always a tuple/immutable

- Include the ‘dump_memory_backend’ example in the docs

- Make resolution/retry strategies more clear and better

- Rename notifier ‘listeners’ to ‘topics’

- Mention link to states doc in notify state transitions

- Ensure we don’t get stuck in formatting loops

- Add note about thread safety of fake filesystem

- Have the notification/listener docs match other sections

- Put semantics preservation section into note block

- Note that the traditional mode also avoids this truncation issue

- Avoid going into causes of non-taskflow exceptions

- Use the ability to chain exceptions correctly

- Add a example showing how to share an executor

- Shrink the bookshelf description

- Remove link about implementing job garbage binning

- Make the storage layer more resilent to failures

- Put the examples/misc/considerations under a new section

- Add a suspension engine section

## 0.8.1

- Switch back to maxdepth 2

- Allow ls() to list recursively (using breadth-first)

- Make an attempt at having taskflow exceptions print causes better

- fix renamed class to call super correctly

- Turn ‘check_who’ into a decorator

- Use ‘node’ terminology instead of ‘item’ terminology

- Remove 11635 bug reference

- Allow providing a node stringify function to tree pformat

- Add in memory filesystem clearing

- Just unify having a single requirements.txt file

- Fix a couple of spelling and grammar errors

- Add memory backend get() support

- Make the graph ‘_unsatisfied_requires’ be a staticmethod

- Add more comments to fake in-memory filesystem

- Add a set of tests to the in memory fake filesystem

## 0.8.0

- Adding test to improve CaptureListener coverage

- Prefer posixpath to os.path

- By default use a in memory backend (when none is provided)

- Allow using shallow copy instead of deep copy

- Move to the newer debtcollector provided functions

- Move to using the oslo.utils stop watch

- Updated from global requirements

- Ensure thread-safety of persistence dir backend

- Ensure we are really setup before being connected

- Ensure docstring on storage properties

- Expose the storage backend being used

- Use iteration instead of list(s) when extracting scopes

- Use binary/encode decode helper routines in dir backend

- Rename memory backend filesystem -> fake filesystem

- Just let the future executors handle the max workers

- Always return scope walker instances from `fetch_scopes_for`

- Give the GC a break

- Use the class name instead of the TYPE property in __str__

- Just use the class name instead of TYPE constant

- Ensure we have a ‘coverage-package-name’

- Attempt to extract traceback from exception

- Use compatible map and update map/reduce task docs

- Update engine docs with new validation stage

- Ensure we register & deregister conductor listeners

- Rename attribute ‘_graph’ to ‘_execution_graph’

- Add a log statement pre-validation that dumps graph info

- Have this example exit non-zero if incorrect results

- Use a collections.namedtuple for the request work unit

- Some small wbe engine doc tweaks

- Add newline to avoid sphinx warning

- Allow passing ‘many_handler’ to fetch_all function

- Ensure event time listener is in listeners docs

- Add a in-memory backend dumping example

- Added a map and a reduce task

- Restructure the in-memory node usage

- Switch to non-namespaced module imports

- Allow the storage unit to use the right scoping strategy

- Just use the local conf variable

- Put underscore in-front of alchemist helper

- lazy loading for logbooks and flowdetails

- Allow backend connection config (via fetch) to be a string

- Add + use failure json schema validation

- Use ordered[set/dict] to retain ordering

- Allow injected atom args to be persisted

- add _listeners_from_job method to Conductor base

- update uses of TimingListener to DurationListener

- Added EventTimeListner to record when events occur

- added update_flow_metadata method to Storage class

- Retain nested causes where/when we can

- Denote issue 17911 has been merged/accepted

- Persistence backend refactor

- Remove support for 3.3

- Writers can now claim a read lock in ReaderWriterLock

- Add another probabilistic rw-lock test

- Add + use read/write lock decorators

- Add no double writers thread test

- Use condition context manager instead of acquire/release

- Remove condition acquiring for read-only ops

- Set a no-op functor when none is provided

- Ensure needed locks is used when reading/setting intention

- Specialize checking for overlaps

- Use links instead of raw block quotes

- Rename the timing listeners to duration listeners

- Add a bookshelf developer section

- Ensure the thread bundle stops in last to first order

- Add warning about transient arguments and worker-based-engines

- Ensure ordered set is pickleable

- Add node removal/disassociate functions

- Add a fully functional orderedset

- Make the worker banner template part of the worker class

- Use compilation helper objects

- Allow node finding to not do a deep search

- Add a frozen checking decorator

- Tweak functor used to find flatteners/storage routines

- Add specific scoping documentation

- add jobboard trash method

- Provide more contextual information about invalid periodics

- Fix lookup scoping multi-match ordering

- Stick to one space after a period

- Refactor parts of the periodic worker

- Use oslo.utils encodeutils for encode/decode functions

- Bring over pretty_tox.sh from nova/heat/others

- Tweak some of the types thread safety docstrings

- Add pypi link badges

- Switch the note about process pool executor to warning

- Chain exceptions correctly on py3.x

- Updated from global requirements

- Remove WBE experimental documentation note

- Use the enum library for the retry strategy enumerations

- Use debtcollector library to replace internal utility

- add get_flow_details and get_atom_details to all backends

- Tweaks to atom documentation

- Update Flow::__str__

- Add todo note for kombu pull request

- Move ‘provides’ and ‘name’ to instance attributes

- Allow loading conductors via entrypoints

## 0.7.1

- Revert “Add retries to fetching the zookeeper server version”

- Allow turning off the version check

- adding check for str/unicode type in requires

- Make the dispatcher handler be an actual type

- Add retries to fetching the zookeeper server version

- Remove duplicate ‘the’ and link to worker engine section

- Remove delayed decorator and replace with nicer method

- Fix log statement

- Make the atom class an abstract class

- Improve multilock class and its associated unit test

- Mark conductor ‘stop’ method deprecation kwarg with versions

- Move to hacking 0.10

- catch NotFound errors when consuming or abandoning

- Use the new table length constants

- Improve upon/adjust/move around new optional example

- Clarify documentation related to inputs

- Docstrings should document parameters return values

- Let the multi-lock convert the provided value to a tuple

- Map optional arguments as well as required arguments

- Add a BFS tree iterator

- DFS in right order when not starting at the provided node

- Rework the sqlalchemy backend

- Modify stop and add wait on conductor to prevent lockups

- Default to using a thread-safe storage unit

- Add warning to sqlalchemy backend size limit docs

- Updated from global requirements

- Use a thread-identifier that can’t easily be recycled

- Use a notifier instead of a direct property assignment

- Tweak the WBE diagram (and present it as an svg)

- Remove duplicate code

- Improved diagram for Taskflow

- Bump up the env_builder.sh to 2.7.9

- Add a capturing listener (for test or other usage)

- Add + use a staticmethod to fetch the immediate callables

- Just directly access the callback attributes

- Use class constants during pformatting a tree node

## 0.7.0

- Abstract out the worker finding from the WBE engine

- Add and use a nicer kombu message formatter

- Remove duplicated ‘do’ in types documentation

- Use the class defined constant instead of raw strings

- Use kombu socket.timeout alias instead of socket.timeout

- Stopwatch usage cleanup/tweak

- Add note about publicly consumable types

- Add docstring to wbe proxy to denote not for public use

- Use monotonic time when/if available

- Updated from global requirements

- Link WBE docs together better (especially around arguments)

- Emit a warning when no routing keys provided on publish()

- Center SVG state diagrams

- Use importutils.try_import for optional eventlet imports

- Shrink the WBE request transition SVG image size

- Add a thread bundle helper utility + tests

- Make all/most usage of type errors follow a similar pattern

- Leave use-cases out of WBE developer documentation

- Allow just specifying ‘workers’ for WBE entrypoint

- Add comments to runner state machine reaction functions

- Fix coverage environment

- Use explicit WBE worker object arguments (instead of kwargs)

- WBE documentation tweaks/adjustments

- Add a WBE request state diagram + explanation

- Tidy up the WBE cache (now WBE types) module

- Fix leftover/remaining ‘oslo.utils’ usage

- Show the failure discarded (and the future intention)

- Use a class provided logger before falling back to module

- Use explicit WBE object arguments (instead of kwargs)

- Fix persistence doc inheritance hierarchy

- The gathered runtime is for failures/not failures

- add clarification re parallel engine

- Increase robustness of WBE producer/consumers

- Move implementation(s) to there own sections

- Move the jobboard/job bases to a jobboard/base module

- Have the serial task executor shutdown/restart its executor

- Mirror the task executor methods in the retry action

- Add back a ‘eventlet_utils’ helper utility module

- Use constants for runner state machine event names

- Remove ‘SaveOrderTask’ and test state in class variables

- Provide the stopwatch elapsed method a maximum

- Fix unused and conflicting variables

- Switch to using ‘oslo_serialization’ vs ‘oslo.serialization’

- Switch to using ‘oslo_utils’ vs ‘oslo.utils’

- Add executor statistics

- Use oslo.utils reflection for class name

- Add split time capturing to the stop watch

- Use platform neutral line separator(s)

- Create and use a multiprocessing sync manager subclass

- Use a single sender

- Updated from global requirements

- Include the ‘old_state’ in all currently provided listeners

- Update the README.rst with accurate requirements

- Include docstrings for parallel engine types/strings supported

- The taskflow logger module does not provide a logging adapter

- Send in the prior atom state on notification of a state change

- Pass a string as executor in the example instead of an executor

- Updated from global requirements

- Fix for job consumption example using wrong object

## 0.6.1

- Remove need to inherit/adjust netutils split

- Allow specifying the engine ‘executor’ as a string

- Disallowing starting the executor when worker running

- Use a single shared queue for an executors lifecycle

- Avoid creating a temporary list(s) for tree type

- Update statement around stopwatch thread safety

- Register with ‘ANY’ in the cloned process

- Add edge labels for engine states

- Remove less than useful action_engine __str__

- Ensure manager started/shutdown/joined and reset

- Return the same namedtuple that the future module returns

- Add a simplistic hello world example

- Get event/notification sending working correctly

- Move the engine scoping test to its engines test folder

- Get the basics of a process executor working

- Move the persistence base to the parent directory

- Correctly trigger ‘on_exit’ of starting/initial state

## 0.6.0

- Add an example which shows how to send events out from tasks

- Move over to using oslo.utils [reflection, uuidutils]

- Rework the in-memory backend

- Updated from global requirements

- Add a basic map/reduce example to show how this can be done

- Add a parallel table mutation example

- Add a ‘can_be_registered’ method that checks before notifying

- Base task executor should provide ‘wait_for_any’

- Replace autobind with a notifier module helper function

- Cleanup some doc warnings/bad/broken links

- Use the notifier type in the task class/module directly

- Use a tiny clamp helper to clamp the ‘on_progress’ value

- Retain the existence of a ‘EngineBase’ until 0.7 or later

- Remove the base postfix from the internal task executor

- Remove usage of listener base postfix

- Add a moved_inheritable_class deprecation helper

- Avoid holding the lock while scanning for existing jobs

- Remove the base postfix for engine abstract base class

- Avoid popping while another entity is iterating

- Updated from global requirements

- Use explict ‘attr_dict’ when adding provider->consumer edge

- Properly handle and skip empty intermediary flows

- Ensure message gets processed correctly

- Just assign a empty collection instead of copy/clear

- Remove rtype from task clone() doc

- Add and use a new simple helper logging module

- Have the sphinx copyright date be dynamic

- Add appropriate links into README.rst

- Use condition variables using ‘with’

- Use an appropriate ``extract_traceback`` limit

- Allow all deprecation helpers to take a stacklevel

- Correctly identify stack level in ``_extract_engine``

- Stop returning atoms from execute/revert methods

- Have tasks be able to provide copy() methods

- Allow stopwatches to be restarted

- Ensure that failures can be pickled

- Rework pieces of the task callback capability

- Just use 4 spaces for classifier indents

- Move atom action handlers to there own subfolder/submodule

- Workflow documentation is now in infra-manual

- Ensure frozen attribute is set in fsm clones/copies

- Fix split on “+” for connection strings that specify dialects

- Update listeners to ensure they correctly handle all atoms

- Allow for the notifier to provide a ‘details_filter’

- Be explicit about publish keyword arguments

- Some package additions and adjustments to the env_builder.sh

- Cache immutable visible scopes in the runtime component

- Raise value errors instead of asserts

- Add a claims listener that connects job claims to engines

- Split the scheduler into sub-schedulers

- Use a module level constant to provide the DEFAULT_LISTEN_FOR

- Move the _pformat() method to be a classmethod

- Add link to issue 17911

- Avoid deepcopying exception values

- Include documentation of the utility modules

- Use a metaclass to dynamically add testcases to example runner

- Remove default setting of ‘mysql_traditional_mode’

- Move scheduler and completer classes to there own modules

- Ensure that the zookeeper backend creates missing atoms

- Use the deprecation utility module instead of warnings

- Tweaks to setup.cfg

- Add a jobboard high level architecture diagram

- Mark ‘task_notifier’ as renamed to ‘atom_notifier’

- Revert wrapt usage until further notice

- Updated from global requirements

- Add a history retry object, makes retry histories easier to use

- Format failures via a static method

- When creating daemon threads use the bundled threading_utils

- Ensure failure types contain only immutable items

- Mark ‘task_notifier’ as renamed to ‘atom_notifier’

- Use wrapt to provide the deprecated class proxy

- Updated from global requirements

- Updated from global requirements

- Updated from global requirements

- Reduce the worker-engine joint testing time

- Link bug in requirements so people understand why pbr is listed

- Updated from global requirements

- Use standard threading locks in the cache types

- Handle the case where ‘_exc_type_names’ is empty

- Add pbr to installation requirements

- Updated from global requirements

- Remove direct usage of the deprecated failure location

- Fix the example ‘default_provides’

- Use constants for retry automatically provided kwargs

- Remove direct usage of the deprecated notifier location

- Remove attrdict and just use existing types

- Use the mock that finds a working implementation

- Add a futures type that can unify our future functionality

- Bump the deprecation version number

- Use and verify event and latch wait() return using timeouts

- Deprecate `engine_conf` and prefer `engine` instead

- Use constants for link metadata keys

- Bump up the sqlalchemy version for py26

- Hoist the notifier to its own module

- Move failure to its own type specific module

- Use constants for revert automatically provided kwargs

- Improve some of the task docstrings

- We can now use PyMySQL in py3.x tests

- Updated from global requirements

- Add the database schema to the sqlalchemy docs

- Change messaging from handler connection timeouts -> operation timeouts

- Switch to a custom NotImplementedError derivative

- Allow the worker banner to be written to an arbitrary location

- Update engine class names to better reflect there usage

## 0.5.0

- Avoid usage of six.moves in local functions

- Refactor parts of the job lock/job condition zookeeper usage

- Make it so that the import works for older versions of kombu

- Rework the state documentation

- Updated from global requirements

- Add a more dynamic/useful logging listener

- Use timeutils functions instead of misc.wallclock

- Expose only `ensure_atom` from storage

- Adjust docs+venv tox environments requirements/dependencies

- Increase robustness of WBE message and request processing

- Adjust the WBE log levels

- Use the features that the oslotest mock base class provides

- Use oslotest to provide our base test case class

- Jobboard example that show jobs + workers + producers

- Adjust on_job_posting to not hold the lock while investigating

- Bring in a newer optional eventlet

- Move some of the custom requirements out of tox.ini

- Document more function/class/method params

- Stop using intersphinx

- Expand toctree to three levels

- Documentation cleanups and tweaks

- Fix multilock concurrency when shared by > 1 threads

- Increase/adjust the logging of the WBE response/send activities

- Color some of the states depending on there meaning

- Switch to using oslo.utils and oslo.serialization

- Typos “searchs”

- Update the requirements-py2.txt file

- Remove no longer needed r/w lock interface base class

- Updated from global requirements

- Better handle the tree freeze method

- Ensure state machine can be frozen

- Link a few of the classes to implemented features/bugs in python

- Add a timing listener that also prints the results

- Remove useless __exit__ return

- Example which shows how to move values from one task to another

- Mention issue with more than one thread and reduce workers

- Add a mandelbrot parallel calculation WBE example

- Add existing types to generated documentation

- Remove the dependency on prettytable

- Work toward Python 3.4 support and testing

- Add a state machine copy() method

- Update the state graph builder to use state machine type

- Add a docs virtualenv

- Reduce unused tox environments

## 0.4.0

- Add a couple of scope shadowing test cases

- Relax the graph flow symbol constraints

- Relax the unordered flow symbol constraints

- Relax the linear flow symbol constraints

- Revamp the symbol lookup mechanism

- Be smarter about required flow symbols

- Update oslo-incubator to 32e7f0b56f52742754

- Translate the engine runner into a well defined state-machine

- Raise a runtime error when mixed green/non-green futures

- Ensure the cachedproperty creation/setting is thread-safe

- warn against sorting requirements

- Updated from global requirements

- Update transitioning function name to be more understandable

- Move parts of action engine tests to a subdirectory

- Tweak engine iteration ‘close-up shop’ runtime path

- Use explicit WBE request state transitions

- Reject WBE messages if they can’t be put in an ack state

- Make version.py handle pbr not being installed

- Cleanup WBE example to be simpler to understand

- Use __qualname__ where appropriate

- Updated from global requirements

- Updated from global requirements

- Make the WBE worker banner information more meaningful

- Have the dispatch_job function return a future

- Expand documention on failures and wrapped failures types

- Allow worker count to be specified when no executor provided

- Remove sphinx examples emphasize-lines

- Split requirements into py2 and py3 files

- Update oslo-incubator to 037dee004c3e2239

- Remove db locks and use random db names for tests

- Allow WBE request transition timeout to be dynamic

- Avoid naming time type module the same as a builtin

- LOG which requeue filter callback failed

- Add a pformat() failure method and use it in the conductor

- add pre/post execute/retry callbacks to tasks

- Use checked_commit() around consume() and abandon()

- Use a check + create transaction when claiming a job

- Improve WBE testing coverage

- Add basic WBE validation sanity tests

- WBE request message validation

- WBE response message validation

- WBE notification message validation

- Allow handlers to provide validation callables

- Use a common message dispatcher

- Use checked commit when committing kazoo transactions

- Enable hacking checks H305 and H307 in tox.ini template

- Fixes unsorted dicts and sets in doctests

- README.rst: Avoid using non-ascii character

- Updated from global requirements

- Add a sample script that can be used to build a test environment

- Enabled hacking checks H305 and H307

- Bump hacking to version 0.9.2

- Allow a jobs posted book to be none by default

- Cleanup some of the example code & docs

- Make greenexecutor not keep greenthreads active

- Add the arch/big picture omnigraffle diagram

- Remove pbr as a runtime dependency

- Use the `state_graph.py` for all states diagrams

- Make the examples documentation more relevant

- Raise NotImplementedError instead of NotImplemented

- Move the stopwatch tests to test_types

- Remove need to do special exception catching in parse_uri

- Update oslo incubator code to commit 0b02fc0f36814968

- Fix the section name in CONTRIBUTING.rst

- Add a conductor considerations section

- Make the expiring cache a top level cache type

- Use `flow_uuid` and `flow_name` from storage

- Fix traces left in zookeeper

- Clarify locked decorator is for instance methods

- Extract the state changes from the ensure storage method

- Create a top level time type

- Simplify identity transition handling for tasks and retries

- Remove check_doc.py and use doc8

- Remove functions created for pre-six 1.7.0

- Add a tree type

- Make intentions a tuple (to denote immutability)

- Updated from global requirements

- Add example for pseudo-scoping

- Fix E265 hacking warnings

- Fix doc which should state fetch() usage

- Adjust sphinx requirement

- Upgrade hacking version and fix some of the issues

- Denote that other projects can use this library

- Remove misc.as_bool as oslo provides an equivalent

- Update zake to requirements version

## 0.3.21

- Rename additional to general/higher-level

- Sync our version of the interprocess lock

- Increase usefulness of the retry component compile errors

- Switch to a restructuredtext README file

- Create a considerations section

- Include the function name on internal errors

- Add in default transaction isolation levels

- Allow the mysql mode to be more than just TRADITIONAL

- Make the runner a runtime provided property

- Rename inject_task_args to inject_atom_args

- Rename the graph analyzer to analyzer

- Provide the compilation object instead of just a part of it

- Ensure cachedproperty descriptor picks up docstrings

## 0.3

- Warn about internal helper/utility usage

- Rename to atom from task

- Invert the conductor stop() returned result

- Move flattening to the action engine compiler

- Increase the level of usefulness of the dispatching logging

- Avoid forcing engine_conf to a dict

- Allow for two ways to find a flow detail in a job for a conductor

- Add docs related to the new conductor feature

- Add docstring describing the inject instance variable

- Finish factoring apart the graph_action module

- Update sphinx pin from global requirements

- Fix docstring list format

- Allow indent text to be passed in

- Factor out the on_failure to a mixin type

- Use a name property setter instead of a set_name method

- Adds a single threaded flow conductor

- add the ability to inject arguments into tasks at task creation

- Synced jsonutils from oslo-incubator

- Remove wording issue (track does not make sense here)

- Fix case of taskflow in docs

- Put the job external wiki link in a note section

- Rework atom documentation

- Add doc link to examples

- Rework the overview of the notification mechanism

- Standardize on the same capitalization pattern

- Regenerate engine-state sequence diagram

- Add source of engine-state sequence diagram

- Add kwarg check_pending argument to fake lock

- Add a example which uses the run_iter function in a for loop

- Fix error string interpolation

- Rename t_storage to atom_storage

- Create and use a new compilation module

- Add engine state diagram

- Add tests for the misc.cachedproperty descriptor

- Complete the cachedproperty descriptor protocol

- Don’t create fake LogBook when we can not fetch one

- Use futures wait() when possible

- Use /taskflow/flush-test in the flush function

- Add a reset nodes function

- Default the impl_memory conf to none

- Fix spelling mistake

- Add a helper tool which clears zookeeper test dirs

- Add a zookeeper jobboard integration test

- Cleanup zookeeper integration testing

- Use a more stable flush method

- Remove the _clear method and do not reset the job_watcher

- Allow command and connection retry configuration

- Check documentation for simple style requirements

- Add an example which uses the run iteration functionality

- Implement run iterations

- Put provides and requires code to basic Flow

- Allow the watcher to re-register if the session is lost

- Add a new wait() method that waits for jobs to arrive

- Add a cachedproperty descriptor

- Add an example for the job board feature

- Engine _cls postfix is not correct

- Pass executor via kwargs instead of config

- Allow the WBE to use a preexisting executor

- Tweaks to object hiearchy diagrams

- Adjust doc linking

- Medium-level docs on engines

- Add docs for the worker based engine (WBE)

- Updated from global requirements

- Move from generator to iterator for iterjobs

- Add a jobboard fetching context manager

- Wrap the failure to load in the not found exception

- Update jobboard docs

- Synced jsonutils from oslo-incubator

- Remove persistence wiki page link

- Load engines with defined args and provided kwargs

- Integrate urlparse for configuration augmentation

- Fix “occured” -> “occurred”

- Documentation tune-ups

- Fix spelling error

- Add a resumption strategy doc

- Docs and cleanups for test_examples runner

- Skip loading (and failing to load) lock files

- Add a persistence backend fetching context manager

- Add a example that activates a future when a result is ready

- Fix documentation spelling errors

- Add a job consideration doc

- Add last_modified & created_on attributes to jobs

- Allow jobboard event notification

- Use sequencing when posting jobs

- Add a directed graph type (new types module)

- Add persistence docs + adjustments

- Updated from global requirements

- Stings -> Strings

- Be better at failure tolerance

- Ensure example abandons job when it fails

- Add docs for jobs and jobboards

- Get persistence backend via kwargs instead of conf

- Allow fetching jobboard implementations

- Reuse already defined variable

- More keywords & classifier topics

- Allow transient values to be stored in storage

- Doc adjustments

- Move the daemon thread helper function

- Create a periodic worker helper class

- Fix not found being raised when iterating

- Allow for only iterating over the most ‘fresh’ jobs

- Updated from global requirements

- Update oslo-incubator to 46f2b697b6aacc67

- import run_cross_tests.sh from incubator

- Exception in worker queue thread

- Avoid holding the state lock while notifying

## 0.2

- Allow atoms to save their own state/result

- Use correct exception in the timing listener

- Add a engine preparation stage

- Decrease extraneous logging

- Handle retry last_results/last_failure better

- Improve documentation for engines

- Worker executor adjustments

- Revert “Move taskflow.utils.misc.Failure to its own module”

- Move taskflow.utils.misc.Failure to its own module

- Leave the execution_graph as none until compiled

- Move state link to developer docs

- Raise error if atom asked to schedule with unknown intention

- Removed unused TIMED_OUT state

- Rework documentation of notifications

- Test retry fails on revert

- Exception when scheduling task with invalid state

- Fix race in worker-based executor result processing

- Set logbook/flowdetail/atomdetail meta to empty dict

- Move ‘inputs and outputs’ to developers docs

- tests: Discover absence of zookeeper faster

- Fix spelling mistake

- Should be greater or equal to zero and not greater than

- Persistence cleanup part one

- Run worker-based engine tests faster

- SQLAlchemy requirements put in order

- Add timeout to WaitForOneFromTask

- Use same code to reset flow and parts of it

- Optimize dependency links in flattening

- Adjust the exception hierachy

- docs: Links to methods on arguments and results page

- Add __repr__ method to Atom

- Flattening improvements

- tests: Fix WaitForOneFromTask constructor parameter introspection

- Rework graph flow unit tests

- Rewrite assertion for same elements in sequences

- Unit tests for unordered flow

- Linear flow: mark links and rework unit tests

- Drop indexing operator from linear flow

- Drop obsolete test_unordered_flow

- Iteration over links in flow interface

- Add a timeout object that can be interrupted

- Avoid shutting down of a passed executor

- Add more tests for resumption with retry

- Improve logging for proxy publish

- Small documentation fix

- Improve proxy publish method

- Add Retry to developers documentation

- Move flow states to developers documentation

- Remove extraneous vim configuration comments

- Make schedule a proper method of GraphAction

- Simplify graph analyzer interface

- Test storage with memory and sqlite backends

- Fix few minor spelling errors

- Fix executor requests publishing bug

- Flow smart revert with retry controller

- Add atom intentions for tasks and retries

- [WBE] Collect information from workers

- Add tox environment for pypy

- docs: Add inheritance diagram to exceptions documentation

- Adjust logging levels and usage to follow standards

- Introduce message types for WBE protocol

- Add retry action to execute retries

- Extend logbook and storage to work with retry

- Add retry to execution graph

- Add retry to Flow patterns

- Add base class for Retry

- Update request `expired` property docsting

- docs: Add page describing atom arguments and results

- docs: Improve BaseTask method docstrings

- Remove extra quote symbol

- docs: Relative links improvements

- docs: Ingore ‘taskflow.’ prefix when sorting module index

- Update comment + six.text_type instead of str for name

- Avoid calling callbacks while holding locks

- Rename remote task to request

- Rework proxy publish functionality

- Updated from global requirements

- Use message.requeue instead of message.reject

- Lock test tweaks

- Move endpoint subclass finding to reflection util

- Correct LOG.warning in persistence utils

- Introduce remote tasks cache for worker-executor

- Worker-based engine clean-ups

- A few worker-engine cleanups

- Add a delay before releasing the lock

- Allow connection string to be just backend name

- Get rid of openstack.common.py3kcompat

- Clean-up several comments in reflection.py

- Fix try_clean not getting the job_path

- Updated from global requirements

- Rename uuid to topic

- Fixups for threads_count usage and logging

- Use the stop watch utility instead of custom timing

- Unify usage of storage error exception type

- Add zookeeper job/jobboard impl

- Updated from global requirements

- Removed copyright from empty files

- Remove extraneous vim configuration comments

- Use six.text_type() instead of str() in sqlalchemy backend

- Fix dummy lock missing pending_writers method

- Move some common/to be shared kazoo utils to kazoo_utils

- Switch to using the type checking decode_json

- Fix few spelling and grammar errors

- Fixed spelling error

- Run action-engine tests with worker-based engine

- Message-oriented worker-based flow with kombu

- Check atom doesn’t provide and return same values

- Fix command for pylint tox env

- Remove locale overrides form tox template

- Reduce test and optional requirements to global requirements

- Rework sphinx documentation

- Remove extraneous vim configuration comments

- Sync with global requirements

- Instead of doing set diffing just partition when state checking

- Add ZooKeeper backend to examples

- Storage protects lower level backend against thread safety

- Remove tox locale overrides

- Update .gitreview after repo rename

- Small storage tests clean-up

- Support building wheels (PEP-427)

## 0.1.3

- Add validate() base method

- Fix deadlock on waiting for pending_writers to be empty

- Rename self._zk to self._client

- Use listener instead of AutoSuspendTask in test_suspend_flow

- Use test utils in test_suspend_flow

- Use reader/writer locks in storage

- Allow the usage of a passed in sqlalchemy engine

- Be really careful with non-ascii data in exceptions/failures

- Run zookeeper tests if localhost has a compat. zookeeper server

- Add optional-requirements.txt

- Move kazoo to testenv requirements

- Unpin testtools version and bump subunit to >=0.0.18

- Remove use of str() in utils.misc.Failure

- Be more resilent around import/detection/setup errors

- Some zookeeper persistence improvements/adjustments

- Add a validate method to dir and memory backends

- Update oslo copy to oslo commit 39e1c5c5f39204

- Update oslo.lock from incubator commit 3c125e66d183

- Refactor task/flow flattening

- Engine tests refactoring

- Tests: don’t pass ‘values’ to task constructor

- Test fetching backends via entry points

- Pin testtools to 0.9.34 in test requirements

- Ensure we register the new zookeeper backend as an entrypoint

- Implement ZooKeeper as persistence storage backend

- Use addCleanup instead of tearDown in test_sql_persistence

- Retain the same api for all helpers

- Update execute/revert comments

- Added more unit tests for Task and FunctorTask

- Doc strings and comments clean-up

- List examples function doesn’t accept arguments

- Tests: Persistence test mixin fix

- Test using mysql + postgres if available

- Clean-up and improve async-utils tests

- Use already defined PENDING variable

- Add utilities for working with binary data

- Cleanup engine base class

- Engine cleanups

- Update atom comments

- Put full set of requirements to py26, py27 and py33 envs

- Add base class Atom for all flow units

- Add more requirements to cover tox environment

- Put SQLAlchemy requirements on single line

- Proper exception raised from check_task_transition

- Fix function name typo in persistence utils

- Use the same way of assert isinstance in all tests

- Minor cleanup in test_examples

- Add possibility to create Failure from exception

- Exceptions cleanup

- Alter is_locked() helper comment

- Add a setup.cfg keywords to describe taskflow

- Use the released toxgen tool instead of our copy

## 0.1.2

- Move autobinding to task base class

- Assert functor task revert/execute are callable

- Use the six callback checker

- Add envs for different sqlalchemy versions

- Refactor task handler binding

- Move six to the right location

- Use constants for the execution event strings

- Added htmlcov folder to .gitignore

- Reduce visibility of task_action

- Change internal data store of LogBook from list to dict

- Misc minor fixes to taskflow/examples

- Add connection_proxy param

- Ignore doc build files

- Fix spelling errors

- Switch to just using tox

- Enable H202 warning for flake8

- Check tasks should not provide same values

- Allow max_backoff and use count instead of attempts

- Skip invariant checking and adding when nothing provided

- Avoid not_done naming conflict

- Add stronger checking of backend configuration

- Raise type error instead of silencing it

- Move the container fetcher function to utils

- Explicitly list the valid transitions to RESUMING state

- Name the graph property the same as in engine

- Bind outside of the try block

- Graph action refactoring

- Add make_completed_future to async_utils

- Update oslo-incubator copy to oslo-incubator commit 8b2b0b743

- Ensure that mysql traditional mode is enabled

- Move async utils to own file

- Update requirements from opentack/requirements

- Code cleanup for eventlet_utils.wait_fo_any

- Refactor engine internals

- Add wait_for_any method to eventlet utils

- Introduce TaskExecutor

- Run some engine tests with eventlet if it’s available

- Do not create TaskAction for each task

- Storage: use names instead of uuids in interface

- Add tests for metadata updates

- Fix sqlalchemy 0.8 issues

- Fix minor python3 incompatibility

- Speed up FlowDetail.find

- Fix misspellings

- Raise exception when trying to run empty flow

- Use update_task_metadata in set_task_progress

- Capture task duration

- Fix another instance of callback comparison

- Don’t forget to return self

- Fixes how instances methods are not deregistered

- Targeted graph flow pattern

- All classes should explicitly inherit object class

- Initial commit of sphinx related files

- Improve is_valid_attribute_name utility function

- Coverage calculation improvements

- Fix up python 3.3 incompatabilities

## 0.1.1

- Pass flow failures to task’s revert method

- Storage: add methods to get all flow failures

- Pbr requirement went missing

- Update code to comply with hacking 0.8.0

- Don’t reset tasks to PENDING state while reverting

- Let pbr determine version automatically

- Be more careful when passing result to revert()

## 0.1

- Support for optional task arguments

- Do not erase task progress details

- Storage: restore injected data on resumption

- Inherit the greenpool default size

- Add debug logging showing what is flattened

- Remove incorrect comment

- Unit tests refactoring

- Use py3kcompat.urlutils from oslo instead of six.urllib_parse

- Update oslo and bring py3kcompat in

- Support several output formats in state_graph tool

- Remove task_action state checks

- Wrapped exception doc/intro comment updates

- Doc/intro updates for simple_linear_listening

- Add docs/intro to simple_linear example

- Update intro/comments for reverting_linear example

- Add docs explaining what/how resume_volume_create works

- A few resuming from backend comment adjustments

- Add an introduction to explain resume_many example

- Increase persistence example comments

- Boost graph flow example comments

- Also allow “_” to be valid identifier

- Remove uuid from taskflow.flow.Flow

- A few additional example boot_vm comments + tweaks

- Add a resuming booting vm example

- Add task state verification

- Beef up storage comments

- Removed unused utilities

- Helpers to save flow factory in metadata

- Storage: add flow name and uuid properties

- Create logbook if not provided for create_flow_details

- Prepare for 0.1 release

- Comment additions for exponential backoff

- Beef up the action engine comments

- Pattern comment additions/adjustments

- Add more comments to flow/task

- Save with the same connection

- Add a persistence util logbook formatting function

- Rename get_graph() -> execution_graph

- Continue adding docs to examples

- Add more comments that explain example & usage

- Add more comments that explain example & usage

- Add more comments that explain example & usage

- Add more comments that explain example & usage

- Fix several python3 incompatibilities

- Python3 compatibility for utils.reflection

- No module name for builtin type and exception names

- Fix python3 compatibility issues in examples

- Fix print statements for python 2/3

- Add a mini-cinder volume create with resumption

- Update oslo copy and bring over versionutils

- Move toward python 3/2 compatible metaclass

- Add a secondary booting vm example

- Resumption from backend for action engine

- A few wording/spelling adjustments

- Create a green executor & green future

- Add a simple mini-billing stack example

- Add a example which uses a sqlite persistence layer

- Add state to dot->svg tool

- Add a set of useful listeners

- Remove decorators and move to utils

- Add reasons as to why the edges were created

- Fix entrypoints being updated/created by update.py

- Validate each flow state change

- Update state sequence for failed flows

- Flow utils and adding comments

- Bump requirements to the latest

- Add a inspect sanity check and note about bound methods

- Some small exception cleanups

- Check for duplicate task names on flattening

- Correctly save task versions

- Allow access by index

- Fix importing of module files

- Wrapping and serializing failures

- Simpler API to load flows into engines

- Avoid setting object variables

- A few adjustments to the progress code

- Cleanup unused states

- Remove d2to dependency

- Warn if multiple providers found

- Memory persistence backend improvements

- Create database from models for SQLite

- Don’t allow mutating operations on the underlying graph

- Add graph density

- Suspend single and multi threaded engines

- Remove old tests for unexisted flow types

- Boot fake vm example fixed

- Export graph to dot util

- Remove unused utility classes

- Remove black list of graph flow

- Task decorator was removed and examples updated

- Remove weakref usage

- Add basic sanity tests for unordered flow

- Clean up job/jobboard code

- Add a directory/filesystem based persistence layer

- Remove the older (not used) resumption mechanism

- Reintegrate parallel action

- Add a flow flattening util

- Allow to specify default provides at task definition

- Graph flow, sequential graph action

- Task progress

- Verify provides and requires

- Remap the emails of the committers

- Use executors instead of pools

- Fix linked exception forming

- Remove threaded and distributed flows

- Add check that task provides all results it should

- Use six string types instead of basestring

- Remove usage of oslo.db and oslo.config

- Move toward using a backend+connection model

- Add provides and requires properties to Flow

- Fixed crash when running the engine

- Remove the common config since its not needed

- Allow the lock decorator to take a list

- Allow provides to be a set and results to be a dictionary

- Allow engines to be copied + blacklist broken flows

- Add link to why we have to make this factory due to late binding

- Use the lock decorator and close/join the thread pool

- Engine, task, linear_flow unification

- Combine multiple exceptions into a linked one

- Converted some examples to use patterns/engines

- MultiThreaded engine and parallel action

- State management for engines

- Action engine: save task results

- Initial implementation of action-based engine

- Further updates to update.py

- Split utils module

- Rename Task.__call__ to Task.execute

- Reader/writer no longer used

- Rename “revert_with” => “revert” and “execute_with” to “execute”

- Notify on task reversion

- Have runner keep the exception

- Use distutil version classes

- Add features to task.Task

- Add get_required_callable_args utility function

- Add get_callable_name utility function

- Require uuid + move functor_task to task.py

- Check examples when running tests

- Use the same root test class

- LazyPluggable is no longer used

- Add a locally running threaded flow

- Change namings in functor_task and add docs to its __init__

- Rework the persistence layer

- Do not have the runner modify the uuid

- Refactor decorators

- Nicer way to make task out of any callable

- Use oslo’s sqlalchemy layer

- File movements

- Added Backend API Database Implementation

- Added Memory Persistence API and Generic Datatypes

- Resync the latest oslo code

- Remove openstack.common.exception usage

- Forgot to move this one to the right folder

- Add a new simple calculator example

- Quiet the provider linking

- Deep-copy not always possible

- Add a example which simulates booting a vm

- Add a more complicated graph example

- Move examples under the source tree

- Adjust a bunch of hacking violations

- Fix typos in test_linear_flow.py and simple_linear_listening.py

- Fix minor code style

- Fix two minor bugs in docs/examples

- Show file modifications and fix dirpath based on config file

- Add a way to use taskflow until library stabilized

- Provide the length of the flows

- Parents should be frozen after creation

- Allow graph dependencies to be manually provided

- Add helper reset internals function

- Move to using pbr

- Unify creation/usage of uuids

- Use the runner interface as the best task lookup

- Ensure we document and complete correct removal

- Pass runners instead of task objects/uuids

- Move how resuming is done to be disconnected from jobs/flows

- Clear out before connecting

- Make connection/validation of tasks be after they are added

- Add helper to do notification

- Store results by add() uuid instead of in array format

- Integrate better locking and a runner helper class

- Cleaning up various components

- Move some of the ordered flow helper classes to utils

- Allow instance methods to be wrapped and unwrapped correctly

- Add a start of a few simple examples

- Update readme to point to links

- Fix most of the hacking rules

- Fix all flake8 E* and F* errors

- Fix the current flake8 errors

- Don’t keep the state/version in the task name

- Dinky change to trigger jenkins so I can cleanup

- Add the task to the accumulator before running

- Add .settings and .venv into .gitignore

- Fix tests for python 2.6

- Add the ability to soft_reset a workflow

- Add a .gitreview file so that git-review works

- Ensure we have an exception and capture the exc_info

- Update how graph results are fetched when they are optional

- Allow for optional task requirements

- We were not notifying when errors occured so fix that

- Bring over the nova get_wrapped_function helper and use it

- Allow for passing in the metadata when creating a task detail entry

- Update how the version task functor attribute is found

- Remove more tabs incidents

- Removed test noise and formatted for pep8

- Continue work on decorator usage

- Ensure we pickup the packages

- Fixed pep8 formatting… Finally

- Add flow disassociation and adjust the assocate path

- Add a setup.cfg and populate it with a default set of nosetests options

- Fix spacing

- Add a better task name algorithm

- Add a major/minor version

- Add a get many attr/s and join helper functions

- Reduce test noise

- Fix a few unit tests due to changes

- Ensure we handle functor names and resetting correctly

- Remove safe_attr

- Modifying db tests

- Removing .pyc

- Fixing .py in .gitignore

- Update db api test

- DB api test cases and revisions

- Allow for turning off auto-extract and add a test

- Use a function to filter args and add comments

- Use update instead of overwrite

- Move decorators to new file and update to use better wraps()

- Continue work with decorator usage

- Update with adding a provides and requires decorator for standalone function usage

- Instead of apply use __call__

- Add comment to why we accumulate before notifying task listeners

- Use a default sqlite backing using a taskflow file

- Add a basic rollback accumlator test

- Use rollback accumulator and remove requires()/provides() from being functions

- Allow (or disallow) multiple providers of items

- Clean the lines in a seperate function

- Resync with oslo-incubator

- Remove uuid since we are now using uuidutils

- Remove error code not found in strict version of pylint

- Include more dev testing packages + matching versions

- Update dependencies for new db/distributed backends

- Move some of the functions to use there openstack/common counterparts

- More import fixups

- Patch up the imports

- Fix syntax error

- Rename cause -> exception and make exception optional

- Allow any of the previous tasks to satisfy requirements

- Ensure we change the self and parents states correctly

- Always have a name provided

- Cleaning up files/extraneous files/fixing relations

- More pylint cleanups

- Make more tests for linear and shuffle test utils to common file

- Only do differences on set objects

- Ensure we fetch the appropriate inputs for the running task

- Have the linear workflow verify the tasks inputs

- Specify that task provides/requires must be an immutable set

- Clean Up for DB changes

- db api defined

- Fleshing out sqlalchemy api

- Almost done with sqlalchemy api

- Fix state check

- Fix flow exception wording

- Ensure job is pending before we associate and run

- More pylint cleanups

- Ensure we associate with parent flows as well

- Add a nice run() method to the job class that will run a flow

- Massive pylint cleanup

- deleting .swp files

- deleting .swp files

- cleaning for initial pull request

- Add a few more graph ordering test cases

- Update automatic naming and arg checks

- Update order calls and connect call

- Move flow failure to flow file and correctly catch ordering failure

- Just kidding - really fixing relations this time

- Fixing table relations

- Allow job id to be passed in

- Check who is being connected to and ensure > 0 connectors

- Move the await function to utils

- Graph tests and adjustments releated to

- Add graph flow tests

- Fix name changes missed

- Enable extraction of what a functor requires from its args

- Called flow now, not workflow

- Second pass at models

- More tests

- Simplify existence checks

- More pythonic functions and workflow -> flow renaming

- Added more utils, added model for workflow

- Spelling errors and stuff

- adding parentheses to read method

- Implemented basic sqlalchemy session class

- Setting up Configs and SQLAlchemy/DB backend

- Fix the import

- Use a different logger method if tolerant vs not tolerant

- More function comments

- Add a bunch of linear workflow tests

- Allow resuming stage to be interrupted

- Fix the missing context variable

- Moving over celery/distributed workflows

- Update description wording

- Pep fix

- Instead of using notify member functions, just use functors

- More wording fixes

- Add the ability to alter the task failure reconcilation

- Correctly run the tasks after partial resumption

- Another wording fix

- Spelling fix

- Allow the functor task to take a name and provide it a default

- Updated functor task comments

- Move some of the useful helpers and functions to other files

- Add the ability to associate a workflow with a job

- Move the useful functor wrapping task from test to wrappers file

- Add a thread posting/claiming example and rework tests to use it

- After adding reposting/unclaiming reflect those changes here

- Add a nicer string name that shows what the class name is

- Adjust some of the states jobs and workflows could be in

- Add a more useful name that shows this is a task

- Remove impl of erasing which doesn’t do much and allow for job reposting

- Various reworkings

- Rename logbook contents

- Get a memory test example working

- Add a pylintrc file to be used with pylint

- Rework the logbook to be chapter/page based

- Move ordered workflow to its own file

- Increase the number of comments

- Start adding in a more generic DAG based workflow

- Remove dict_provider dependency

- Rework due to code comments

- Begin adding testing functionality

- Fill in the majority of the memory job

- Rework how we should be using lists instead of ordereddicts for optimal usage

- Add a context manager to the useful read/writer lock

- Ensure that the task has a name

- Add a running state which can be used to know when a workflow is running

- Rename the date created field

- Add some search functionality and adjust the await() function params

- Remove and add a few new exceptions

- Shrink down the exposed methods

- Remove the promise object for now

- Add RESUMING

- Fix spelling

- Continue on getting ready for the memory impl. to be useful

- On python <= 2.6 we need to import ordereddict

- Remove a few other references to nova

- Add in openstack common and remove patch references

- Move simplification over

- Continue moving here

- Update README.md

- Update readme

- Move the code over for now

- Initial commit

this page last updated: 2024-03-11 12:11:34

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