temporalio 0.1.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
- }