taskflow 5.9.0__tar.gz → 5.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {taskflow-5.9.0 → taskflow-5.10.0}/ChangeLog +15 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/PKG-INFO +3 -3
- taskflow-5.10.0/releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml +6 -0
- taskflow-5.10.0/releasenotes/notes/remove-py38-15af791146f479e1.yaml +5 -0
- taskflow-5.10.0/releasenotes/source/2024.2.rst +6 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/index.rst +1 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/requirements.txt +4 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/setup.cfg +2 -2
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/runtime.py +12 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_retries.py +52 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/utils.py +26 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/version.py +3 -8
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/PKG-INFO +3 -3
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/SOURCES.txt +3 -0
- taskflow-5.10.0/taskflow.egg-info/pbr.json +1 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tox.ini +0 -4
- taskflow-5.9.0/taskflow.egg-info/pbr.json +0 -1
- {taskflow-5.9.0 → taskflow-5.10.0}/.coveragerc +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/.mailmap +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/.pre-commit-config.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/.stestr.conf +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/.zuul.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/AUTHORS +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/CONTRIBUTING.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/LICENSE +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/README.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/bindep.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/area_of_influence.graffle.tgz +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/core.graffle.tgz +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/jobboard.graffle.tgz +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/tasks.graffle.tgz +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/diagrams/worker-engine.graffle.tgz +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/requirements.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/conf.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/index.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/templates/layout.html +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/arguments_and_results.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/atoms.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/conductors.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/engines.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/examples.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/exceptions.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/history.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/area_of_influence.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/conductor.png +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/conductor_cycle.png +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/distributed_flow_rpc.png +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/engine_states.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/flow_states.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/job_states.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/jobboard.png +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/mandelbrot.png +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/retry_states.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/task_states.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/tasks.png +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/wbe_request_states.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/img/worker-engine.svg +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/index.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/inputs_and_outputs.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/jobs.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/notifications.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/patterns.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/persistence.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/resumption.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/shelf.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/states.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/types.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/utils.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/doc/source/user/workers.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/playbooks/tests/functional/Debian.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/playbooks/tests/functional/RedHat.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/playbooks/tests/functional/pre.yml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/pylintrc +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/.placeholder +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/disable-process_executor-python-312-d1074c816bc8303e.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/redis-username-df0eb33869db09a2.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-use-redis-creds-63f58b12ad46a2b5.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/2023.1.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/2023.2.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/2024.1.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/_static/.placeholder +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/_templates/.placeholder +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/conf.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/ocata.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/pike.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/queens.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/rocky.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/stein.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/train.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/unreleased.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/ussuri.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/source/victoria.rst +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/run_tests.sh +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/setup-etcd-env.sh +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/setup.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/atom.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/impl_blocking.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/impl_executor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/backends/impl_nonblocking.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/conductors/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/contrib/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/deciders.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/retry.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/actions/task.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/builder.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/compiler.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/completer.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/deciders.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/engine.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/executor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/process_executor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/scheduler.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/scopes.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/selector.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/action_engine/traversal.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/helpers.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/dispatcher.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/endpoint.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/engine.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/executor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/protocol.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/proxy.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/server.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/types.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/engines/worker_based/worker.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/99_bottles.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/alphabet_soup.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/build_a_car.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/buildsystem.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/calculate_in_parallel.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/calculate_linear.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/create_parallel_volume.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/delayed_return.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/distance_calculator.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/dump_memory_backend.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/echo_listener.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/example_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/fake_billing.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/graph_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/hello_world.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/jobboard_produce_consume_colors.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/parallel_table_multiply.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/persistence_example.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/pseudo_scoping.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/pseudo_scoping.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_from_backend.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_from_backend.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows/my_flows.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows/resume_all.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows/run_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_many_flows.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_vm_boot.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/resume_volume_create.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/retry_flow.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/retry_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/reverting_linear.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/reverting_linear.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter_enumerate.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/run_by_iter_enumerate.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/share_engine_thread.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_listening.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_listening.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_pass.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_linear_pass.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/simple_map_reduce.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/switch_graph_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/timing_listener.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/tox_conductor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_event_sender.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_mandelbrot.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_mandelbrot.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_simple_linear.out.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wbe_simple_linear.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/examples/wrapped_exception.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/exceptions.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/formatters.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/impl_etcd.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/impl_redis.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/backends/impl_zookeeper.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/jobs/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/capturing.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/claims.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/logging.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/printing.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/listeners/timing.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/logging.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/graph_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/linear_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/patterns/unordered_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_dir.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_memory.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_sqlalchemy.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/impl_zookeeper.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/README +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/alembic.ini +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/env.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/script.py.mako +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/0bc3e1a3c135_set_result_meduimtext_type.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/2ad4984f2864_switch_postgres_to_json_native.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/3162c0f3f8e4_add_revert_results_and_revert_failure_.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/40fc8c914bd2_fix_atomdetails_failure_size.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/6df9422fcb43_fix_flowdetails_meta_size.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/alembic/versions/README +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/migration.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/backends/sqlalchemy/tables.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/models.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/persistence/path_based.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/retry.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/states.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/storage.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/task.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/test.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/fixtures.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/test_examples.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_builder.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_compile.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_creation.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_process_executor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/action_engine/test_scoping.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_entrypoint.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_etcd_job.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_redis_job.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/jobs/test_zk_job.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/test_graph_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/test_linear_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/patterns/test_unordered_flow.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/base.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_dir_persistence.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_memory_persistence.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_sql_persistence.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/persistence/test_zk_persistence.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_arguments_passing.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_check_transition.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_conductors.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_deciders.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_engine_helpers.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_engines.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_exceptions.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_failure.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_flow_dependencies.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_formatters.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_functor_task.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_listeners.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_mapfunctor_task.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_notifier.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_progress.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_reducefunctor_task.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_states.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_storage.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_suspend.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_task.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_types.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_async_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_binary.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_iter_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_kazoo_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/test_utils_threading_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_creation.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_dispatcher.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_endpoint.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_executor.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_message_pump.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_pipeline.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_protocol.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_proxy.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_server.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_types.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/tests/unit/worker_based/test_worker.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/entity.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/failure.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/graph.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/latch.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/notifier.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/sets.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/timing.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/types/tree.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/__init__.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/async_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/banner.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/eventlet_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/iter_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/kazoo_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/kombu_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/misc.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/persistence_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/redis_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/schema_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow/utils/threading_utils.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/dependency_links.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/entry_points.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/not-zip-safe +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/requires.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/taskflow.egg-info/top_level.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/test-requirements.txt +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/clear_zk.sh +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/env_builder.sh +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/pretty_tox.sh +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/schema_generator.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/speed_test.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/state_graph.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/subunit_trace.py +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/test-setup.sh +0 -0
- {taskflow-5.9.0 → taskflow-5.10.0}/tools/update_states.sh +0 -0
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
5.10.0
|
|
5
|
+
------
|
|
6
|
+
|
|
7
|
+
* Add note about requirements lower bounds
|
|
8
|
+
* Remove Python 3.8 support
|
|
9
|
+
* Declare Python 3.12 support
|
|
10
|
+
* Remove unused usage of pkg\_resources
|
|
11
|
+
* Drop SQLALCHEMY\_WARN\_20
|
|
12
|
+
* Update master for stable/2024.2
|
|
13
|
+
|
|
14
|
+
5.9.1
|
|
15
|
+
-----
|
|
16
|
+
|
|
17
|
+
|
|
4
18
|
5.9.0
|
|
5
19
|
-----
|
|
6
20
|
|
|
@@ -12,6 +26,7 @@ CHANGES
|
|
|
12
26
|
-----
|
|
13
27
|
|
|
14
28
|
* Python3.12: disable process\_executor, which depends on asyncore
|
|
29
|
+
* Fix REVERT\_ALL with Retries in unordered Flows
|
|
15
30
|
* Remove SQLAlchemy tips jobs
|
|
16
31
|
* Remove old excludes
|
|
17
32
|
* Remove assertRaisesRegex
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: taskflow
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.10.0
|
|
4
4
|
Summary: Taskflow structured state management library.
|
|
5
5
|
Home-page: https://docs.openstack.org/taskflow/latest/
|
|
6
6
|
Author: OpenStack
|
|
@@ -91,15 +91,15 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
91
91
|
Classifier: Operating System :: POSIX :: Linux
|
|
92
92
|
Classifier: Programming Language :: Python
|
|
93
93
|
Classifier: Programming Language :: Python :: 3
|
|
94
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
95
94
|
Classifier: Programming Language :: Python :: 3.9
|
|
96
95
|
Classifier: Programming Language :: Python :: 3.10
|
|
97
96
|
Classifier: Programming Language :: Python :: 3.11
|
|
97
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
98
98
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
99
99
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
100
100
|
Classifier: Topic :: Software Development :: Libraries
|
|
101
101
|
Classifier: Topic :: System :: Distributed Computing
|
|
102
|
-
Requires-Python: >=3.
|
|
102
|
+
Requires-Python: >=3.9
|
|
103
103
|
Provides-Extra: database
|
|
104
104
|
Provides-Extra: etcd
|
|
105
105
|
Provides-Extra: eventlet
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# Requirements lower bounds listed here are our best effort to keep them up to
|
|
2
|
+
# date but we do not test them so no guarantee of having them all correct. If
|
|
3
|
+
# you find any incorrect lower bounds, let us know or propose a fix.
|
|
4
|
+
|
|
1
5
|
# See: https://bugs.launchpad.net/pbr/+bug/1384919 for why this is here...
|
|
2
6
|
pbr>=2.0.0 # Apache-2.0
|
|
3
7
|
|
|
@@ -7,7 +7,7 @@ author = OpenStack
|
|
|
7
7
|
author_email = openstack-discuss@lists.openstack.org
|
|
8
8
|
home_page = https://docs.openstack.org/taskflow/latest/
|
|
9
9
|
keywords = reliable,tasks,execution,parallel,dataflow,workflows,distributed
|
|
10
|
-
python_requires = >=3.
|
|
10
|
+
python_requires = >=3.9
|
|
11
11
|
classifier =
|
|
12
12
|
Development Status :: 5 - Production/Stable
|
|
13
13
|
Environment :: OpenStack
|
|
@@ -17,10 +17,10 @@ classifier =
|
|
|
17
17
|
Operating System :: POSIX :: Linux
|
|
18
18
|
Programming Language :: Python
|
|
19
19
|
Programming Language :: Python :: 3
|
|
20
|
-
Programming Language :: Python :: 3.8
|
|
21
20
|
Programming Language :: Python :: 3.9
|
|
22
21
|
Programming Language :: Python :: 3.10
|
|
23
22
|
Programming Language :: Python :: 3.11
|
|
23
|
+
Programming Language :: Python :: 3.12
|
|
24
24
|
Programming Language :: Python :: 3 :: Only
|
|
25
25
|
Programming Language :: Python :: Implementation :: CPython
|
|
26
26
|
Topic :: Software Development :: Libraries
|
|
@@ -291,6 +291,18 @@ class Runtime(object):
|
|
|
291
291
|
"""Resets all the provided atoms to the given state and intention."""
|
|
292
292
|
tweaked = []
|
|
293
293
|
for atom in atoms:
|
|
294
|
+
cur_intention = self.storage.get_atom_intention(atom.name)
|
|
295
|
+
# Don't trigger a RETRY if the atom needs to be REVERTED.
|
|
296
|
+
# This is a workaround for a bug when REVERT_ALL is applied to
|
|
297
|
+
# unordered flows
|
|
298
|
+
# (https://bugs.launchpad.net/taskflow/+bug/2043808)
|
|
299
|
+
# A subflow may trigger a REVERT_ALL, all the atoms of all the
|
|
300
|
+
# related subflows are marked as REVERT but a task of a related
|
|
301
|
+
# flow may still be running in another thread. If this task
|
|
302
|
+
# triggers a RETRY, it overrides the previously set REVERT status,
|
|
303
|
+
# breaking the revert path of the flow.
|
|
304
|
+
if cur_intention == st.REVERT and intention == st.RETRY:
|
|
305
|
+
continue
|
|
294
306
|
if state or intention:
|
|
295
307
|
tweaked.append((atom, state, intention))
|
|
296
308
|
if state:
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
# under the License.
|
|
16
16
|
|
|
17
17
|
import testtools
|
|
18
|
+
import time
|
|
18
19
|
|
|
19
20
|
import taskflow.engines
|
|
21
|
+
from taskflow.engines.action_engine import executor
|
|
20
22
|
from taskflow import exceptions as exc
|
|
21
23
|
from taskflow.patterns import graph_flow as gf
|
|
22
24
|
from taskflow.patterns import linear_flow as lf
|
|
@@ -502,6 +504,56 @@ class RetryTest(utils.EngineTestBase):
|
|
|
502
504
|
self.assertRaisesRegex(RuntimeError, '^Woot', engine.run)
|
|
503
505
|
self.assertRaisesRegex(RuntimeError, '^Woot', engine.run)
|
|
504
506
|
|
|
507
|
+
def test_restart_reverted_unordered_flows_with_retries(self):
|
|
508
|
+
now = time.time()
|
|
509
|
+
|
|
510
|
+
# First flow of an unordered flow:
|
|
511
|
+
subflow1 = lf.Flow('subflow1')
|
|
512
|
+
|
|
513
|
+
# * a task that completes in 3 sec with a few retries
|
|
514
|
+
subsubflow1 = lf.Flow('subflow1.subsubflow1',
|
|
515
|
+
retry=utils.RetryFiveTimes())
|
|
516
|
+
subsubflow1.add(utils.SuccessAfter3Sec('subflow1.fail1',
|
|
517
|
+
inject={'start_time': now}))
|
|
518
|
+
subflow1.add(subsubflow1)
|
|
519
|
+
|
|
520
|
+
# * a task that fails and triggers a revert after 5 retries
|
|
521
|
+
subsubflow2 = lf.Flow('subflow1.subsubflow2',
|
|
522
|
+
retry=utils.RetryFiveTimes())
|
|
523
|
+
subsubflow2.add(utils.FailingTask('subflow1.fail2'))
|
|
524
|
+
subflow1.add(subsubflow2)
|
|
525
|
+
|
|
526
|
+
# Second flow of the unordered flow:
|
|
527
|
+
subflow2 = lf.Flow('subflow2')
|
|
528
|
+
|
|
529
|
+
# * a task that always fails and retries
|
|
530
|
+
subsubflow1 = lf.Flow('subflow2.subsubflow1',
|
|
531
|
+
retry=utils.AlwaysRetry())
|
|
532
|
+
subsubflow1.add(utils.FailingTask('subflow2.fail1'))
|
|
533
|
+
subflow2.add(subsubflow1)
|
|
534
|
+
|
|
535
|
+
unordered_flow = uf.Flow('unordered_flow')
|
|
536
|
+
unordered_flow.add(subflow1, subflow2)
|
|
537
|
+
|
|
538
|
+
# Main flow, contains a simple task and an unordered flow
|
|
539
|
+
flow = lf.Flow('test')
|
|
540
|
+
flow.add(utils.NoopTask('task1'))
|
|
541
|
+
flow.add(unordered_flow)
|
|
542
|
+
|
|
543
|
+
engine = self._make_engine(flow)
|
|
544
|
+
|
|
545
|
+
# This test fails when using Green threads, skipping it for now
|
|
546
|
+
if isinstance(engine._task_executor,
|
|
547
|
+
executor.ParallelGreenThreadTaskExecutor):
|
|
548
|
+
self.skipTest("Skipping this test when using green threads.")
|
|
549
|
+
|
|
550
|
+
with utils.CaptureListener(engine) as capturer:
|
|
551
|
+
self.assertRaisesRegex(exc.WrappedFailure,
|
|
552
|
+
'.*RuntimeError: Woot!',
|
|
553
|
+
engine.run)
|
|
554
|
+
# task1 should have been reverted
|
|
555
|
+
self.assertIn('task1.t REVERTED(None)', capturer.values)
|
|
556
|
+
|
|
505
557
|
def test_run_just_retry(self):
|
|
506
558
|
flow = utils.OneReturnRetry(provides='x')
|
|
507
559
|
engine = self._make_engine(flow)
|
|
@@ -227,6 +227,32 @@ class FailingTask(ProgressingTask):
|
|
|
227
227
|
raise RuntimeError('Woot!')
|
|
228
228
|
|
|
229
229
|
|
|
230
|
+
class SimpleTask(task.Task):
|
|
231
|
+
def execute(self, time_sleep=0, **kwargs):
|
|
232
|
+
time.sleep(time_sleep)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class SuccessAfter3Sec(task.Task):
|
|
236
|
+
def execute(self, start_time, **kwargs):
|
|
237
|
+
now = time.time()
|
|
238
|
+
if now - start_time >= 3:
|
|
239
|
+
return None
|
|
240
|
+
raise RuntimeError('Woot!')
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
class RetryFiveTimes(retry.Times):
|
|
244
|
+
def on_failure(self, history, *args, **kwargs):
|
|
245
|
+
if len(history) < 5:
|
|
246
|
+
time.sleep(1)
|
|
247
|
+
return retry.RETRY
|
|
248
|
+
return retry.REVERT_ALL
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class AlwaysRetry(retry.Times):
|
|
252
|
+
def on_failure(self, history, *args, **kwargs):
|
|
253
|
+
return retry.RETRY
|
|
254
|
+
|
|
255
|
+
|
|
230
256
|
class OptionalTask(task.Task):
|
|
231
257
|
def execute(self, a, b=5):
|
|
232
258
|
result = a * b
|
|
@@ -14,19 +14,14 @@
|
|
|
14
14
|
# License for the specific language governing permissions and limitations
|
|
15
15
|
# under the License.
|
|
16
16
|
|
|
17
|
-
import
|
|
17
|
+
from pbr import version as pbr_version
|
|
18
18
|
|
|
19
19
|
TASK_VENDOR = "OpenStack Foundation"
|
|
20
20
|
TASK_PRODUCT = "OpenStack TaskFlow"
|
|
21
21
|
TASK_PACKAGE = None # OS distro package version suffix
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
_version_info = pbr_version.VersionInfo('taskflow')
|
|
26
|
-
version_string = _version_info.version_string
|
|
27
|
-
except ImportError:
|
|
28
|
-
_version_info = pkg_resources.get_distribution('taskflow')
|
|
29
|
-
version_string = lambda: _version_info.version
|
|
23
|
+
_version_info = pbr_version.VersionInfo('taskflow')
|
|
24
|
+
version_string = _version_info.version_string
|
|
30
25
|
|
|
31
26
|
|
|
32
27
|
def version_string_with_package():
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: taskflow
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.10.0
|
|
4
4
|
Summary: Taskflow structured state management library.
|
|
5
5
|
Home-page: https://docs.openstack.org/taskflow/latest/
|
|
6
6
|
Author: OpenStack
|
|
@@ -91,15 +91,15 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
91
91
|
Classifier: Operating System :: POSIX :: Linux
|
|
92
92
|
Classifier: Programming Language :: Python
|
|
93
93
|
Classifier: Programming Language :: Python :: 3
|
|
94
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
95
94
|
Classifier: Programming Language :: Python :: 3.9
|
|
96
95
|
Classifier: Programming Language :: Python :: 3.10
|
|
97
96
|
Classifier: Programming Language :: Python :: 3.11
|
|
97
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
98
98
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
99
99
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
100
100
|
Classifier: Topic :: Software Development :: Libraries
|
|
101
101
|
Classifier: Topic :: System :: Distributed Computing
|
|
102
|
-
Requires-Python: >=3.
|
|
102
|
+
Requires-Python: >=3.9
|
|
103
103
|
Provides-Extra: database
|
|
104
104
|
Provides-Extra: etcd
|
|
105
105
|
Provides-Extra: eventlet
|
|
@@ -70,9 +70,11 @@ releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml
|
|
|
70
70
|
releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml
|
|
71
71
|
releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml
|
|
72
72
|
releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml
|
|
73
|
+
releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml
|
|
73
74
|
releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml
|
|
74
75
|
releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml
|
|
75
76
|
releasenotes/notes/redis-username-df0eb33869db09a2.yaml
|
|
77
|
+
releasenotes/notes/remove-py38-15af791146f479e1.yaml
|
|
76
78
|
releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml
|
|
77
79
|
releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml
|
|
78
80
|
releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml
|
|
@@ -81,6 +83,7 @@ releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml
|
|
|
81
83
|
releasenotes/source/2023.1.rst
|
|
82
84
|
releasenotes/source/2023.2.rst
|
|
83
85
|
releasenotes/source/2024.1.rst
|
|
86
|
+
releasenotes/source/2024.2.rst
|
|
84
87
|
releasenotes/source/conf.py
|
|
85
88
|
releasenotes/source/index.rst
|
|
86
89
|
releasenotes/source/ocata.rst
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "ca0b7bbe", "is_release": true}
|
|
@@ -3,9 +3,6 @@ minversion = 3.18.0
|
|
|
3
3
|
envlist = cover,docs,pep8,py3,pylint,update-states
|
|
4
4
|
|
|
5
5
|
[testenv]
|
|
6
|
-
setenv =
|
|
7
|
-
# TODO(stephenfin): Remove once we bump our upper-constraint to SQLAlchemy 2.0
|
|
8
|
-
SQLALCHEMY_WARN_20=1
|
|
9
6
|
# We need to install a bit more than just `test' because those drivers have
|
|
10
7
|
# custom tests that we always run
|
|
11
8
|
deps =
|
|
@@ -52,7 +49,6 @@ deps =
|
|
|
52
49
|
{[testenv]deps}
|
|
53
50
|
coverage>=3.6
|
|
54
51
|
setenv =
|
|
55
|
-
{[testenv]setenv}
|
|
56
52
|
PYTHON=coverage run --source taskflow --parallel-mode
|
|
57
53
|
commands =
|
|
58
54
|
stestr run {posargs}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"git_version": "fc14510a", "is_release": true}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml
RENAMED
|
File without changes
|
{taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/sentinel-use-redis-creds-63f58b12ad46a2b5.yaml
RENAMED
|
File without changes
|
{taskflow-5.9.0 → taskflow-5.10.0}/releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|