taskflow 5.9.0__tar.gz → 5.9.1__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.
Files changed (352) hide show
  1. {taskflow-5.9.0 → taskflow-5.9.1}/ChangeLog +5 -0
  2. {taskflow-5.9.0 → taskflow-5.9.1}/PKG-INFO +1 -1
  3. taskflow-5.9.1/releasenotes/notes/fix-revert-all-revert-a0310cd7beaa7409.yaml +6 -0
  4. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/runtime.py +12 -0
  5. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_retries.py +52 -0
  6. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/utils.py +26 -0
  7. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/PKG-INFO +1 -1
  8. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/SOURCES.txt +1 -0
  9. taskflow-5.9.1/taskflow.egg-info/pbr.json +1 -0
  10. taskflow-5.9.0/taskflow.egg-info/pbr.json +0 -1
  11. {taskflow-5.9.0 → taskflow-5.9.1}/.coveragerc +0 -0
  12. {taskflow-5.9.0 → taskflow-5.9.1}/.mailmap +0 -0
  13. {taskflow-5.9.0 → taskflow-5.9.1}/.pre-commit-config.yaml +0 -0
  14. {taskflow-5.9.0 → taskflow-5.9.1}/.stestr.conf +0 -0
  15. {taskflow-5.9.0 → taskflow-5.9.1}/.zuul.yaml +0 -0
  16. {taskflow-5.9.0 → taskflow-5.9.1}/AUTHORS +0 -0
  17. {taskflow-5.9.0 → taskflow-5.9.1}/CONTRIBUTING.rst +0 -0
  18. {taskflow-5.9.0 → taskflow-5.9.1}/LICENSE +0 -0
  19. {taskflow-5.9.0 → taskflow-5.9.1}/README.rst +0 -0
  20. {taskflow-5.9.0 → taskflow-5.9.1}/bindep.txt +0 -0
  21. {taskflow-5.9.0 → taskflow-5.9.1}/doc/diagrams/area_of_influence.graffle.tgz +0 -0
  22. {taskflow-5.9.0 → taskflow-5.9.1}/doc/diagrams/core.graffle.tgz +0 -0
  23. {taskflow-5.9.0 → taskflow-5.9.1}/doc/diagrams/jobboard.graffle.tgz +0 -0
  24. {taskflow-5.9.0 → taskflow-5.9.1}/doc/diagrams/tasks.graffle.tgz +0 -0
  25. {taskflow-5.9.0 → taskflow-5.9.1}/doc/diagrams/worker-engine.graffle.tgz +0 -0
  26. {taskflow-5.9.0 → taskflow-5.9.1}/doc/requirements.txt +0 -0
  27. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/conf.py +0 -0
  28. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/index.rst +0 -0
  29. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/templates/layout.html +0 -0
  30. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/arguments_and_results.rst +0 -0
  31. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/atoms.rst +0 -0
  32. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/conductors.rst +0 -0
  33. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/engines.rst +0 -0
  34. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/examples.rst +0 -0
  35. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/exceptions.rst +0 -0
  36. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/history.rst +0 -0
  37. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/area_of_influence.svg +0 -0
  38. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/conductor.png +0 -0
  39. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/conductor_cycle.png +0 -0
  40. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/distributed_flow_rpc.png +0 -0
  41. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/engine_states.svg +0 -0
  42. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/flow_states.svg +0 -0
  43. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/job_states.svg +0 -0
  44. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/jobboard.png +0 -0
  45. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/mandelbrot.png +0 -0
  46. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/retry_states.svg +0 -0
  47. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/task_states.svg +0 -0
  48. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/tasks.png +0 -0
  49. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/wbe_request_states.svg +0 -0
  50. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/img/worker-engine.svg +0 -0
  51. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/index.rst +0 -0
  52. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/inputs_and_outputs.rst +0 -0
  53. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/jobs.rst +0 -0
  54. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/notifications.rst +0 -0
  55. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/patterns.rst +0 -0
  56. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/persistence.rst +0 -0
  57. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/resumption.rst +0 -0
  58. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/shelf.rst +0 -0
  59. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/states.rst +0 -0
  60. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/types.rst +0 -0
  61. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/utils.rst +0 -0
  62. {taskflow-5.9.0 → taskflow-5.9.1}/doc/source/user/workers.rst +0 -0
  63. {taskflow-5.9.0 → taskflow-5.9.1}/playbooks/tests/functional/Debian.yaml +0 -0
  64. {taskflow-5.9.0 → taskflow-5.9.1}/playbooks/tests/functional/RedHat.yaml +0 -0
  65. {taskflow-5.9.0 → taskflow-5.9.1}/playbooks/tests/functional/pre.yml +0 -0
  66. {taskflow-5.9.0 → taskflow-5.9.1}/pylintrc +0 -0
  67. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/.placeholder +0 -0
  68. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/add-sentinel-redis-support-9fd16e2a5dd5c0c9.yaml +0 -0
  69. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/bug-2056656-871b67ddbc8cfc92.yaml +0 -0
  70. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/disable-process_executor-python-312-d1074c816bc8303e.yaml +0 -0
  71. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/drop-python-2-7-73d3113c69d724d6.yaml +0 -0
  72. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/etcd-jobboard-backend-8a9fea2238fb0f12.yaml +0 -0
  73. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/fix-endless-loop-on-storage-error-dd4467f0bbc66abf.yaml +0 -0
  74. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/fix-endless-loop-on-storage-failures-b98b30f0c34d25e1.yaml +0 -0
  75. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/fix-storage-failure-handling-5c115d92daa0eb82.yaml +0 -0
  76. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/fix-zookeeper-option-parsing-f9d37fbc39af47f4.yaml +0 -0
  77. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/redis-username-df0eb33869db09a2.yaml +0 -0
  78. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/remove-strict-redis-f2a5a924b314de41.yaml +0 -0
  79. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/sentinel-fallbacks-6fe2ab0d68959cdf.yaml +0 -0
  80. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/sentinel-ssl-399c56ed7067d282.yaml +0 -0
  81. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/sentinel-use-redis-creds-63f58b12ad46a2b5.yaml +0 -0
  82. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/notes/zookeeper-ssl-support-b9abf24a39096b62.yaml +0 -0
  83. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/2023.1.rst +0 -0
  84. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/2023.2.rst +0 -0
  85. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/2024.1.rst +0 -0
  86. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/_static/.placeholder +0 -0
  87. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/_templates/.placeholder +0 -0
  88. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/conf.py +0 -0
  89. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/index.rst +0 -0
  90. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/ocata.rst +0 -0
  91. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/pike.rst +0 -0
  92. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/queens.rst +0 -0
  93. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/rocky.rst +0 -0
  94. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/stein.rst +0 -0
  95. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/train.rst +0 -0
  96. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/unreleased.rst +0 -0
  97. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/ussuri.rst +0 -0
  98. {taskflow-5.9.0 → taskflow-5.9.1}/releasenotes/source/victoria.rst +0 -0
  99. {taskflow-5.9.0 → taskflow-5.9.1}/requirements.txt +0 -0
  100. {taskflow-5.9.0 → taskflow-5.9.1}/run_tests.sh +0 -0
  101. {taskflow-5.9.0 → taskflow-5.9.1}/setup-etcd-env.sh +0 -0
  102. {taskflow-5.9.0 → taskflow-5.9.1}/setup.cfg +0 -0
  103. {taskflow-5.9.0 → taskflow-5.9.1}/setup.py +0 -0
  104. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/__init__.py +0 -0
  105. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/atom.py +0 -0
  106. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/conductors/__init__.py +0 -0
  107. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/conductors/backends/__init__.py +0 -0
  108. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/conductors/backends/impl_blocking.py +0 -0
  109. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/conductors/backends/impl_executor.py +0 -0
  110. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/conductors/backends/impl_nonblocking.py +0 -0
  111. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/conductors/base.py +0 -0
  112. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/contrib/__init__.py +0 -0
  113. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/deciders.py +0 -0
  114. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/__init__.py +0 -0
  115. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/__init__.py +0 -0
  116. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/actions/__init__.py +0 -0
  117. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/actions/base.py +0 -0
  118. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/actions/retry.py +0 -0
  119. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/actions/task.py +0 -0
  120. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/builder.py +0 -0
  121. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/compiler.py +0 -0
  122. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/completer.py +0 -0
  123. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/deciders.py +0 -0
  124. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/engine.py +0 -0
  125. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/executor.py +0 -0
  126. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/process_executor.py +0 -0
  127. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/scheduler.py +0 -0
  128. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/scopes.py +0 -0
  129. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/selector.py +0 -0
  130. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/action_engine/traversal.py +0 -0
  131. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/base.py +0 -0
  132. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/helpers.py +0 -0
  133. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/__init__.py +0 -0
  134. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/dispatcher.py +0 -0
  135. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/endpoint.py +0 -0
  136. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/engine.py +0 -0
  137. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/executor.py +0 -0
  138. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/protocol.py +0 -0
  139. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/proxy.py +0 -0
  140. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/server.py +0 -0
  141. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/types.py +0 -0
  142. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/engines/worker_based/worker.py +0 -0
  143. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/99_bottles.py +0 -0
  144. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/alphabet_soup.py +0 -0
  145. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/build_a_car.py +0 -0
  146. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/buildsystem.py +0 -0
  147. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/calculate_in_parallel.py +0 -0
  148. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/calculate_linear.py +0 -0
  149. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/create_parallel_volume.py +0 -0
  150. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/delayed_return.py +0 -0
  151. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/distance_calculator.py +0 -0
  152. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/dump_memory_backend.py +0 -0
  153. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/echo_listener.py +0 -0
  154. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/example_utils.py +0 -0
  155. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/fake_billing.py +0 -0
  156. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/graph_flow.py +0 -0
  157. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/hello_world.py +0 -0
  158. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/jobboard_produce_consume_colors.py +0 -0
  159. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/parallel_table_multiply.py +0 -0
  160. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/persistence_example.py +0 -0
  161. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/pseudo_scoping.out.txt +0 -0
  162. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/pseudo_scoping.py +0 -0
  163. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_from_backend.out.txt +0 -0
  164. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_from_backend.py +0 -0
  165. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_many_flows/my_flows.py +0 -0
  166. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_many_flows/resume_all.py +0 -0
  167. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_many_flows/run_flow.py +0 -0
  168. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_many_flows.out.txt +0 -0
  169. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_many_flows.py +0 -0
  170. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_vm_boot.py +0 -0
  171. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/resume_volume_create.py +0 -0
  172. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/retry_flow.out.txt +0 -0
  173. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/retry_flow.py +0 -0
  174. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/reverting_linear.out.txt +0 -0
  175. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/reverting_linear.py +0 -0
  176. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/run_by_iter.out.txt +0 -0
  177. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/run_by_iter.py +0 -0
  178. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/run_by_iter_enumerate.out.txt +0 -0
  179. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/run_by_iter_enumerate.py +0 -0
  180. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/share_engine_thread.py +0 -0
  181. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_linear.out.txt +0 -0
  182. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_linear.py +0 -0
  183. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_linear_listening.out.txt +0 -0
  184. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_linear_listening.py +0 -0
  185. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_linear_pass.out.txt +0 -0
  186. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_linear_pass.py +0 -0
  187. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/simple_map_reduce.py +0 -0
  188. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/switch_graph_flow.py +0 -0
  189. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/timing_listener.py +0 -0
  190. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/tox_conductor.py +0 -0
  191. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/wbe_event_sender.py +0 -0
  192. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/wbe_mandelbrot.out.txt +0 -0
  193. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/wbe_mandelbrot.py +0 -0
  194. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/wbe_simple_linear.out.txt +0 -0
  195. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/wbe_simple_linear.py +0 -0
  196. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/examples/wrapped_exception.py +0 -0
  197. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/exceptions.py +0 -0
  198. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/flow.py +0 -0
  199. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/formatters.py +0 -0
  200. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/jobs/__init__.py +0 -0
  201. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/jobs/backends/__init__.py +0 -0
  202. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/jobs/backends/impl_etcd.py +0 -0
  203. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/jobs/backends/impl_redis.py +0 -0
  204. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/jobs/backends/impl_zookeeper.py +0 -0
  205. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/jobs/base.py +0 -0
  206. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/__init__.py +0 -0
  207. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/base.py +0 -0
  208. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/capturing.py +0 -0
  209. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/claims.py +0 -0
  210. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/logging.py +0 -0
  211. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/printing.py +0 -0
  212. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/listeners/timing.py +0 -0
  213. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/logging.py +0 -0
  214. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/patterns/__init__.py +0 -0
  215. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/patterns/graph_flow.py +0 -0
  216. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/patterns/linear_flow.py +0 -0
  217. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/patterns/unordered_flow.py +0 -0
  218. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/__init__.py +0 -0
  219. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/__init__.py +0 -0
  220. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/impl_dir.py +0 -0
  221. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/impl_memory.py +0 -0
  222. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/impl_sqlalchemy.py +0 -0
  223. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/impl_zookeeper.py +0 -0
  224. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/__init__.py +0 -0
  225. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/README +0 -0
  226. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/alembic.ini +0 -0
  227. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/env.py +0 -0
  228. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/script.py.mako +0 -0
  229. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/0bc3e1a3c135_set_result_meduimtext_type.py +0 -0
  230. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/14b227d79a87_add_intention_column.py +0 -0
  231. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1c783c0c2875_replace_exception_an.py +0 -0
  232. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/1cea328f0f65_initial_logbook_deta.py +0 -0
  233. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/2ad4984f2864_switch_postgres_to_json_native.py +0 -0
  234. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/3162c0f3f8e4_add_revert_results_and_revert_failure_.py +0 -0
  235. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/40fc8c914bd2_fix_atomdetails_failure_size.py +0 -0
  236. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/589dccdf2b6e_rename_taskdetails_to_atomdetails.py +0 -0
  237. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/6df9422fcb43_fix_flowdetails_meta_size.py +0 -0
  238. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/84d6e888850_add_task_detail_type.py +0 -0
  239. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/alembic/versions/README +0 -0
  240. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/migration.py +0 -0
  241. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/backends/sqlalchemy/tables.py +0 -0
  242. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/base.py +0 -0
  243. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/models.py +0 -0
  244. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/persistence/path_based.py +0 -0
  245. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/retry.py +0 -0
  246. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/states.py +0 -0
  247. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/storage.py +0 -0
  248. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/task.py +0 -0
  249. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/test.py +0 -0
  250. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/__init__.py +0 -0
  251. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/fixtures.py +0 -0
  252. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/test_examples.py +0 -0
  253. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/__init__.py +0 -0
  254. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/action_engine/__init__.py +0 -0
  255. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/action_engine/test_builder.py +0 -0
  256. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/action_engine/test_compile.py +0 -0
  257. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/action_engine/test_creation.py +0 -0
  258. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/action_engine/test_process_executor.py +0 -0
  259. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/action_engine/test_scoping.py +0 -0
  260. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/jobs/__init__.py +0 -0
  261. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/jobs/base.py +0 -0
  262. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/jobs/test_entrypoint.py +0 -0
  263. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/jobs/test_etcd_job.py +0 -0
  264. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/jobs/test_redis_job.py +0 -0
  265. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/jobs/test_zk_job.py +0 -0
  266. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/patterns/__init__.py +0 -0
  267. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/patterns/test_graph_flow.py +0 -0
  268. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/patterns/test_linear_flow.py +0 -0
  269. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/patterns/test_unordered_flow.py +0 -0
  270. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/persistence/__init__.py +0 -0
  271. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/persistence/base.py +0 -0
  272. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/persistence/test_dir_persistence.py +0 -0
  273. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/persistence/test_memory_persistence.py +0 -0
  274. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/persistence/test_sql_persistence.py +0 -0
  275. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/persistence/test_zk_persistence.py +0 -0
  276. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_arguments_passing.py +0 -0
  277. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_check_transition.py +0 -0
  278. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_conductors.py +0 -0
  279. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_deciders.py +0 -0
  280. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_engine_helpers.py +0 -0
  281. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_engines.py +0 -0
  282. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_exceptions.py +0 -0
  283. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_failure.py +0 -0
  284. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_flow_dependencies.py +0 -0
  285. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_formatters.py +0 -0
  286. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_functor_task.py +0 -0
  287. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_listeners.py +0 -0
  288. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_mapfunctor_task.py +0 -0
  289. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_notifier.py +0 -0
  290. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_progress.py +0 -0
  291. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_reducefunctor_task.py +0 -0
  292. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_states.py +0 -0
  293. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_storage.py +0 -0
  294. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_suspend.py +0 -0
  295. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_task.py +0 -0
  296. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_types.py +0 -0
  297. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_utils.py +0 -0
  298. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_utils_async_utils.py +0 -0
  299. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_utils_binary.py +0 -0
  300. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_utils_iter_utils.py +0 -0
  301. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_utils_kazoo_utils.py +0 -0
  302. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/test_utils_threading_utils.py +0 -0
  303. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/__init__.py +0 -0
  304. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_creation.py +0 -0
  305. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_dispatcher.py +0 -0
  306. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_endpoint.py +0 -0
  307. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_executor.py +0 -0
  308. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_message_pump.py +0 -0
  309. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_pipeline.py +0 -0
  310. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_protocol.py +0 -0
  311. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_proxy.py +0 -0
  312. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_server.py +0 -0
  313. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_types.py +0 -0
  314. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/tests/unit/worker_based/test_worker.py +0 -0
  315. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/__init__.py +0 -0
  316. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/entity.py +0 -0
  317. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/failure.py +0 -0
  318. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/graph.py +0 -0
  319. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/latch.py +0 -0
  320. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/notifier.py +0 -0
  321. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/sets.py +0 -0
  322. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/timing.py +0 -0
  323. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/types/tree.py +0 -0
  324. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/__init__.py +0 -0
  325. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/async_utils.py +0 -0
  326. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/banner.py +0 -0
  327. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/eventlet_utils.py +0 -0
  328. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/iter_utils.py +0 -0
  329. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/kazoo_utils.py +0 -0
  330. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/kombu_utils.py +0 -0
  331. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/misc.py +0 -0
  332. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/persistence_utils.py +0 -0
  333. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/redis_utils.py +0 -0
  334. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/schema_utils.py +0 -0
  335. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/utils/threading_utils.py +0 -0
  336. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow/version.py +0 -0
  337. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/dependency_links.txt +0 -0
  338. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/entry_points.txt +0 -0
  339. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/not-zip-safe +0 -0
  340. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/requires.txt +0 -0
  341. {taskflow-5.9.0 → taskflow-5.9.1}/taskflow.egg-info/top_level.txt +0 -0
  342. {taskflow-5.9.0 → taskflow-5.9.1}/test-requirements.txt +0 -0
  343. {taskflow-5.9.0 → taskflow-5.9.1}/tools/clear_zk.sh +0 -0
  344. {taskflow-5.9.0 → taskflow-5.9.1}/tools/env_builder.sh +0 -0
  345. {taskflow-5.9.0 → taskflow-5.9.1}/tools/pretty_tox.sh +0 -0
  346. {taskflow-5.9.0 → taskflow-5.9.1}/tools/schema_generator.py +0 -0
  347. {taskflow-5.9.0 → taskflow-5.9.1}/tools/speed_test.py +0 -0
  348. {taskflow-5.9.0 → taskflow-5.9.1}/tools/state_graph.py +0 -0
  349. {taskflow-5.9.0 → taskflow-5.9.1}/tools/subunit_trace.py +0 -0
  350. {taskflow-5.9.0 → taskflow-5.9.1}/tools/test-setup.sh +0 -0
  351. {taskflow-5.9.0 → taskflow-5.9.1}/tools/update_states.sh +0 -0
  352. {taskflow-5.9.0 → taskflow-5.9.1}/tox.ini +0 -0
