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,1049 +0,0 @@
1
- use crate::{
2
- advance_fut, job_assert, prost_dur,
3
- test_help::{
4
- build_fake_worker, build_mock_pollers, canned_histories, gen_assert_and_reply,
5
- mock_manual_poller, mock_poller, mock_poller_from_resps, mock_worker, poll_and_reply,
6
- single_hist_mock_sg, test_worker_cfg, MockPollCfg, MockWorkerInputs, MocksHolder,
7
- QueueResponse, ResponseType, WorkerExt, WorkflowCachingPolicy, TEST_Q,
8
- },
9
- worker::client::mocks::{mock_manual_workflow_client, mock_workflow_client},
10
- ActivityHeartbeat, Worker, WorkerConfigBuilder,
11
- };
12
- use futures::FutureExt;
13
- use itertools::Itertools;
14
- use std::{
15
- cell::RefCell,
16
- collections::{hash_map::Entry, HashMap, VecDeque},
17
- future,
18
- rc::Rc,
19
- sync::{
20
- atomic::{AtomicUsize, Ordering},
21
- Arc,
22
- },
23
- time::Duration,
24
- };
25
- use temporal_client::WorkflowOptions;
26
- use temporal_sdk::{ActivityOptions, WfContext};
27
- use temporal_sdk_core_api::{
28
- errors::{CompleteActivityError, PollActivityError},
29
- Worker as WorkerTrait,
30
- };
31
- use temporal_sdk_core_protos::{
32
- coresdk::{
33
- activity_result::{
34
- activity_execution_result, activity_resolution, ActivityExecutionResult,
35
- ActivityResolution, Success,
36
- },
37
- activity_task::{activity_task, ActivityTask},
38
- workflow_activation::{workflow_activation_job, ResolveActivity, WorkflowActivationJob},
39
- workflow_commands::{
40
- ActivityCancellationType, CompleteWorkflowExecution, RequestCancelActivity,
41
- ScheduleActivity,
42
- },
43
- workflow_completion::WorkflowActivationCompletion,
44
- ActivityTaskCompletion,
45
- },
46
- temporal::api::{
47
- command::v1::{command::Attributes, ScheduleActivityTaskCommandAttributes},
48
- enums::v1::EventType,
49
- history::v1::{
50
- history_event::Attributes as EventAttributes, ActivityTaskScheduledEventAttributes,
51
- },
52
- workflowservice::v1::{
53
- PollActivityTaskQueueResponse, RecordActivityTaskHeartbeatResponse,
54
- RespondActivityTaskCanceledResponse, RespondActivityTaskCompletedResponse,
55
- RespondActivityTaskFailedResponse, RespondWorkflowTaskCompletedResponse,
56
- },
57
- },
58
- TestHistoryBuilder, DEFAULT_WORKFLOW_TYPE,
59
- };
60
- use temporal_sdk_core_test_utils::{fanout_tasks, start_timer_cmd, TestWorker};
61
- use tokio::{sync::Barrier, time::sleep};
62
- use tokio_util::sync::CancellationToken;
63
-
64
- #[tokio::test]
65
- async fn max_activities_respected() {
66
- let _task_q = "q";
67
- let mut tasks = VecDeque::from(vec![
68
- PollActivityTaskQueueResponse {
69
- task_token: vec![1],
70
- activity_id: "act1".to_string(),
71
- ..Default::default()
72
- },
73
- PollActivityTaskQueueResponse {
74
- task_token: vec![2],
75
- activity_id: "act2".to_string(),
76
- ..Default::default()
77
- },
78
- PollActivityTaskQueueResponse {
79
- task_token: vec![3],
80
- activity_id: "act3".to_string(),
81
- ..Default::default()
82
- },
83
- ]);
84
- let mut mock_client = mock_workflow_client();
85
- mock_client
86
- .expect_poll_activity_task()
87
- .times(3)
88
- .returning(move |_, _| Ok(tasks.pop_front().unwrap()));
89
- mock_client
90
- .expect_complete_activity_task()
91
- .returning(|_, _| Ok(RespondActivityTaskCompletedResponse::default()));
92
-
93
- let worker = Worker::new_test(
94
- test_worker_cfg()
95
- .max_outstanding_activities(2_usize)
96
- .build()
97
- .unwrap(),
98
- mock_client,
99
- );
100
-
101
- // We allow two outstanding activities, therefore first two polls should return right away
102
- let r1 = worker.poll_activity_task().await.unwrap();
103
- let _r2 = worker.poll_activity_task().await.unwrap();
104
- // Third poll should block until we complete one of the first two. To ensure this, manually
105
- // poll it a bunch to see it's not resolving.
106
- let poll_fut = worker.poll_activity_task();
107
- advance_fut!(poll_fut);
108
- worker
109
- .complete_activity_task(ActivityTaskCompletion {
110
- task_token: r1.task_token,
111
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
112
- })
113
- .await
114
- .unwrap();
115
- poll_fut.await.unwrap();
116
- }
117
-
118
- #[tokio::test]
119
- async fn activity_not_found_returns_ok() {
120
- let mut mock_client = mock_workflow_client();
121
- // Mock won't even be called, since we weren't tracking activity
122
- mock_client.expect_complete_activity_task().times(0);
123
-
124
- let core = mock_worker(MocksHolder::from_client_with_activities(mock_client, []));
125
-
126
- core.complete_activity_task(ActivityTaskCompletion {
127
- task_token: vec![1],
128
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
129
- })
130
- .await
131
- .unwrap();
132
- core.drain_activity_poller_and_shutdown().await;
133
- }
134
-
135
- #[tokio::test]
136
- async fn heartbeats_report_cancels_only_once() {
137
- let mut mock_client = mock_workflow_client();
138
- mock_client
139
- .expect_record_activity_heartbeat()
140
- .times(2)
141
- .returning(|_, _| {
142
- Ok(RecordActivityTaskHeartbeatResponse {
143
- cancel_requested: true,
144
- })
145
- });
146
- mock_client
147
- .expect_complete_activity_task()
148
- .times(1)
149
- .returning(|_, _| Ok(RespondActivityTaskCompletedResponse::default()));
150
- mock_client
151
- .expect_cancel_activity_task()
152
- .times(1)
153
- .returning(|_, _| Ok(RespondActivityTaskCanceledResponse::default()));
154
-
155
- let core = mock_worker(MocksHolder::from_client_with_activities(
156
- mock_client,
157
- [
158
- PollActivityTaskQueueResponse {
159
- task_token: vec![1],
160
- activity_id: "act1".to_string(),
161
- heartbeat_timeout: Some(prost_dur!(from_millis(1))),
162
- ..Default::default()
163
- }
164
- .into(),
165
- PollActivityTaskQueueResponse {
166
- task_token: vec![2],
167
- activity_id: "act2".to_string(),
168
- heartbeat_timeout: Some(prost_dur!(from_millis(1))),
169
- ..Default::default()
170
- }
171
- .into(),
172
- ],
173
- ));
174
-
175
- let act = core.poll_activity_task().await.unwrap();
176
- core.record_activity_heartbeat(ActivityHeartbeat {
177
- task_token: act.task_token.clone(),
178
- details: vec![vec![1_u8, 2, 3].into()],
179
- });
180
- // We have to wait a beat for the heartbeat to be processed
181
- sleep(Duration::from_millis(10)).await;
182
- let act = core.poll_activity_task().await.unwrap();
183
- assert_matches!(
184
- &act,
185
- ActivityTask {
186
- task_token,
187
- variant: Some(activity_task::Variant::Cancel(_)),
188
- ..
189
- } => { task_token == &vec![1] }
190
- );
191
-
192
- // Verify if we try to record another heartbeat for this task we do not issue a double cancel
193
- // Allow heartbeat delay to elapse
194
- sleep(Duration::from_millis(10)).await;
195
- core.record_activity_heartbeat(ActivityHeartbeat {
196
- task_token: act.task_token.clone(),
197
- details: vec![vec![1_u8, 2, 3].into()],
198
- });
199
- // Wait delay again to flush heartbeat
200
- sleep(Duration::from_millis(10)).await;
201
- // Now complete it as cancelled
202
- core.complete_activity_task(ActivityTaskCompletion {
203
- task_token: act.task_token,
204
-
205
- result: Some(ActivityExecutionResult::cancel_from_details(None)),
206
- })
207
- .await
208
- .unwrap();
209
- // Since cancels always come before new tasks, if we get a new non-cancel task, we did not
210
- // double-issue cancels.
211
- let act = core.poll_activity_task().await.unwrap();
212
- assert_matches!(
213
- &act,
214
- ActivityTask {
215
- task_token,
216
- variant: Some(activity_task::Variant::Start(_)),
217
- ..
218
- } => { task_token == &[2] }
219
- );
220
- // Complete it so shutdown goes through
221
- core.complete_activity_task(ActivityTaskCompletion {
222
- task_token: act.task_token,
223
-
224
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
225
- })
226
- .await
227
- .unwrap();
228
- core.drain_activity_poller_and_shutdown().await;
229
- }
230
-
231
- #[tokio::test]
232
- async fn activity_cancel_interrupts_poll() {
233
- let mut mock_poller = mock_manual_poller();
234
- let shutdown_token = CancellationToken::new();
235
- let shutdown_token_clone = shutdown_token.clone();
236
- let mut poll_resps = VecDeque::from(vec![
237
- async {
238
- Some(Ok(PollActivityTaskQueueResponse {
239
- task_token: vec![1],
240
- heartbeat_timeout: Some(prost_dur!(from_secs(1))),
241
- ..Default::default()
242
- }))
243
- }
244
- .boxed(),
245
- async {
246
- tokio::time::sleep(Duration::from_millis(500)).await;
247
- Some(Ok(Default::default()))
248
- }
249
- .boxed(),
250
- async move {
251
- shutdown_token.cancelled().await;
252
- None
253
- }
254
- .boxed(),
255
- ]);
256
- mock_poller
257
- .expect_poll()
258
- .times(3)
259
- .returning(move || poll_resps.pop_front().unwrap());
260
-
261
- let mut mock_client = mock_manual_workflow_client();
262
- mock_client
263
- .expect_record_activity_heartbeat()
264
- .times(1)
265
- .returning(|_, _| {
266
- async {
267
- Ok(RecordActivityTaskHeartbeatResponse {
268
- cancel_requested: true,
269
- })
270
- }
271
- .boxed()
272
- });
273
- mock_client
274
- .expect_complete_activity_task()
275
- .times(1)
276
- .returning(|_, _| async { Ok(RespondActivityTaskCompletedResponse::default()) }.boxed());
277
-
278
- let mw = MockWorkerInputs {
279
- act_poller: Some(Box::from(mock_poller)),
280
- ..Default::default()
281
- };
282
- let core = mock_worker(MocksHolder::from_mock_worker(mock_client, mw));
283
- let last_finisher = AtomicUsize::new(0);
284
- // Perform first poll to get the activity registered
285
- let act = core.poll_activity_task().await.unwrap();
286
- // Poll should block until heartbeat is sent, issuing the cancel, and interrupting the poll
287
- tokio::join! {
288
- async {
289
- core.record_activity_heartbeat(ActivityHeartbeat {
290
- task_token: act.task_token,
291
-
292
- details: vec![vec![1_u8, 2, 3].into()],
293
- });
294
- last_finisher.store(1, Ordering::SeqCst);
295
- },
296
- async {
297
- let act = core.poll_activity_task().await.unwrap();
298
- // Must complete this activity for shutdown to finish
299
- core.complete_activity_task(
300
- ActivityTaskCompletion {
301
- task_token: act.task_token,
302
-
303
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
304
- }
305
- ).await.unwrap();
306
- last_finisher.store(2, Ordering::SeqCst);
307
- shutdown_token_clone.cancel();
308
- }
309
- };
310
- // So that we know we blocked
311
- assert_eq!(last_finisher.load(Ordering::Acquire), 2);
312
- core.drain_activity_poller_and_shutdown().await;
313
- }
314
-
315
- #[tokio::test]
316
- async fn activity_poll_timeout_retries() {
317
- let mock_client = mock_workflow_client();
318
- let mut calls = 0;
319
- let mut mock_act_poller = mock_poller();
320
- mock_act_poller.expect_poll().times(3).returning(move || {
321
- calls += 1;
322
- if calls <= 2 {
323
- Some(Ok(PollActivityTaskQueueResponse::default()))
324
- } else {
325
- Some(Ok(PollActivityTaskQueueResponse {
326
- task_token: b"hello!".to_vec(),
327
- ..Default::default()
328
- }))
329
- }
330
- });
331
- let mw = MockWorkerInputs {
332
- act_poller: Some(Box::from(mock_act_poller)),
333
- ..Default::default()
334
- };
335
- let core = mock_worker(MocksHolder::from_mock_worker(mock_client, mw));
336
- let r = core.poll_activity_task().await.unwrap();
337
- assert_matches!(r.task_token.as_slice(), b"hello!");
338
- }
339
-
340
- #[tokio::test]
341
- async fn many_concurrent_heartbeat_cancels() {
342
- // Run a whole bunch of activities in parallel, having the server return cancellations for
343
- // them after a few successful heartbeats
344
- const CONCURRENCY_NUM: usize = 5;
345
-
346
- let mut mock_client = mock_manual_workflow_client();
347
- let mut poll_resps = VecDeque::from(
348
- (0..CONCURRENCY_NUM)
349
- .map(|i| {
350
- async move {
351
- Ok(PollActivityTaskQueueResponse {
352
- task_token: i.to_be_bytes().to_vec(),
353
- heartbeat_timeout: Some(prost_dur!(from_millis(200))),
354
- ..Default::default()
355
- })
356
- }
357
- .boxed()
358
- })
359
- .collect::<Vec<_>>(),
360
- );
361
- poll_resps.push_back(
362
- async {
363
- future::pending::<()>().await;
364
- unreachable!()
365
- }
366
- .boxed(),
367
- );
368
- let mut calls_map = HashMap::<_, i32>::new();
369
- mock_client
370
- .expect_poll_activity_task()
371
- .returning(move |_, _| poll_resps.pop_front().unwrap());
372
- mock_client
373
- .expect_cancel_activity_task()
374
- .returning(move |_, _| async move { Ok(Default::default()) }.boxed());
375
- mock_client
376
- .expect_record_activity_heartbeat()
377
- .returning(move |tt, _| {
378
- let calls = match calls_map.entry(tt) {
379
- Entry::Occupied(mut e) => {
380
- *e.get_mut() += 1;
381
- *e.get()
382
- }
383
- Entry::Vacant(v) => *v.insert(1),
384
- };
385
- async move {
386
- if calls < 5 {
387
- Ok(RecordActivityTaskHeartbeatResponse {
388
- cancel_requested: false,
389
- })
390
- } else {
391
- Ok(RecordActivityTaskHeartbeatResponse {
392
- cancel_requested: true,
393
- })
394
- }
395
- }
396
- .boxed()
397
- });
398
-
399
- let worker = &Worker::new_test(
400
- test_worker_cfg()
401
- .max_outstanding_activities(CONCURRENCY_NUM)
402
- // Only 1 poll at a time to avoid over-polling and running out of responses
403
- .max_concurrent_at_polls(1_usize)
404
- .build()
405
- .unwrap(),
406
- mock_client,
407
- );
408
-
409
- // Poll all activities first so they are registered
410
- for _ in 0..CONCURRENCY_NUM {
411
- worker.poll_activity_task().await.unwrap();
412
- }
413
-
414
- // Spawn "activities"
415
- fanout_tasks(CONCURRENCY_NUM, |i| async move {
416
- let task_token = i.to_be_bytes().to_vec();
417
- for _ in 0..12 {
418
- worker.record_activity_heartbeat(ActivityHeartbeat {
419
- task_token: task_token.clone(),
420
- details: vec![],
421
- });
422
- sleep(Duration::from_millis(50)).await;
423
- }
424
- })
425
- .await;
426
-
427
- // Read all the cancellations and reply to them concurrently
428
- fanout_tasks(CONCURRENCY_NUM, |_| async move {
429
- let r = worker.poll_activity_task().await.unwrap();
430
- assert_matches!(
431
- r,
432
- ActivityTask {
433
- variant: Some(activity_task::Variant::Cancel(_)),
434
- ..
435
- }
436
- );
437
- worker
438
- .complete_activity_task(ActivityTaskCompletion {
439
- task_token: r.task_token.clone(),
440
- result: Some(ActivityExecutionResult::cancel_from_details(None)),
441
- })
442
- .await
443
- .unwrap();
444
- })
445
- .await;
446
-
447
- worker.drain_activity_poller_and_shutdown().await;
448
- }
449
-
450
- #[tokio::test]
451
- async fn activity_timeout_no_double_resolve() {
452
- let t = canned_histories::activity_double_resolve_repro();
453
- let core = build_fake_worker("fake_wf_id", t, [3]);
454
- let activity_id = 1;
455
-
456
- poll_and_reply(
457
- &core,
458
- WorkflowCachingPolicy::NonSticky,
459
- &[
460
- gen_assert_and_reply(
461
- &job_assert!(workflow_activation_job::Variant::StartWorkflow(_)),
462
- vec![ScheduleActivity {
463
- seq: activity_id,
464
- activity_id: activity_id.to_string(),
465
- cancellation_type: ActivityCancellationType::TryCancel as i32,
466
- ..Default::default()
467
- }
468
- .into()],
469
- ),
470
- gen_assert_and_reply(
471
- &job_assert!(workflow_activation_job::Variant::SignalWorkflow(_)),
472
- vec![
473
- RequestCancelActivity { seq: activity_id }.into(),
474
- start_timer_cmd(2, Duration::from_secs(1)),
475
- ],
476
- ),
477
- gen_assert_and_reply(
478
- &job_assert!(workflow_activation_job::Variant::ResolveActivity(
479
- ResolveActivity {
480
- result: Some(ActivityResolution {
481
- status: Some(activity_resolution::Status::Cancelled(..)),
482
- }),
483
- ..
484
- }
485
- )),
486
- vec![],
487
- ),
488
- gen_assert_and_reply(
489
- &job_assert!(
490
- workflow_activation_job::Variant::SignalWorkflow(_),
491
- workflow_activation_job::Variant::FireTimer(_)
492
- ),
493
- vec![CompleteWorkflowExecution { result: None }.into()],
494
- ),
495
- ],
496
- )
497
- .await;
498
-
499
- core.drain_pollers_and_shutdown().await;
500
- }
501
-
502
- #[tokio::test]
503
- async fn can_heartbeat_acts_during_shutdown() {
504
- let mut mock_client = mock_workflow_client();
505
- mock_client
506
- .expect_record_activity_heartbeat()
507
- .times(1)
508
- .returning(|_, _| {
509
- Ok(RecordActivityTaskHeartbeatResponse {
510
- cancel_requested: false,
511
- })
512
- });
513
- mock_client
514
- .expect_complete_activity_task()
515
- .times(1)
516
- .returning(|_, _| Ok(RespondActivityTaskCompletedResponse::default()));
517
-
518
- let core = mock_worker(MocksHolder::from_client_with_activities(
519
- mock_client,
520
- [PollActivityTaskQueueResponse {
521
- task_token: vec![1],
522
- activity_id: "act1".to_string(),
523
- heartbeat_timeout: Some(prost_dur!(from_millis(1))),
524
- ..Default::default()
525
- }
526
- .into()],
527
- ));
528
-
529
- let act = core.poll_activity_task().await.unwrap();
530
- // Make sure shutdown has progressed before trying to record heartbeat / complete
531
- let shutdown_fut = core.shutdown();
532
- advance_fut!(shutdown_fut);
533
- core.record_activity_heartbeat(ActivityHeartbeat {
534
- task_token: act.task_token.clone(),
535
-
536
- details: vec![vec![1_u8, 2, 3].into()],
537
- });
538
- core.complete_activity_task(ActivityTaskCompletion {
539
- task_token: act.task_token,
540
-
541
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
542
- })
543
- .await
544
- .unwrap();
545
- core.drain_activity_poller_and_shutdown().await;
546
- }
547
-
548
- /// Verifies that if a user has tried to record a heartbeat and then immediately after failed the
549
- /// activity, that we flush those details before reporting the failure completion.
550
- #[tokio::test]
551
- async fn complete_act_with_fail_flushes_heartbeat() {
552
- let last_hb = 50;
553
- let mut mock_client = mock_workflow_client();
554
- let last_seen_payload = Rc::new(RefCell::new(None));
555
- let lsp = last_seen_payload.clone();
556
- mock_client
557
- .expect_record_activity_heartbeat()
558
- // Two times b/c we always record the first heartbeat, and we'll flush the last
559
- .times(2)
560
- .returning_st(move |_, payload| {
561
- *lsp.borrow_mut() = payload;
562
- Ok(RecordActivityTaskHeartbeatResponse {
563
- cancel_requested: false,
564
- })
565
- });
566
- mock_client
567
- .expect_fail_activity_task()
568
- .times(1)
569
- .returning(|_, _| Ok(RespondActivityTaskFailedResponse::default()));
570
-
571
- let core = mock_worker(MocksHolder::from_client_with_activities(
572
- mock_client,
573
- [PollActivityTaskQueueResponse {
574
- task_token: vec![1],
575
- activity_id: "act1".to_string(),
576
- heartbeat_timeout: Some(prost_dur!(from_secs(10))),
577
- ..Default::default()
578
- }
579
- .into()],
580
- ));
581
-
582
- let act = core.poll_activity_task().await.unwrap();
583
- // Record a bunch of heartbeats
584
- for i in 1..=last_hb {
585
- core.record_activity_heartbeat(ActivityHeartbeat {
586
- task_token: act.task_token.clone(),
587
- details: vec![vec![i].into()],
588
- });
589
- }
590
- core.complete_activity_task(ActivityTaskCompletion {
591
- task_token: act.task_token.clone(),
592
- result: Some(ActivityExecutionResult::fail("Ahh".into())),
593
- })
594
- .await
595
- .unwrap();
596
- core.drain_activity_poller_and_shutdown().await;
597
-
598
- // Verify the last seen call to record a heartbeat had the last detail payload
599
- let last_seen_payload = &last_seen_payload.take().unwrap().payloads[0];
600
- assert_eq!(last_seen_payload.data, &[last_hb]);
601
- }
602
-
603
- #[tokio::test]
604
- async fn max_tq_acts_set_passed_to_poll_properly() {
605
- let rate = 9.28;
606
- let mut mock_client = mock_workflow_client();
607
- mock_client
608
- .expect_poll_activity_task()
609
- .returning(move |_, tps| {
610
- assert_eq!(tps, Some(rate));
611
- Ok(PollActivityTaskQueueResponse {
612
- task_token: vec![1],
613
- ..Default::default()
614
- })
615
- });
616
-
617
- let cfg = WorkerConfigBuilder::default()
618
- .namespace("enchi")
619
- .task_queue("cat")
620
- .max_concurrent_at_polls(1_usize)
621
- .worker_build_id("test_bin_id")
622
- .max_task_queue_activities_per_second(rate)
623
- .build()
624
- .unwrap();
625
- let worker = Worker::new_test(cfg, mock_client);
626
- worker.poll_activity_task().await.unwrap();
627
- }
628
-
629
- /// This test doesn't test the real worker config since [mock_worker] bypasses the worker
630
- /// constructor, [mock_worker] will not pass an activity poller to the worker when
631
- /// `no_remote_activities` is set to `true`.
632
- #[tokio::test]
633
- async fn no_eager_activities_requested_when_worker_options_disable_remote_activities() {
634
- let wfid = "fake_wf_id";
635
- let mut t = TestHistoryBuilder::default();
636
- t.add_by_type(EventType::WorkflowExecutionStarted);
637
- t.add_full_wf_task();
638
- let scheduled_event_id = t.add_activity_task_scheduled("act_id");
639
- let started_event_id = t.add_activity_task_started(scheduled_event_id);
640
- t.add_activity_task_completed(scheduled_event_id, started_event_id, b"hi".into());
641
- t.add_full_wf_task();
642
- t.add_workflow_execution_completed();
643
- let num_eager_requested = Arc::new(AtomicUsize::new(0));
644
- // Clone it to move into the callback below
645
- let num_eager_requested_clone = num_eager_requested.clone();
646
-
647
- let mut mock = mock_workflow_client();
648
- mock.expect_complete_workflow_task()
649
- .times(1)
650
- .returning(move |req| {
651
- // Store the number of eager activities requested to be checked below
652
- let count = req
653
- .commands
654
- .into_iter()
655
- .filter(|c| match c.attributes {
656
- Some(Attributes::ScheduleActivityTaskCommandAttributes(
657
- ScheduleActivityTaskCommandAttributes {
658
- request_eager_execution,
659
- ..
660
- },
661
- )) => request_eager_execution,
662
- _ => false,
663
- })
664
- .count();
665
- num_eager_requested_clone.store(count, Ordering::Relaxed);
666
- Ok(RespondWorkflowTaskCompletedResponse {
667
- workflow_task: None,
668
- activity_tasks: vec![],
669
- reset_history_event_id: 0,
670
- })
671
- });
672
- let mut mock = single_hist_mock_sg(wfid, t, [1], mock, true);
673
- let mut mock_poller = mock_manual_poller();
674
- mock_poller
675
- .expect_poll()
676
- .returning(|| futures::future::pending().boxed());
677
- mock.set_act_poller(Box::new(mock_poller));
678
- mock.worker_cfg(|wc| {
679
- wc.max_cached_workflows = 2;
680
- wc.no_remote_activities = true;
681
- });
682
- let core = mock_worker(mock);
683
-
684
- // Test start
685
- let wf_task = core.poll_workflow_activation().await.unwrap();
686
- let cmds = vec![ScheduleActivity {
687
- seq: 1,
688
- activity_id: "act_id".to_string(),
689
- task_queue: TEST_Q.to_string(),
690
- cancellation_type: ActivityCancellationType::TryCancel as i32,
691
- ..Default::default()
692
- }
693
- .into()];
694
-
695
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
696
- wf_task.run_id,
697
- cmds,
698
- ))
699
- .await
700
- .unwrap();
701
-
702
- core.drain_pollers_and_shutdown().await;
703
-
704
- assert_eq!(num_eager_requested.load(Ordering::Relaxed), 0);
705
- }
706
-
707
- /// This test verifies that activity tasks which come as replies to completing a WFT are properly
708
- /// delivered via polling.
709
- #[tokio::test]
710
- async fn activity_tasks_from_completion_are_delivered() {
711
- // Construct the history - one task with 5 activities, 4 on the same task queue, and 1 on a
712
- // different queue, 3 activities will be executed eagerly as specified by the
713
- // MAX_EAGER_ACTIVITY_RESERVATIONS_PER_WORKFLOW_TASK constant.
714
- let wfid = "fake_wf_id";
715
- let mut t = TestHistoryBuilder::default();
716
- t.add_by_type(EventType::WorkflowExecutionStarted);
717
- t.add_full_wf_task();
718
- let act_same_queue_scheduled_ids = (1..4)
719
- .map(|i| t.add_activity_task_scheduled(format!("act_id_{i}_same_queue")))
720
- .collect_vec();
721
- t.add_activity_task_scheduled("act_id_same_queue_not_eager");
722
- t.add_activity_task_scheduled("act_id_different_queue");
723
- for scheduled_event_id in act_same_queue_scheduled_ids {
724
- let started_event_id = t.add_activity_task_started(scheduled_event_id);
725
- t.add_activity_task_completed(scheduled_event_id, started_event_id, b"hi".into());
726
- }
727
- t.add_full_wf_task();
728
- t.add_workflow_execution_completed();
729
-
730
- let num_eager_requested = Arc::new(AtomicUsize::new(0));
731
- // Clone it to move into the callback below
732
- let num_eager_requested_clone = num_eager_requested.clone();
733
-
734
- let mut mock = mock_workflow_client();
735
- mock.expect_complete_workflow_task()
736
- .times(1)
737
- .returning(move |req| {
738
- // Store the number of eager activities requested to be checked below
739
- let count = req
740
- .commands
741
- .into_iter()
742
- .filter(|c| match c.attributes {
743
- Some(Attributes::ScheduleActivityTaskCommandAttributes(
744
- ScheduleActivityTaskCommandAttributes {
745
- request_eager_execution,
746
- ..
747
- },
748
- )) => request_eager_execution,
749
- _ => false,
750
- })
751
- .count();
752
- num_eager_requested_clone.store(count, Ordering::Relaxed);
753
- Ok(RespondWorkflowTaskCompletedResponse {
754
- workflow_task: None,
755
- activity_tasks: (1..4)
756
- .map(|i| PollActivityTaskQueueResponse {
757
- task_token: vec![i],
758
- activity_id: format!("act_id_{i}_same_queue"),
759
- ..Default::default()
760
- })
761
- .collect_vec(),
762
- reset_history_event_id: 0,
763
- })
764
- });
765
- mock.expect_complete_activity_task()
766
- .times(3)
767
- .returning(|_, _| Ok(RespondActivityTaskCompletedResponse::default()));
768
- let mut mock = single_hist_mock_sg(wfid, t, [1], mock, true);
769
- let act_tasks: Vec<QueueResponse<PollActivityTaskQueueResponse>> = vec![];
770
- mock.set_act_poller(mock_poller_from_resps(act_tasks));
771
- mock.worker_cfg(|wc| wc.max_cached_workflows = 2);
772
- let core = mock_worker(mock);
773
-
774
- // Test start
775
- let wf_task = core.poll_workflow_activation().await.unwrap();
776
- let mut cmds = (1..4)
777
- .map(|seq| {
778
- ScheduleActivity {
779
- seq,
780
- activity_id: format!("act_id_{seq}_same_queue"),
781
- task_queue: TEST_Q.to_string(),
782
- cancellation_type: ActivityCancellationType::TryCancel as i32,
783
- ..Default::default()
784
- }
785
- .into()
786
- })
787
- .collect_vec();
788
- cmds.push(
789
- ScheduleActivity {
790
- seq: 4,
791
- activity_id: "act_id_same_queue_not_eager".to_string(),
792
- task_queue: TEST_Q.to_string(),
793
- cancellation_type: ActivityCancellationType::TryCancel as i32,
794
- ..Default::default()
795
- }
796
- .into(),
797
- );
798
- cmds.push(
799
- ScheduleActivity {
800
- seq: 5,
801
- activity_id: "act_id_different_queue".to_string(),
802
- task_queue: "different_queue".to_string(),
803
- cancellation_type: ActivityCancellationType::Abandon as i32,
804
- ..Default::default()
805
- }
806
- .into(),
807
- );
808
-
809
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
810
- wf_task.run_id,
811
- cmds,
812
- ))
813
- .await
814
- .unwrap();
815
-
816
- // We should see the 3 eager activities when we poll now
817
- for i in 1..4 {
818
- let act_task = core.poll_activity_task().await.unwrap();
819
- assert_eq!(act_task.task_token, vec![i]);
820
-
821
- core.complete_activity_task(ActivityTaskCompletion {
822
- task_token: act_task.task_token.clone(),
823
- result: Some(ActivityExecutionResult::ok("hi".into())),
824
- })
825
- .await
826
- .unwrap();
827
- }
828
-
829
- core.drain_activity_poller_and_shutdown().await;
830
-
831
- // Verify only a single eager activity was scheduled (the one on our worker's task queue)
832
- assert_eq!(num_eager_requested.load(Ordering::Relaxed), 3);
833
- }
834
-
835
- #[tokio::test]
836
- async fn activity_tasks_from_completion_reserve_slots() {
837
- let wf_id = "fake_wf_id";
838
- let mut t = TestHistoryBuilder::default();
839
- t.add_by_type(EventType::WorkflowExecutionStarted);
840
- t.add_full_wf_task();
841
- let schedid = t.add(EventAttributes::ActivityTaskScheduledEventAttributes(
842
- ActivityTaskScheduledEventAttributes {
843
- activity_id: "1".to_string(),
844
- activity_type: Some("act1".into()),
845
- ..Default::default()
846
- },
847
- ));
848
- let startid = t.add_activity_task_started(schedid);
849
- t.add_activity_task_completed(schedid, startid, b"hi".into());
850
- t.add_full_wf_task();
851
- let schedid = t.add(EventAttributes::ActivityTaskScheduledEventAttributes(
852
- ActivityTaskScheduledEventAttributes {
853
- activity_id: "2".to_string(),
854
- activity_type: Some("act2".into()),
855
- ..Default::default()
856
- },
857
- ));
858
- let startid = t.add_activity_task_started(schedid);
859
- t.add_activity_task_completed(schedid, startid, b"hi".into());
860
- t.add_full_wf_task();
861
- t.add_workflow_execution_completed();
862
-
863
- let mut mock = mock_workflow_client();
864
- // Set up two tasks to be returned via normal activity polling
865
- let act_tasks = VecDeque::from(vec![
866
- PollActivityTaskQueueResponse {
867
- task_token: vec![1],
868
- activity_id: "act1".to_string(),
869
- ..Default::default()
870
- }
871
- .into(),
872
- PollActivityTaskQueueResponse {
873
- task_token: vec![2],
874
- activity_id: "act2".to_string(),
875
- ..Default::default()
876
- }
877
- .into(),
878
- ]);
879
- mock.expect_complete_activity_task()
880
- .times(2)
881
- .returning(|_, _| Ok(RespondActivityTaskCompletedResponse::default()));
882
- let barr: &'static Barrier = Box::leak(Box::new(Barrier::new(2)));
883
- let mut mh = MockPollCfg::from_resp_batches(
884
- wf_id,
885
- t,
886
- [
887
- ResponseType::ToTaskNum(1),
888
- // We don't want the second task to be delivered until *after* the activity tasks
889
- // have been completed, so that the second activity schedule will have slots available
890
- ResponseType::UntilResolved(
891
- async {
892
- barr.wait().await;
893
- barr.wait().await;
894
- }
895
- .boxed(),
896
- 2,
897
- ),
898
- ResponseType::AllHistory,
899
- ],
900
- mock,
901
- );
902
- mh.completion_asserts = Some(Box::new(|wftc| {
903
- // Make sure when we see the completion with the schedule act command that it does
904
- // not have the eager execution flag set the first time, and does the second.
905
- if let Some(Attributes::ScheduleActivityTaskCommandAttributes(attrs)) =
906
- wftc.commands.get(0).and_then(|cmd| cmd.attributes.as_ref())
907
- {
908
- if attrs.activity_id == "1" {
909
- assert!(!attrs.request_eager_execution);
910
- } else {
911
- assert!(attrs.request_eager_execution);
912
- }
913
- }
914
- }));
915
- let mut mock = build_mock_pollers(mh);
916
- mock.worker_cfg(|cfg| {
917
- cfg.max_cached_workflows = 2;
918
- cfg.max_outstanding_activities = 2;
919
- });
920
- mock.set_act_poller(mock_poller_from_resps(act_tasks));
921
- let core = Arc::new(mock_worker(mock));
922
- let mut worker = TestWorker::new(core.clone(), TEST_Q.to_string());
923
-
924
- // First poll for activities twice, occupying both slots
925
- let at1 = core.poll_activity_task().await.unwrap();
926
- let at2 = core.poll_activity_task().await.unwrap();
927
- let workflow_complete_token = CancellationToken::new();
928
- let workflow_complete_token_clone = workflow_complete_token.clone();
929
-
930
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, move |ctx: WfContext| {
931
- let complete_token = workflow_complete_token.clone();
932
- async move {
933
- ctx.activity(ActivityOptions {
934
- activity_type: "act1".to_string(),
935
- ..Default::default()
936
- })
937
- .await;
938
- ctx.activity(ActivityOptions {
939
- activity_type: "act2".to_string(),
940
- ..Default::default()
941
- })
942
- .await;
943
- complete_token.cancel();
944
- Ok(().into())
945
- }
946
- });
947
-
948
- worker
949
- .submit_wf(
950
- wf_id.to_owned(),
951
- DEFAULT_WORKFLOW_TYPE,
952
- vec![],
953
- WorkflowOptions::default(),
954
- )
955
- .await
956
- .unwrap();
957
- let act_completer = async {
958
- barr.wait().await;
959
- core.complete_activity_task(ActivityTaskCompletion {
960
- task_token: at1.task_token,
961
- result: Some(ActivityExecutionResult::ok("hi".into())),
962
- })
963
- .await
964
- .unwrap();
965
- core.complete_activity_task(ActivityTaskCompletion {
966
- task_token: at2.task_token,
967
- result: Some(ActivityExecutionResult::ok("hi".into())),
968
- })
969
- .await
970
- .unwrap();
971
- barr.wait().await;
972
- // Wait for workflow to complete in order for all eager activities to be requested before shutting down.
973
- // After shutdown, no eager activities slots can be allocated.
974
- workflow_complete_token_clone.cancelled().await;
975
- core.initiate_shutdown();
976
- // Even though this test requests eager activity tasks, none are returned in poll responses.
977
- let err = core.poll_activity_task().await.unwrap_err();
978
- assert_matches!(err, PollActivityError::ShutDown);
979
- };
980
- // This wf poll should *not* set the flag that it wants tasks back since both slots are
981
- // occupied
982
- let run_fut = async { worker.run_until_done().await.unwrap() };
983
- tokio::join!(run_fut, act_completer);
984
- }
985
-
986
- #[tokio::test]
987
- async fn retryable_net_error_exhaustion_is_nonfatal() {
988
- let mut mock_client = mock_workflow_client();
989
- mock_client
990
- .expect_complete_activity_task()
991
- .times(1)
992
- .returning(|_, _| Err(tonic::Status::internal("retryable error")));
993
-
994
- let core = mock_worker(MocksHolder::from_client_with_activities(
995
- mock_client,
996
- [PollActivityTaskQueueResponse {
997
- task_token: vec![1],
998
- activity_id: "act1".to_string(),
999
- heartbeat_timeout: Some(prost_dur!(from_secs(10))),
1000
- ..Default::default()
1001
- }
1002
- .into()],
1003
- ));
1004
-
1005
- let act = core.poll_activity_task().await.unwrap();
1006
- core.complete_activity_task(ActivityTaskCompletion {
1007
- task_token: act.task_token,
1008
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
1009
- })
1010
- .await
1011
- .unwrap();
1012
- core.drain_activity_poller_and_shutdown().await;
1013
- }
1014
-
1015
- #[tokio::test]
1016
- async fn cant_complete_activity_with_unset_result_payload() {
1017
- let mut mock_client = mock_workflow_client();
1018
- mock_client
1019
- .expect_poll_activity_task()
1020
- .returning(move |_, _| {
1021
- Ok(PollActivityTaskQueueResponse {
1022
- task_token: vec![1],
1023
- ..Default::default()
1024
- })
1025
- });
1026
-
1027
- let cfg = WorkerConfigBuilder::default()
1028
- .namespace("enchi")
1029
- .task_queue("cat")
1030
- .worker_build_id("enchi_loves_salmon")
1031
- .build()
1032
- .unwrap();
1033
- let worker = Worker::new_test(cfg, mock_client);
1034
- let t = worker.poll_activity_task().await.unwrap();
1035
- let res = worker
1036
- .complete_activity_task(ActivityTaskCompletion {
1037
- task_token: t.task_token,
1038
- result: Some(ActivityExecutionResult {
1039
- status: Some(activity_execution_result::Status::Completed(Success {
1040
- result: None,
1041
- })),
1042
- }),
1043
- })
1044
- .await;
1045
- assert_matches!(
1046
- res,
1047
- Err(CompleteActivityError::MalformedActivityCompletion { .. })
1048
- )
1049
- }