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,536 +0,0 @@
1
- use crate::{
2
- worker::{activities::PendingActivityCancel, client::WorkerClient},
3
- TaskToken,
4
- };
5
- use futures::StreamExt;
6
- use std::{
7
- collections::{hash_map::Entry, HashMap},
8
- sync::Arc,
9
- time::{self, Duration, Instant},
10
- };
11
- use temporal_sdk_core_protos::{
12
- coresdk::{activity_task::ActivityCancelReason, ActivityHeartbeat, IntoPayloadsExt},
13
- temporal::api::{
14
- common::v1::Payload, workflowservice::v1::RecordActivityTaskHeartbeatResponse,
15
- },
16
- };
17
- use tokio::{
18
- sync::{
19
- mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
20
- Mutex, Notify,
21
- },
22
- task::JoinHandle,
23
- };
24
- use tokio_util::sync::CancellationToken;
25
-
26
- /// Used to supply new heartbeat events to the activity heartbeat manager, or to send a shutdown
27
- /// request.
28
- pub(crate) struct ActivityHeartbeatManager {
29
- shutdown_token: CancellationToken,
30
- /// Used during `shutdown` to await until all inflight requests are sent.
31
- join_handle: Mutex<Option<JoinHandle<()>>>,
32
- heartbeat_tx: UnboundedSender<HeartbeatAction>,
33
- }
34
-
35
- #[derive(Debug)]
36
- enum HeartbeatAction {
37
- SendHeartbeat(ValidActivityHeartbeat),
38
- Evict {
39
- token: TaskToken,
40
- on_complete: Arc<Notify>,
41
- },
42
- CompleteReport(TaskToken),
43
- CompleteThrottle(TaskToken),
44
- }
45
-
46
- #[derive(Debug)]
47
- pub struct ValidActivityHeartbeat {
48
- pub task_token: TaskToken,
49
- pub details: Vec<Payload>,
50
- pub throttle_interval: time::Duration,
51
- }
52
-
53
- #[derive(Debug)]
54
- enum HeartbeatExecutorAction {
55
- /// Heartbeats are throttled for this task token, sleep until duration or wait to be cancelled
56
- Sleep(TaskToken, Duration, CancellationToken),
57
- /// Report heartbeat to the server
58
- Report {
59
- task_token: TaskToken,
60
- details: Vec<Payload>,
61
- },
62
- }
63
-
64
- /// Errors thrown when heartbeating
65
- #[derive(thiserror::Error, Debug)]
66
- pub enum ActivityHeartbeatError {
67
- /// Heartbeat referenced an activity that we don't think exists. It may have completed already.
68
- #[error("Heartbeat has been sent for activity that either completed or never started on this worker.")]
69
- UnknownActivity,
70
- /// There was a set heartbeat timeout, but it was not parseable. A valid timeout is requried
71
- /// to heartbeat.
72
- #[error("Unable to parse activity heartbeat timeout.")]
73
- InvalidHeartbeatTimeout,
74
- }
75
-
76
- /// Manages activity heartbeating for a worker. Allows sending new heartbeats or requesting and
77
- /// awaiting for the shutdown. When shutdown is requested, signal gets sent to all processors, which
78
- /// allows them to complete gracefully.
79
- impl ActivityHeartbeatManager {
80
- /// Creates a new instance of an activity heartbeat manager and returns a handle to the user,
81
- /// which allows to send new heartbeats and initiate the shutdown.
82
- /// Returns the manager and a channel that buffers cancellation notifications to be sent to Lang.
83
- pub(super) fn new(
84
- client: Arc<dyn WorkerClient>,
85
- ) -> (Self, UnboundedReceiver<PendingActivityCancel>) {
86
- let (heartbeat_stream_state, heartbeat_tx_source, shutdown_token) =
87
- HeartbeatStreamState::new();
88
- let (cancels_tx, cancels_rx) = unbounded_channel();
89
- let heartbeat_tx = heartbeat_tx_source.clone();
90
-
91
- let join_handle = tokio::spawn(
92
- // The stream of incoming heartbeats uses unfold to carry state across each item in the
93
- // stream. The closure checks if, for any given activity, we should heartbeat or not
94
- // depending on its delay and when we last issued a heartbeat for it.
95
- futures::stream::unfold(heartbeat_stream_state, move |mut hb_states| {
96
- async move {
97
- let hb = tokio::select! {
98
- biased;
99
-
100
- _ = hb_states.cancellation_token.cancelled() => {
101
- return None
102
- }
103
- hb = hb_states.incoming_hbs.recv() => match hb {
104
- None => return None,
105
- Some(hb) => hb,
106
- }
107
- };
108
-
109
- Some((
110
- match hb {
111
- HeartbeatAction::SendHeartbeat(hb) => hb_states.record(hb),
112
- HeartbeatAction::CompleteReport(tt) => hb_states.handle_report_completed(tt),
113
- HeartbeatAction::CompleteThrottle(tt) => hb_states.handle_throttle_completed(tt),
114
- HeartbeatAction::Evict{ token, on_complete } => hb_states.evict(token, on_complete),
115
- },
116
- hb_states,
117
- ))
118
- }
119
- })
120
- // Filters out `None`s
121
- .filter_map(|opt| async { opt })
122
- .for_each_concurrent(None, move |action| {
123
- let heartbeat_tx = heartbeat_tx_source.clone();
124
- let sg = client.clone();
125
- let cancels_tx = cancels_tx.clone();
126
- async move {
127
- match action {
128
- HeartbeatExecutorAction::Sleep(tt, duration, cancellation_token) => {
129
- tokio::select! {
130
- _ = cancellation_token.cancelled() => (),
131
- _ = tokio::time::sleep(duration) => {
132
- let _ = heartbeat_tx.send(HeartbeatAction::CompleteThrottle(tt));
133
- },
134
- };
135
- }
136
- HeartbeatExecutorAction::Report { task_token: tt, details } => {
137
- match sg
138
- .record_activity_heartbeat(tt.clone(), details.into_payloads())
139
- .await
140
- {
141
- Ok(RecordActivityTaskHeartbeatResponse { cancel_requested }) => {
142
- if cancel_requested {
143
- cancels_tx
144
- .send(PendingActivityCancel::new(
145
- tt.clone(),
146
- ActivityCancelReason::Cancelled,
147
- ))
148
- .expect(
149
- "Receive half of heartbeat cancels not blocked",
150
- );
151
- }
152
- }
153
- // Send cancels for any activity that learns its workflow already
154
- // finished (which is one thing not found implies - other reasons
155
- // would seem equally valid).
156
- Err(s) if s.code() == tonic::Code::NotFound => {
157
- debug!(task_token = %tt,
158
- "Activity not found when recording heartbeat");
159
- cancels_tx
160
- .send(PendingActivityCancel::new(
161
- tt.clone(),
162
- ActivityCancelReason::NotFound,
163
- ))
164
- .expect("Receive half of heartbeat cancels not blocked");
165
- }
166
- Err(e) => {
167
- warn!("Error when recording heartbeat: {:?}", e);
168
- }
169
- };
170
- let _ = heartbeat_tx.send(HeartbeatAction::CompleteReport(tt));
171
- }
172
- }
173
- }
174
- }),
175
- );
176
-
177
- (
178
- Self {
179
- join_handle: Mutex::new(Some(join_handle)),
180
- shutdown_token,
181
- heartbeat_tx,
182
- },
183
- cancels_rx,
184
- )
185
- }
186
- /// Records a new heartbeat, the first call will result in an immediate call to the server,
187
- /// while rapid successive calls would accumulate for up to `delay` and then latest heartbeat
188
- /// details will be sent to the server.
189
- ///
190
- /// It is important that this function is never called with a task token equal to one given
191
- /// to [Self::evict] after it has been called, doing so will cause a memory leak, as there is
192
- /// no longer an efficient way to forget about that task token.
193
- pub(super) fn record(
194
- &self,
195
- hb: ActivityHeartbeat,
196
- throttle_interval: Duration,
197
- ) -> Result<(), ActivityHeartbeatError> {
198
- self.heartbeat_tx
199
- .send(HeartbeatAction::SendHeartbeat(ValidActivityHeartbeat {
200
- task_token: TaskToken(hb.task_token),
201
- details: hb.details,
202
- throttle_interval,
203
- }))
204
- .expect("Receive half of the heartbeats event channel must not be dropped");
205
-
206
- Ok(())
207
- }
208
-
209
- /// Tell the heartbeat manager we are done forever with a certain task, so it may be forgotten.
210
- /// This will also force-flush the most recently provided details.
211
- /// Record *should* not be called with the same TaskToken after calling this.
212
- pub(super) async fn evict(&self, task_token: TaskToken) {
213
- let completed = Arc::new(Notify::new());
214
- let _ = self.heartbeat_tx.send(HeartbeatAction::Evict {
215
- token: task_token,
216
- on_complete: completed.clone(),
217
- });
218
- completed.notified().await;
219
- }
220
-
221
- /// Initiates shutdown procedure by stopping lifecycle loop and awaiting for all in-flight
222
- /// heartbeat requests to be flushed to the server.
223
- pub(super) async fn shutdown(&self) {
224
- self.shutdown_token.cancel();
225
- let mut handle = self.join_handle.lock().await;
226
- if let Some(h) = handle.take() {
227
- let handle_r = h.await;
228
- if let Err(e) = handle_r {
229
- if !e.is_cancelled() {
230
- error!(
231
- "Unexpected error joining heartbeating tasks during shutdown: {:?}",
232
- e
233
- )
234
- }
235
- }
236
- }
237
- }
238
- }
239
-
240
- #[derive(Debug)]
241
- struct ActivityHeartbeatState {
242
- /// If None and throttle interval is over, untrack this task token
243
- last_recorded_details: Option<Vec<Payload>>,
244
- /// True if we've queued up a request to record against server, but it hasn't yet completed
245
- is_record_in_flight: bool,
246
- last_send_requested: Instant,
247
- throttle_interval: Duration,
248
- throttled_cancellation_token: Option<CancellationToken>,
249
- }
250
-
251
- impl ActivityHeartbeatState {
252
- /// Get duration to sleep by subtracting `throttle_interval` by elapsed time since
253
- /// `last_send_requested`
254
- fn get_throttle_sleep_duration(&self) -> Duration {
255
- let time_since_last_sent = self.last_send_requested.elapsed();
256
-
257
- if time_since_last_sent > Duration::ZERO && self.throttle_interval > time_since_last_sent {
258
- self.throttle_interval - time_since_last_sent
259
- } else {
260
- Duration::ZERO
261
- }
262
- }
263
- }
264
-
265
- #[derive(Debug)]
266
- struct HeartbeatStreamState {
267
- tt_to_state: HashMap<TaskToken, ActivityHeartbeatState>,
268
- tt_needs_flush: HashMap<TaskToken, Arc<Notify>>,
269
- incoming_hbs: UnboundedReceiver<HeartbeatAction>,
270
- /// Token that can be used to cancel the entire stream.
271
- /// Requests to the server are not cancelled with this token.
272
- cancellation_token: CancellationToken,
273
- }
274
-
275
- impl HeartbeatStreamState {
276
- fn new() -> (Self, UnboundedSender<HeartbeatAction>, CancellationToken) {
277
- let (heartbeat_tx, incoming_hbs) = unbounded_channel();
278
- let cancellation_token = CancellationToken::new();
279
- (
280
- Self {
281
- cancellation_token: cancellation_token.clone(),
282
- tt_to_state: Default::default(),
283
- tt_needs_flush: Default::default(),
284
- incoming_hbs,
285
- },
286
- heartbeat_tx,
287
- cancellation_token,
288
- )
289
- }
290
-
291
- /// Record a heartbeat received from lang
292
- fn record(&mut self, hb: ValidActivityHeartbeat) -> Option<HeartbeatExecutorAction> {
293
- match self.tt_to_state.entry(hb.task_token.clone()) {
294
- Entry::Vacant(e) => {
295
- let state = ActivityHeartbeatState {
296
- throttle_interval: hb.throttle_interval,
297
- last_send_requested: Instant::now(),
298
- // Don't record here because we already flush out these details.
299
- // None is used to mark that after throttling we can stop tracking this task
300
- // token.
301
- last_recorded_details: None,
302
- is_record_in_flight: true,
303
- throttled_cancellation_token: None,
304
- };
305
- e.insert(state);
306
- Some(HeartbeatExecutorAction::Report {
307
- task_token: hb.task_token,
308
- details: hb.details,
309
- })
310
- }
311
- Entry::Occupied(mut o) => {
312
- let state = o.get_mut();
313
- state.last_recorded_details = Some(hb.details);
314
- None
315
- }
316
- }
317
- }
318
-
319
- /// Heartbeat report to server completed
320
- fn handle_report_completed(&mut self, tt: TaskToken) -> Option<HeartbeatExecutorAction> {
321
- if let Some(not) = self.tt_needs_flush.remove(&tt) {
322
- not.notify_one();
323
- }
324
- if let Some(st) = self.tt_to_state.get_mut(&tt) {
325
- st.is_record_in_flight = false;
326
- let cancellation_token = self.cancellation_token.child_token();
327
- st.throttled_cancellation_token = Some(cancellation_token.clone());
328
- // Always sleep for simplicity even if the duration is 0
329
- Some(HeartbeatExecutorAction::Sleep(
330
- tt.clone(),
331
- st.get_throttle_sleep_duration(),
332
- cancellation_token,
333
- ))
334
- } else {
335
- None
336
- }
337
- }
338
-
339
- /// Throttling completed, report or stop tracking task token
340
- fn handle_throttle_completed(&mut self, tt: TaskToken) -> Option<HeartbeatExecutorAction> {
341
- match self.tt_to_state.entry(tt.clone()) {
342
- Entry::Occupied(mut e) => {
343
- let state = e.get_mut();
344
- if let Some(details) = state.last_recorded_details.take() {
345
- // Delete the recorded details before reporting
346
- // Reset the cancellation token and schedule another report
347
- state.throttled_cancellation_token = None;
348
- state.last_send_requested = Instant::now();
349
- state.is_record_in_flight = true;
350
- Some(HeartbeatExecutorAction::Report {
351
- task_token: tt,
352
- details,
353
- })
354
- } else {
355
- // Nothing to report, forget this task token
356
- e.remove();
357
- None
358
- }
359
- }
360
- Entry::Vacant(_) => None,
361
- }
362
- }
363
-
364
- /// Activity should not be tracked anymore, cancel throttle timer if running.
365
- ///
366
- /// Will return a report action if there are recorded details present, to ensure we flush the
367
- /// latest details before we cease tracking this activity.
368
- fn evict(
369
- &mut self,
370
- tt: TaskToken,
371
- on_complete: Arc<Notify>,
372
- ) -> Option<HeartbeatExecutorAction> {
373
- if let Some(state) = self.tt_to_state.remove(&tt) {
374
- if let Some(cancel_tok) = state.throttled_cancellation_token {
375
- cancel_tok.cancel();
376
- }
377
- if let Some(last_deets) = state.last_recorded_details {
378
- self.tt_needs_flush.insert(tt.clone(), on_complete);
379
- return Some(HeartbeatExecutorAction::Report {
380
- task_token: tt,
381
- details: last_deets,
382
- });
383
- } else if state.is_record_in_flight {
384
- self.tt_needs_flush.insert(tt, on_complete);
385
- return None;
386
- }
387
- }
388
- // Since there's nothing to flush immediately report back that eviction is finished
389
- on_complete.notify_one();
390
- None
391
- }
392
- }
393
-
394
- #[cfg(test)]
395
- mod test {
396
- use super::*;
397
-
398
- use crate::worker::client::mocks::mock_workflow_client;
399
- use std::time::Duration;
400
- use temporal_sdk_core_protos::temporal::api::{
401
- common::v1::Payload, workflowservice::v1::RecordActivityTaskHeartbeatResponse,
402
- };
403
- use tokio::time::sleep;
404
-
405
- /// Ensure that heartbeats that are sent with a small `throttle_interval` are aggregated and sent roughly once
406
- /// every 1/2 of the heartbeat timeout.
407
- #[tokio::test]
408
- async fn process_heartbeats_and_shutdown() {
409
- let mut mock_client = mock_workflow_client();
410
- mock_client
411
- .expect_record_activity_heartbeat()
412
- .returning(|_, _| Ok(RecordActivityTaskHeartbeatResponse::default()))
413
- .times(2);
414
- let (hm, _) = ActivityHeartbeatManager::new(Arc::new(mock_client));
415
- let fake_task_token = vec![1, 2, 3];
416
- // Send 2 heartbeat requests for 20ms apart.
417
- // The first heartbeat should be sent right away, and
418
- // the second should be throttled until 50ms have passed.
419
- for i in 0_u8..2 {
420
- record_heartbeat(&hm, fake_task_token.clone(), i, Duration::from_millis(50));
421
- sleep(Duration::from_millis(20)).await;
422
- }
423
- // sleep again to let heartbeats be flushed
424
- sleep(Duration::from_millis(20)).await;
425
- hm.shutdown().await;
426
- }
427
-
428
- #[tokio::test]
429
- async fn send_heartbeats_less_frequently_than_throttle_interval() {
430
- let mut mock_client = mock_workflow_client();
431
- mock_client
432
- .expect_record_activity_heartbeat()
433
- .returning(|_, _| Ok(RecordActivityTaskHeartbeatResponse::default()))
434
- .times(3);
435
- let (hm, _) = ActivityHeartbeatManager::new(Arc::new(mock_client));
436
- let fake_task_token = vec![1, 2, 3];
437
- // Heartbeats always get sent if recorded less frequently than the throttle interval
438
- for i in 0_u8..3 {
439
- record_heartbeat(&hm, fake_task_token.clone(), i, Duration::from_millis(10));
440
- sleep(Duration::from_millis(20)).await;
441
- }
442
- hm.shutdown().await;
443
- }
444
-
445
- /// Ensure that heartbeat can be called from a tight loop without any throttle_interval, resulting in two
446
- /// interactions with the server - one immediately and one after 500ms after the throttle_interval.
447
- #[tokio::test]
448
- async fn process_tight_loop_and_shutdown() {
449
- let mut mock_client = mock_workflow_client();
450
- mock_client
451
- .expect_record_activity_heartbeat()
452
- .returning(|_, _| Ok(RecordActivityTaskHeartbeatResponse::default()))
453
- .times(1);
454
- let (hm, _) = ActivityHeartbeatManager::new(Arc::new(mock_client));
455
- let fake_task_token = vec![1, 2, 3];
456
- // Send a whole bunch of heartbeats very fast. We should still only send one total.
457
- for i in 0_u8..50 {
458
- record_heartbeat(&hm, fake_task_token.clone(), i, Duration::from_millis(2000));
459
- // Let it propagate
460
- sleep(Duration::from_millis(10)).await;
461
- }
462
- hm.shutdown().await;
463
- }
464
-
465
- /// This test reports one heartbeat and waits for the throttle_interval to elapse before sending another
466
- #[tokio::test]
467
- async fn report_heartbeat_after_timeout() {
468
- let mut mock_client = mock_workflow_client();
469
- mock_client
470
- .expect_record_activity_heartbeat()
471
- .returning(|_, _| Ok(RecordActivityTaskHeartbeatResponse::default()))
472
- .times(2);
473
- let (hm, _) = ActivityHeartbeatManager::new(Arc::new(mock_client));
474
- let fake_task_token = vec![1, 2, 3];
475
- record_heartbeat(&hm, fake_task_token.clone(), 0, Duration::from_millis(100));
476
- sleep(Duration::from_millis(500)).await;
477
- record_heartbeat(&hm, fake_task_token, 1, Duration::from_millis(100));
478
- // Let it propagate
479
- sleep(Duration::from_millis(50)).await;
480
- hm.shutdown().await;
481
- }
482
-
483
- #[tokio::test]
484
- async fn evict_works() {
485
- let mut mock_client = mock_workflow_client();
486
- mock_client
487
- .expect_record_activity_heartbeat()
488
- .returning(|_, _| Ok(RecordActivityTaskHeartbeatResponse::default()))
489
- .times(2);
490
- let (hm, _) = ActivityHeartbeatManager::new(Arc::new(mock_client));
491
- let fake_task_token = vec![1, 2, 3];
492
- record_heartbeat(&hm, fake_task_token.clone(), 0, Duration::from_millis(100));
493
- // Let it propagate
494
- sleep(Duration::from_millis(10)).await;
495
- hm.evict(fake_task_token.clone().into()).await;
496
- record_heartbeat(&hm, fake_task_token, 0, Duration::from_millis(100));
497
- // Let it propagate
498
- sleep(Duration::from_millis(10)).await;
499
- // We know it works b/c otherwise we would have only called record 1 time w/o sleep
500
- hm.shutdown().await;
501
- }
502
-
503
- #[tokio::test]
504
- async fn evict_immediate_after_record() {
505
- let mut mock_client = mock_workflow_client();
506
- mock_client
507
- .expect_record_activity_heartbeat()
508
- .returning(|_, _| Ok(RecordActivityTaskHeartbeatResponse::default()))
509
- .times(1);
510
- let (hm, _) = ActivityHeartbeatManager::new(Arc::new(mock_client));
511
- let fake_task_token = vec![1, 2, 3];
512
- record_heartbeat(&hm, fake_task_token.clone(), 0, Duration::from_millis(100));
513
- hm.evict(fake_task_token.clone().into()).await;
514
- hm.shutdown().await;
515
- }
516
-
517
- fn record_heartbeat(
518
- hm: &ActivityHeartbeatManager,
519
- task_token: Vec<u8>,
520
- payload_data: u8,
521
- throttle_interval: Duration,
522
- ) {
523
- hm.record(
524
- ActivityHeartbeat {
525
- task_token,
526
- details: vec![Payload {
527
- metadata: Default::default(),
528
- data: vec![payload_data],
529
- }],
530
- },
531
- // Mimic the same delay we would apply in activity task manager
532
- throttle_interval,
533
- )
534
- .expect("hearbeat recording should not fail");
535
- }
536
- }
@@ -1,89 +0,0 @@
1
- use crate::abstractions::MeteredSemaphore;
2
- use crate::worker::activities::PermittedTqResp;
3
- use crate::{pollers::BoxedActPoller, MetricsContext};
4
- use futures::{stream, Stream};
5
- use governor::clock::DefaultClock;
6
- use governor::middleware::NoOpMiddleware;
7
- use governor::state::{InMemoryState, NotKeyed};
8
- use governor::RateLimiter;
9
- use std::sync::Arc;
10
- use temporal_sdk_core_protos::temporal::api::workflowservice::v1::PollActivityTaskQueueResponse;
11
- use tokio::select;
12
- use tokio_util::sync::CancellationToken;
13
-
14
- struct StreamState {
15
- poller: BoxedActPoller,
16
- semaphore: Arc<MeteredSemaphore>,
17
- rate_limiter: Option<RateLimiter<NotKeyed, InMemoryState, DefaultClock, NoOpMiddleware>>,
18
- metrics: MetricsContext,
19
- shutdown_token: CancellationToken,
20
- poller_was_shutdown: bool,
21
- }
22
-
23
- pub(crate) fn new_activity_task_poller(
24
- poller: BoxedActPoller,
25
- semaphore: Arc<MeteredSemaphore>,
26
- rate_limiter: Option<RateLimiter<NotKeyed, InMemoryState, DefaultClock, NoOpMiddleware>>,
27
- metrics: MetricsContext,
28
- shutdown_token: CancellationToken,
29
- ) -> impl Stream<Item = Result<PermittedTqResp, tonic::Status>> {
30
- let state = StreamState {
31
- poller,
32
- semaphore,
33
- rate_limiter,
34
- metrics,
35
- shutdown_token,
36
- poller_was_shutdown: false,
37
- };
38
- stream::unfold(state, |mut state| async move {
39
- loop {
40
- let poll = async {
41
- let permit = state
42
- .semaphore
43
- .acquire_owned()
44
- .await
45
- .expect("outstanding activity semaphore not closed");
46
- if !state.poller_was_shutdown {
47
- if let Some(ref rl) = state.rate_limiter {
48
- rl.until_ready().await;
49
- }
50
- }
51
- loop {
52
- return match state.poller.poll().await {
53
- Some(Ok(resp)) => {
54
- if resp == PollActivityTaskQueueResponse::default() {
55
- // We get the default proto in the event that the long poll times out.
56
- debug!("Poll activity task timeout");
57
- state.metrics.act_poll_timeout();
58
- continue;
59
- }
60
- Some(Ok(PermittedTqResp { permit, resp }))
61
- }
62
- Some(Err(e)) => {
63
- warn!(error=?e, "Error while polling for activity tasks");
64
- Some(Err(e))
65
- }
66
- // If poller returns None, it's dead, thus we also return None to terminate this
67
- // stream.
68
- None => None,
69
- };
70
- }
71
- };
72
- if state.poller_was_shutdown {
73
- return poll.await.map(|res| (res, state));
74
- }
75
- select! {
76
- biased;
77
-
78
- _ = state.shutdown_token.cancelled() => {
79
- state.poller.notify_shutdown();
80
- state.poller_was_shutdown = true;
81
- continue;
82
- }
83
- res = poll => {
84
- return res.map(|res| (res, state));
85
- }
86
- }
87
- }
88
- })
89
- }