@@ -1,6 +1,10 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ 5.9.1
5
+ -----
6
+
7
+
4
8
  5.9.0
5
9
  -----
6
10
 
@@ -12,6 +16,7 @@ CHANGES
12
16
  -----
13
17
 
14
18
  * Python3.12: disable process\_executor, which depends on asyncore
19
+ * Fix REVERT\_ALL with Retries in unordered Flows
15
20
  * Remove SQLAlchemy tips jobs
16
21
  * Remove old excludes
17
22
  * Remove assertRaisesRegex
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskflow
3
- Version: 5.9.0
3
+ Version: 5.9.1
4
4
  Summary: Taskflow structured state management library.
5
5
  Home-page: https://docs.openstack.org/taskflow/latest/
6
6
  Author: OpenStack
@@ -0,0 +1,6 @@
1
+ ---
2
+ fixes:
3
+ - |
4
+ Fixed a bug when using retries with unordered flows, a REVERT_ALL triggered
5
+ by one of the subflow was overriden by an other subflow running in parallel,
6
+ leading to an incomplete revert of the flow.
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taskflow
3
- Version: 5.9.0
3
+ Version: 5.9.1
4
4
  Summary: Taskflow structured state management library.
5
5
  Home-page: https://docs.openstack.org/taskflow/latest/
6
6
  Author: OpenStack
@@ -70,6 +70,7 @@ 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
@@ -0,0 +1 @@
1
+ {"git_version": "a8b48d6e", "is_release": true}
@@ -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