temporalio 0.1.0 → 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 (469) 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 -38
  132. metadata +131 -596
  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 -23
@@ -1,221 +0,0 @@
1
- use crate::{
2
- replay::DEFAULT_WORKFLOW_TYPE,
3
- test_help::{
4
- canned_histories, mock_sdk, mock_worker, single_hist_mock_sg, MockPollCfg, ResponseType,
5
- },
6
- worker::{client::mocks::mock_workflow_client, ManagedWFFunc},
7
- };
8
- use temporal_client::WorkflowOptions;
9
- use temporal_sdk::{ChildWorkflowOptions, Signal, WfContext, WorkflowFunction, WorkflowResult};
10
- use temporal_sdk_core_api::Worker;
11
- use temporal_sdk_core_protos::coresdk::{
12
- child_workflow::{child_workflow_result, ChildWorkflowCancellationType},
13
- workflow_activation::{workflow_activation_job, WorkflowActivationJob},
14
- workflow_commands::{
15
- CancelChildWorkflowExecution, CompleteWorkflowExecution, StartChildWorkflowExecution,
16
- },
17
- workflow_completion::WorkflowActivationCompletion,
18
- };
19
- use tokio::join;
20
-
21
- const SIGNAME: &str = "SIGNAME";
22
-
23
- #[rstest::rstest]
24
- #[case::signal_then_result(true)]
25
- #[case::signal_and_result_concurrent(false)]
26
- #[tokio::test]
27
- async fn signal_child_workflow(#[case] serial: bool) {
28
- let wf_id = "fakeid";
29
- let wf_type = DEFAULT_WORKFLOW_TYPE;
30
- let t = canned_histories::single_child_workflow_signaled("child-id-1", SIGNAME);
31
- let mock = mock_workflow_client();
32
- let mut worker = mock_sdk(MockPollCfg::from_resp_batches(
33
- wf_id,
34
- t,
35
- [ResponseType::AllHistory],
36
- mock,
37
- ));
38
-
39
- let wf = move |ctx: WfContext| async move {
40
- let child = ctx.child_workflow(ChildWorkflowOptions {
41
- workflow_id: "child-id-1".to_string(),
42
- workflow_type: "child".to_string(),
43
- ..Default::default()
44
- });
45
-
46
- let start_res = child
47
- .start(&ctx)
48
- .await
49
- .into_started()
50
- .expect("Child should get started");
51
- let (sigres, res) = if serial {
52
- let sigres = start_res.signal(&ctx, Signal::new(SIGNAME, [b"Hi!"])).await;
53
- let res = start_res.result().await;
54
- (sigres, res)
55
- } else {
56
- let sigfut = start_res.signal(&ctx, Signal::new(SIGNAME, [b"Hi!"]));
57
- let resfut = start_res.result();
58
- join!(sigfut, resfut)
59
- };
60
- sigres.expect("signal result is ok");
61
- res.status.expect("child wf result is ok");
62
- Ok(().into())
63
- };
64
-
65
- worker.register_wf(wf_type.to_owned(), wf);
66
- worker
67
- .submit_wf(
68
- wf_id.to_owned(),
69
- wf_type.to_owned(),
70
- vec![],
71
- WorkflowOptions::default(),
72
- )
73
- .await
74
- .unwrap();
75
- worker.run_until_done().await.unwrap();
76
- }
77
-
78
- async fn parent_cancels_child_wf(ctx: WfContext) -> WorkflowResult<()> {
79
- let child = ctx.child_workflow(ChildWorkflowOptions {
80
- workflow_id: "child-id-1".to_string(),
81
- workflow_type: "child".to_string(),
82
- cancel_type: ChildWorkflowCancellationType::WaitCancellationCompleted,
83
- ..Default::default()
84
- });
85
-
86
- let start_res = child
87
- .start(&ctx)
88
- .await
89
- .into_started()
90
- .expect("Child should get started");
91
- let cancel_fut = start_res.cancel(&ctx);
92
- let resfut = start_res.result();
93
- let (cancel_res, res) = join!(cancel_fut, resfut);
94
- cancel_res.expect("cancel result is ok");
95
- let stat = res.status.expect("child wf result is ok");
96
- assert_matches!(stat, child_workflow_result::Status::Cancelled(_));
97
- Ok(().into())
98
- }
99
-
100
- #[tokio::test]
101
- async fn cancel_child_workflow() {
102
- let func = WorkflowFunction::new(parent_cancels_child_wf);
103
- let t = canned_histories::single_child_workflow_cancelled("child-id-1");
104
- let mut wfm = ManagedWFFunc::new(t, func, vec![]);
105
- wfm.process_all_activations().await.unwrap();
106
- wfm.shutdown().await.unwrap();
107
- }
108
-
109
- #[rstest::rstest]
110
- #[case::abandon(ChildWorkflowCancellationType::Abandon)]
111
- #[case::try_cancel(ChildWorkflowCancellationType::TryCancel)]
112
- #[case::wait_cancel_completed(ChildWorkflowCancellationType::WaitCancellationCompleted)]
113
- #[tokio::test]
114
- async fn cancel_child_workflow_lang_thinks_not_started_but_is(
115
- #[case] cancellation_type: ChildWorkflowCancellationType,
116
- ) {
117
- // Since signal handlers always run first, it's possible lang might try to cancel
118
- // a child workflow it thinks isn't started, but we've told it is in the same activation.
119
- // It would be annoying for lang to have to peek ahead at jobs to be consistent in that case.
120
- let t = match cancellation_type {
121
- ChildWorkflowCancellationType::Abandon => {
122
- canned_histories::single_child_workflow_abandon_cancelled("child-id-1")
123
- }
124
- ChildWorkflowCancellationType::TryCancel => {
125
- canned_histories::single_child_workflow_try_cancelled("child-id-1")
126
- }
127
- _ => canned_histories::single_child_workflow_cancelled("child-id-1"),
128
- };
129
- let mock = mock_workflow_client();
130
- let mock = single_hist_mock_sg("fakeid", t, [ResponseType::AllHistory], mock, true);
131
- let core = mock_worker(mock);
132
- let act = core.poll_workflow_activation().await.unwrap();
133
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
134
- act.run_id,
135
- StartChildWorkflowExecution {
136
- seq: 1,
137
- cancellation_type: cancellation_type as i32,
138
- ..Default::default()
139
- }
140
- .into(),
141
- ))
142
- .await
143
- .unwrap();
144
- let act = core.poll_workflow_activation().await.unwrap();
145
- assert_matches!(
146
- act.jobs.as_slice(),
147
- [WorkflowActivationJob {
148
- variant: Some(workflow_activation_job::Variant::ResolveChildWorkflowExecutionStart(_)),
149
- }]
150
- );
151
- // Issue the cancel command
152
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
153
- act.run_id,
154
- CancelChildWorkflowExecution {
155
- child_workflow_seq: 1,
156
- }
157
- .into(),
158
- ))
159
- .await
160
- .unwrap();
161
- let act = core.poll_workflow_activation().await.unwrap();
162
- // Make sure that a resolve for the "request cancel external workflow" command does *not* appear
163
- // since lang didn't actually issue one. The only job should be resolving the child workflow.
164
- assert_matches!(
165
- act.jobs.as_slice(),
166
- [WorkflowActivationJob {
167
- variant: Some(workflow_activation_job::Variant::ResolveChildWorkflowExecution(_)),
168
- }]
169
- );
170
- // Request cancel external is technically fallible, but the only reasons relate to targeting
171
- // a not-found workflow, which couldn't happen in this case.
172
- }
173
-
174
- #[tokio::test]
175
- async fn cancel_already_complete_child_ignored() {
176
- let t = canned_histories::single_child_workflow("child-id-1");
177
- let mock = mock_workflow_client();
178
- let mock = single_hist_mock_sg("fakeid", t, [ResponseType::AllHistory], mock, true);
179
- let core = mock_worker(mock);
180
- let act = core.poll_workflow_activation().await.unwrap();
181
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
182
- act.run_id,
183
- StartChildWorkflowExecution {
184
- seq: 1,
185
- ..Default::default()
186
- }
187
- .into(),
188
- ))
189
- .await
190
- .unwrap();
191
- let act = core.poll_workflow_activation().await.unwrap();
192
- assert_matches!(
193
- act.jobs.as_slice(),
194
- [WorkflowActivationJob {
195
- variant: Some(workflow_activation_job::Variant::ResolveChildWorkflowExecutionStart(_)),
196
- }]
197
- );
198
- core.complete_workflow_activation(WorkflowActivationCompletion::empty(act.run_id))
199
- .await
200
- .unwrap();
201
- let act = core.poll_workflow_activation().await.unwrap();
202
- assert_matches!(
203
- act.jobs.as_slice(),
204
- [WorkflowActivationJob {
205
- variant: Some(workflow_activation_job::Variant::ResolveChildWorkflowExecution(_)),
206
- }]
207
- );
208
- // Try to cancel post-completion, it should be ignored. Also complete the wf.
209
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
210
- act.run_id,
211
- vec![
212
- CancelChildWorkflowExecution {
213
- child_workflow_seq: 1,
214
- }
215
- .into(),
216
- CompleteWorkflowExecution { result: None }.into(),
217
- ],
218
- ))
219
- .await
220
- .unwrap();
221
- }
@@ -1,270 +0,0 @@
1
- use crate::{
2
- internal_flags::CoreInternalFlags,
3
- replay::DEFAULT_WORKFLOW_TYPE,
4
- test_help::{canned_histories, mock_sdk, mock_sdk_cfg, MockPollCfg, ResponseType},
5
- worker::client::mocks::mock_workflow_client,
6
- };
7
- use std::{
8
- sync::atomic::{AtomicBool, AtomicUsize, Ordering},
9
- time::Duration,
10
- };
11
- use temporal_client::WorkflowOptions;
12
- use temporal_sdk::{
13
- ActivityOptions, ChildWorkflowOptions, LocalActivityOptions, WfContext, WorkflowResult,
14
- };
15
- use temporal_sdk_core_protos::{
16
- temporal::api::{enums::v1::WorkflowTaskFailedCause, failure::v1::Failure},
17
- DEFAULT_ACTIVITY_TYPE,
18
- };
19
-
20
- static DID_FAIL: AtomicBool = AtomicBool::new(false);
21
- pub async fn timer_wf_fails_once(ctx: WfContext) -> WorkflowResult<()> {
22
- ctx.timer(Duration::from_secs(1)).await;
23
- if DID_FAIL
24
- .compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)
25
- .is_ok()
26
- {
27
- panic!("Ahh");
28
- }
29
- Ok(().into())
30
- }
31
-
32
- /// Verifies that workflow panics (which in this case the Rust SDK turns into workflow activation
33
- /// failures) are turned into unspecified WFT failures.
34
- #[tokio::test]
35
- async fn test_panic_wf_task_rejected_properly() {
36
- let wf_id = "fakeid";
37
- let wf_type = DEFAULT_WORKFLOW_TYPE;
38
- let t = canned_histories::workflow_fails_with_failure_after_timer("1");
39
- let mock = mock_workflow_client();
40
- let mut mh = MockPollCfg::from_resp_batches(wf_id, t, [1, 2, 2], mock);
41
- // We should see one wft failure which has unspecified cause, since panics don't have a defined
42
- // type.
43
- mh.num_expected_fails = 1;
44
- mh.expect_fail_wft_matcher =
45
- Box::new(|_, cause, _| matches!(cause, WorkflowTaskFailedCause::Unspecified));
46
- let mut worker = mock_sdk(mh);
47
-
48
- worker.register_wf(wf_type.to_owned(), timer_wf_fails_once);
49
- worker
50
- .submit_wf(
51
- wf_id.to_owned(),
52
- wf_type.to_owned(),
53
- vec![],
54
- WorkflowOptions::default(),
55
- )
56
- .await
57
- .unwrap();
58
- worker.run_until_done().await.unwrap();
59
- }
60
-
61
- /// Verifies nondeterministic behavior in workflows results in automatic WFT failure with the
62
- /// appropriate nondeterminism cause.
63
- #[rstest::rstest]
64
- #[case::with_cache(true)]
65
- #[case::without_cache(false)]
66
- #[tokio::test]
67
- async fn test_wf_task_rejected_properly_due_to_nondeterminism(#[case] use_cache: bool) {
68
- let wf_id = "fakeid";
69
- let wf_type = DEFAULT_WORKFLOW_TYPE;
70
- let t = canned_histories::single_timer_wf_completes("1");
71
- let mock = mock_workflow_client();
72
- let mut mh = MockPollCfg::from_resp_batches(
73
- wf_id,
74
- t,
75
- // Two polls are needed, since the first will fail
76
- [ResponseType::AllHistory, ResponseType::AllHistory],
77
- mock,
78
- );
79
- // We should see one wft failure which has nondeterminism cause
80
- mh.num_expected_fails = 1;
81
- mh.expect_fail_wft_matcher =
82
- Box::new(|_, cause, _| matches!(cause, WorkflowTaskFailedCause::NonDeterministicError));
83
- let mut worker = mock_sdk_cfg(mh, |cfg| {
84
- if use_cache {
85
- cfg.max_cached_workflows = 2;
86
- }
87
- });
88
-
89
- let started_count: &'static _ = Box::leak(Box::new(AtomicUsize::new(0)));
90
- worker.register_wf(wf_type.to_owned(), move |ctx: WfContext| async move {
91
- // The workflow is replaying all of history, so the when it schedules an extra timer it
92
- // should not have, it causes a nondeterminism error.
93
- if started_count.fetch_add(1, Ordering::Relaxed) == 0 {
94
- ctx.timer(Duration::from_secs(1)).await;
95
- }
96
- ctx.timer(Duration::from_secs(1)).await;
97
- Ok(().into())
98
- });
99
-
100
- worker
101
- .submit_wf(
102
- wf_id.to_owned(),
103
- wf_type.to_owned(),
104
- vec![],
105
- WorkflowOptions::default(),
106
- )
107
- .await
108
- .unwrap();
109
- worker.run_until_done().await.unwrap();
110
- // Started count is two since we start, restart once due to error, then we unblock the real
111
- // timer and proceed without restarting
112
- assert_eq!(2, started_count.load(Ordering::Relaxed));
113
- }
114
-
115
- #[rstest::rstest]
116
- #[tokio::test]
117
- async fn activity_id_or_type_change_is_nondeterministic(
118
- #[values(true, false)] use_cache: bool,
119
- #[values(true, false)] id_change: bool,
120
- #[values(true, false)] local_act: bool,
121
- ) {
122
- let wf_id = "fakeid";
123
- let wf_type = DEFAULT_WORKFLOW_TYPE;
124
- let mut t = if local_act {
125
- canned_histories::single_local_activity("1")
126
- } else {
127
- canned_histories::single_activity("1")
128
- };
129
- t.set_flags_first_wft(&[CoreInternalFlags::IdAndTypeDeterminismChecks as u32], &[]);
130
- let mock = mock_workflow_client();
131
- let mut mh = MockPollCfg::from_resp_batches(
132
- wf_id,
133
- t,
134
- // Two polls are needed, since the first will fail
135
- [ResponseType::AllHistory, ResponseType::AllHistory],
136
- mock,
137
- );
138
- // We should see one wft failure which has nondeterminism cause
139
- mh.num_expected_fails = 1;
140
- mh.expect_fail_wft_matcher = Box::new(move |_, cause, f| {
141
- let should_contain = if id_change {
142
- "does not match activity id"
143
- } else {
144
- "does not match activity type"
145
- };
146
- matches!(cause, WorkflowTaskFailedCause::NonDeterministicError)
147
- && matches!(f, Some(Failure {
148
- message,
149
- ..
150
- }) if message.contains(should_contain))
151
- });
152
- let mut worker = mock_sdk_cfg(mh, |cfg| {
153
- if use_cache {
154
- cfg.max_cached_workflows = 2;
155
- }
156
- });
157
-
158
- worker.register_wf(wf_type.to_owned(), move |ctx: WfContext| async move {
159
- if local_act {
160
- ctx.local_activity(if id_change {
161
- LocalActivityOptions {
162
- activity_id: Some("I'm bad and wrong!".to_string()),
163
- activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
164
- ..Default::default()
165
- }
166
- } else {
167
- LocalActivityOptions {
168
- activity_type: "not the default act type".to_string(),
169
- ..Default::default()
170
- }
171
- })
172
- .await;
173
- } else {
174
- ctx.activity(if id_change {
175
- ActivityOptions {
176
- activity_id: Some("I'm bad and wrong!".to_string()),
177
- activity_type: DEFAULT_ACTIVITY_TYPE.to_string(),
178
- ..Default::default()
179
- }
180
- } else {
181
- ActivityOptions {
182
- activity_type: "not the default act type".to_string(),
183
- ..Default::default()
184
- }
185
- })
186
- .await;
187
- }
188
- Ok(().into())
189
- });
190
-
191
- worker
192
- .submit_wf(
193
- wf_id.to_owned(),
194
- wf_type.to_owned(),
195
- vec![],
196
- WorkflowOptions::default(),
197
- )
198
- .await
199
- .unwrap();
200
- worker.run_until_done().await.unwrap();
201
- }
202
-
203
- #[rstest::rstest]
204
- #[tokio::test]
205
- async fn child_wf_id_or_type_change_is_nondeterministic(
206
- #[values(true, false)] use_cache: bool,
207
- #[values(true, false)] id_change: bool,
208
- ) {
209
- let wf_id = "fakeid";
210
- let wf_type = DEFAULT_WORKFLOW_TYPE;
211
- let mut t = canned_histories::single_child_workflow("1");
212
- t.set_flags_first_wft(&[CoreInternalFlags::IdAndTypeDeterminismChecks as u32], &[]);
213
- let mock = mock_workflow_client();
214
- let mut mh = MockPollCfg::from_resp_batches(
215
- wf_id,
216
- t,
217
- // Two polls are needed, since the first will fail
218
- [ResponseType::AllHistory, ResponseType::AllHistory],
219
- mock,
220
- );
221
- // We should see one wft failure which has nondeterminism cause
222
- mh.num_expected_fails = 1;
223
- mh.expect_fail_wft_matcher = Box::new(move |_, cause, f| {
224
- let should_contain = if id_change {
225
- "does not match child workflow id"
226
- } else {
227
- "does not match child workflow type"
228
- };
229
- matches!(cause, WorkflowTaskFailedCause::NonDeterministicError)
230
- && matches!(f, Some(Failure {
231
- message,
232
- ..
233
- }) if message.contains(should_contain))
234
- });
235
- let mut worker = mock_sdk_cfg(mh, |cfg| {
236
- if use_cache {
237
- cfg.max_cached_workflows = 2;
238
- }
239
- });
240
-
241
- worker.register_wf(wf_type.to_owned(), move |ctx: WfContext| async move {
242
- ctx.child_workflow(if id_change {
243
- ChildWorkflowOptions {
244
- workflow_id: "I'm bad and wrong!".to_string(),
245
- workflow_type: DEFAULT_ACTIVITY_TYPE.to_string(),
246
- ..Default::default()
247
- }
248
- } else {
249
- ChildWorkflowOptions {
250
- workflow_id: "1".to_string(),
251
- workflow_type: "not the child wf type".to_string(),
252
- ..Default::default()
253
- }
254
- })
255
- .start(&ctx)
256
- .await;
257
- Ok(().into())
258
- });
259
-
260
- worker
261
- .submit_wf(
262
- wf_id.to_owned(),
263
- wf_type.to_owned(),
264
- vec![],
265
- WorkflowOptions::default(),
266
- )
267
- .await
268
- .unwrap();
269
- worker.run_until_done().await.unwrap();
270
- }