temporalio 0.1.1 → 0.3.0

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 (628) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/Cargo.lock +4324 -0
  4. data/Cargo.toml +25 -0
  5. data/Gemfile +20 -0
  6. data/LICENSE +16 -15
  7. data/README.md +985 -183
  8. data/Rakefile +101 -0
  9. data/ext/Cargo.toml +26 -0
  10. data/lib/temporalio/activity/complete_async_error.rb +11 -0
  11. data/lib/temporalio/activity/context.rb +86 -78
  12. data/lib/temporalio/activity/definition.rb +175 -0
  13. data/lib/temporalio/activity/info.rb +44 -47
  14. data/lib/temporalio/activity.rb +8 -81
  15. data/lib/temporalio/api/activity/v1/message.rb +25 -0
  16. data/lib/temporalio/api/batch/v1/message.rb +31 -0
  17. data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
  18. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -0
  19. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
  20. data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
  21. data/lib/temporalio/api/cloud/identity/v1/message.rb +41 -0
  22. data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
  23. data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
  24. data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
  25. data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
  26. data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
  27. data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
  28. data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
  29. data/lib/temporalio/api/command/v1/message.rb +46 -0
  30. data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
  31. data/lib/temporalio/api/common/v1/message.rb +47 -0
  32. data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
  33. data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
  34. data/lib/temporalio/api/enums/v1/common.rb +26 -0
  35. data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
  36. data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
  37. data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
  38. data/lib/temporalio/api/enums/v1/query.rb +22 -0
  39. data/lib/temporalio/api/enums/v1/reset.rb +23 -0
  40. data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
  41. data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
  42. data/lib/temporalio/api/enums/v1/update.rb +22 -0
  43. data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
  44. data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
  45. data/lib/temporalio/api/export/v1/message.rb +24 -0
  46. data/lib/temporalio/api/failure/v1/message.rb +35 -0
  47. data/lib/temporalio/api/filter/v1/message.rb +27 -0
  48. data/lib/temporalio/api/history/v1/message.rb +90 -0
  49. data/lib/temporalio/api/namespace/v1/message.rb +31 -0
  50. data/lib/temporalio/api/nexus/v1/message.rb +40 -0
  51. data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
  52. data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
  53. data/lib/temporalio/api/operatorservice.rb +3 -0
  54. data/lib/temporalio/api/payload_visitor.rb +1513 -0
  55. data/lib/temporalio/api/protocol/v1/message.rb +23 -0
  56. data/lib/temporalio/api/query/v1/message.rb +27 -0
  57. data/lib/temporalio/api/replication/v1/message.rb +26 -0
  58. data/lib/temporalio/api/schedule/v1/message.rb +43 -0
  59. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
  60. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
  61. data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
  62. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
  63. data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
  64. data/lib/{gen/temporal/api/testservice/v1/request_response_pb.rb → temporalio/api/testservice/v1/request_response.rb} +6 -24
  65. data/lib/temporalio/api/testservice/v1/service.rb +23 -0
  66. data/lib/temporalio/api/update/v1/message.rb +33 -0
  67. data/lib/temporalio/api/version/v1/message.rb +26 -0
  68. data/lib/temporalio/api/workflow/v1/message.rb +43 -0
  69. data/lib/temporalio/api/workflowservice/v1/request_response.rb +204 -0
  70. data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
  71. data/lib/temporalio/api/workflowservice.rb +3 -0
  72. data/lib/temporalio/api.rb +14 -0
  73. data/lib/temporalio/cancellation.rb +170 -0
  74. data/lib/temporalio/client/activity_id_reference.rb +32 -0
  75. data/lib/temporalio/client/async_activity_handle.rb +85 -0
  76. data/lib/temporalio/client/connection/cloud_service.rb +726 -0
  77. data/lib/temporalio/client/connection/operator_service.rb +201 -0
  78. data/lib/temporalio/client/connection/service.rb +42 -0
  79. data/lib/temporalio/client/connection/test_service.rb +111 -0
  80. data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
  81. data/lib/temporalio/client/connection.rb +316 -0
  82. data/lib/temporalio/client/interceptor.rb +416 -0
  83. data/lib/temporalio/client/schedule.rb +967 -0
  84. data/lib/temporalio/client/schedule_handle.rb +126 -0
  85. data/lib/temporalio/client/workflow_execution.rb +100 -0
  86. data/lib/temporalio/client/workflow_execution_count.rb +36 -0
  87. data/lib/temporalio/client/workflow_execution_status.rb +18 -0
  88. data/lib/temporalio/client/workflow_handle.rb +326 -180
  89. data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
  90. data/lib/temporalio/client/workflow_update_handle.rb +65 -0
  91. data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
  92. data/lib/temporalio/client.rb +447 -94
  93. data/lib/temporalio/common_enums.rb +41 -0
  94. data/lib/temporalio/converters/data_converter.rb +99 -0
  95. data/lib/temporalio/converters/failure_converter.rb +202 -0
  96. data/lib/temporalio/converters/payload_codec.rb +26 -0
  97. data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
  98. data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
  99. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
  100. data/lib/temporalio/converters/payload_converter/composite.rb +66 -0
  101. data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
  102. data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
  103. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
  104. data/lib/temporalio/converters/payload_converter.rb +71 -0
  105. data/lib/temporalio/converters/raw_value.rb +20 -0
  106. data/lib/temporalio/converters.rb +9 -0
  107. data/lib/temporalio/error/failure.rb +119 -94
  108. data/lib/temporalio/error.rb +155 -0
  109. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
  110. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
  111. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
  112. data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
  113. data/lib/temporalio/internal/bridge/api/core_interface.rb +40 -0
  114. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
  115. data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
  116. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
  117. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -0
  118. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
  119. data/lib/temporalio/internal/bridge/api.rb +3 -0
  120. data/lib/temporalio/internal/bridge/client.rb +95 -0
  121. data/lib/temporalio/internal/bridge/runtime.rb +53 -0
  122. data/lib/temporalio/internal/bridge/testing.rb +66 -0
  123. data/lib/temporalio/internal/bridge/worker.rb +85 -0
  124. data/lib/temporalio/internal/bridge.rb +36 -0
  125. data/lib/temporalio/internal/client/implementation.rb +700 -0
  126. data/lib/temporalio/internal/metric.rb +122 -0
  127. data/lib/temporalio/internal/proto_utils.rb +133 -0
  128. data/lib/temporalio/internal/worker/activity_worker.rb +373 -0
  129. data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
  130. data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
  131. data/lib/temporalio/internal/worker/workflow_instance/context.rb +329 -0
  132. data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
  133. data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
  134. data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
  135. data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
  136. data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
  137. data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
  138. data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
  139. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
  140. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
  141. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
  142. data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
  143. data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
  144. data/lib/temporalio/internal/worker/workflow_worker.rb +196 -0
  145. data/lib/temporalio/internal.rb +7 -0
  146. data/lib/temporalio/metric.rb +109 -0
  147. data/lib/temporalio/retry_policy.rb +55 -73
  148. data/lib/temporalio/runtime.rb +302 -13
  149. data/lib/temporalio/scoped_logger.rb +96 -0
  150. data/lib/temporalio/search_attributes.rb +343 -0
  151. data/lib/temporalio/testing/activity_environment.rb +132 -0
  152. data/lib/temporalio/testing/workflow_environment.rb +345 -74
  153. data/lib/temporalio/testing.rb +4 -169
  154. data/lib/temporalio/version.rb +3 -1
  155. data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
  156. data/lib/temporalio/worker/activity_executor/thread_pool.rb +46 -0
  157. data/lib/temporalio/worker/activity_executor.rb +55 -0
  158. data/lib/temporalio/worker/interceptor.rb +362 -0
  159. data/lib/temporalio/worker/thread_pool.rb +237 -0
  160. data/lib/temporalio/worker/tuner.rb +151 -0
  161. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
  162. data/lib/temporalio/worker/workflow_executor.rb +26 -0
  163. data/lib/temporalio/worker.rb +554 -161
  164. data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
  165. data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
  166. data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
  167. data/lib/temporalio/workflow/definition.rb +566 -0
  168. data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
  169. data/lib/temporalio/workflow/future.rb +117 -104
  170. data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
  171. data/lib/temporalio/workflow/info.rb +63 -57
  172. data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
  173. data/lib/temporalio/workflow/update_info.rb +20 -0
  174. data/lib/temporalio/workflow.rb +523 -0
  175. data/lib/temporalio/workflow_history.rb +22 -0
  176. data/lib/temporalio.rb +6 -7
  177. data/temporalio.gemspec +20 -39
  178. metadata +171 -710
  179. data/bridge/Cargo.lock +0 -2997
  180. data/bridge/Cargo.toml +0 -29
  181. data/bridge/sdk-core/ARCHITECTURE.md +0 -76
  182. data/bridge/sdk-core/Cargo.toml +0 -2
  183. data/bridge/sdk-core/LICENSE.txt +0 -23
  184. data/bridge/sdk-core/README.md +0 -117
  185. data/bridge/sdk-core/arch_docs/diagrams/README.md +0 -10
  186. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +0 -40
  187. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  188. data/bridge/sdk-core/arch_docs/sticky_queues.md +0 -51
  189. data/bridge/sdk-core/client/Cargo.toml +0 -40
  190. data/bridge/sdk-core/client/LICENSE.txt +0 -23
  191. data/bridge/sdk-core/client/src/lib.rs +0 -1462
  192. data/bridge/sdk-core/client/src/metrics.rs +0 -174
  193. data/bridge/sdk-core/client/src/raw.rs +0 -932
  194. data/bridge/sdk-core/client/src/retry.rs +0 -763
  195. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +0 -185
  196. data/bridge/sdk-core/core/Cargo.toml +0 -129
  197. data/bridge/sdk-core/core/LICENSE.txt +0 -23
  198. data/bridge/sdk-core/core/benches/workflow_replay.rs +0 -76
  199. data/bridge/sdk-core/core/src/abstractions.rs +0 -355
  200. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +0 -1049
  201. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +0 -221
  202. data/bridge/sdk-core/core/src/core_tests/determinism.rs +0 -270
  203. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +0 -1046
  204. data/bridge/sdk-core/core/src/core_tests/mod.rs +0 -100
  205. data/bridge/sdk-core/core/src/core_tests/queries.rs +0 -893
  206. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +0 -65
  207. data/bridge/sdk-core/core/src/core_tests/workers.rs +0 -257
  208. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +0 -124
  209. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +0 -2433
  210. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +0 -609
  211. data/bridge/sdk-core/core/src/internal_flags.rs +0 -136
  212. data/bridge/sdk-core/core/src/lib.rs +0 -289
  213. data/bridge/sdk-core/core/src/pollers/mod.rs +0 -54
  214. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +0 -297
  215. data/bridge/sdk-core/core/src/protosext/mod.rs +0 -428
  216. data/bridge/sdk-core/core/src/replay/mod.rs +0 -215
  217. data/bridge/sdk-core/core/src/retry_logic.rs +0 -202
  218. data/bridge/sdk-core/core/src/telemetry/log_export.rs +0 -190
  219. data/bridge/sdk-core/core/src/telemetry/metrics.rs +0 -462
  220. data/bridge/sdk-core/core/src/telemetry/mod.rs +0 -423
  221. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +0 -83
  222. data/bridge/sdk-core/core/src/test_help/mod.rs +0 -939
  223. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +0 -536
  224. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -89
  225. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +0 -1278
  226. data/bridge/sdk-core/core/src/worker/activities.rs +0 -557
  227. data/bridge/sdk-core/core/src/worker/client/mocks.rs +0 -107
  228. data/bridge/sdk-core/core/src/worker/client.rs +0 -389
  229. data/bridge/sdk-core/core/src/worker/mod.rs +0 -677
  230. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
  231. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +0 -99
  232. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +0 -1111
  233. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +0 -964
  234. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +0 -294
  235. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -168
  236. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +0 -918
  237. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +0 -137
  238. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +0 -158
  239. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +0 -130
  240. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +0 -1525
  241. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +0 -324
  242. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +0 -179
  243. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -659
  244. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +0 -439
  245. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +0 -435
  246. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +0 -175
  247. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +0 -249
  248. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +0 -85
  249. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +0 -1280
  250. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +0 -269
  251. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -213
  252. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +0 -1305
  253. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +0 -1276
  254. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +0 -128
  255. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +0 -125
  256. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +0 -85
  257. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +0 -117
  258. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +0 -24
  259. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +0 -715
  260. data/bridge/sdk-core/core-api/Cargo.toml +0 -33
  261. data/bridge/sdk-core/core-api/LICENSE.txt +0 -23
  262. data/bridge/sdk-core/core-api/src/errors.rs +0 -62
  263. data/bridge/sdk-core/core-api/src/lib.rs +0 -113
  264. data/bridge/sdk-core/core-api/src/telemetry.rs +0 -141
  265. data/bridge/sdk-core/core-api/src/worker.rs +0 -161
  266. data/bridge/sdk-core/etc/deps.svg +0 -162
  267. data/bridge/sdk-core/etc/dynamic-config.yaml +0 -2
  268. data/bridge/sdk-core/etc/otel-collector-config.yaml +0 -36
  269. data/bridge/sdk-core/etc/prometheus.yaml +0 -6
  270. data/bridge/sdk-core/etc/regen-depgraph.sh +0 -5
  271. data/bridge/sdk-core/fsm/Cargo.toml +0 -18
  272. data/bridge/sdk-core/fsm/LICENSE.txt +0 -23
  273. data/bridge/sdk-core/fsm/README.md +0 -3
  274. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  275. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -23
  276. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +0 -650
  277. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  278. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +0 -18
  279. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  280. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +0 -41
  281. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +0 -14
  282. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +0 -11
  283. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +0 -32
  284. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +0 -31
  285. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +0 -46
  286. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +0 -29
  287. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -12
  288. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +0 -32
  289. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +0 -18
  290. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  291. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +0 -11
  292. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  293. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +0 -11
  294. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  295. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  296. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -23
  297. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +0 -254
  298. data/bridge/sdk-core/fsm/src/lib.rs +0 -2
  299. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  300. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  301. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  302. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  303. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  304. data/bridge/sdk-core/integ-with-otel.sh +0 -7
  305. data/bridge/sdk-core/protos/api_upstream/README.md +0 -9
  306. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
  307. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -9
  308. data/bridge/sdk-core/protos/api_upstream/build/go.mod +0 -7
  309. data/bridge/sdk-core/protos/api_upstream/build/go.sum +0 -5
  310. data/bridge/sdk-core/protos/api_upstream/build/tools.go +0 -29
  311. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +0 -141
  312. data/bridge/sdk-core/protos/api_upstream/go.mod +0 -6
  313. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -89
  314. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +0 -248
  315. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +0 -123
  316. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -47
  317. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -52
  318. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -56
  319. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -170
  320. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -123
  321. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -51
  322. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -50
  323. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -41
  324. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -60
  325. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -59
  326. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -56
  327. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -122
  328. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -108
  329. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -114
  330. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -56
  331. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +0 -787
  332. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -99
  333. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -124
  334. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -80
  335. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -57
  336. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +0 -61
  337. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -55
  338. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -379
  339. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -63
  340. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -108
  341. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +0 -111
  342. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +0 -59
  343. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -146
  344. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -1199
  345. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -415
  346. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +0 -63
  347. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -79
  348. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -80
  349. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -78
  350. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -16
  351. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +0 -31
  352. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -31
  353. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -270
  354. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -305
  355. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -35
  356. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +0 -38
  357. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +0 -13
  358. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
  359. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -63
  360. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -90
  361. data/bridge/sdk-core/rustfmt.toml +0 -1
  362. data/bridge/sdk-core/sdk/Cargo.toml +0 -48
  363. data/bridge/sdk-core/sdk/LICENSE.txt +0 -23
  364. data/bridge/sdk-core/sdk/src/activity_context.rs +0 -230
  365. data/bridge/sdk-core/sdk/src/app_data.rs +0 -37
  366. data/bridge/sdk-core/sdk/src/interceptors.rs +0 -50
  367. data/bridge/sdk-core/sdk/src/lib.rs +0 -861
  368. data/bridge/sdk-core/sdk/src/payload_converter.rs +0 -11
  369. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +0 -295
  370. data/bridge/sdk-core/sdk/src/workflow_context.rs +0 -694
  371. data/bridge/sdk-core/sdk/src/workflow_future.rs +0 -500
  372. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +0 -33
  373. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +0 -23
  374. data/bridge/sdk-core/sdk-core-protos/build.rs +0 -142
  375. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +0 -7
  376. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +0 -557
  377. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +0 -234
  378. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +0 -2088
  379. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +0 -48
  380. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +0 -14
  381. data/bridge/sdk-core/test-utils/Cargo.toml +0 -38
  382. data/bridge/sdk-core/test-utils/src/canned_histories.rs +0 -1389
  383. data/bridge/sdk-core/test-utils/src/histfetch.rs +0 -28
  384. data/bridge/sdk-core/test-utils/src/lib.rs +0 -709
  385. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +0 -50
  386. data/bridge/sdk-core/test-utils/src/workflows.rs +0 -29
  387. data/bridge/sdk-core/tests/fuzzy_workflow.rs +0 -130
  388. data/bridge/sdk-core/tests/heavy_tests.rs +0 -265
  389. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +0 -36
  390. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +0 -150
  391. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +0 -223
  392. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +0 -239
  393. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -90
  394. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +0 -314
  395. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +0 -151
  396. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +0 -902
  397. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
  398. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -60
  399. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -51
  400. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -51
  401. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -64
  402. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -47
  403. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -669
  404. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -54
  405. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -92
  406. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +0 -228
  407. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +0 -94
  408. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -171
  409. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +0 -85
  410. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -120
  411. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +0 -77
  412. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +0 -596
  413. data/bridge/sdk-core/tests/main.rs +0 -103
  414. data/bridge/sdk-core/tests/runner.rs +0 -132
  415. data/bridge/sdk-core/tests/wf_input_replay.rs +0 -32
  416. data/bridge/src/connection.rs +0 -202
  417. data/bridge/src/lib.rs +0 -494
  418. data/bridge/src/runtime.rs +0 -54
  419. data/bridge/src/test_server.rs +0 -153
  420. data/bridge/src/worker.rs +0 -197
  421. data/ext/Rakefile +0 -9
  422. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +0 -14
  423. data/lib/gen/temporal/api/batch/v1/message_pb.rb +0 -50
  424. data/lib/gen/temporal/api/command/v1/message_pb.rb +0 -160
  425. data/lib/gen/temporal/api/common/v1/message_pb.rb +0 -73
  426. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +0 -33
  427. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +0 -37
  428. data/lib/gen/temporal/api/enums/v1/common_pb.rb +0 -42
  429. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +0 -68
  430. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +0 -79
  431. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +0 -37
  432. data/lib/gen/temporal/api/enums/v1/query_pb.rb +0 -31
  433. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +0 -24
  434. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +0 -28
  435. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +0 -30
  436. data/lib/gen/temporal/api/enums/v1/update_pb.rb +0 -25
  437. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +0 -89
  438. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +0 -84
  439. data/lib/gen/temporal/api/failure/v1/message_pb.rb +0 -83
  440. data/lib/gen/temporal/api/filter/v1/message_pb.rb +0 -40
  441. data/lib/gen/temporal/api/history/v1/message_pb.rb +0 -498
  442. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +0 -64
  443. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +0 -88
  444. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +0 -20
  445. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +0 -30
  446. data/lib/gen/temporal/api/query/v1/message_pb.rb +0 -38
  447. data/lib/gen/temporal/api/replication/v1/message_pb.rb +0 -37
  448. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +0 -149
  449. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +0 -23
  450. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +0 -73
  451. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +0 -21
  452. data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -72
  453. data/lib/gen/temporal/api/version/v1/message_pb.rb +0 -41
  454. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +0 -111
  455. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +0 -798
  456. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +0 -20
  457. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +0 -62
  458. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +0 -61
  459. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +0 -61
  460. data/lib/gen/temporal/sdk/core/common/common_pb.rb +0 -26
  461. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +0 -40
  462. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +0 -31
  463. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +0 -171
  464. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +0 -200
  465. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +0 -41
  466. data/lib/temporalio/bridge/connect_options.rb +0 -15
  467. data/lib/temporalio/bridge/error.rb +0 -8
  468. data/lib/temporalio/bridge/retry_config.rb +0 -24
  469. data/lib/temporalio/bridge/tls_options.rb +0 -19
  470. data/lib/temporalio/bridge.rb +0 -14
  471. data/lib/temporalio/client/implementation.rb +0 -340
  472. data/lib/temporalio/connection/retry_config.rb +0 -44
  473. data/lib/temporalio/connection/service.rb +0 -20
  474. data/lib/temporalio/connection/test_service.rb +0 -92
  475. data/lib/temporalio/connection/tls_options.rb +0 -51
  476. data/lib/temporalio/connection/workflow_service.rb +0 -731
  477. data/lib/temporalio/connection.rb +0 -86
  478. data/lib/temporalio/data_converter.rb +0 -191
  479. data/lib/temporalio/error/workflow_failure.rb +0 -19
  480. data/lib/temporalio/errors.rb +0 -40
  481. data/lib/temporalio/failure_converter/base.rb +0 -26
  482. data/lib/temporalio/failure_converter/basic.rb +0 -319
  483. data/lib/temporalio/failure_converter.rb +0 -7
  484. data/lib/temporalio/interceptor/activity_inbound.rb +0 -22
  485. data/lib/temporalio/interceptor/activity_outbound.rb +0 -24
  486. data/lib/temporalio/interceptor/chain.rb +0 -28
  487. data/lib/temporalio/interceptor/client.rb +0 -127
  488. data/lib/temporalio/interceptor.rb +0 -22
  489. data/lib/temporalio/payload_codec/base.rb +0 -32
  490. data/lib/temporalio/payload_converter/base.rb +0 -24
  491. data/lib/temporalio/payload_converter/bytes.rb +0 -27
  492. data/lib/temporalio/payload_converter/composite.rb +0 -49
  493. data/lib/temporalio/payload_converter/encoding_base.rb +0 -35
  494. data/lib/temporalio/payload_converter/json.rb +0 -26
  495. data/lib/temporalio/payload_converter/nil.rb +0 -26
  496. data/lib/temporalio/payload_converter.rb +0 -14
  497. data/lib/temporalio/retry_state.rb +0 -35
  498. data/lib/temporalio/testing/time_skipping_handle.rb +0 -32
  499. data/lib/temporalio/testing/time_skipping_interceptor.rb +0 -23
  500. data/lib/temporalio/timeout_type.rb +0 -29
  501. data/lib/temporalio/worker/activity_runner.rb +0 -114
  502. data/lib/temporalio/worker/activity_worker.rb +0 -164
  503. data/lib/temporalio/worker/reactor.rb +0 -46
  504. data/lib/temporalio/worker/runner.rb +0 -63
  505. data/lib/temporalio/worker/sync_worker.rb +0 -124
  506. data/lib/temporalio/worker/thread_pool_executor.rb +0 -51
  507. data/lib/temporalio/workflow/async.rb +0 -46
  508. data/lib/temporalio/workflow/execution_info.rb +0 -54
  509. data/lib/temporalio/workflow/execution_status.rb +0 -36
  510. data/lib/temporalio/workflow/id_reuse_policy.rb +0 -36
  511. data/lib/temporalio/workflow/query_reject_condition.rb +0 -33
  512. data/lib/thermite_patch.rb +0 -33
  513. data/sig/async.rbs +0 -17
  514. data/sig/protobuf.rbs +0 -16
  515. data/sig/protos/dependencies/gogoproto/gogo.rbs +0 -914
  516. data/sig/protos/google/protobuf/any.rbs +0 -157
  517. data/sig/protos/google/protobuf/descriptor.rbs +0 -2825
  518. data/sig/protos/google/protobuf/duration.rbs +0 -114
  519. data/sig/protos/google/protobuf/empty.rbs +0 -36
  520. data/sig/protos/google/protobuf/timestamp.rbs +0 -145
  521. data/sig/protos/google/protobuf/wrappers.rbs +0 -358
  522. data/sig/protos/temporal/api/batch/v1/message.rbs +0 -300
  523. data/sig/protos/temporal/api/command/v1/message.rbs +0 -1399
  524. data/sig/protos/temporal/api/common/v1/message.rbs +0 -528
  525. data/sig/protos/temporal/api/enums/v1/batch_operation.rbs +0 -79
  526. data/sig/protos/temporal/api/enums/v1/command_type.rbs +0 -68
  527. data/sig/protos/temporal/api/enums/v1/common.rbs +0 -118
  528. data/sig/protos/temporal/api/enums/v1/event_type.rbs +0 -264
  529. data/sig/protos/temporal/api/enums/v1/failed_cause.rbs +0 -277
  530. data/sig/protos/temporal/api/enums/v1/namespace.rbs +0 -108
  531. data/sig/protos/temporal/api/enums/v1/query.rbs +0 -81
  532. data/sig/protos/temporal/api/enums/v1/reset.rbs +0 -44
  533. data/sig/protos/temporal/api/enums/v1/schedule.rbs +0 -72
  534. data/sig/protos/temporal/api/enums/v1/task_queue.rbs +0 -92
  535. data/sig/protos/temporal/api/enums/v1/update.rbs +0 -64
  536. data/sig/protos/temporal/api/enums/v1/workflow.rbs +0 -371
  537. data/sig/protos/temporal/api/errordetails/v1/message.rbs +0 -551
  538. data/sig/protos/temporal/api/failure/v1/message.rbs +0 -581
  539. data/sig/protos/temporal/api/filter/v1/message.rbs +0 -171
  540. data/sig/protos/temporal/api/history/v1/message.rbs +0 -4609
  541. data/sig/protos/temporal/api/namespace/v1/message.rbs +0 -410
  542. data/sig/protos/temporal/api/operatorservice/v1/request_response.rbs +0 -643
  543. data/sig/protos/temporal/api/operatorservice/v1/service.rbs +0 -17
  544. data/sig/protos/temporal/api/protocol/v1/message.rbs +0 -84
  545. data/sig/protos/temporal/api/query/v1/message.rbs +0 -182
  546. data/sig/protos/temporal/api/replication/v1/message.rbs +0 -148
  547. data/sig/protos/temporal/api/schedule/v1/message.rbs +0 -1488
  548. data/sig/protos/temporal/api/sdk/v1/task_complete_metadata.rbs +0 -110
  549. data/sig/protos/temporal/api/taskqueue/v1/message.rbs +0 -486
  550. data/sig/protos/temporal/api/testservice/v1/request_response.rbs +0 -249
  551. data/sig/protos/temporal/api/testservice/v1/service.rbs +0 -15
  552. data/sig/protos/temporal/api/update/v1/message.rbs +0 -489
  553. data/sig/protos/temporal/api/version/v1/message.rbs +0 -184
  554. data/sig/protos/temporal/api/workflow/v1/message.rbs +0 -824
  555. data/sig/protos/temporal/api/workflowservice/v1/request_response.rbs +0 -7250
  556. data/sig/protos/temporal/api/workflowservice/v1/service.rbs +0 -22
  557. data/sig/protos/temporal/sdk/core/activity_result/activity_result.rbs +0 -380
  558. data/sig/protos/temporal/sdk/core/activity_task/activity_task.rbs +0 -386
  559. data/sig/protos/temporal/sdk/core/child_workflow/child_workflow.rbs +0 -323
  560. data/sig/protos/temporal/sdk/core/common/common.rbs +0 -62
  561. data/sig/protos/temporal/sdk/core/core_interface.rbs +0 -101
  562. data/sig/protos/temporal/sdk/core/external_data/external_data.rbs +0 -119
  563. data/sig/protos/temporal/sdk/core/workflow_activation/workflow_activation.rbs +0 -1473
  564. data/sig/protos/temporal/sdk/core/workflow_commands/workflow_commands.rbs +0 -1784
  565. data/sig/protos/temporal/sdk/core/workflow_completion/workflow_completion.rbs +0 -180
  566. data/sig/ruby.rbs +0 -12
  567. data/sig/temporalio/activity/context.rbs +0 -29
  568. data/sig/temporalio/activity/info.rbs +0 -43
  569. data/sig/temporalio/activity.rbs +0 -19
  570. data/sig/temporalio/bridge/connect_options.rbs +0 -19
  571. data/sig/temporalio/bridge/error.rbs +0 -8
  572. data/sig/temporalio/bridge/retry_config.rbs +0 -21
  573. data/sig/temporalio/bridge/tls_options.rbs +0 -17
  574. data/sig/temporalio/bridge.rbs +0 -71
  575. data/sig/temporalio/client/implementation.rbs +0 -38
  576. data/sig/temporalio/client/workflow_handle.rbs +0 -41
  577. data/sig/temporalio/client.rbs +0 -35
  578. data/sig/temporalio/connection/retry_config.rbs +0 -37
  579. data/sig/temporalio/connection/service.rbs +0 -14
  580. data/sig/temporalio/connection/test_service.rbs +0 -13
  581. data/sig/temporalio/connection/tls_options.rbs +0 -43
  582. data/sig/temporalio/connection/workflow_service.rbs +0 -48
  583. data/sig/temporalio/connection.rbs +0 -30
  584. data/sig/temporalio/data_converter.rbs +0 -35
  585. data/sig/temporalio/error/failure.rbs +0 -121
  586. data/sig/temporalio/error/workflow_failure.rbs +0 -9
  587. data/sig/temporalio/errors.rbs +0 -36
  588. data/sig/temporalio/failure_converter/base.rbs +0 -12
  589. data/sig/temporalio/failure_converter/basic.rbs +0 -86
  590. data/sig/temporalio/failure_converter.rbs +0 -5
  591. data/sig/temporalio/interceptor/activity_inbound.rbs +0 -21
  592. data/sig/temporalio/interceptor/activity_outbound.rbs +0 -10
  593. data/sig/temporalio/interceptor/chain.rbs +0 -24
  594. data/sig/temporalio/interceptor/client.rbs +0 -148
  595. data/sig/temporalio/interceptor.rbs +0 -6
  596. data/sig/temporalio/payload_codec/base.rbs +0 -12
  597. data/sig/temporalio/payload_converter/base.rbs +0 -12
  598. data/sig/temporalio/payload_converter/bytes.rbs +0 -9
  599. data/sig/temporalio/payload_converter/composite.rbs +0 -19
  600. data/sig/temporalio/payload_converter/encoding_base.rbs +0 -14
  601. data/sig/temporalio/payload_converter/json.rbs +0 -9
  602. data/sig/temporalio/payload_converter/nil.rbs +0 -9
  603. data/sig/temporalio/payload_converter.rbs +0 -5
  604. data/sig/temporalio/retry_policy.rbs +0 -25
  605. data/sig/temporalio/retry_state.rbs +0 -20
  606. data/sig/temporalio/runtime.rbs +0 -12
  607. data/sig/temporalio/testing/time_skipping_handle.rbs +0 -15
  608. data/sig/temporalio/testing/time_skipping_interceptor.rbs +0 -13
  609. data/sig/temporalio/testing/workflow_environment.rbs +0 -22
  610. data/sig/temporalio/testing.rbs +0 -35
  611. data/sig/temporalio/timeout_type.rbs +0 -15
  612. data/sig/temporalio/version.rbs +0 -3
  613. data/sig/temporalio/worker/activity_runner.rbs +0 -35
  614. data/sig/temporalio/worker/activity_worker.rbs +0 -44
  615. data/sig/temporalio/worker/reactor.rbs +0 -22
  616. data/sig/temporalio/worker/runner.rbs +0 -21
  617. data/sig/temporalio/worker/sync_worker.rbs +0 -23
  618. data/sig/temporalio/worker/thread_pool_executor.rbs +0 -23
  619. data/sig/temporalio/worker.rbs +0 -46
  620. data/sig/temporalio/workflow/async.rbs +0 -9
  621. data/sig/temporalio/workflow/execution_info.rbs +0 -55
  622. data/sig/temporalio/workflow/execution_status.rbs +0 -21
  623. data/sig/temporalio/workflow/future.rbs +0 -40
  624. data/sig/temporalio/workflow/id_reuse_policy.rbs +0 -15
  625. data/sig/temporalio/workflow/info.rbs +0 -55
  626. data/sig/temporalio/workflow/query_reject_condition.rbs +0 -14
  627. data/sig/temporalio.rbs +0 -2
  628. data/sig/thermite_patch.rbs +0 -15
