temporalio 0.1.1 → 0.2.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 (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
- }