temporalio 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (585) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +4035 -0
  3. data/Cargo.toml +25 -0
  4. data/Gemfile +20 -0
  5. data/LICENSE +16 -15
  6. data/README.md +455 -195
  7. data/Rakefile +387 -0
  8. data/ext/Cargo.toml +25 -0
  9. data/lib/temporalio/activity/complete_async_error.rb +11 -0
  10. data/lib/temporalio/activity/context.rb +82 -77
  11. data/lib/temporalio/activity/definition.rb +77 -0
  12. data/lib/temporalio/activity/info.rb +42 -46
  13. data/lib/temporalio/activity.rb +49 -65
  14. data/lib/temporalio/api/batch/v1/message.rb +31 -0
  15. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +93 -0
  16. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
  17. data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
  18. data/lib/temporalio/api/cloud/identity/v1/message.rb +36 -0
  19. data/lib/temporalio/api/cloud/namespace/v1/message.rb +35 -0
  20. data/lib/temporalio/api/cloud/operation/v1/message.rb +27 -0
  21. data/lib/temporalio/api/cloud/region/v1/message.rb +23 -0
  22. data/lib/temporalio/api/command/v1/message.rb +46 -0
  23. data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
  24. data/lib/temporalio/api/common/v1/message.rb +41 -0
  25. data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
  26. data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
  27. data/lib/temporalio/api/enums/v1/common.rb +26 -0
  28. data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
  29. data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
  30. data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
  31. data/lib/temporalio/api/enums/v1/query.rb +22 -0
  32. data/lib/temporalio/api/enums/v1/reset.rb +23 -0
  33. data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
  34. data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
  35. data/lib/temporalio/api/enums/v1/update.rb +22 -0
  36. data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
  37. data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
  38. data/lib/temporalio/api/export/v1/message.rb +24 -0
  39. data/lib/temporalio/api/failure/v1/message.rb +35 -0
  40. data/lib/temporalio/api/filter/v1/message.rb +27 -0
  41. data/lib/temporalio/api/history/v1/message.rb +90 -0
  42. data/lib/temporalio/api/namespace/v1/message.rb +31 -0
  43. data/lib/temporalio/api/nexus/v1/message.rb +40 -0
  44. data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
  45. data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
  46. data/lib/temporalio/api/operatorservice.rb +3 -0
  47. data/lib/temporalio/api/protocol/v1/message.rb +23 -0
  48. data/lib/temporalio/api/query/v1/message.rb +27 -0
  49. data/lib/temporalio/api/replication/v1/message.rb +26 -0
  50. data/lib/temporalio/api/schedule/v1/message.rb +42 -0
  51. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
  52. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
  53. data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
  54. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
  55. data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
  56. data/lib/temporalio/api/update/v1/message.rb +33 -0
  57. data/lib/temporalio/api/version/v1/message.rb +26 -0
  58. data/lib/temporalio/api/workflow/v1/message.rb +43 -0
  59. data/lib/temporalio/api/workflowservice/v1/request_response.rb +189 -0
  60. data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
  61. data/lib/temporalio/api/workflowservice.rb +3 -0
  62. data/lib/temporalio/api.rb +13 -0
  63. data/lib/temporalio/cancellation.rb +150 -0
  64. data/lib/temporalio/client/activity_id_reference.rb +32 -0
  65. data/lib/temporalio/client/async_activity_handle.rb +110 -0
  66. data/lib/temporalio/client/connection/cloud_service.rb +648 -0
  67. data/lib/temporalio/client/connection/operator_service.rb +249 -0
  68. data/lib/temporalio/client/connection/service.rb +41 -0
  69. data/lib/temporalio/client/connection/workflow_service.rb +1218 -0
  70. data/lib/temporalio/client/connection.rb +270 -0
  71. data/lib/temporalio/client/interceptor.rb +316 -0
  72. data/lib/temporalio/client/workflow_execution.rb +103 -0
  73. data/lib/temporalio/client/workflow_execution_count.rb +36 -0
  74. data/lib/temporalio/client/workflow_execution_status.rb +18 -0
  75. data/lib/temporalio/client/workflow_handle.rb +380 -177
  76. data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
  77. data/lib/temporalio/client/workflow_update_handle.rb +67 -0
  78. data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
  79. data/lib/temporalio/client.rb +366 -93
  80. data/lib/temporalio/common_enums.rb +24 -0
  81. data/lib/temporalio/converters/data_converter.rb +102 -0
  82. data/lib/temporalio/converters/failure_converter.rb +200 -0
  83. data/lib/temporalio/converters/payload_codec.rb +26 -0
  84. data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
  85. data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
  86. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
  87. data/lib/temporalio/converters/payload_converter/composite.rb +62 -0
  88. data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
  89. data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
  90. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
  91. data/lib/temporalio/converters/payload_converter.rb +73 -0
  92. data/lib/temporalio/converters.rb +9 -0
  93. data/lib/temporalio/error/failure.rb +119 -94
  94. data/lib/temporalio/error.rb +147 -0
  95. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
  96. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
  97. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
  98. data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
  99. data/lib/temporalio/internal/bridge/api/core_interface.rb +36 -0
  100. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
  101. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +52 -0
  102. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +54 -0
  103. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
  104. data/lib/temporalio/internal/bridge/api.rb +3 -0
  105. data/lib/temporalio/internal/bridge/client.rb +90 -0
  106. data/lib/temporalio/internal/bridge/runtime.rb +53 -0
  107. data/lib/temporalio/internal/bridge/testing.rb +46 -0
  108. data/lib/temporalio/internal/bridge/worker.rb +83 -0
  109. data/lib/temporalio/internal/bridge.rb +36 -0
  110. data/lib/temporalio/internal/client/implementation.rb +525 -0
  111. data/lib/temporalio/internal/proto_utils.rb +54 -0
  112. data/lib/temporalio/internal/worker/activity_worker.rb +345 -0
  113. data/lib/temporalio/internal/worker/multi_runner.rb +169 -0
  114. data/lib/temporalio/internal.rb +7 -0
  115. data/lib/temporalio/retry_policy.rb +39 -80
  116. data/lib/temporalio/runtime.rb +259 -13
  117. data/lib/temporalio/scoped_logger.rb +96 -0
  118. data/lib/temporalio/search_attributes.rb +300 -0
  119. data/lib/temporalio/testing/activity_environment.rb +132 -0
  120. data/lib/temporalio/testing/workflow_environment.rb +113 -88
  121. data/lib/temporalio/testing.rb +4 -169
  122. data/lib/temporalio/version.rb +3 -1
  123. data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
  124. data/lib/temporalio/worker/activity_executor/thread_pool.rb +254 -0
  125. data/lib/temporalio/worker/activity_executor.rb +55 -0
  126. data/lib/temporalio/worker/interceptor.rb +88 -0
  127. data/lib/temporalio/worker/tuner.rb +151 -0
  128. data/lib/temporalio/worker.rb +385 -163
  129. data/lib/temporalio/workflow_history.rb +22 -0
  130. data/lib/temporalio.rb +2 -7
  131. data/temporalio.gemspec +20 -39
  132. metadata +131 -712
  133. data/bridge/Cargo.lock +0 -2997
  134. data/bridge/Cargo.toml +0 -29
  135. data/bridge/sdk-core/ARCHITECTURE.md +0 -76
  136. data/bridge/sdk-core/Cargo.toml +0 -2
  137. data/bridge/sdk-core/LICENSE.txt +0 -23
  138. data/bridge/sdk-core/README.md +0 -117
  139. data/bridge/sdk-core/arch_docs/diagrams/README.md +0 -10
  140. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +0 -40
  141. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  142. data/bridge/sdk-core/arch_docs/sticky_queues.md +0 -51
  143. data/bridge/sdk-core/client/Cargo.toml +0 -40
  144. data/bridge/sdk-core/client/LICENSE.txt +0 -23
  145. data/bridge/sdk-core/client/src/lib.rs +0 -1462
  146. data/bridge/sdk-core/client/src/metrics.rs +0 -174
  147. data/bridge/sdk-core/client/src/raw.rs +0 -932
  148. data/bridge/sdk-core/client/src/retry.rs +0 -763
  149. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +0 -185
  150. data/bridge/sdk-core/core/Cargo.toml +0 -129
  151. data/bridge/sdk-core/core/LICENSE.txt +0 -23
  152. data/bridge/sdk-core/core/benches/workflow_replay.rs +0 -76
  153. data/bridge/sdk-core/core/src/abstractions.rs +0 -355
  154. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +0 -1049
  155. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +0 -221
  156. data/bridge/sdk-core/core/src/core_tests/determinism.rs +0 -270
  157. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +0 -1046
  158. data/bridge/sdk-core/core/src/core_tests/mod.rs +0 -100
  159. data/bridge/sdk-core/core/src/core_tests/queries.rs +0 -893
  160. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +0 -65
  161. data/bridge/sdk-core/core/src/core_tests/workers.rs +0 -257
  162. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +0 -124
  163. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +0 -2433
  164. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +0 -609
  165. data/bridge/sdk-core/core/src/internal_flags.rs +0 -136
  166. data/bridge/sdk-core/core/src/lib.rs +0 -289
  167. data/bridge/sdk-core/core/src/pollers/mod.rs +0 -54
  168. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +0 -297
  169. data/bridge/sdk-core/core/src/protosext/mod.rs +0 -428
  170. data/bridge/sdk-core/core/src/replay/mod.rs +0 -215
  171. data/bridge/sdk-core/core/src/retry_logic.rs +0 -202
  172. data/bridge/sdk-core/core/src/telemetry/log_export.rs +0 -190
  173. data/bridge/sdk-core/core/src/telemetry/metrics.rs +0 -462
  174. data/bridge/sdk-core/core/src/telemetry/mod.rs +0 -423
  175. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +0 -83
  176. data/bridge/sdk-core/core/src/test_help/mod.rs +0 -939
  177. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +0 -536
  178. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -89
  179. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +0 -1278
  180. data/bridge/sdk-core/core/src/worker/activities.rs +0 -557
  181. data/bridge/sdk-core/core/src/worker/client/mocks.rs +0 -107
  182. data/bridge/sdk-core/core/src/worker/client.rs +0 -389
  183. data/bridge/sdk-core/core/src/worker/mod.rs +0 -677
  184. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
  185. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +0 -99
  186. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +0 -1111
  187. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +0 -964
  188. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +0 -294
  189. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -168
  190. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +0 -918
  191. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +0 -137
  192. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +0 -158
  193. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +0 -130
  194. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +0 -1525
  195. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +0 -324
  196. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +0 -179
  197. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -659
  198. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +0 -439
  199. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +0 -435
  200. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +0 -175
  201. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +0 -249
  202. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +0 -85
  203. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +0 -1280
  204. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +0 -269
  205. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -213
  206. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +0 -1305
  207. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +0 -1276
  208. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +0 -128
  209. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +0 -125
  210. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +0 -85
  211. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +0 -117
  212. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +0 -24
  213. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +0 -715
  214. data/bridge/sdk-core/core-api/Cargo.toml +0 -33
  215. data/bridge/sdk-core/core-api/LICENSE.txt +0 -23
  216. data/bridge/sdk-core/core-api/src/errors.rs +0 -62
  217. data/bridge/sdk-core/core-api/src/lib.rs +0 -113
  218. data/bridge/sdk-core/core-api/src/telemetry.rs +0 -141
  219. data/bridge/sdk-core/core-api/src/worker.rs +0 -161
  220. data/bridge/sdk-core/etc/deps.svg +0 -162
  221. data/bridge/sdk-core/etc/dynamic-config.yaml +0 -2
  222. data/bridge/sdk-core/etc/otel-collector-config.yaml +0 -36
  223. data/bridge/sdk-core/etc/prometheus.yaml +0 -6
  224. data/bridge/sdk-core/etc/regen-depgraph.sh +0 -5
  225. data/bridge/sdk-core/fsm/Cargo.toml +0 -18
  226. data/bridge/sdk-core/fsm/LICENSE.txt +0 -23
  227. data/bridge/sdk-core/fsm/README.md +0 -3
  228. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  229. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -23
  230. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +0 -650
  231. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  232. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +0 -18
  233. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  234. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +0 -41
  235. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +0 -14
  236. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +0 -11
  237. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +0 -32
  238. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +0 -31
  239. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +0 -46
  240. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +0 -29
  241. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -12
  242. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +0 -32
  243. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +0 -18
  244. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  245. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +0 -11
  246. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  247. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +0 -11
  248. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  249. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  250. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -23
  251. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +0 -254
  252. data/bridge/sdk-core/fsm/src/lib.rs +0 -2
  253. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  254. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  255. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  256. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  257. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  258. data/bridge/sdk-core/integ-with-otel.sh +0 -7
  259. data/bridge/sdk-core/protos/api_upstream/README.md +0 -9
  260. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
  261. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -9
  262. data/bridge/sdk-core/protos/api_upstream/build/go.mod +0 -7
  263. data/bridge/sdk-core/protos/api_upstream/build/go.sum +0 -5
  264. data/bridge/sdk-core/protos/api_upstream/build/tools.go +0 -29
  265. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +0 -141
  266. data/bridge/sdk-core/protos/api_upstream/go.mod +0 -6
  267. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -89
  268. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +0 -248
  269. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +0 -123
  270. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -47
  271. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -52
  272. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -56
  273. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -170
  274. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -123
  275. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -51
  276. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -50
  277. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -41
  278. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -60
  279. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -59
  280. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -56
  281. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -122
  282. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -108
  283. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -114
  284. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -56
  285. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +0 -787
  286. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -99
  287. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -124
  288. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -80
  289. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -57
  290. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +0 -61
  291. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -55
  292. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -379
  293. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -63
  294. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -108
  295. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +0 -111
  296. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +0 -59
  297. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -146
  298. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -1199
  299. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -415
  300. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +0 -63
  301. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -79
  302. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -80
  303. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -78
  304. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -16
  305. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +0 -31
  306. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -31
  307. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -270
  308. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -305
  309. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -35
  310. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +0 -38
  311. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +0 -13
  312. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
  313. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -63
  314. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -90
  315. data/bridge/sdk-core/rustfmt.toml +0 -1
  316. data/bridge/sdk-core/sdk/Cargo.toml +0 -48
  317. data/bridge/sdk-core/sdk/LICENSE.txt +0 -23
  318. data/bridge/sdk-core/sdk/src/activity_context.rs +0 -230
  319. data/bridge/sdk-core/sdk/src/app_data.rs +0 -37
  320. data/bridge/sdk-core/sdk/src/interceptors.rs +0 -50
  321. data/bridge/sdk-core/sdk/src/lib.rs +0 -861
  322. data/bridge/sdk-core/sdk/src/payload_converter.rs +0 -11
  323. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +0 -295
  324. data/bridge/sdk-core/sdk/src/workflow_context.rs +0 -694
  325. data/bridge/sdk-core/sdk/src/workflow_future.rs +0 -500
  326. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +0 -33
  327. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +0 -23
  328. data/bridge/sdk-core/sdk-core-protos/build.rs +0 -142
  329. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +0 -7
  330. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +0 -557
  331. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +0 -234
  332. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +0 -2088
  333. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +0 -48
  334. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +0 -14
  335. data/bridge/sdk-core/test-utils/Cargo.toml +0 -38
  336. data/bridge/sdk-core/test-utils/src/canned_histories.rs +0 -1389
  337. data/bridge/sdk-core/test-utils/src/histfetch.rs +0 -28
  338. data/bridge/sdk-core/test-utils/src/lib.rs +0 -709
  339. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +0 -50
  340. data/bridge/sdk-core/test-utils/src/workflows.rs +0 -29
  341. data/bridge/sdk-core/tests/fuzzy_workflow.rs +0 -130
  342. data/bridge/sdk-core/tests/heavy_tests.rs +0 -265
  343. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +0 -36
  344. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +0 -150
  345. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +0 -223
  346. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +0 -239
  347. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -90
  348. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +0 -314
  349. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +0 -151
  350. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +0 -902
  351. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
  352. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -60
  353. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -51
  354. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -51
  355. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -64
  356. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -47
  357. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -669
  358. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -54
  359. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -92
  360. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +0 -228
  361. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +0 -94
  362. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -171
  363. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +0 -85
  364. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -120
  365. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +0 -77
  366. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +0 -596
  367. data/bridge/sdk-core/tests/main.rs +0 -103
  368. data/bridge/sdk-core/tests/runner.rs +0 -132
  369. data/bridge/sdk-core/tests/wf_input_replay.rs +0 -32
  370. data/bridge/src/connection.rs +0 -202
  371. data/bridge/src/lib.rs +0 -494
  372. data/bridge/src/runtime.rs +0 -54
  373. data/bridge/src/test_server.rs +0 -153
  374. data/bridge/src/worker.rs +0 -197
  375. data/ext/Rakefile +0 -9
  376. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +0 -14
  377. data/lib/gen/temporal/api/batch/v1/message_pb.rb +0 -50
  378. data/lib/gen/temporal/api/command/v1/message_pb.rb +0 -160
  379. data/lib/gen/temporal/api/common/v1/message_pb.rb +0 -73
  380. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +0 -33
  381. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +0 -37
  382. data/lib/gen/temporal/api/enums/v1/common_pb.rb +0 -42
  383. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +0 -68
  384. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +0 -79
  385. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +0 -37
  386. data/lib/gen/temporal/api/enums/v1/query_pb.rb +0 -31
  387. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +0 -24
  388. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +0 -28
  389. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +0 -30
  390. data/lib/gen/temporal/api/enums/v1/update_pb.rb +0 -25
  391. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +0 -89
  392. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +0 -84
  393. data/lib/gen/temporal/api/failure/v1/message_pb.rb +0 -83
  394. data/lib/gen/temporal/api/filter/v1/message_pb.rb +0 -40
  395. data/lib/gen/temporal/api/history/v1/message_pb.rb +0 -498
  396. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +0 -64
  397. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +0 -88
  398. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +0 -20
  399. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +0 -30
  400. data/lib/gen/temporal/api/query/v1/message_pb.rb +0 -38
  401. data/lib/gen/temporal/api/replication/v1/message_pb.rb +0 -37
  402. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +0 -149
  403. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +0 -23
  404. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +0 -73
  405. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +0 -49
  406. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +0 -21
  407. data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -72
  408. data/lib/gen/temporal/api/version/v1/message_pb.rb +0 -41
  409. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +0 -111
  410. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +0 -798
  411. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +0 -20
  412. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +0 -62
  413. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +0 -61
  414. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +0 -61
  415. data/lib/gen/temporal/sdk/core/common/common_pb.rb +0 -26
  416. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +0 -40
  417. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +0 -31
  418. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +0 -171
  419. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +0 -200
  420. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +0 -41
  421. data/lib/temporalio/bridge/connect_options.rb +0 -15
  422. data/lib/temporalio/bridge/error.rb +0 -8
  423. data/lib/temporalio/bridge/retry_config.rb +0 -24
  424. data/lib/temporalio/bridge/tls_options.rb +0 -19
  425. data/lib/temporalio/bridge.rb +0 -14
  426. data/lib/temporalio/client/implementation.rb +0 -340
  427. data/lib/temporalio/connection/retry_config.rb +0 -44
  428. data/lib/temporalio/connection/service.rb +0 -20
  429. data/lib/temporalio/connection/test_service.rb +0 -92
  430. data/lib/temporalio/connection/tls_options.rb +0 -51
  431. data/lib/temporalio/connection/workflow_service.rb +0 -731
  432. data/lib/temporalio/connection.rb +0 -86
  433. data/lib/temporalio/data_converter.rb +0 -191
  434. data/lib/temporalio/error/workflow_failure.rb +0 -19
  435. data/lib/temporalio/errors.rb +0 -40
  436. data/lib/temporalio/failure_converter/base.rb +0 -26
  437. data/lib/temporalio/failure_converter/basic.rb +0 -319
  438. data/lib/temporalio/failure_converter.rb +0 -7
  439. data/lib/temporalio/interceptor/activity_inbound.rb +0 -22
  440. data/lib/temporalio/interceptor/activity_outbound.rb +0 -24
  441. data/lib/temporalio/interceptor/chain.rb +0 -28
  442. data/lib/temporalio/interceptor/client.rb +0 -127
  443. data/lib/temporalio/interceptor.rb +0 -22
  444. data/lib/temporalio/payload_codec/base.rb +0 -32
  445. data/lib/temporalio/payload_converter/base.rb +0 -24
  446. data/lib/temporalio/payload_converter/bytes.rb +0 -27
  447. data/lib/temporalio/payload_converter/composite.rb +0 -49
  448. data/lib/temporalio/payload_converter/encoding_base.rb +0 -35
  449. data/lib/temporalio/payload_converter/json.rb +0 -26
  450. data/lib/temporalio/payload_converter/nil.rb +0 -26
  451. data/lib/temporalio/payload_converter.rb +0 -14
  452. data/lib/temporalio/retry_state.rb +0 -35
  453. data/lib/temporalio/testing/time_skipping_handle.rb +0 -32
  454. data/lib/temporalio/testing/time_skipping_interceptor.rb +0 -23
  455. data/lib/temporalio/timeout_type.rb +0 -29
  456. data/lib/temporalio/worker/activity_runner.rb +0 -114
  457. data/lib/temporalio/worker/activity_worker.rb +0 -164
  458. data/lib/temporalio/worker/reactor.rb +0 -46
  459. data/lib/temporalio/worker/runner.rb +0 -63
  460. data/lib/temporalio/worker/sync_worker.rb +0 -124
  461. data/lib/temporalio/worker/thread_pool_executor.rb +0 -51
  462. data/lib/temporalio/workflow/async.rb +0 -46
  463. data/lib/temporalio/workflow/execution_info.rb +0 -54
  464. data/lib/temporalio/workflow/execution_status.rb +0 -36
  465. data/lib/temporalio/workflow/future.rb +0 -138
  466. data/lib/temporalio/workflow/id_reuse_policy.rb +0 -36
  467. data/lib/temporalio/workflow/info.rb +0 -76
  468. data/lib/temporalio/workflow/query_reject_condition.rb +0 -33
  469. data/lib/thermite_patch.rb +0 -33
  470. data/sig/async.rbs +0 -17
  471. data/sig/protobuf.rbs +0 -16
  472. data/sig/protos/dependencies/gogoproto/gogo.rbs +0 -914
  473. data/sig/protos/google/protobuf/any.rbs +0 -157
  474. data/sig/protos/google/protobuf/descriptor.rbs +0 -2825
  475. data/sig/protos/google/protobuf/duration.rbs +0 -114
  476. data/sig/protos/google/protobuf/empty.rbs +0 -36
  477. data/sig/protos/google/protobuf/timestamp.rbs +0 -145
  478. data/sig/protos/google/protobuf/wrappers.rbs +0 -358
  479. data/sig/protos/temporal/api/batch/v1/message.rbs +0 -300
  480. data/sig/protos/temporal/api/command/v1/message.rbs +0 -1399
  481. data/sig/protos/temporal/api/common/v1/message.rbs +0 -528
  482. data/sig/protos/temporal/api/enums/v1/batch_operation.rbs +0 -79
  483. data/sig/protos/temporal/api/enums/v1/command_type.rbs +0 -68
  484. data/sig/protos/temporal/api/enums/v1/common.rbs +0 -118
  485. data/sig/protos/temporal/api/enums/v1/event_type.rbs +0 -264
  486. data/sig/protos/temporal/api/enums/v1/failed_cause.rbs +0 -277
  487. data/sig/protos/temporal/api/enums/v1/namespace.rbs +0 -108
  488. data/sig/protos/temporal/api/enums/v1/query.rbs +0 -81
  489. data/sig/protos/temporal/api/enums/v1/reset.rbs +0 -44
  490. data/sig/protos/temporal/api/enums/v1/schedule.rbs +0 -72
  491. data/sig/protos/temporal/api/enums/v1/task_queue.rbs +0 -92
  492. data/sig/protos/temporal/api/enums/v1/update.rbs +0 -64
  493. data/sig/protos/temporal/api/enums/v1/workflow.rbs +0 -371
  494. data/sig/protos/temporal/api/errordetails/v1/message.rbs +0 -551
  495. data/sig/protos/temporal/api/failure/v1/message.rbs +0 -581
  496. data/sig/protos/temporal/api/filter/v1/message.rbs +0 -171
  497. data/sig/protos/temporal/api/history/v1/message.rbs +0 -4609
  498. data/sig/protos/temporal/api/namespace/v1/message.rbs +0 -410
  499. data/sig/protos/temporal/api/operatorservice/v1/request_response.rbs +0 -643
  500. data/sig/protos/temporal/api/operatorservice/v1/service.rbs +0 -17
  501. data/sig/protos/temporal/api/protocol/v1/message.rbs +0 -84
  502. data/sig/protos/temporal/api/query/v1/message.rbs +0 -182
  503. data/sig/protos/temporal/api/replication/v1/message.rbs +0 -148
  504. data/sig/protos/temporal/api/schedule/v1/message.rbs +0 -1488
  505. data/sig/protos/temporal/api/sdk/v1/task_complete_metadata.rbs +0 -110
  506. data/sig/protos/temporal/api/taskqueue/v1/message.rbs +0 -486
  507. data/sig/protos/temporal/api/testservice/v1/request_response.rbs +0 -249
  508. data/sig/protos/temporal/api/testservice/v1/service.rbs +0 -15
  509. data/sig/protos/temporal/api/update/v1/message.rbs +0 -489
  510. data/sig/protos/temporal/api/version/v1/message.rbs +0 -184
  511. data/sig/protos/temporal/api/workflow/v1/message.rbs +0 -824
  512. data/sig/protos/temporal/api/workflowservice/v1/request_response.rbs +0 -7250
  513. data/sig/protos/temporal/api/workflowservice/v1/service.rbs +0 -22
  514. data/sig/protos/temporal/sdk/core/activity_result/activity_result.rbs +0 -380
  515. data/sig/protos/temporal/sdk/core/activity_task/activity_task.rbs +0 -386
  516. data/sig/protos/temporal/sdk/core/child_workflow/child_workflow.rbs +0 -323
  517. data/sig/protos/temporal/sdk/core/common/common.rbs +0 -62
  518. data/sig/protos/temporal/sdk/core/core_interface.rbs +0 -101
  519. data/sig/protos/temporal/sdk/core/external_data/external_data.rbs +0 -119
  520. data/sig/protos/temporal/sdk/core/workflow_activation/workflow_activation.rbs +0 -1473
  521. data/sig/protos/temporal/sdk/core/workflow_commands/workflow_commands.rbs +0 -1784
  522. data/sig/protos/temporal/sdk/core/workflow_completion/workflow_completion.rbs +0 -180
  523. data/sig/ruby.rbs +0 -12
  524. data/sig/temporalio/activity/context.rbs +0 -29
  525. data/sig/temporalio/activity/info.rbs +0 -43
  526. data/sig/temporalio/activity.rbs +0 -19
  527. data/sig/temporalio/bridge/connect_options.rbs +0 -19
  528. data/sig/temporalio/bridge/error.rbs +0 -8
  529. data/sig/temporalio/bridge/retry_config.rbs +0 -21
  530. data/sig/temporalio/bridge/tls_options.rbs +0 -17
  531. data/sig/temporalio/bridge.rbs +0 -71
  532. data/sig/temporalio/client/implementation.rbs +0 -38
  533. data/sig/temporalio/client/workflow_handle.rbs +0 -41
  534. data/sig/temporalio/client.rbs +0 -35
  535. data/sig/temporalio/connection/retry_config.rbs +0 -37
  536. data/sig/temporalio/connection/service.rbs +0 -14
  537. data/sig/temporalio/connection/test_service.rbs +0 -13
  538. data/sig/temporalio/connection/tls_options.rbs +0 -43
  539. data/sig/temporalio/connection/workflow_service.rbs +0 -48
  540. data/sig/temporalio/connection.rbs +0 -30
  541. data/sig/temporalio/data_converter.rbs +0 -35
  542. data/sig/temporalio/error/failure.rbs +0 -121
  543. data/sig/temporalio/error/workflow_failure.rbs +0 -9
  544. data/sig/temporalio/errors.rbs +0 -36
  545. data/sig/temporalio/failure_converter/base.rbs +0 -12
  546. data/sig/temporalio/failure_converter/basic.rbs +0 -86
  547. data/sig/temporalio/failure_converter.rbs +0 -5
  548. data/sig/temporalio/interceptor/activity_inbound.rbs +0 -21
  549. data/sig/temporalio/interceptor/activity_outbound.rbs +0 -10
  550. data/sig/temporalio/interceptor/chain.rbs +0 -24
  551. data/sig/temporalio/interceptor/client.rbs +0 -148
  552. data/sig/temporalio/interceptor.rbs +0 -6
  553. data/sig/temporalio/payload_codec/base.rbs +0 -12
  554. data/sig/temporalio/payload_converter/base.rbs +0 -12
  555. data/sig/temporalio/payload_converter/bytes.rbs +0 -9
  556. data/sig/temporalio/payload_converter/composite.rbs +0 -19
  557. data/sig/temporalio/payload_converter/encoding_base.rbs +0 -14
  558. data/sig/temporalio/payload_converter/json.rbs +0 -9
  559. data/sig/temporalio/payload_converter/nil.rbs +0 -9
  560. data/sig/temporalio/payload_converter.rbs +0 -5
  561. data/sig/temporalio/retry_policy.rbs +0 -25
  562. data/sig/temporalio/retry_state.rbs +0 -20
  563. data/sig/temporalio/runtime.rbs +0 -12
  564. data/sig/temporalio/testing/time_skipping_handle.rbs +0 -15
  565. data/sig/temporalio/testing/time_skipping_interceptor.rbs +0 -13
  566. data/sig/temporalio/testing/workflow_environment.rbs +0 -22
  567. data/sig/temporalio/testing.rbs +0 -35
  568. data/sig/temporalio/timeout_type.rbs +0 -15
  569. data/sig/temporalio/version.rbs +0 -3
  570. data/sig/temporalio/worker/activity_runner.rbs +0 -35
  571. data/sig/temporalio/worker/activity_worker.rbs +0 -44
  572. data/sig/temporalio/worker/reactor.rbs +0 -22
  573. data/sig/temporalio/worker/runner.rbs +0 -21
  574. data/sig/temporalio/worker/sync_worker.rbs +0 -23
  575. data/sig/temporalio/worker/thread_pool_executor.rbs +0 -23
  576. data/sig/temporalio/worker.rbs +0 -46
  577. data/sig/temporalio/workflow/async.rbs +0 -9
  578. data/sig/temporalio/workflow/execution_info.rbs +0 -55
  579. data/sig/temporalio/workflow/execution_status.rbs +0 -21
  580. data/sig/temporalio/workflow/future.rbs +0 -40
  581. data/sig/temporalio/workflow/id_reuse_policy.rbs +0 -15
  582. data/sig/temporalio/workflow/info.rbs +0 -55
  583. data/sig/temporalio/workflow/query_reject_condition.rbs +0 -14
  584. data/sig/temporalio.rbs +0 -2
  585. 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
- }