@@ -1,763 +0,0 @@
1
- use crate::{
2
- ClientOptions, ListClosedFilters, ListOpenFilters, Namespace, RegisterNamespaceOptions, Result,
3
- RetryConfig, SignalWithStartOptions, StartTimeFilter, WorkflowClientTrait, WorkflowOptions,
4
- };
5
- use backoff::{backoff::Backoff, exponential::ExponentialBackoff, Clock, SystemClock};
6
- use futures_retry::{ErrorHandler, FutureRetry, RetryPolicy};
7
- use std::{fmt::Debug, future::Future, sync::Arc, time::Duration};
8
- use temporal_sdk_core_protos::{
9
- coresdk::workflow_commands::QueryResult,
10
- temporal::api::{
11
- common::v1::{Payload, Payloads},
12
- enums::v1::WorkflowTaskFailedCause,
13
- failure::v1::Failure,
14
- query::v1::WorkflowQuery,
15
- workflowservice::v1::*,
16
- },
17
- TaskToken,
18
- };
19
- use tonic::Code;
20
-
21
- /// List of gRPC error codes that client will retry.
22
- pub const RETRYABLE_ERROR_CODES: [Code; 7] = [
23
- Code::DataLoss,
24
- Code::Internal,
25
- Code::Unknown,
26
- Code::ResourceExhausted,
27
- Code::Aborted,
28
- Code::OutOfRange,
29
- Code::Unavailable,
30
- ];
31
- const LONG_POLL_FATAL_GRACE: Duration = Duration::from_secs(60);
32
- /// Must match the method name in [crate::raw::WorkflowService]
33
- const POLL_WORKFLOW_METH_NAME: &str = "poll_workflow_task_queue";
34
- /// Must match the method name in [crate::raw::WorkflowService]
35
- const POLL_ACTIVITY_METH_NAME: &str = "poll_activity_task_queue";
36
-
37
- /// A wrapper for a [WorkflowClientTrait] or [crate::WorkflowService] implementor which performs
38
- /// auto-retries
39
- #[derive(Debug, Clone)]
40
- pub struct RetryClient<SG> {
41
- client: SG,
42
- retry_config: Arc<RetryConfig>,
43
- }
44
-
45
- impl<SG> RetryClient<SG> {
46
- /// Use the provided retry config with the provided client
47
- pub fn new(client: SG, retry_config: RetryConfig) -> Self {
48
- Self {
49
- client,
50
- retry_config: Arc::new(retry_config),
51
- }
52
- }
53
- }
54
-
55
- impl<SG> RetryClient<SG> {
56
- /// Return the inner client type
57
- pub fn get_client(&self) -> &SG {
58
- &self.client
59
- }
60
-
61
- /// Return the inner client type mutably
62
- pub fn get_client_mut(&mut self) -> &mut SG {
63
- &mut self.client
64
- }
65
-
66
- /// Disable retry and return the inner client type
67
- pub fn into_inner(self) -> SG {
68
- self.client
69
- }
70
-
71
- /// Wraps a call to the underlying client with retry capability.
72
- ///
73
- /// This is the "old" path used by higher-level [WorkflowClientTrait] implementors
74
- pub(crate) async fn call_with_retry<R, F, Fut>(
75
- &self,
76
- factory: F,
77
- call_name: &'static str,
78
- ) -> Result<R>
79
- where
80
- F: Fn() -> Fut + Unpin,
81
- Fut: Future<Output = Result<R>>,
82
- {
83
- let rtc = self.get_retry_config(call_name);
84
- let res = Self::make_future_retry(rtc, factory, call_name).await;
85
- Ok(res.map_err(|(e, _attempt)| e)?.0)
86
- }
87
-
88
- pub(crate) fn get_retry_config(&self, call_name: &'static str) -> RetryConfig {
89
- match CallType::from_call_name(call_name) {
90
- CallType::Normal => (*self.retry_config).clone(),
91
- CallType::LongPoll => RetryConfig::poll_retry_policy(),
92
- }
93
- }
94
-
95
- pub(crate) fn make_future_retry<R, F, Fut>(
96
- rtc: RetryConfig,
97
- factory: F,
98
- call_name: &'static str,
99
- ) -> FutureRetry<F, TonicErrorHandler<SystemClock>>
100
- where
101
- F: FnMut() -> Fut + Unpin,
102
- Fut: Future<Output = Result<R>>,
103
- {
104
- FutureRetry::new(
105
- factory,
106
- TonicErrorHandler::new(rtc, RetryConfig::throttle_retry_policy(), call_name),
107
- )
108
- }
109
- }
110
-
111
- #[derive(Debug)]
112
- pub(crate) struct TonicErrorHandler<C: Clock> {
113
- backoff: ExponentialBackoff<C>,
114
- throttle_backoff: ExponentialBackoff<C>,
115
- max_retries: usize,
116
- call_type: CallType,
117
- call_name: &'static str,
118
- }
119
- impl TonicErrorHandler<SystemClock> {
120
- fn new(cfg: RetryConfig, throttle_cfg: RetryConfig, call_name: &'static str) -> Self {
121
- Self::new_with_clock(
122
- cfg,
123
- throttle_cfg,
124
- call_name,
125
- SystemClock::default(),
126
- SystemClock::default(),
127
- )
128
- }
129
- }
130
- impl<C> TonicErrorHandler<C>
131
- where
132
- C: Clock,
133
- {
134
- fn new_with_clock(
135
- cfg: RetryConfig,
136
- throttle_cfg: RetryConfig,
137
- call_name: &'static str,
138
- clock: C,
139
- throttle_clock: C,
140
- ) -> Self {
141
- Self {
142
- max_retries: cfg.max_retries,
143
- call_type: CallType::from_call_name(call_name),
144
- call_name,
145
- backoff: cfg.into_exp_backoff(clock),
146
- throttle_backoff: throttle_cfg.into_exp_backoff(throttle_clock),
147
- }
148
- }
149
- const fn should_log_retry_warning(&self, cur_attempt: usize) -> bool {
150
- // Warn on more than 5 retries for unlimited retrying
151
- if self.max_retries == 0 && cur_attempt > 5 {
152
- return true;
153
- }
154
- // Warn if the attempts are more than 50% of max retries
155
- if self.max_retries > 0 && cur_attempt * 2 >= self.max_retries {
156
- return true;
157
- }
158
- false
159
- }
160
- }
161
- #[doc(hidden)]
162
- #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
163
- pub enum CallType {
164
- Normal,
165
- LongPoll,
166
- }
167
- impl CallType {
168
- fn from_call_name(call_name: &str) -> Self {
169
- match call_name {
170
- POLL_WORKFLOW_METH_NAME | POLL_ACTIVITY_METH_NAME => CallType::LongPoll,
171
- _ => CallType::Normal,
172
- }
173
- }
174
- }
175
-
176
- impl<C> ErrorHandler<tonic::Status> for TonicErrorHandler<C>
177
- where
178
- C: Clock,
179
- {
180
- type OutError = tonic::Status;
181
-
182
- fn handle(&mut self, current_attempt: usize, e: tonic::Status) -> RetryPolicy<tonic::Status> {
183
- // 0 max retries means unlimited retries
184
- if self.max_retries > 0 && current_attempt >= self.max_retries {
185
- return RetryPolicy::ForwardError(e);
186
- }
187
-
188
- let is_long_poll = self.call_type == CallType::LongPoll;
189
- // Long polls are OK with being cancelled or running into the timeout because there's
190
- // nothing to do but retry anyway
191
- let long_poll_allowed =
192
- is_long_poll && [Code::Cancelled, Code::DeadlineExceeded].contains(&e.code());
193
-
194
- if RETRYABLE_ERROR_CODES.contains(&e.code()) || long_poll_allowed {
195
- if current_attempt == 1 {
196
- debug!(error=?e, "gRPC call {} failed on first attempt", self.call_name);
197
- } else if self.should_log_retry_warning(current_attempt) {
198
- warn!(error=?e, "gRPC call {} retried {} times", self.call_name, current_attempt);
199
- }
200
-
201
- match self.backoff.next_backoff() {
202
- None => RetryPolicy::ForwardError(e), // None is returned when we've ran out of time
203
- Some(backoff) => {
204
- // We treat ResourceExhausted as a special case and backoff more
205
- // so we don't overload the server
206
- if e.code() == Code::ResourceExhausted {
207
- let extended_backoff =
208
- backoff.max(self.throttle_backoff.next_backoff().unwrap_or_default());
209
- RetryPolicy::WaitRetry(extended_backoff)
210
- } else {
211
- RetryPolicy::WaitRetry(backoff)
212
- }
213
- }
214
- }
215
- } else if is_long_poll && self.backoff.get_elapsed_time() <= LONG_POLL_FATAL_GRACE {
216
- // We permit "fatal" errors while long polling for a while, because some proxies return
217
- // stupid error codes while getting ready, among other weird infra issues
218
- RetryPolicy::WaitRetry(self.backoff.max_interval)
219
- } else {
220
- RetryPolicy::ForwardError(e)
221
- }
222
- }
223
- }
224
-
225
- macro_rules! retry_call {
226
- ($myself:ident, $call_name:ident) => { retry_call!($myself, $call_name,) };
227
- ($myself:ident, $call_name:ident, $($args:expr),*) => {{
228
- let call_name_str = stringify!($call_name);
229
- let fact = || { $myself.get_client().$call_name($($args,)*)};
230
- $myself.call_with_retry(fact, call_name_str).await
231
- }}
232
- }
233
-
234
- // Ideally, this would be auto-implemented for anything that implements the raw client, but that
235
- // breaks all our retry clients which use a mock since it's based on this trait currently. Ideally
236
- // we would create an automock for the WorkflowServiceClient copy-paste trait and use that, but
237
- // that's a huge pain. Maybe one day tonic will provide traits.
238
- #[async_trait::async_trait]
239
- impl<SG> WorkflowClientTrait for RetryClient<SG>
240
- where
241
- SG: WorkflowClientTrait + Send + Sync + 'static,
242
- {
243
- async fn start_workflow(
244
- &self,
245
- input: Vec<Payload>,
246
- task_queue: String,
247
- workflow_id: String,
248
- workflow_type: String,
249
- request_id: Option<String>,
250
- options: WorkflowOptions,
251
- ) -> Result<StartWorkflowExecutionResponse> {
252
- retry_call!(
253
- self,
254
- start_workflow,
255
- input.clone(),
256
- task_queue.clone(),
257
- workflow_id.clone(),
258
- workflow_type.clone(),
259
- request_id.clone(),
260
- options.clone()
261
- )
262
- }
263
-
264
- async fn reset_sticky_task_queue(
265
- &self,
266
- workflow_id: String,
267
- run_id: String,
268
- ) -> Result<ResetStickyTaskQueueResponse> {
269
- retry_call!(
270
- self,
271
- reset_sticky_task_queue,
272
- workflow_id.clone(),
273
- run_id.clone()
274
- )
275
- }
276
-
277
- async fn complete_activity_task(
278
- &self,
279
- task_token: TaskToken,
280
- result: Option<Payloads>,
281
- ) -> Result<RespondActivityTaskCompletedResponse> {
282
- retry_call!(
283
- self,
284
- complete_activity_task,
285
- task_token.clone(),
286
- result.clone()
287
- )
288
- }
289
-
290
- async fn record_activity_heartbeat(
291
- &self,
292
- task_token: TaskToken,
293
- details: Option<Payloads>,
294
- ) -> Result<RecordActivityTaskHeartbeatResponse> {
295
- retry_call!(
296
- self,
297
- record_activity_heartbeat,
298
- task_token.clone(),
299
- details.clone()
300
- )
301
- }
302
-
303
- async fn cancel_activity_task(
304
- &self,
305
- task_token: TaskToken,
306
- details: Option<Payloads>,
307
- ) -> Result<RespondActivityTaskCanceledResponse> {
308
- retry_call!(
309
- self,
310
- cancel_activity_task,
311
- task_token.clone(),
312
- details.clone()
313
- )
314
- }
315
-
316
- async fn fail_activity_task(
317
- &self,
318
- task_token: TaskToken,
319
- failure: Option<Failure>,
320
- ) -> Result<RespondActivityTaskFailedResponse> {
321
- retry_call!(
322
- self,
323
- fail_activity_task,
324
- task_token.clone(),
325
- failure.clone()
326
- )
327
- }
328
-
329
- async fn fail_workflow_task(
330
- &self,
331
- task_token: TaskToken,
332
- cause: WorkflowTaskFailedCause,
333
- failure: Option<Failure>,
334
- ) -> Result<RespondWorkflowTaskFailedResponse> {
335
- retry_call!(
336
- self,
337
- fail_workflow_task,
338
- task_token.clone(),
339
- cause,
340
- failure.clone()
341
- )
342
- }
343
-
344
- async fn signal_workflow_execution(
345
- &self,
346
- workflow_id: String,
347
- run_id: String,
348
- signal_name: String,
349
- payloads: Option<Payloads>,
350
- request_id: Option<String>,
351
- ) -> Result<SignalWorkflowExecutionResponse> {
352
- retry_call!(
353
- self,
354
- signal_workflow_execution,
355
- workflow_id.clone(),
356
- run_id.clone(),
357
- signal_name.clone(),
358
- payloads.clone(),
359
- request_id.clone()
360
- )
361
- }
362
-
363
- async fn signal_with_start_workflow_execution(
364
- &self,
365
- options: SignalWithStartOptions,
366
- workflow_options: WorkflowOptions,
367
- ) -> Result<SignalWithStartWorkflowExecutionResponse> {
368
- retry_call!(
369
- self,
370
- signal_with_start_workflow_execution,
371
- options.clone(),
372
- workflow_options.clone()
373
- )
374
- }
375
-
376
- async fn query_workflow_execution(
377
- &self,
378
- workflow_id: String,
379
- run_id: String,
380
- query: WorkflowQuery,
381
- ) -> Result<QueryWorkflowResponse> {
382
- retry_call!(
383
- self,
384
- query_workflow_execution,
385
- workflow_id.clone(),
386
- run_id.clone(),
387
- query.clone()
388
- )
389
- }
390
-
391
- async fn describe_workflow_execution(
392
- &self,
393
- workflow_id: String,
394
- run_id: Option<String>,
395
- ) -> Result<DescribeWorkflowExecutionResponse> {
396
- retry_call!(
397
- self,
398
- describe_workflow_execution,
399
- workflow_id.clone(),
400
- run_id.clone()
401
- )
402
- }
403
-
404
- async fn get_workflow_execution_history(
405
- &self,
406
- workflow_id: String,
407
- run_id: Option<String>,
408
- page_token: Vec<u8>,
409
- ) -> Result<GetWorkflowExecutionHistoryResponse> {
410
- retry_call!(
411
- self,
412
- get_workflow_execution_history,
413
- workflow_id.clone(),
414
- run_id.clone(),
415
- page_token.clone()
416
- )
417
- }
418
-
419
- async fn respond_legacy_query(
420
- &self,
421
- task_token: TaskToken,
422
- query_result: QueryResult,
423
- ) -> Result<RespondQueryTaskCompletedResponse> {
424
- retry_call!(
425
- self,
426
- respond_legacy_query,
427
- task_token.clone(),
428
- query_result.clone()
429
- )
430
- }
431
-
432
- async fn cancel_workflow_execution(
433
- &self,
434
- workflow_id: String,
435
- run_id: Option<String>,
436
- reason: String,
437
- request_id: Option<String>,
438
- ) -> Result<RequestCancelWorkflowExecutionResponse> {
439
- retry_call!(
440
- self,
441
- cancel_workflow_execution,
442
- workflow_id.clone(),
443
- run_id.clone(),
444
- reason.clone(),
445
- request_id.clone()
446
- )
447
- }
448
-
449
- async fn terminate_workflow_execution(
450
- &self,
451
- workflow_id: String,
452
- run_id: Option<String>,
453
- ) -> Result<TerminateWorkflowExecutionResponse> {
454
- retry_call!(
455
- self,
456
- terminate_workflow_execution,
457
- workflow_id.clone(),
458
- run_id.clone()
459
- )
460
- }
461
-
462
- async fn register_namespace(
463
- &self,
464
- options: RegisterNamespaceOptions,
465
- ) -> Result<RegisterNamespaceResponse> {
466
- retry_call!(self, register_namespace, options.clone())
467
- }
468
-
469
- async fn list_namespaces(&self) -> Result<ListNamespacesResponse> {
470
- retry_call!(self, list_namespaces,)
471
- }
472
-
473
- async fn describe_namespace(&self, namespace: Namespace) -> Result<DescribeNamespaceResponse> {
474
- retry_call!(self, describe_namespace, namespace.clone())
475
- }
476
-
477
- async fn list_open_workflow_executions(
478
- &self,
479
- maximum_page_size: i32,
480
- next_page_token: Vec<u8>,
481
- start_time_filter: Option<StartTimeFilter>,
482
- filters: Option<ListOpenFilters>,
483
- ) -> Result<ListOpenWorkflowExecutionsResponse> {
484
- retry_call!(
485
- self,
486
- list_open_workflow_executions,
487
- maximum_page_size,
488
- next_page_token.clone(),
489
- start_time_filter.clone(),
490
- filters.clone()
491
- )
492
- }
493
-
494
- async fn list_closed_workflow_executions(
495
- &self,
496
- maximum_page_size: i32,
497
- next_page_token: Vec<u8>,
498
- start_time_filter: Option<StartTimeFilter>,
499
- filters: Option<ListClosedFilters>,
500
- ) -> Result<ListClosedWorkflowExecutionsResponse> {
501
- retry_call!(
502
- self,
503
- list_closed_workflow_executions,
504
- maximum_page_size,
505
- next_page_token.clone(),
506
- start_time_filter.clone(),
507
- filters.clone()
508
- )
509
- }
510
-
511
- async fn list_workflow_executions(
512
- &self,
513
- page_size: i32,
514
- next_page_token: Vec<u8>,
515
- query: String,
516
- ) -> Result<ListWorkflowExecutionsResponse> {
517
- retry_call!(
518
- self,
519
- list_workflow_executions,
520
- page_size,
521
- next_page_token.clone(),
522
- query.clone()
523
- )
524
- }
525
-
526
- async fn list_archived_workflow_executions(
527
- &self,
528
- page_size: i32,
529
- next_page_token: Vec<u8>,
530
- query: String,
531
- ) -> Result<ListArchivedWorkflowExecutionsResponse> {
532
- retry_call!(
533
- self,
534
- list_archived_workflow_executions,
535
- page_size,
536
- next_page_token.clone(),
537
- query.clone()
538
- )
539
- }
540
-
541
- async fn get_search_attributes(&self) -> Result<GetSearchAttributesResponse> {
542
- retry_call!(self, get_search_attributes)
543
- }
544
-
545
- fn get_options(&self) -> &ClientOptions {
546
- self.client.get_options()
547
- }
548
-
549
- fn namespace(&self) -> &str {
550
- self.client.namespace()
551
- }
552
- }
553
-
554
- #[cfg(test)]
555
- mod tests {
556
- use super::*;
557
- use crate::MockWorkflowClientTrait;
558
- use assert_matches::assert_matches;
559
- use backoff::Clock;
560
- use std::{ops::Add, time::Instant};
561
- use tonic::Status;
562
-
563
- /// Predefined retry configs with low durations to make unit tests faster
564
- const TEST_RETRY_CONFIG: RetryConfig = RetryConfig {
565
- initial_interval: Duration::from_millis(1),
566
- randomization_factor: 0.0,
567
- multiplier: 1.1,
568
- max_interval: Duration::from_millis(2),
569
- max_elapsed_time: None,
570
- max_retries: 10,
571
- };
572
-
573
- #[tokio::test]
574
- async fn non_retryable_errors() {
575
- for code in [
576
- Code::InvalidArgument,
577
- Code::NotFound,
578
- Code::AlreadyExists,
579
- Code::PermissionDenied,
580
- Code::FailedPrecondition,
581
- Code::Cancelled,
582
- Code::DeadlineExceeded,
583
- Code::Unauthenticated,
584
- Code::Unimplemented,
585
- ] {
586
- let mut mock_client = MockWorkflowClientTrait::new();
587
- mock_client
588
- .expect_cancel_activity_task()
589
- .returning(move |_, _| Err(Status::new(code, "non-retryable failure")))
590
- .times(1);
591
- let retry_client = RetryClient::new(mock_client, TEST_RETRY_CONFIG);
592
- let result = retry_client
593
- .cancel_activity_task(vec![1].into(), None)
594
- .await;
595
- // Expecting an error after a single attempt, since there was a non-retryable error.
596
- assert!(result.is_err());
597
- }
598
- }
599
-
600
- struct FixedClock(Instant);
601
- impl Clock for FixedClock {
602
- fn now(&self) -> Instant {
603
- self.0
604
- }
605
- }
606
-
607
- #[tokio::test]
608
- async fn long_poll_non_retryable_errors() {
609
- for code in [
610
- Code::InvalidArgument,
611
- Code::NotFound,
612
- Code::AlreadyExists,
613
- Code::PermissionDenied,
614
- Code::FailedPrecondition,
615
- Code::Unauthenticated,
616
- Code::Unimplemented,
617
- ] {
618
- for call_name in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
619
- let mut err_handler = TonicErrorHandler {
620
- max_retries: TEST_RETRY_CONFIG.max_retries,
621
- call_type: CallType::LongPoll,
622
- call_name,
623
- backoff: TEST_RETRY_CONFIG.into_exp_backoff(FixedClock(Instant::now())),
624
- throttle_backoff: TEST_RETRY_CONFIG
625
- .into_exp_backoff(FixedClock(Instant::now())),
626
- };
627
- let result = err_handler.handle(1, Status::new(code, "Ahh"));
628
- assert_matches!(result, RetryPolicy::WaitRetry(_));
629
- err_handler.backoff.clock.0 = err_handler
630
- .backoff
631
- .clock
632
- .0
633
- .add(LONG_POLL_FATAL_GRACE + Duration::from_secs(1));
634
- let result = err_handler.handle(2, Status::new(code, "Ahh"));
635
- assert_matches!(result, RetryPolicy::ForwardError(_));
636
- }
637
- }
638
- }
639
-
640
- #[tokio::test]
641
- async fn long_poll_retryable_errors_never_fatal() {
642
- for code in RETRYABLE_ERROR_CODES {
643
- for call_name in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
644
- let mut err_handler = TonicErrorHandler {
645
- max_retries: TEST_RETRY_CONFIG.max_retries,
646
- call_type: CallType::LongPoll,
647
- call_name,
648
- backoff: TEST_RETRY_CONFIG.into_exp_backoff(FixedClock(Instant::now())),
649
- throttle_backoff: TEST_RETRY_CONFIG
650
- .into_exp_backoff(FixedClock(Instant::now())),
651
- };
652
- let result = err_handler.handle(1, Status::new(code, "Ahh"));
653
- assert_matches!(result, RetryPolicy::WaitRetry(_));
654
- err_handler.backoff.clock.0 = err_handler
655
- .backoff
656
- .clock
657
- .0
658
- .add(LONG_POLL_FATAL_GRACE + Duration::from_secs(1));
659
- let result = err_handler.handle(2, Status::new(code, "Ahh"));
660
- assert_matches!(result, RetryPolicy::WaitRetry(_));
661
- }
662
- }
663
- }
664
-
665
- #[tokio::test]
666
- async fn retryable_errors() {
667
- // Take out retry exhausted since it gets a special policy which would make this take ages
668
- for code in RETRYABLE_ERROR_CODES
669
- .iter()
670
- .copied()
671
- .filter(|p| p != &Code::ResourceExhausted)
672
- {
673
- let mut mock_client = MockWorkflowClientTrait::new();
674
- mock_client
675
- .expect_cancel_activity_task()
676
- .returning(move |_, _| Err(Status::new(code, "retryable failure")))
677
- .times(3);
678
- mock_client
679
- .expect_cancel_activity_task()
680
- .returning(|_, _| Ok(Default::default()))
681
- .times(1);
682
-
683
- let retry_client = RetryClient::new(mock_client, TEST_RETRY_CONFIG);
684
- let result = retry_client
685
- .cancel_activity_task(vec![1].into(), None)
686
- .await;
687
- // Expecting successful response after retries
688
- assert!(result.is_ok());
689
- }
690
- }
691
-
692
- #[tokio::test]
693
- async fn retry_resource_exhausted() {
694
- let mut err_handler = TonicErrorHandler {
695
- max_retries: TEST_RETRY_CONFIG.max_retries,
696
- call_type: CallType::Normal,
697
- call_name: POLL_WORKFLOW_METH_NAME,
698
- backoff: TEST_RETRY_CONFIG.into_exp_backoff(FixedClock(Instant::now())),
699
- throttle_backoff: RetryConfig {
700
- initial_interval: Duration::from_millis(2),
701
- randomization_factor: 0.0,
702
- multiplier: 4.0,
703
- max_interval: Duration::from_millis(10),
704
- max_elapsed_time: None,
705
- max_retries: 10,
706
- }
707
- .into_exp_backoff(FixedClock(Instant::now())),
708
- };
709
- let result = err_handler.handle(1, Status::new(Code::ResourceExhausted, "leave me alone"));
710
- match result {
711
- RetryPolicy::WaitRetry(duration) => assert_eq!(duration, Duration::from_millis(2)),
712
- _ => panic!(),
713
- }
714
- err_handler.backoff.clock.0 = err_handler.backoff.clock.0.add(Duration::from_millis(10));
715
- err_handler.throttle_backoff.clock.0 = err_handler
716
- .throttle_backoff
717
- .clock
718
- .0
719
- .add(Duration::from_millis(10));
720
- let result = err_handler.handle(2, Status::new(Code::ResourceExhausted, "leave me alone"));
721
- match result {
722
- RetryPolicy::WaitRetry(duration) => assert_eq!(duration, Duration::from_millis(8)),
723
- _ => panic!(),
724
- }
725
- }
726
-
727
- #[tokio::test]
728
- async fn long_poll_retries_forever() {
729
- // A bit odd, but we don't need a real client to test the retry client passes through the
730
- // correct retry config
731
- let fake_retry = RetryClient::new((), TEST_RETRY_CONFIG);
732
- for i in 1..=50 {
733
- for call in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
734
- let mut err_handler = TonicErrorHandler::new(
735
- fake_retry.get_retry_config(call),
736
- fake_retry.get_retry_config(call),
737
- call,
738
- );
739
- let result = err_handler.handle(i, Status::new(Code::Unknown, "Ahh"));
740
- assert_matches!(result, RetryPolicy::WaitRetry(_));
741
- }
742
- }
743
- }
744
-
745
- #[tokio::test]
746
- async fn long_poll_retries_deadline_exceeded() {
747
- let fake_retry = RetryClient::new((), TEST_RETRY_CONFIG);
748
- // For some reason we will get cancelled in these situations occasionally (always?) too
749
- for code in [Code::Cancelled, Code::DeadlineExceeded] {
750
- for call in [POLL_WORKFLOW_METH_NAME, POLL_ACTIVITY_METH_NAME] {
751
- let mut err_handler = TonicErrorHandler::new(
752
- fake_retry.get_retry_config(call),
753
- fake_retry.get_retry_config(call),
754
- call,
755
- );
756
- for i in 1..=5 {
757
- let result = err_handler.handle(i, Status::new(code, "retryable failure"));
758
- assert_matches!(result, RetryPolicy::WaitRetry(_));
759
- }
760
- }
761
- }
762
- }
763
- }