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,557 +0,0 @@
1
- mod activity_heartbeat_manager;
2
- mod activity_task_poller_stream;
3
- mod local_activities;
4
-
5
- pub(crate) use local_activities::{
6
- DispatchOrTimeoutLA, ExecutingLAId, LACompleteAction, LocalActRequest,
7
- LocalActivityExecutionResult, LocalActivityManager, LocalActivityResolution,
8
- LocalInFlightActInfo, NewLocalAct,
9
- };
10
-
11
- use crate::abstractions::{ClosableMeteredSemaphore, TrackedOwnedMeteredSemPermit};
12
- use crate::worker::activities::activity_task_poller_stream::new_activity_task_poller;
13
- use crate::{
14
- abstractions::{MeteredSemaphore, OwnedMeteredSemPermit, UsedMeteredSemPermit},
15
- pollers::BoxedActPoller,
16
- telemetry::metrics::{
17
- activity_type, activity_worker_type, eager, workflow_type, MetricsContext,
18
- },
19
- worker::{
20
- activities::activity_heartbeat_manager::ActivityHeartbeatError, client::WorkerClient,
21
- },
22
- PollActivityError, TaskToken,
23
- };
24
- use activity_heartbeat_manager::ActivityHeartbeatManager;
25
- use dashmap::DashMap;
26
- use futures::{stream, stream::BoxStream, stream::PollNext, Stream, StreamExt};
27
- use governor::{Quota, RateLimiter};
28
- use std::{
29
- convert::TryInto,
30
- future,
31
- sync::Arc,
32
- time::{Duration, Instant},
33
- };
34
- use temporal_sdk_core_protos::{
35
- coresdk::{
36
- activity_result::{self as ar, activity_execution_result as aer},
37
- activity_task::{ActivityCancelReason, ActivityTask},
38
- ActivityHeartbeat,
39
- },
40
- temporal::api::{
41
- failure::v1::{failure::FailureInfo, CanceledFailureInfo, Failure},
42
- workflowservice::v1::PollActivityTaskQueueResponse,
43
- },
44
- };
45
- use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender};
46
- use tokio::sync::{Mutex, Notify};
47
- use tokio_stream::wrappers::UnboundedReceiverStream;
48
- use tokio_util::sync::CancellationToken;
49
- use tracing::Span;
50
-
51
- #[derive(Debug, derive_more::Constructor)]
52
- struct PendingActivityCancel {
53
- task_token: TaskToken,
54
- reason: ActivityCancelReason,
55
- }
56
-
57
- /// Contains details that core wants to store while an activity is running.
58
- #[derive(Debug)]
59
- struct InFlightActInfo {
60
- pub activity_type: String,
61
- pub workflow_type: String,
62
- /// Only kept for logging reasons
63
- pub workflow_id: String,
64
- /// Only kept for logging reasons
65
- pub workflow_run_id: String,
66
- start_time: Instant,
67
- }
68
-
69
- /// Augments [InFlightActInfo] with details specific to remote activities
70
- struct RemoteInFlightActInfo {
71
- pub base: InFlightActInfo,
72
- /// Used to calculate aggregation delay between activity heartbeats.
73
- pub heartbeat_timeout: Option<prost_types::Duration>,
74
- /// Set to true if we have already issued a cancellation activation to lang for this activity
75
- pub issued_cancel_to_lang: bool,
76
- /// Set to true if we have already learned from the server this activity doesn't exist. EX:
77
- /// we have learned from heartbeating and issued a cancel task, in which case we may simply
78
- /// discard the reply.
79
- pub known_not_found: bool,
80
- /// The permit from the max concurrent semaphore
81
- _permit: UsedMeteredSemPermit,
82
- }
83
- impl RemoteInFlightActInfo {
84
- fn new(poll_resp: &PollActivityTaskQueueResponse, permit: UsedMeteredSemPermit) -> Self {
85
- let wec = poll_resp.workflow_execution.clone().unwrap_or_default();
86
- Self {
87
- base: InFlightActInfo {
88
- activity_type: poll_resp.activity_type.clone().unwrap_or_default().name,
89
- workflow_type: poll_resp.workflow_type.clone().unwrap_or_default().name,
90
- workflow_id: wec.workflow_id,
91
- workflow_run_id: wec.run_id,
92
- start_time: Instant::now(),
93
- },
94
- heartbeat_timeout: poll_resp.heartbeat_timeout.clone(),
95
- issued_cancel_to_lang: false,
96
- known_not_found: false,
97
- _permit: permit,
98
- }
99
- }
100
- }
101
-
102
- pub(crate) struct WorkerActivityTasks {
103
- /// Token used to signal the server task poller that shutdown is beginning
104
- poller_shutdown_token: CancellationToken,
105
- /// Centralizes management of heartbeat issuing / throttling
106
- heartbeat_manager: ActivityHeartbeatManager,
107
- /// Combined stream for any ActivityTask producing source (polls, eager activities, cancellations)
108
- activity_task_stream: Mutex<BoxStream<'static, Result<ActivityTask, PollActivityError>>>,
109
- /// Activities that have been issued to lang but not yet completed
110
- outstanding_activity_tasks: Arc<DashMap<TaskToken, RemoteInFlightActInfo>>,
111
- /// Ensures we don't exceed this worker's maximum concurrent activity limit for activities.
112
- /// This semaphore is used to limit eager activities but shares the same underlying [MeteredSemaphore] that is used
113
- /// to limit the concurrency for non-eager activities.
114
- eager_activities_semaphore: Arc<ClosableMeteredSemaphore>,
115
- /// Holds activity tasks we have received in direct response to workflow task completion (a.k.a eager activities).
116
- /// Tasks received in this stream hold a "tracked" permit that is issued by the `eager_activities_semaphore`.
117
- eager_activities_tx: UnboundedSender<TrackedPermittedTqResp>,
118
-
119
- metrics: MetricsContext,
120
-
121
- max_heartbeat_throttle_interval: Duration,
122
- default_heartbeat_throttle_interval: Duration,
123
-
124
- /// Wakes every time an activity is removed from the outstanding map
125
- complete_notify: Arc<Notify>,
126
- /// Token to notify when poll returned a shutdown error
127
- poll_returned_shutdown_token: CancellationToken,
128
- }
129
-
130
- #[derive(derive_more::From)]
131
- enum ActivityTaskSource {
132
- PendingCancel(PendingActivityCancel),
133
- PendingStart(Result<(PermittedTqResp, bool), PollActivityError>),
134
- }
135
-
136
- impl WorkerActivityTasks {
137
- pub(crate) fn new(
138
- max_activity_tasks: usize,
139
- max_worker_act_per_sec: Option<f64>,
140
- poller: BoxedActPoller,
141
- client: Arc<dyn WorkerClient>,
142
- metrics: MetricsContext,
143
- max_heartbeat_throttle_interval: Duration,
144
- default_heartbeat_throttle_interval: Duration,
145
- ) -> Self {
146
- let semaphore = Arc::new(MeteredSemaphore::new(
147
- max_activity_tasks,
148
- metrics.with_new_attrs([activity_worker_type()]),
149
- MetricsContext::available_task_slots,
150
- ));
151
- let poller_shutdown_token = CancellationToken::new();
152
- let rate_limiter = max_worker_act_per_sec.and_then(|ps| {
153
- Quota::with_period(Duration::from_secs_f64(ps.recip())).map(RateLimiter::direct)
154
- });
155
- let outstanding_activity_tasks = Arc::new(DashMap::new());
156
- let server_poller_stream = new_activity_task_poller(
157
- poller,
158
- semaphore.clone(),
159
- rate_limiter,
160
- metrics.clone(),
161
- poller_shutdown_token.clone(),
162
- );
163
- let (eager_activities_tx, eager_activities_rx) = unbounded_channel();
164
- let eager_activities_semaphore = ClosableMeteredSemaphore::new_arc(semaphore);
165
-
166
- let start_tasks_stream_complete = CancellationToken::new();
167
- let starts_stream = Self::merge_start_task_sources(
168
- eager_activities_rx,
169
- server_poller_stream,
170
- eager_activities_semaphore.clone(),
171
- start_tasks_stream_complete.clone(),
172
- );
173
- let (heartbeat_manager, cancels_rx) = ActivityHeartbeatManager::new(client);
174
- let complete_notify = Arc::new(Notify::new());
175
- let source_stream = stream::select_with_strategy(
176
- UnboundedReceiverStream::new(cancels_rx).map(ActivityTaskSource::from),
177
- starts_stream.map(ActivityTaskSource::from),
178
- |_: &mut ()| PollNext::Left,
179
- );
180
- // Create a task stream composed of (in poll preference order):
181
- // cancels_stream ------------------------------+--- activity_task_stream
182
- // eager_activities_rx ---+--- starts_stream ---|
183
- // server_poll_stream ---|
184
- let activity_task_stream = Self::merge_source_streams(
185
- source_stream,
186
- outstanding_activity_tasks.clone(),
187
- start_tasks_stream_complete,
188
- complete_notify.clone(),
189
- metrics.clone(),
190
- );
191
-
192
- Self {
193
- poller_shutdown_token,
194
- eager_activities_tx,
195
- heartbeat_manager,
196
- activity_task_stream: Mutex::new(activity_task_stream.boxed()),
197
- outstanding_activity_tasks,
198
- eager_activities_semaphore,
199
- complete_notify,
200
- metrics,
201
- max_heartbeat_throttle_interval,
202
- default_heartbeat_throttle_interval,
203
- poll_returned_shutdown_token: CancellationToken::new(),
204
- }
205
- }
206
-
207
- /// Merges the server poll and eager [ActivityTask] sources
208
- fn merge_start_task_sources(
209
- non_poll_tasks_rx: UnboundedReceiver<TrackedPermittedTqResp>,
210
- poller_stream: impl Stream<Item = Result<PermittedTqResp, tonic::Status>>,
211
- eager_activities_semaphore: Arc<ClosableMeteredSemaphore>,
212
- on_complete_token: CancellationToken,
213
- ) -> impl Stream<Item = Result<(PermittedTqResp, bool), PollActivityError>> {
214
- let non_poll_stream = stream::unfold(
215
- (non_poll_tasks_rx, eager_activities_semaphore),
216
- |(mut non_poll_tasks_rx, eager_activities_semaphore)| async move {
217
- loop {
218
- tokio::select! {
219
- biased;
220
-
221
- task_opt = non_poll_tasks_rx.recv() => {
222
- // Add is_eager true and wrap in Result
223
- return task_opt.map(|task| (Ok((PermittedTqResp{ permit: task.permit.into(), resp: task.resp }, true)), (non_poll_tasks_rx, eager_activities_semaphore)));
224
- }
225
- _ = eager_activities_semaphore.close_complete() => {
226
- // Once shutting down, we stop accepting eager activities
227
- non_poll_tasks_rx.close();
228
- continue;
229
- }
230
- }
231
- }
232
- },
233
- );
234
- // Add is_eager false
235
- let poller_stream = poller_stream.map(|res| res.map(|task| (task, false)));
236
-
237
- // Prefer eager activities over polling the server
238
- stream::select_with_strategy(non_poll_stream, poller_stream, |_: &mut ()| PollNext::Left)
239
- .map(|res| res.map_err(|err| err.into()))
240
- // This map, chain, filter_map sequence is here to cancel the token when this stream ends.
241
- .map(Some)
242
- .chain(futures::stream::once(async move {
243
- on_complete_token.cancel();
244
- None
245
- }))
246
- .filter_map(future::ready)
247
- }
248
-
249
- /// Builds an [ActivityTask] stream for cancellation tasks from cancels delivered from heartbeats
250
- fn merge_source_streams(
251
- source_stream: impl Stream<Item = ActivityTaskSource>,
252
- outstanding_tasks: Arc<DashMap<TaskToken, RemoteInFlightActInfo>>,
253
- start_tasks_stream_complete: CancellationToken,
254
- complete_notify: Arc<Notify>,
255
- metrics: MetricsContext,
256
- ) -> impl Stream<Item = Result<ActivityTask, PollActivityError>> {
257
- let outstanding_tasks_clone = outstanding_tasks.clone();
258
- source_stream.filter_map(move |source| {
259
- let outstanding_tasks = outstanding_tasks.clone();
260
- let metrics = metrics.clone();
261
- async move {
262
- match source {
263
- ActivityTaskSource::PendingCancel(next_pc) => {
264
- // It's possible that activity has been completed and we no longer have an
265
- // outstanding activity task. This is fine because it means that we no
266
- // longer need to cancel this activity, so we'll just ignore such orphaned
267
- // cancellations.
268
- if let Some(mut details) = outstanding_tasks.get_mut(&next_pc.task_token) {
269
- if details.issued_cancel_to_lang {
270
- // Don't double-issue cancellations
271
- return None
272
- }
273
-
274
- details.issued_cancel_to_lang = true;
275
- if next_pc.reason == ActivityCancelReason::NotFound {
276
- details.known_not_found = true;
277
- }
278
- Some(Ok(ActivityTask::cancel_from_ids(next_pc.task_token.0, next_pc.reason)))
279
- } else {
280
- debug!(task_token = ?next_pc.task_token, "Unknown activity task when issuing cancel");
281
- // If we can't find the activity here, it's already been completed,
282
- // in which case issuing a cancel again is pointless.
283
- None
284
- }
285
- },
286
- ActivityTaskSource::PendingStart(res) => {
287
- Some(res.map(|(task, is_eager)| {
288
- Self::about_to_issue_task(outstanding_tasks, task, is_eager, metrics)
289
- }))
290
- }
291
- }
292
- }
293
- }).take_until(async move {
294
- start_tasks_stream_complete.cancelled().await;
295
- while !outstanding_tasks_clone.is_empty() {
296
- complete_notify.notified().await
297
- }
298
- })
299
- }
300
-
301
- pub(crate) fn notify_shutdown(&self) {
302
- self.poller_shutdown_token.cancel();
303
- self.eager_activities_semaphore.close();
304
- }
305
-
306
- async fn shutdown_complete(&self) {
307
- self.poll_returned_shutdown_token.cancelled().await;
308
- self.heartbeat_manager.shutdown().await;
309
- }
310
-
311
- pub(crate) async fn shutdown(&self) {
312
- self.notify_shutdown();
313
- self.shutdown_complete().await;
314
- }
315
-
316
- /// Exclusive poll for activity tasks
317
- ///
318
- /// Polls the various task sources (server polls, eager activities, cancellations) while respecting the provided rate limits and allowed concurrency.
319
- /// Returns Err(PollActivityError::ShutDown) after shutdown is completed and all tasks sources are depleted.
320
- pub(crate) async fn poll(&self) -> Result<ActivityTask, PollActivityError> {
321
- let mut poller_stream = self.activity_task_stream.lock().await;
322
- poller_stream.next().await.unwrap_or_else(|| {
323
- self.poll_returned_shutdown_token.cancel();
324
- Err(PollActivityError::ShutDown)
325
- })
326
- }
327
-
328
- pub(crate) async fn complete(
329
- &self,
330
- task_token: TaskToken,
331
- status: aer::Status,
332
- client: &dyn WorkerClient,
333
- ) {
334
- if let Some((_, act_info)) = self.outstanding_activity_tasks.remove(&task_token) {
335
- let act_metrics = self.metrics.with_new_attrs([
336
- activity_type(act_info.base.activity_type),
337
- workflow_type(act_info.base.workflow_type),
338
- ]);
339
- Span::current().record("workflow_id", act_info.base.workflow_id);
340
- Span::current().record("run_id", act_info.base.workflow_run_id);
341
- act_metrics.act_execution_latency(act_info.base.start_time.elapsed());
342
- let known_not_found = act_info.known_not_found;
343
-
344
- self.heartbeat_manager.evict(task_token.clone()).await;
345
- self.complete_notify.notify_waiters();
346
-
347
- // No need to report activities which we already know the server doesn't care about
348
- if !known_not_found {
349
- let maybe_net_err = match status {
350
- aer::Status::WillCompleteAsync(_) => None,
351
- aer::Status::Completed(ar::Success { result }) => client
352
- .complete_activity_task(task_token.clone(), result.map(Into::into))
353
- .await
354
- .err(),
355
- aer::Status::Failed(ar::Failure { failure }) => {
356
- act_metrics.act_execution_failed();
357
- client
358
- .fail_activity_task(task_token.clone(), failure.map(Into::into))
359
- .await
360
- .err()
361
- }
362
- aer::Status::Cancelled(ar::Cancellation { failure }) => {
363
- let details = if let Some(Failure {
364
- failure_info:
365
- Some(FailureInfo::CanceledFailureInfo(CanceledFailureInfo { details })),
366
- ..
367
- }) = failure
368
- {
369
- details
370
- } else {
371
- warn!(task_token = ? task_token,
372
- "Expected activity cancelled status with CanceledFailureInfo");
373
- None
374
- };
375
- client
376
- .cancel_activity_task(task_token.clone(), details.map(Into::into))
377
- .await
378
- .err()
379
- }
380
- };
381
-
382
- if let Some(e) = maybe_net_err {
383
- if e.code() == tonic::Code::NotFound {
384
- warn!(task_token = ?task_token, details = ?e, "Activity not found on \
385
- completion. This may happen if the activity has already been cancelled but \
386
- completed anyway.");
387
- } else {
388
- warn!(error=?e, "Network error while completing activity");
389
- };
390
- };
391
- };
392
- } else {
393
- warn!(
394
- "Attempted to complete activity task {} but we were not tracking it",
395
- &task_token
396
- );
397
- }
398
- }
399
-
400
- /// Attempt to record an activity heartbeat
401
- pub(crate) fn record_heartbeat(
402
- &self,
403
- details: ActivityHeartbeat,
404
- ) -> Result<(), ActivityHeartbeatError> {
405
- // TODO: Propagate these back as cancels. Silent fails is too nonobvious
406
- let heartbeat_timeout: Duration = self
407
- .outstanding_activity_tasks
408
- .get(&TaskToken(details.task_token.clone()))
409
- .ok_or(ActivityHeartbeatError::UnknownActivity)?
410
- .heartbeat_timeout
411
- .clone()
412
- // We treat None as 0 (even though heartbeat_timeout is never set to None by the server)
413
- .unwrap_or_default()
414
- .try_into()
415
- // This technically should never happen since prost duration should be directly mappable
416
- // to std::time::Duration.
417
- .or(Err(ActivityHeartbeatError::InvalidHeartbeatTimeout))?;
418
-
419
- // There is a bug in the server that translates non-set heartbeat timeouts into 0 duration.
420
- // That's why we treat 0 the same way as None, otherwise we wouldn't know which aggregation
421
- // delay to use, and using 0 is not a good idea as SDK would hammer the server too hard.
422
- let throttle_interval = if heartbeat_timeout.as_millis() == 0 {
423
- self.default_heartbeat_throttle_interval
424
- } else {
425
- heartbeat_timeout.mul_f64(0.8)
426
- };
427
- let throttle_interval =
428
- std::cmp::min(throttle_interval, self.max_heartbeat_throttle_interval);
429
- self.heartbeat_manager.record(details, throttle_interval)
430
- }
431
-
432
- /// Returns a handle that the workflows management side can use to interact with this manager
433
- pub(crate) fn get_handle_for_workflows(&self) -> ActivitiesFromWFTsHandle {
434
- ActivitiesFromWFTsHandle {
435
- sem: self.eager_activities_semaphore.clone(),
436
- tx: self.eager_activities_tx.clone(),
437
- }
438
- }
439
-
440
- /// Called when there is a new [ActivityTask] about to be bubbled up out of the poller
441
- fn about_to_issue_task(
442
- outstanding_tasks: Arc<DashMap<TaskToken, RemoteInFlightActInfo>>,
443
- task: PermittedTqResp,
444
- is_eager: bool,
445
- metrics: MetricsContext,
446
- ) -> ActivityTask {
447
- if let Some(ref act_type) = task.resp.activity_type {
448
- if let Some(ref wf_type) = task.resp.workflow_type {
449
- metrics
450
- .with_new_attrs([
451
- activity_type(act_type.name.clone()),
452
- workflow_type(wf_type.name.clone()),
453
- eager(is_eager),
454
- ])
455
- .act_task_received();
456
- }
457
- }
458
- // There could be an else statement here but since the response should always contain both
459
- // activity_type and workflow_type, we won't bother.
460
-
461
- if let Some(dur) = task.resp.sched_to_start() {
462
- metrics.act_sched_to_start_latency(dur);
463
- };
464
-
465
- outstanding_tasks.insert(
466
- task.resp.task_token.clone().into(),
467
- RemoteInFlightActInfo::new(&task.resp, task.permit.into_used()),
468
- );
469
-
470
- ActivityTask::start_from_poll_resp(task.resp)
471
- }
472
-
473
- #[cfg(test)]
474
- pub(crate) fn remaining_activity_capacity(&self) -> usize {
475
- self.eager_activities_semaphore.available_permits()
476
- }
477
- }
478
-
479
- /// Provides facilities for the workflow side of things to interact with the activity manager.
480
- /// Allows for the handling of activities returned by WFT completions.
481
- pub(crate) struct ActivitiesFromWFTsHandle {
482
- sem: Arc<ClosableMeteredSemaphore>,
483
- tx: UnboundedSender<TrackedPermittedTqResp>,
484
- }
485
-
486
- impl ActivitiesFromWFTsHandle {
487
- /// Returns a handle that can be used to reserve an activity slot. EX: When requesting eager
488
- /// dispatch of an activity to this worker upon workflow task completion
489
- pub(crate) fn reserve_slot(&self) -> Option<TrackedOwnedMeteredSemPermit> {
490
- // TODO: check if rate limit is not exceeded and count this reservation towards the rate limit
491
- self.sem.try_acquire_owned().ok()
492
- }
493
-
494
- /// Queue new activity tasks for dispatch received from non-polling sources (ex: eager returns
495
- /// from WFT completion)
496
- pub(crate) fn add_tasks(&self, tasks: impl IntoIterator<Item = TrackedPermittedTqResp>) {
497
- for t in tasks.into_iter() {
498
- // Technically we should be reporting `activity_task_received` here, but for simplicity
499
- // and time insensitivity, that metric is tracked in `about_to_issue_task`.
500
- self.tx.send(t).expect("Receive half cannot be dropped");
501
- }
502
- }
503
- }
504
-
505
- #[derive(Debug)]
506
- pub(crate) struct PermittedTqResp {
507
- pub permit: OwnedMeteredSemPermit,
508
- pub resp: PollActivityTaskQueueResponse,
509
- }
510
-
511
- #[derive(Debug)]
512
- pub(crate) struct TrackedPermittedTqResp {
513
- pub permit: TrackedOwnedMeteredSemPermit,
514
- pub resp: PollActivityTaskQueueResponse,
515
- }
516
-
517
- #[cfg(test)]
518
- mod tests {
519
- use super::*;
520
- use crate::{
521
- test_help::mock_poller_from_resps, worker::client::mocks::mock_manual_workflow_client,
522
- };
523
-
524
- #[tokio::test]
525
- async fn per_worker_ratelimit() {
526
- let poller = mock_poller_from_resps([
527
- PollActivityTaskQueueResponse {
528
- task_token: vec![1],
529
- activity_id: "act1".to_string(),
530
- ..Default::default()
531
- }
532
- .into(),
533
- PollActivityTaskQueueResponse {
534
- task_token: vec![2],
535
- activity_id: "act2".to_string(),
536
- ..Default::default()
537
- }
538
- .into(),
539
- ]);
540
- let atm = WorkerActivityTasks::new(
541
- 10,
542
- Some(2.0),
543
- poller,
544
- Arc::new(mock_manual_workflow_client()),
545
- MetricsContext::no_op(),
546
- Duration::from_secs(1),
547
- Duration::from_secs(1),
548
- );
549
- let start = Instant::now();
550
- atm.poll().await.unwrap();
551
- atm.poll().await.unwrap();
552
- // At least half a second will have elapsed since we only allow 2 tasks per second.
553
- // With no ratelimit, even on a slow CI server with lots of load, this would typically take
554
- // low single digit ms or less.
555
- assert!(start.elapsed() > Duration::from_secs_f64(0.5));
556
- }
557
- }
@@ -1,107 +0,0 @@
1
- use super::*;
2
- use futures::Future;
3
-
4
- pub(crate) static DEFAULT_TEST_CAPABILITIES: &Capabilities = &Capabilities {
5
- signal_and_query_header: true,
6
- internal_error_differentiation: true,
7
- activity_failure_include_heartbeat: true,
8
- supports_schedules: true,
9
- encoded_failure_attributes: true,
10
- build_id_based_versioning: true,
11
- upsert_memo: true,
12
- eager_workflow_start: true,
13
- sdk_metadata: true,
14
- };
15
-
16
- #[cfg(test)]
17
- /// Create a mock client primed with basic necessary expectations
18
- pub(crate) fn mock_workflow_client() -> MockWorkerClient {
19
- let mut r = MockWorkerClient::new();
20
- r.expect_capabilities()
21
- .returning(|| Some(DEFAULT_TEST_CAPABILITIES));
22
- r
23
- }
24
-
25
- /// Create a mock manual client primed with basic necessary expectations
26
- pub(crate) fn mock_manual_workflow_client() -> MockManualWorkerClient {
27
- let mut r = MockManualWorkerClient::new();
28
- r.expect_capabilities()
29
- .returning(|| Some(DEFAULT_TEST_CAPABILITIES));
30
- r
31
- }
32
-
33
- // Need a version of the mock that can return futures so we can return potentially pending
34
- // results. This is really annoying b/c of the async trait stuff. Need
35
- // https://github.com/asomers/mockall/issues/189 to be fixed for it to go away.
36
- mockall::mock! {
37
- pub(crate) ManualWorkerClient {}
38
- #[allow(unused)]
39
- impl WorkerClient for ManualWorkerClient {
40
- fn poll_workflow_task<'a, 'b>(&'a self, task_queue: String, is_sticky: bool)
41
- -> impl Future<Output = Result<PollWorkflowTaskQueueResponse>> + Send + 'b
42
- where 'a: 'b, Self: 'b;
43
-
44
- fn poll_activity_task<'a, 'b>(&self, task_queue: String, max_tasks_per_sec: Option<f64>)
45
- -> impl Future<Output = Result<PollActivityTaskQueueResponse>> + Send + 'b
46
- where 'a: 'b, Self: 'b;
47
-
48
- fn complete_workflow_task<'a, 'b>(
49
- &self,
50
- request: WorkflowTaskCompletion,
51
- ) -> impl Future<Output = Result<RespondWorkflowTaskCompletedResponse>> + Send + 'b
52
- where 'a: 'b, Self: 'b;
53
-
54
- fn complete_activity_task<'a, 'b>(
55
- &self,
56
- task_token: TaskToken,
57
- result: Option<Payloads>,
58
- ) -> impl Future<Output = Result<RespondActivityTaskCompletedResponse>> + Send + 'b
59
- where 'a: 'b, Self: 'b;
60
-
61
- fn cancel_activity_task<'a, 'b>(
62
- &self,
63
- task_token: TaskToken,
64
- details: Option<Payloads>,
65
- ) -> impl Future<Output = Result<RespondActivityTaskCanceledResponse>> + Send + 'b
66
- where 'a: 'b, Self: 'b;
67
-
68
- fn fail_activity_task<'a, 'b>(
69
- &self,
70
- task_token: TaskToken,
71
- failure: Option<Failure>,
72
- ) -> impl Future<Output = Result<RespondActivityTaskFailedResponse>> + Send + 'b
73
- where 'a: 'b, Self: 'b;
74
-
75
- fn fail_workflow_task<'a, 'b>(
76
- &self,
77
- task_token: TaskToken,
78
- cause: WorkflowTaskFailedCause,
79
- failure: Option<Failure>,
80
- ) -> impl Future<Output = Result<RespondWorkflowTaskFailedResponse>> + Send + 'b
81
- where 'a: 'b, Self: 'b;
82
-
83
- fn record_activity_heartbeat<'a, 'b>(
84
- &self,
85
- task_token: TaskToken,
86
- details: Option<Payloads>,
87
- ) -> impl Future<Output = Result<RecordActivityTaskHeartbeatResponse>> + Send + 'b
88
- where 'a: 'b, Self: 'b;
89
-
90
- fn get_workflow_execution_history<'a, 'b>(
91
- &self,
92
- workflow_id: String,
93
- run_id: Option<String>,
94
- page_token: Vec<u8>
95
- ) -> impl Future<Output = Result<GetWorkflowExecutionHistoryResponse>> + Send + 'b
96
- where 'a: 'b, Self: 'b;
97
-
98
- fn respond_legacy_query<'a, 'b>(
99
- &self,
100
- task_token: TaskToken,
101
- query_result: QueryResult,
102
- ) -> impl Future<Output = Result<RespondQueryTaskCompletedResponse>> + Send + 'b
103
- where 'a: 'b, Self: 'b;
104
-
105
- fn capabilities(&self) -> Option<&'static get_system_info_response::Capabilities>;
106
- }
107
- }