# CHANGES

## 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: 2020-04-10 14:06:26

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 questions?