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,1046 +0,0 @@
1
- use crate::{
2
- prost_dur,
3
- replay::{default_wes_attribs, TestHistoryBuilder, DEFAULT_WORKFLOW_TYPE},
4
- test_help::{
5
- hist_to_poll_resp, mock_sdk, mock_sdk_cfg, mock_worker, single_hist_mock_sg, MockPollCfg,
6
- ResponseType,
7
- },
8
- worker::{client::mocks::mock_workflow_client, LEGACY_QUERY_ID},
9
- };
10
- use anyhow::anyhow;
11
- use crossbeam::queue::SegQueue;
12
- use futures::{future::join_all, FutureExt};
13
- use std::{
14
- collections::HashMap,
15
- ops::Sub,
16
- sync::{
17
- atomic::{AtomicUsize, Ordering},
18
- Arc,
19
- },
20
- time::{Duration, SystemTime},
21
- };
22
- use temporal_client::WorkflowOptions;
23
- use temporal_sdk::{
24
- ActContext, ActivityCancelledError, LocalActivityOptions, WfContext, WorkflowResult,
25
- };
26
- use temporal_sdk_core_api::Worker;
27
- use temporal_sdk_core_protos::{
28
- coresdk::{
29
- activity_result::ActivityExecutionResult,
30
- workflow_activation::{workflow_activation_job, WorkflowActivationJob},
31
- workflow_commands::{ActivityCancellationType, QueryResult, QuerySuccess},
32
- workflow_completion::WorkflowActivationCompletion,
33
- ActivityTaskCompletion, AsJsonPayloadExt,
34
- },
35
- temporal::api::{
36
- common::v1::RetryPolicy,
37
- enums::v1::{EventType, TimeoutType, WorkflowTaskFailedCause},
38
- failure::v1::Failure,
39
- query::v1::WorkflowQuery,
40
- },
41
- DEFAULT_ACTIVITY_TYPE,
42
- };
43
- use temporal_sdk_core_test_utils::{
44
- schedule_local_activity_cmd, start_timer_cmd, WorkerTestHelpers,
45
- };
46
- use tokio::sync::Barrier;
47
-
48
- async fn echo(_ctx: ActContext, e: String) -> anyhow::Result<String> {
49
- Ok(e)
50
- }
51
-
52
- /// This test verifies that when replaying we are able to resolve local activities whose data we
53
- /// don't see until after the workflow issues the command
54
- #[rstest::rstest]
55
- #[case::replay(true, true)]
56
- #[case::not_replay(false, true)]
57
- #[case::replay_cache_off(true, false)]
58
- #[case::not_replay_cache_off(false, false)]
59
- #[tokio::test]
60
- async fn local_act_two_wfts_before_marker(#[case] replay: bool, #[case] cached: bool) {
61
- let mut t = TestHistoryBuilder::default();
62
- t.add_by_type(EventType::WorkflowExecutionStarted);
63
- t.add_full_wf_task();
64
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
65
- t.add_full_wf_task();
66
- t.add_local_activity_result_marker(1, "1", b"echo".into());
67
- t.add_timer_fired(timer_started_event_id, "1".to_string());
68
- t.add_full_wf_task();
69
- t.add_workflow_execution_completed();
70
-
71
- let wf_id = "fakeid";
72
- let mock = mock_workflow_client();
73
- let resps = if replay {
74
- vec![ResponseType::AllHistory]
75
- } else {
76
- vec![1.into(), 2.into(), ResponseType::AllHistory]
77
- };
78
- let mh = MockPollCfg::from_resp_batches(wf_id, t, resps, mock);
79
- let mut worker = mock_sdk_cfg(mh, |cfg| {
80
- if cached {
81
- cfg.max_cached_workflows = 1;
82
- }
83
- });
84
-
85
- worker.register_wf(
86
- DEFAULT_WORKFLOW_TYPE.to_owned(),
87
- |ctx: WfContext| async move {
88
- let la = ctx.local_activity(LocalActivityOptions {
89
- activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
90
- input: "hi".as_json_payload().expect("serializes fine"),
91
- ..Default::default()
92
- });
93
- ctx.timer(Duration::from_secs(1)).await;
94
- la.await;
95
- Ok(().into())
96
- },
97
- );
98
- worker.register_activity(DEFAULT_ACTIVITY_TYPE, echo);
99
- worker
100
- .submit_wf(
101
- wf_id.to_owned(),
102
- DEFAULT_WORKFLOW_TYPE.to_owned(),
103
- vec![],
104
- WorkflowOptions::default(),
105
- )
106
- .await
107
- .unwrap();
108
- worker.run_until_done().await.unwrap();
109
- }
110
-
111
- pub async fn local_act_fanout_wf(ctx: WfContext) -> WorkflowResult<()> {
112
- let las: Vec<_> = (1..=50)
113
- .map(|i| {
114
- ctx.local_activity(LocalActivityOptions {
115
- activity_type: "echo".to_string(),
116
- input: format!("Hi {i}")
117
- .as_json_payload()
118
- .expect("serializes fine"),
119
- ..Default::default()
120
- })
121
- })
122
- .collect();
123
- ctx.timer(Duration::from_secs(1)).await;
124
- join_all(las).await;
125
- Ok(().into())
126
- }
127
-
128
- #[tokio::test]
129
- async fn local_act_many_concurrent() {
130
- let mut t = TestHistoryBuilder::default();
131
- t.add_by_type(EventType::WorkflowExecutionStarted);
132
- t.add_full_wf_task();
133
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
134
- t.add_full_wf_task();
135
- for i in 1..=50 {
136
- t.add_local_activity_result_marker(i, &i.to_string(), b"echo".into());
137
- }
138
- t.add_timer_fired(timer_started_event_id, "1".to_string());
139
- t.add_full_wf_task();
140
- t.add_workflow_execution_completed();
141
-
142
- let wf_id = "fakeid";
143
- let mock = mock_workflow_client();
144
- let mh = MockPollCfg::from_resp_batches(wf_id, t, [1, 2, 3], mock);
145
- let mut worker = mock_sdk(mh);
146
-
147
- worker.register_wf(DEFAULT_WORKFLOW_TYPE.to_owned(), local_act_fanout_wf);
148
- worker.register_activity("echo", echo);
149
- worker
150
- .submit_wf(
151
- wf_id.to_owned(),
152
- DEFAULT_WORKFLOW_TYPE.to_owned(),
153
- vec![],
154
- WorkflowOptions::default(),
155
- )
156
- .await
157
- .unwrap();
158
- worker.run_until_done().await.unwrap();
159
- }
160
-
161
- /// Verifies that local activities which take more than a workflow task timeout will cause
162
- /// us to issue additional (empty) WFT completions with the force flag on, thus preventing timeout
163
- /// of WFT while the local activity continues to execute.
164
- ///
165
- /// The test with shutdown verifies if we call shutdown while the local activity is running that
166
- /// shutdown does not complete until it's finished.
167
- #[rstest::rstest]
168
- #[case::with_shutdown(true)]
169
- #[case::normal_complete(false)]
170
- #[tokio::test]
171
- async fn local_act_heartbeat(#[case] shutdown_middle: bool) {
172
- let mut t = TestHistoryBuilder::default();
173
- let wft_timeout = Duration::from_millis(200);
174
- t.add_wfe_started_with_wft_timeout(wft_timeout);
175
- t.add_full_wf_task();
176
- // Task created by WFT heartbeat
177
- t.add_full_wf_task();
178
- t.add_workflow_task_scheduled_and_started();
179
-
180
- let wf_id = "fakeid";
181
- let mock = mock_workflow_client();
182
- let mut mh = MockPollCfg::from_resp_batches(wf_id, t, [1, 2, 2, 2], mock);
183
- mh.enforce_correct_number_of_polls = false;
184
- let mut worker = mock_sdk_cfg(mh, |wc| {
185
- wc.max_cached_workflows = 1;
186
- wc.max_outstanding_workflow_tasks = 1;
187
- });
188
- let core = worker.core_worker.clone();
189
-
190
- let shutdown_barr: &'static Barrier = Box::leak(Box::new(Barrier::new(2)));
191
-
192
- worker.register_wf(
193
- DEFAULT_WORKFLOW_TYPE.to_owned(),
194
- |ctx: WfContext| async move {
195
- ctx.local_activity(LocalActivityOptions {
196
- activity_type: "echo".to_string(),
197
- input: "hi".as_json_payload().expect("serializes fine"),
198
- ..Default::default()
199
- })
200
- .await;
201
- Ok(().into())
202
- },
203
- );
204
- worker.register_activity("echo", move |_ctx: ActContext, str: String| async move {
205
- if shutdown_middle {
206
- shutdown_barr.wait().await;
207
- }
208
- // Take slightly more than two workflow tasks
209
- tokio::time::sleep(wft_timeout.mul_f32(2.2)).await;
210
- Ok(str)
211
- });
212
- worker
213
- .submit_wf(
214
- wf_id.to_owned(),
215
- DEFAULT_WORKFLOW_TYPE.to_owned(),
216
- vec![],
217
- WorkflowOptions::default(),
218
- )
219
- .await
220
- .unwrap();
221
- let (_, runres) = tokio::join!(
222
- async {
223
- if shutdown_middle {
224
- shutdown_barr.wait().await;
225
- core.shutdown().await;
226
- }
227
- },
228
- worker.run_until_done()
229
- );
230
- runres.unwrap();
231
- }
232
-
233
- #[rstest::rstest]
234
- #[case::retry_then_pass(true)]
235
- #[case::retry_until_fail(false)]
236
- #[tokio::test]
237
- async fn local_act_fail_and_retry(#[case] eventually_pass: bool) {
238
- let mut t = TestHistoryBuilder::default();
239
- t.add_by_type(EventType::WorkflowExecutionStarted);
240
- t.add_workflow_task_scheduled_and_started();
241
-
242
- let wf_id = "fakeid";
243
- let mock = mock_workflow_client();
244
- let mh = MockPollCfg::from_resp_batches(wf_id, t, [1], mock);
245
- let mut worker = mock_sdk(mh);
246
-
247
- worker.register_wf(
248
- DEFAULT_WORKFLOW_TYPE.to_owned(),
249
- move |ctx: WfContext| async move {
250
- let la_res = ctx
251
- .local_activity(LocalActivityOptions {
252
- activity_type: "echo".to_string(),
253
- input: "hi".as_json_payload().expect("serializes fine"),
254
- retry_policy: RetryPolicy {
255
- initial_interval: Some(prost_dur!(from_millis(50))),
256
- backoff_coefficient: 1.2,
257
- maximum_interval: None,
258
- maximum_attempts: 5,
259
- non_retryable_error_types: vec![],
260
- },
261
- ..Default::default()
262
- })
263
- .await;
264
- if eventually_pass {
265
- assert!(la_res.completed_ok())
266
- } else {
267
- assert!(la_res.failed())
268
- }
269
- Ok(().into())
270
- },
271
- );
272
- let attempts: &'static _ = Box::leak(Box::new(AtomicUsize::new(0)));
273
- worker.register_activity("echo", move |_ctx: ActContext, _: String| async move {
274
- // Succeed on 3rd attempt (which is ==2 since fetch_add returns prev val)
275
- if 2 == attempts.fetch_add(1, Ordering::Relaxed) && eventually_pass {
276
- Ok(())
277
- } else {
278
- Err(anyhow!("Oh no I failed!"))
279
- }
280
- });
281
- worker
282
- .submit_wf(
283
- wf_id.to_owned(),
284
- DEFAULT_WORKFLOW_TYPE.to_owned(),
285
- vec![],
286
- WorkflowOptions::default(),
287
- )
288
- .await
289
- .unwrap();
290
- worker.run_until_done().await.unwrap();
291
- let expected_attempts = if eventually_pass { 3 } else { 5 };
292
- assert_eq!(expected_attempts, attempts.load(Ordering::Relaxed));
293
- }
294
-
295
- #[tokio::test]
296
- async fn local_act_retry_long_backoff_uses_timer() {
297
- let mut t = TestHistoryBuilder::default();
298
- t.add_by_type(EventType::WorkflowExecutionStarted);
299
- t.add_full_wf_task();
300
- t.add_local_activity_fail_marker(
301
- 1,
302
- "1",
303
- Failure::application_failure("la failed".to_string(), false),
304
- );
305
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
306
- t.add_timer_fired(timer_started_event_id, "1".to_string());
307
- t.add_full_wf_task();
308
- t.add_local_activity_fail_marker(
309
- 2,
310
- "2",
311
- Failure::application_failure("la failed".to_string(), false),
312
- );
313
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
314
- t.add_timer_fired(timer_started_event_id, "2".to_string());
315
- t.add_full_wf_task();
316
- t.add_workflow_execution_completed();
317
-
318
- let wf_id = "fakeid";
319
- let mock = mock_workflow_client();
320
- let mh = MockPollCfg::from_resp_batches(
321
- wf_id,
322
- t,
323
- [1.into(), 2.into(), ResponseType::AllHistory],
324
- mock,
325
- );
326
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 1);
327
-
328
- worker.register_wf(
329
- DEFAULT_WORKFLOW_TYPE.to_owned(),
330
- |ctx: WfContext| async move {
331
- let la_res = ctx
332
- .local_activity(LocalActivityOptions {
333
- activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
334
- input: "hi".as_json_payload().expect("serializes fine"),
335
- retry_policy: RetryPolicy {
336
- initial_interval: Some(prost_dur!(from_millis(65))),
337
- // This will make the second backoff 65 seconds, plenty to use timer
338
- backoff_coefficient: 1_000.,
339
- maximum_interval: Some(prost_dur!(from_secs(600))),
340
- maximum_attempts: 3,
341
- non_retryable_error_types: vec![],
342
- },
343
- ..Default::default()
344
- })
345
- .await;
346
- assert!(la_res.failed());
347
- // Extra timer just to have an extra workflow task which we can return full history for
348
- ctx.timer(Duration::from_secs(1)).await;
349
- Ok(().into())
350
- },
351
- );
352
- worker.register_activity(
353
- DEFAULT_ACTIVITY_TYPE,
354
- move |_ctx: ActContext, _: String| async move {
355
- Result::<(), _>::Err(anyhow!("Oh no I failed!"))
356
- },
357
- );
358
- worker
359
- .submit_wf(
360
- wf_id.to_owned(),
361
- DEFAULT_WORKFLOW_TYPE.to_owned(),
362
- vec![],
363
- WorkflowOptions::default(),
364
- )
365
- .await
366
- .unwrap();
367
- worker.run_until_done().await.unwrap();
368
- }
369
-
370
- #[tokio::test]
371
- async fn local_act_null_result() {
372
- let mut t = TestHistoryBuilder::default();
373
- t.add_by_type(EventType::WorkflowExecutionStarted);
374
- t.add_full_wf_task();
375
- t.add_local_activity_marker(1, "1", None, None, |_| {});
376
- t.add_workflow_execution_completed();
377
-
378
- let wf_id = "fakeid";
379
- let mock = mock_workflow_client();
380
- let mh = MockPollCfg::from_resp_batches(wf_id, t, [ResponseType::AllHistory], mock);
381
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 1);
382
-
383
- worker.register_wf(
384
- DEFAULT_WORKFLOW_TYPE.to_owned(),
385
- |ctx: WfContext| async move {
386
- ctx.local_activity(LocalActivityOptions {
387
- activity_type: "nullres".to_string(),
388
- input: "hi".as_json_payload().expect("serializes fine"),
389
- ..Default::default()
390
- })
391
- .await;
392
- Ok(().into())
393
- },
394
- );
395
- worker.register_activity("nullres", |_ctx: ActContext, _: String| async { Ok(()) });
396
- worker
397
- .submit_wf(
398
- wf_id.to_owned(),
399
- DEFAULT_WORKFLOW_TYPE.to_owned(),
400
- vec![],
401
- WorkflowOptions::default(),
402
- )
403
- .await
404
- .unwrap();
405
- worker.run_until_done().await.unwrap();
406
- }
407
-
408
- #[tokio::test]
409
- async fn local_act_command_immediately_follows_la_marker() {
410
- // This repro only works both when cache is off, and there is at least one heartbeat wft
411
- // before the marker & next command are recorded.
412
- let mut t = TestHistoryBuilder::default();
413
- t.add_by_type(EventType::WorkflowExecutionStarted);
414
- t.add_full_wf_task();
415
- t.add_full_wf_task();
416
- t.add_local_activity_result_marker(1, "1", "done".into());
417
- t.add_by_type(EventType::TimerStarted);
418
- t.add_full_wf_task();
419
-
420
- let wf_id = "fakeid";
421
- let mock = mock_workflow_client();
422
- // Bug only repros when seeing history up to third wft
423
- let mh = MockPollCfg::from_resp_batches(wf_id, t, [3], mock);
424
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 0);
425
-
426
- worker.register_wf(
427
- DEFAULT_WORKFLOW_TYPE.to_owned(),
428
- |ctx: WfContext| async move {
429
- ctx.local_activity(LocalActivityOptions {
430
- activity_type: "nullres".to_string(),
431
- input: "hi".as_json_payload().expect("serializes fine"),
432
- ..Default::default()
433
- })
434
- .await;
435
- ctx.timer(Duration::from_secs(1)).await;
436
- Ok(().into())
437
- },
438
- );
439
- worker.register_activity("nullres", |_ctx: ActContext, _: String| async { Ok(()) });
440
- worker
441
- .submit_wf(
442
- wf_id.to_owned(),
443
- DEFAULT_WORKFLOW_TYPE.to_owned(),
444
- vec![],
445
- WorkflowOptions::default(),
446
- )
447
- .await
448
- .unwrap();
449
- worker.run_until_done().await.unwrap();
450
- }
451
-
452
- #[tokio::test]
453
- async fn query_during_wft_heartbeat_doesnt_accidentally_fail_to_continue_heartbeat() {
454
- let wfid = "fake_wf_id";
455
- let mut t = TestHistoryBuilder::default();
456
- t.add_wfe_started_with_wft_timeout(Duration::from_millis(200));
457
- t.add_full_wf_task();
458
- // get query here
459
- t.add_full_wf_task();
460
- t.add_local_activity_result_marker(1, "1", "done".into());
461
- t.add_workflow_execution_completed();
462
-
463
- let query_with_hist_task = {
464
- let mut pr = hist_to_poll_resp(&t, wfid, ResponseType::ToTaskNum(1));
465
- pr.queries = HashMap::new();
466
- pr.queries.insert(
467
- "the-query".to_string(),
468
- WorkflowQuery {
469
- query_type: "query-type".to_string(),
470
- query_args: Some(b"hi".into()),
471
- header: None,
472
- },
473
- );
474
- pr
475
- };
476
- let after_la_resolved = Arc::new(Barrier::new(2));
477
- let poll_barr = after_la_resolved.clone();
478
- let tasks = [
479
- query_with_hist_task,
480
- hist_to_poll_resp(
481
- &t,
482
- wfid,
483
- ResponseType::UntilResolved(
484
- async move {
485
- poll_barr.wait().await;
486
- }
487
- .boxed(),
488
- 3,
489
- ),
490
- ),
491
- ];
492
- let mock = mock_workflow_client();
493
- let mut mock = single_hist_mock_sg(wfid, t, tasks, mock, true);
494
- mock.worker_cfg(|wc| wc.max_cached_workflows = 1);
495
- let core = mock_worker(mock);
496
-
497
- let barrier = Barrier::new(2);
498
-
499
- let wf_fut = async {
500
- let task = core.poll_workflow_activation().await.unwrap();
501
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
502
- task.run_id,
503
- schedule_local_activity_cmd(
504
- 1,
505
- "1",
506
- ActivityCancellationType::TryCancel,
507
- Duration::from_secs(60),
508
- ),
509
- ))
510
- .await
511
- .unwrap();
512
- let task = core.poll_workflow_activation().await.unwrap();
513
- // Get query, and complete it
514
- let query = assert_matches!(
515
- task.jobs.as_slice(),
516
- [WorkflowActivationJob {
517
- variant: Some(workflow_activation_job::Variant::QueryWorkflow(q)),
518
- }] => q
519
- );
520
- // Now complete the LA
521
- barrier.wait().await;
522
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
523
- task.run_id,
524
- QueryResult {
525
- query_id: query.query_id.clone(),
526
- variant: Some(
527
- QuerySuccess {
528
- response: Some("whatever".into()),
529
- }
530
- .into(),
531
- ),
532
- }
533
- .into(),
534
- ))
535
- .await
536
- .unwrap();
537
- // Activation with it resolving:
538
- let task = core.poll_workflow_activation().await.unwrap();
539
- assert_matches!(
540
- task.jobs.as_slice(),
541
- [WorkflowActivationJob {
542
- variant: Some(workflow_activation_job::Variant::ResolveActivity(_)),
543
- }]
544
- );
545
- core.complete_execution(&task.run_id).await;
546
- };
547
- let act_fut = async {
548
- let act_task = core.poll_activity_task().await.unwrap();
549
- barrier.wait().await;
550
- core.complete_activity_task(ActivityTaskCompletion {
551
- task_token: act_task.task_token,
552
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
553
- })
554
- .await
555
- .unwrap();
556
- after_la_resolved.wait().await;
557
- };
558
-
559
- tokio::join!(wf_fut, act_fut);
560
- }
561
-
562
- #[rstest::rstest]
563
- #[case::impossible_query_in_task(true)]
564
- #[case::real_history(false)]
565
- #[tokio::test]
566
- async fn la_resolve_during_legacy_query_does_not_combine(#[case] impossible_query_in_task: bool) {
567
- // Ensures we do not send an activation with a legacy query and any other work, which should
568
- // never happen, but there was an issue where an LA resolving could trigger that.
569
- let wfid = "fake_wf_id";
570
- let mut t = TestHistoryBuilder::default();
571
- t.add(default_wes_attribs());
572
- // Since we don't send queries with start workflow, need one workflow task of something else
573
- // b/c we want to get an activation with a job and a nonlegacy query
574
- t.add_full_wf_task();
575
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
576
- t.add_timer_fired(timer_started_event_id, "1".to_string());
577
-
578
- // nonlegacy query got here & LA started here
579
- t.add_full_wf_task();
580
- // legacy query got here, at the same time that the LA is resolved
581
- t.add_local_activity_result_marker(1, "1", "whatever".into());
582
- t.add_workflow_execution_completed();
583
-
584
- let barr = Arc::new(Barrier::new(2));
585
- let barr_c = barr.clone();
586
-
587
- let tasks = [
588
- hist_to_poll_resp(&t, wfid.to_owned(), ResponseType::ToTaskNum(1)),
589
- {
590
- let mut pr = hist_to_poll_resp(&t, wfid.to_owned(), ResponseType::OneTask(2));
591
- pr.queries = HashMap::new();
592
- pr.queries.insert(
593
- "q1".to_string(),
594
- WorkflowQuery {
595
- query_type: "query-type".to_string(),
596
- query_args: Some(b"hi".into()),
597
- header: None,
598
- },
599
- );
600
- pr
601
- },
602
- {
603
- let mut pr = hist_to_poll_resp(
604
- &t,
605
- wfid.to_owned(),
606
- ResponseType::UntilResolved(
607
- async move {
608
- barr_c.wait().await;
609
- // This sleep is the only not-incredibly-invasive way to ensure the LA
610
- // resolves & updates machines before we process this task
611
- tokio::time::sleep(Duration::from_secs(1)).await;
612
- }
613
- .boxed(),
614
- 2,
615
- ),
616
- );
617
- // Strip beginning of history so the only events are WFT sched/started, we need to look
618
- // like we hit the cache
619
- {
620
- let h = pr.history.as_mut().unwrap();
621
- h.events = h.events.split_off(6);
622
- }
623
- // In the nonsense server response case, we attach a legacy query, otherwise this
624
- // response looks like a normal response to a forced WFT heartbeat.
625
- if impossible_query_in_task {
626
- pr.query = Some(WorkflowQuery {
627
- query_type: "query-type".to_string(),
628
- query_args: Some(b"hi".into()),
629
- header: None,
630
- });
631
- }
632
- pr
633
- },
634
- ];
635
- let mut mock = mock_workflow_client();
636
- if impossible_query_in_task {
637
- mock.expect_respond_legacy_query()
638
- .times(1)
639
- .returning(move |_, _| Ok(Default::default()));
640
- }
641
- let mut mock = single_hist_mock_sg(wfid, t, tasks, mock, true);
642
- mock.worker_cfg(|wc| wc.max_cached_workflows = 1);
643
- let core = mock_worker(mock);
644
-
645
- let wf_fut = async {
646
- let task = core.poll_workflow_activation().await.unwrap();
647
- assert_matches!(
648
- task.jobs.as_slice(),
649
- &[WorkflowActivationJob {
650
- variant: Some(workflow_activation_job::Variant::StartWorkflow(_)),
651
- },]
652
- );
653
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
654
- task.run_id,
655
- start_timer_cmd(1, Duration::from_secs(1)),
656
- ))
657
- .await
658
- .unwrap();
659
- let task = core.poll_workflow_activation().await.unwrap();
660
- assert_matches!(
661
- task.jobs.as_slice(),
662
- &[
663
- WorkflowActivationJob {
664
- variant: Some(workflow_activation_job::Variant::FireTimer(_)),
665
- },
666
- WorkflowActivationJob {
667
- variant: Some(workflow_activation_job::Variant::QueryWorkflow(_)),
668
- }
669
- ]
670
- );
671
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
672
- task.run_id,
673
- vec![
674
- schedule_local_activity_cmd(
675
- 1,
676
- "act-id",
677
- ActivityCancellationType::TryCancel,
678
- Duration::from_secs(60),
679
- ),
680
- QueryResult {
681
- query_id: "q1".to_string(),
682
- variant: Some(
683
- QuerySuccess {
684
- response: Some("whatev".into()),
685
- }
686
- .into(),
687
- ),
688
- }
689
- .into(),
690
- ],
691
- ))
692
- .await
693
- .unwrap();
694
- barr.wait().await;
695
- let task = core.poll_workflow_activation().await.unwrap();
696
- // The next task needs to be resolve, since the LA is completed immediately
697
- assert_matches!(
698
- task.jobs.as_slice(),
699
- [WorkflowActivationJob {
700
- variant: Some(workflow_activation_job::Variant::ResolveActivity(_)),
701
- }]
702
- );
703
- // Complete workflow
704
- core.complete_execution(&task.run_id).await;
705
- if impossible_query_in_task {
706
- // finish last query
707
- let task = core.poll_workflow_activation().await.unwrap();
708
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
709
- task.run_id,
710
- vec![QueryResult {
711
- query_id: LEGACY_QUERY_ID.to_string(),
712
- variant: Some(
713
- QuerySuccess {
714
- response: Some("whatev".into()),
715
- }
716
- .into(),
717
- ),
718
- }
719
- .into()],
720
- ))
721
- .await
722
- .unwrap();
723
- }
724
- };
725
- let act_fut = async {
726
- let act_task = core.poll_activity_task().await.unwrap();
727
- core.complete_activity_task(ActivityTaskCompletion {
728
- task_token: act_task.task_token,
729
- result: Some(ActivityExecutionResult::ok(vec![1].into())),
730
- })
731
- .await
732
- .unwrap();
733
- };
734
-
735
- tokio::join!(wf_fut, act_fut);
736
- core.shutdown().await;
737
- }
738
-
739
- #[tokio::test]
740
- async fn test_schedule_to_start_timeout() {
741
- let mut t = TestHistoryBuilder::default();
742
- t.add_by_type(EventType::WorkflowExecutionStarted);
743
- t.add_full_wf_task();
744
-
745
- let wf_id = "fakeid";
746
- let mock = mock_workflow_client();
747
- let mh = MockPollCfg::from_resp_batches(wf_id, t, [ResponseType::ToTaskNum(1)], mock);
748
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 1);
749
-
750
- worker.register_wf(
751
- DEFAULT_WORKFLOW_TYPE.to_owned(),
752
- |ctx: WfContext| async move {
753
- let la_res = ctx
754
- .local_activity(LocalActivityOptions {
755
- activity_type: "echo".to_string(),
756
- input: "hi".as_json_payload().expect("serializes fine"),
757
- // Impossibly small timeout so we timeout in the queue
758
- schedule_to_start_timeout: prost_dur!(from_nanos(1)),
759
- ..Default::default()
760
- })
761
- .await;
762
- assert_eq!(la_res.timed_out(), Some(TimeoutType::ScheduleToStart));
763
- Ok(().into())
764
- },
765
- );
766
- worker.register_activity(
767
- "echo",
768
- move |_ctx: ActContext, _: String| async move { Ok(()) },
769
- );
770
- worker
771
- .submit_wf(
772
- wf_id.to_owned(),
773
- DEFAULT_WORKFLOW_TYPE.to_owned(),
774
- vec![],
775
- WorkflowOptions::default(),
776
- )
777
- .await
778
- .unwrap();
779
- worker.run_until_done().await.unwrap();
780
- }
781
-
782
- #[rstest::rstest]
783
- #[case::sched_to_start(true)]
784
- #[case::sched_to_close(false)]
785
- #[tokio::test]
786
- async fn test_schedule_to_start_timeout_not_based_on_original_time(
787
- #[case] is_sched_to_start: bool,
788
- ) {
789
- // We used to carry over the schedule time of LAs from the "original" schedule time if these LAs
790
- // created newly after backing off across a timer. That was a mistake, since schedule-to-start
791
- // timeouts should apply to when the new attempt was scheduled. This test verifies:
792
- // * we don't time out on s-t-s timeouts because of that, when the param is true.
793
- // * we do properly time out on s-t-c timeouts when the param is false
794
-
795
- let mut t = TestHistoryBuilder::default();
796
- t.add_by_type(EventType::WorkflowExecutionStarted);
797
- t.add_full_wf_task();
798
- let orig_sched = SystemTime::now().sub(Duration::from_secs(60 * 20));
799
- t.add_local_activity_marker(
800
- 1,
801
- "1",
802
- None,
803
- Some(Failure::application_failure("la failed".to_string(), false)),
804
- |deets| {
805
- // Really old schedule time, which should _not_ count against schedule_to_start
806
- deets.original_schedule_time = Some(orig_sched.into());
807
- // Backoff value must be present since we're simulating timer backoff
808
- deets.backoff = Some(prost_dur!(from_secs(100)));
809
- },
810
- );
811
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
812
- t.add_timer_fired(timer_started_event_id, "1".to_string());
813
- t.add_workflow_task_scheduled_and_started();
814
-
815
- let wf_id = "fakeid";
816
- let mock = mock_workflow_client();
817
- let mh = MockPollCfg::from_resp_batches(wf_id, t, [ResponseType::AllHistory], mock);
818
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 1);
819
-
820
- let schedule_to_close_timeout = Some(if is_sched_to_start {
821
- // This 60 minute timeout will not have elapsed according to the original
822
- // schedule time in the history.
823
- Duration::from_secs(60 * 60)
824
- } else {
825
- // This 10 minute timeout will have already elapsed
826
- Duration::from_secs(10 * 60)
827
- });
828
-
829
- worker.register_wf(
830
- DEFAULT_WORKFLOW_TYPE.to_owned(),
831
- move |ctx: WfContext| async move {
832
- let la_res = ctx
833
- .local_activity(LocalActivityOptions {
834
- activity_type: "echo".to_string(),
835
- input: "hi".as_json_payload().expect("serializes fine"),
836
- retry_policy: RetryPolicy {
837
- initial_interval: Some(prost_dur!(from_millis(50))),
838
- backoff_coefficient: 1.2,
839
- maximum_interval: None,
840
- maximum_attempts: 5,
841
- non_retryable_error_types: vec![],
842
- },
843
- schedule_to_start_timeout: Some(Duration::from_secs(60)),
844
- schedule_to_close_timeout,
845
- ..Default::default()
846
- })
847
- .await;
848
- if is_sched_to_start {
849
- assert!(la_res.completed_ok());
850
- } else {
851
- assert_eq!(la_res.timed_out(), Some(TimeoutType::ScheduleToClose));
852
- }
853
- Ok(().into())
854
- },
855
- );
856
- worker.register_activity(
857
- "echo",
858
- move |_ctx: ActContext, _: String| async move { Ok(()) },
859
- );
860
- worker
861
- .submit_wf(
862
- wf_id.to_owned(),
863
- DEFAULT_WORKFLOW_TYPE.to_owned(),
864
- vec![],
865
- WorkflowOptions::default(),
866
- )
867
- .await
868
- .unwrap();
869
- worker.run_until_done().await.unwrap();
870
- }
871
-
872
- #[tokio::test]
873
- async fn wft_failure_cancels_running_las() {
874
- let mut t = TestHistoryBuilder::default();
875
- t.add_wfe_started_with_wft_timeout(Duration::from_millis(200));
876
- t.add_full_wf_task();
877
- let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
878
- t.add_timer_fired(timer_started_event_id, "1".to_string());
879
- t.add_workflow_task_scheduled_and_started();
880
-
881
- let wf_id = "fakeid";
882
- let mock = mock_workflow_client();
883
- let mut mh = MockPollCfg::from_resp_batches(wf_id, t, [1, 2], mock);
884
- mh.num_expected_fails = 1;
885
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 1);
886
-
887
- worker.register_wf(
888
- DEFAULT_WORKFLOW_TYPE.to_owned(),
889
- |ctx: WfContext| async move {
890
- let la_handle = ctx.local_activity(LocalActivityOptions {
891
- activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
892
- input: "hi".as_json_payload().expect("serializes fine"),
893
- ..Default::default()
894
- });
895
- tokio::join!(
896
- async {
897
- ctx.timer(Duration::from_secs(1)).await;
898
- panic!("ahhh I'm failing wft")
899
- },
900
- la_handle
901
- );
902
- Ok(().into())
903
- },
904
- );
905
- worker.register_activity(
906
- DEFAULT_ACTIVITY_TYPE,
907
- move |ctx: ActContext, _: String| async move {
908
- let res = tokio::time::timeout(Duration::from_millis(500), ctx.cancelled()).await;
909
- if res.is_err() {
910
- panic!("Activity must be cancelled!!!!");
911
- }
912
- Result::<(), _>::Err(ActivityCancelledError::default().into())
913
- },
914
- );
915
- worker
916
- .submit_wf(
917
- wf_id.to_owned(),
918
- DEFAULT_WORKFLOW_TYPE.to_owned(),
919
- vec![],
920
- WorkflowOptions::default(),
921
- )
922
- .await
923
- .unwrap();
924
- worker.run_until_done().await.unwrap();
925
- }
926
-
927
- #[tokio::test]
928
- async fn resolved_las_not_recorded_if_wft_fails_many_times() {
929
- // We shouldn't record any LA results if the workflow activation is repeatedly failing. There
930
- // was an issue that, because we stop reporting WFT failures after 2 tries, this meant the WFT
931
- // was not marked as "completed" and the WFT could accidentally be replied to with LA results.
932
- let mut t = TestHistoryBuilder::default();
933
- t.add_by_type(EventType::WorkflowExecutionStarted);
934
- t.add_workflow_task_scheduled_and_started();
935
- t.add_workflow_task_failed_with_failure(
936
- WorkflowTaskFailedCause::Unspecified,
937
- Default::default(),
938
- );
939
- t.add_workflow_task_scheduled_and_started();
940
-
941
- let wf_id = "fakeid";
942
- let mock = mock_workflow_client();
943
- let mut mh = MockPollCfg::from_resp_batches(
944
- wf_id,
945
- t,
946
- [1.into(), ResponseType::AllHistory, ResponseType::AllHistory],
947
- mock,
948
- );
949
- mh.num_expected_fails = 2;
950
- mh.num_expected_completions = Some(0.into());
951
- let mut worker = mock_sdk_cfg(mh, |w| w.max_cached_workflows = 1);
952
-
953
- worker.register_wf(
954
- DEFAULT_WORKFLOW_TYPE.to_owned(),
955
- |ctx: WfContext| async move {
956
- ctx.local_activity(LocalActivityOptions {
957
- activity_type: "echo".to_string(),
958
- input: "hi".as_json_payload().expect("serializes fine"),
959
- ..Default::default()
960
- })
961
- .await;
962
- panic!("Oh nooooo")
963
- },
964
- );
965
- worker.register_activity(
966
- "echo",
967
- move |_: ActContext, _: String| async move { Ok(()) },
968
- );
969
- worker
970
- .submit_wf(
971
- wf_id.to_owned(),
972
- DEFAULT_WORKFLOW_TYPE.to_owned(),
973
- vec![],
974
- WorkflowOptions::default(),
975
- )
976
- .await
977
- .unwrap();
978
- worker.run_until_done().await.unwrap();
979
- }
980
-
981
- #[tokio::test]
982
- async fn local_act_records_nonfirst_attempts_ok() {
983
- let mut t = TestHistoryBuilder::default();
984
- let wft_timeout = Duration::from_millis(200);
985
- t.add_wfe_started_with_wft_timeout(wft_timeout);
986
- t.add_full_wf_task();
987
- t.add_full_wf_task();
988
- t.add_full_wf_task();
989
- t.add_workflow_task_scheduled_and_started();
990
-
991
- let wf_id = "fakeid";
992
- let mock = mock_workflow_client();
993
- let mut mh = MockPollCfg::from_resp_batches(wf_id, t, [1, 2, 3], mock);
994
- let nonfirst_counts = Arc::new(SegQueue::new());
995
- let nfc_c = nonfirst_counts.clone();
996
- mh.completion_asserts = Some(Box::new(move |c| {
997
- nfc_c.push(
998
- c.metering_metadata
999
- .nonfirst_local_activity_execution_attempts,
1000
- );
1001
- }));
1002
- let mut worker = mock_sdk_cfg(mh, |wc| {
1003
- wc.max_cached_workflows = 1;
1004
- wc.max_outstanding_workflow_tasks = 1;
1005
- });
1006
-
1007
- worker.register_wf(
1008
- DEFAULT_WORKFLOW_TYPE.to_owned(),
1009
- |ctx: WfContext| async move {
1010
- ctx.local_activity(LocalActivityOptions {
1011
- activity_type: "echo".to_string(),
1012
- input: "hi".as_json_payload().expect("serializes fine"),
1013
- retry_policy: RetryPolicy {
1014
- initial_interval: Some(prost_dur!(from_millis(10))),
1015
- backoff_coefficient: 1.0,
1016
- maximum_interval: None,
1017
- maximum_attempts: 0,
1018
- non_retryable_error_types: vec![],
1019
- },
1020
- ..Default::default()
1021
- })
1022
- .await;
1023
- Ok(().into())
1024
- },
1025
- );
1026
- worker.register_activity("echo", move |_ctx: ActContext, _: String| async move {
1027
- Result::<(), _>::Err(anyhow!("I fail"))
1028
- });
1029
- worker
1030
- .submit_wf(
1031
- wf_id.to_owned(),
1032
- DEFAULT_WORKFLOW_TYPE.to_owned(),
1033
- vec![],
1034
- WorkflowOptions::default(),
1035
- )
1036
- .await
1037
- .unwrap();
1038
- worker.run_until_done().await.unwrap();
1039
- // 3 workflow tasks
1040
- assert_eq!(nonfirst_counts.len(), 3);
1041
- // First task's non-first count should, of course, be 0
1042
- assert_eq!(nonfirst_counts.pop().unwrap(), 0);
1043
- // Next two, some nonzero amount which could vary based on test load
1044
- assert!(nonfirst_counts.pop().unwrap() > 0);
1045
- assert!(nonfirst_counts.pop().unwrap() > 0);
1046
- }