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,54 +0,0 @@
1
- use temporal_client::WorkflowClientTrait;
2
- use temporal_sdk::{WfContext, WorkflowResult};
3
- use temporal_sdk_core_protos::coresdk::{AsJsonPayloadExt, FromJsonPayloadExt};
4
- use temporal_sdk_core_test_utils::CoreWfStarter;
5
- use uuid::Uuid;
6
-
7
- static FIELD_A: &str = "cat_name";
8
- static FIELD_B: &str = "cute_level";
9
-
10
- async fn memo_upserter(ctx: WfContext) -> WorkflowResult<()> {
11
- ctx.upsert_memo([
12
- (FIELD_A.to_string(), "enchi".as_json_payload().unwrap()),
13
- (FIELD_B.to_string(), 9001.as_json_payload().unwrap()),
14
- ]);
15
- Ok(().into())
16
- }
17
-
18
- #[tokio::test]
19
- async fn sends_modify_wf_props() {
20
- let wf_name = "can_upsert_memo";
21
- let wf_id = Uuid::new_v4();
22
- let mut starter = CoreWfStarter::new(wf_name);
23
- starter.no_remote_activities();
24
- let mut worker = starter.worker().await;
25
-
26
- worker.register_wf(wf_name, memo_upserter);
27
- let run_id = worker
28
- .submit_wf(wf_id.to_string(), wf_name, vec![], Default::default())
29
- .await
30
- .unwrap();
31
- worker.run_until_done().await.unwrap();
32
-
33
- let memo = starter
34
- .get_client()
35
- .await
36
- .describe_workflow_execution(wf_id.to_string(), Some(run_id))
37
- .await
38
- .unwrap()
39
- .workflow_execution_info
40
- .unwrap()
41
- .memo
42
- .unwrap()
43
- .fields;
44
- let catname = memo.get(FIELD_A).unwrap();
45
- let cuteness = memo.get(FIELD_B).unwrap();
46
- for payload in [catname, cuteness] {
47
- assert_eq!(
48
- &b"json/plain".to_vec(),
49
- payload.metadata.get("encoding").unwrap()
50
- );
51
- }
52
- assert_eq!("enchi", String::from_json_payload(catname).unwrap());
53
- assert_eq!(9001, usize::from_json_payload(cuteness).unwrap());
54
- }
@@ -1,92 +0,0 @@
1
- use std::{
2
- sync::atomic::{AtomicBool, Ordering},
3
- time::Duration,
4
- };
5
-
6
- use temporal_sdk::{WfContext, WorkflowResult};
7
- use temporal_sdk_core_test_utils::CoreWfStarter;
8
-
9
- const MY_PATCH_ID: &str = "integ_test_change_name";
10
-
11
- pub async fn changes_wf(ctx: WfContext) -> WorkflowResult<()> {
12
- if ctx.patched(MY_PATCH_ID) {
13
- ctx.timer(Duration::from_millis(100)).await;
14
- } else {
15
- ctx.timer(Duration::from_millis(200)).await;
16
- }
17
- ctx.timer(Duration::from_millis(200)).await;
18
- if ctx.patched(MY_PATCH_ID) {
19
- ctx.timer(Duration::from_millis(100)).await;
20
- } else {
21
- ctx.timer(Duration::from_millis(200)).await;
22
- }
23
- Ok(().into())
24
- }
25
-
26
- #[tokio::test]
27
- async fn writes_change_markers() {
28
- let wf_name = "writes_change_markers";
29
- let mut starter = CoreWfStarter::new(wf_name);
30
- starter.no_remote_activities();
31
- let mut worker = starter.worker().await;
32
- worker.register_wf(wf_name.to_owned(), changes_wf);
33
-
34
- starter.start_with_worker(wf_name, &mut worker).await;
35
- worker.run_until_done().await.unwrap();
36
- }
37
-
38
- /// This one simulates a run as if the worker had the "old" code, then it fails at the end as
39
- /// a cheapo way of being re-run, at which point it runs with change checks and the "new" code.
40
- static DID_DIE: AtomicBool = AtomicBool::new(false);
41
- pub async fn no_change_then_change_wf(ctx: WfContext) -> WorkflowResult<()> {
42
- if DID_DIE.load(Ordering::Acquire) {
43
- assert!(!ctx.patched(MY_PATCH_ID));
44
- }
45
- ctx.timer(Duration::from_millis(200)).await;
46
- ctx.timer(Duration::from_millis(200)).await;
47
- if DID_DIE.load(Ordering::Acquire) {
48
- assert!(!ctx.patched(MY_PATCH_ID));
49
- }
50
- ctx.timer(Duration::from_millis(200)).await;
51
-
52
- if !DID_DIE.load(Ordering::Acquire) {
53
- DID_DIE.store(true, Ordering::Release);
54
- ctx.force_task_fail(anyhow::anyhow!("i'm ded"));
55
- }
56
- Ok(().into())
57
- }
58
-
59
- #[tokio::test]
60
- async fn can_add_change_markers() {
61
- let wf_name = "can_add_change_markers";
62
- let mut starter = CoreWfStarter::new(wf_name);
63
- starter.no_remote_activities();
64
- let mut worker = starter.worker().await;
65
- worker.register_wf(wf_name.to_owned(), no_change_then_change_wf);
66
-
67
- starter.start_with_worker(wf_name, &mut worker).await;
68
- worker.run_until_done().await.unwrap();
69
- }
70
-
71
- static DID_DIE_2: AtomicBool = AtomicBool::new(false);
72
- pub async fn replay_with_change_marker_wf(ctx: WfContext) -> WorkflowResult<()> {
73
- assert!(ctx.patched(MY_PATCH_ID));
74
- ctx.timer(Duration::from_millis(200)).await;
75
- if !DID_DIE_2.load(Ordering::Acquire) {
76
- DID_DIE_2.store(true, Ordering::Release);
77
- ctx.force_task_fail(anyhow::anyhow!("i'm ded"));
78
- }
79
- Ok(().into())
80
- }
81
-
82
- #[tokio::test]
83
- async fn replaying_with_patch_marker() {
84
- let wf_name = "replaying_with_patch_marker";
85
- let mut starter = CoreWfStarter::new(wf_name);
86
- starter.no_remote_activities();
87
- let mut worker = starter.worker().await;
88
- worker.register_wf(wf_name.to_owned(), replay_with_change_marker_wf);
89
-
90
- starter.start_with_worker(wf_name, &mut worker).await;
91
- worker.run_until_done().await.unwrap();
92
- }
@@ -1,228 +0,0 @@
1
- use assert_matches::assert_matches;
2
- use parking_lot::Mutex;
3
- use std::{collections::HashSet, sync::Arc, time::Duration};
4
- use temporal_sdk::{interceptors::WorkerInterceptor, WfContext, Worker, WorkflowFunction};
5
- use temporal_sdk_core::replay::{HistoryFeeder, HistoryForReplay};
6
- use temporal_sdk_core_api::errors::{PollActivityError, PollWfError};
7
- use temporal_sdk_core_protos::{
8
- coresdk::{
9
- workflow_activation::remove_from_cache::EvictionReason,
10
- workflow_commands::{ScheduleActivity, StartTimer},
11
- workflow_completion::WorkflowActivationCompletion,
12
- },
13
- TestHistoryBuilder, DEFAULT_WORKFLOW_TYPE,
14
- };
15
- use temporal_sdk_core_test_utils::{
16
- canned_histories, history_from_proto_binary, init_core_replay_preloaded, replay_sdk_worker,
17
- replay_sdk_worker_stream, WorkerTestHelpers,
18
- };
19
- use tokio::join;
20
-
21
- fn test_hist_to_replay(t: TestHistoryBuilder) -> HistoryForReplay {
22
- let hi = t.get_full_history_info().unwrap().into();
23
- HistoryForReplay::new(hi, "fake".to_string())
24
- }
25
-
26
- #[tokio::test]
27
- async fn timer_workflow_replay() {
28
- let core = init_core_replay_preloaded(
29
- "timer_workflow_replay",
30
- [HistoryForReplay::new(
31
- history_from_proto_binary("histories/timer_workflow_history.bin")
32
- .await
33
- .unwrap(),
34
- "fake".to_owned(),
35
- )],
36
- );
37
- let task = core.poll_workflow_activation().await.unwrap();
38
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
39
- task.run_id,
40
- vec![StartTimer {
41
- seq: 0,
42
- start_to_fire_timeout: Some(prost_dur!(from_secs(1))),
43
- }
44
- .into()],
45
- ))
46
- .await
47
- .unwrap();
48
- let task = core.poll_workflow_activation().await.unwrap();
49
- // Verify that an in-progress poll is interrupted by completion finishing processing history
50
- let act_poll_fut = async {
51
- assert_matches!(
52
- core.poll_activity_task().await,
53
- Err(PollActivityError::ShutDown)
54
- );
55
- };
56
- let poll_fut = async {
57
- let evict_task = core
58
- .poll_workflow_activation()
59
- .await
60
- .expect("Should be an eviction activation");
61
- assert!(evict_task.eviction_reason().is_some());
62
- core.complete_workflow_activation(WorkflowActivationCompletion::empty(evict_task.run_id))
63
- .await
64
- .unwrap();
65
- assert_matches!(
66
- core.poll_workflow_activation().await,
67
- Err(PollWfError::ShutDown)
68
- );
69
- };
70
- let complete_fut = async {
71
- core.complete_execution(&task.run_id).await;
72
- };
73
- join!(act_poll_fut, poll_fut, complete_fut);
74
-
75
- // Subsequent polls should still return shutdown
76
- assert_matches!(
77
- core.poll_workflow_activation().await,
78
- Err(PollWfError::ShutDown)
79
- );
80
-
81
- core.shutdown().await;
82
- }
83
-
84
- #[tokio::test]
85
- async fn workflow_nondeterministic_replay() {
86
- let core = init_core_replay_preloaded(
87
- "timer_workflow_replay",
88
- [HistoryForReplay::new(
89
- history_from_proto_binary("histories/timer_workflow_history.bin")
90
- .await
91
- .unwrap(),
92
- "fake".to_owned(),
93
- )],
94
- );
95
- let task = core.poll_workflow_activation().await.unwrap();
96
- core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
97
- task.run_id,
98
- vec![ScheduleActivity {
99
- seq: 0,
100
- activity_id: "0".to_string(),
101
- activity_type: "fake_act".to_string(),
102
- ..Default::default()
103
- }
104
- .into()],
105
- ))
106
- .await
107
- .unwrap();
108
- let task = core.poll_workflow_activation().await.unwrap();
109
- assert_eq!(task.eviction_reason(), Some(EvictionReason::Nondeterminism));
110
- // Complete eviction
111
- core.complete_workflow_activation(WorkflowActivationCompletion::empty(task.run_id))
112
- .await
113
- .unwrap();
114
- // Call shutdown explicitly because we saw a nondeterminism eviction
115
- core.shutdown().await;
116
- assert_matches!(
117
- core.poll_workflow_activation().await,
118
- Err(PollWfError::ShutDown)
119
- );
120
- }
121
-
122
- #[tokio::test]
123
- async fn replay_using_wf_function() {
124
- let num_timers = 10;
125
- let t = canned_histories::long_sequential_timers(num_timers as usize);
126
- let func = timers_wf(num_timers);
127
- let mut worker = replay_sdk_worker([test_hist_to_replay(t)]);
128
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, func);
129
- worker.run().await.unwrap();
130
- }
131
-
132
- async fn replay_abrupt_ending(t: TestHistoryBuilder) {
133
- let func = timers_wf(1);
134
- let mut worker = replay_sdk_worker([test_hist_to_replay(t)]);
135
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, func);
136
- worker.run().await.unwrap();
137
- }
138
- #[tokio::test]
139
- async fn replay_ok_ending_with_terminated() {
140
- let mut t1 = canned_histories::single_timer("1");
141
- t1.add_workflow_execution_terminated();
142
- replay_abrupt_ending(t1).await;
143
- }
144
- #[tokio::test]
145
- async fn replay_ok_ending_with_timed_out() {
146
- let mut t2 = canned_histories::single_timer("1");
147
- t2.add_workflow_execution_timed_out();
148
- replay_abrupt_ending(t2).await;
149
- }
150
-
151
- #[rstest::rstest]
152
- #[tokio::test]
153
- async fn multiple_histories_replay(#[values(false, true)] use_feeder: bool) {
154
- let num_timers = 10;
155
- let seq_timer_wf = timers_wf(num_timers);
156
- let one_timer_wf = timers_wf(1);
157
- let mut one_timer_hist = canned_histories::single_timer("1");
158
- one_timer_hist.set_wf_type("onetimer");
159
- let mut seq_timer_hist = canned_histories::long_sequential_timers(num_timers as usize);
160
- seq_timer_hist.set_wf_type("seqtimer");
161
- let (feeder, stream) = HistoryFeeder::new(1);
162
- let mut worker = if use_feeder {
163
- replay_sdk_worker_stream(stream)
164
- } else {
165
- replay_sdk_worker([
166
- test_hist_to_replay(one_timer_hist.clone()),
167
- test_hist_to_replay(seq_timer_hist.clone()),
168
- ])
169
- };
170
- let runs_ctr_i = UniqueRunsCounter::default();
171
- let runs_ctr = runs_ctr_i.runs.clone();
172
- worker.set_worker_interceptor(Box::new(runs_ctr_i));
173
- worker.register_wf("onetimer", one_timer_wf);
174
- worker.register_wf("seqtimer", seq_timer_wf);
175
-
176
- if use_feeder {
177
- let feed_fut = async move {
178
- feeder
179
- .feed(test_hist_to_replay(one_timer_hist))
180
- .await
181
- .unwrap();
182
- feeder
183
- .feed(test_hist_to_replay(seq_timer_hist))
184
- .await
185
- .unwrap();
186
- };
187
- let (_, runr) = join!(feed_fut, worker.run());
188
- runr.unwrap();
189
- } else {
190
- worker.run().await.unwrap();
191
- }
192
- assert_eq!(runs_ctr.lock().len(), 2);
193
- }
194
-
195
- #[tokio::test]
196
- async fn multiple_histories_can_handle_dupe_run_ids() {
197
- let mut hist1 = canned_histories::single_timer("1");
198
- hist1.set_wf_type("onetimer");
199
- let mut worker = replay_sdk_worker([
200
- test_hist_to_replay(hist1.clone()),
201
- test_hist_to_replay(hist1.clone()),
202
- test_hist_to_replay(hist1),
203
- ]);
204
- worker.register_wf("onetimer", timers_wf(1));
205
- worker.run().await.unwrap();
206
- }
207
-
208
- fn timers_wf(num_timers: u32) -> WorkflowFunction {
209
- WorkflowFunction::new(move |ctx: WfContext| async move {
210
- for _ in 1..=num_timers {
211
- ctx.timer(Duration::from_secs(1)).await;
212
- }
213
- Ok(().into())
214
- })
215
- }
216
-
217
- #[derive(Default)]
218
- struct UniqueRunsCounter {
219
- runs: Arc<Mutex<HashSet<String>>>,
220
- }
221
- #[async_trait::async_trait(?Send)]
222
- impl WorkerInterceptor for UniqueRunsCounter {
223
- async fn on_workflow_activation_completion(&self, completion: &WorkflowActivationCompletion) {
224
- self.runs.lock().insert(completion.run_id.clone());
225
- }
226
-
227
- fn on_shutdown(&self, _: &Worker) {}
228
- }
@@ -1,94 +0,0 @@
1
- use futures::StreamExt;
2
- use std::{sync::Arc, time::Duration};
3
- use temporal_client::{WfClientExt, WorkflowClientTrait, WorkflowOptions, WorkflowService};
4
- use temporal_sdk::WfContext;
5
- use temporal_sdk_core_protos::temporal::api::{
6
- common::v1::WorkflowExecution, workflowservice::v1::ResetWorkflowExecutionRequest,
7
- };
8
- use temporal_sdk_core_test_utils::{CoreWfStarter, NAMESPACE};
9
- use tokio::sync::Notify;
10
-
11
- const POST_RESET_SIG: &str = "post-reset";
12
-
13
- #[tokio::test]
14
- async fn reset_workflow() {
15
- let wf_name = "reset_me_wf";
16
- let mut starter = CoreWfStarter::new(wf_name);
17
- starter.no_remote_activities();
18
- let mut worker = starter.worker().await;
19
- worker.fetch_results = false;
20
- let notify = Arc::new(Notify::new());
21
-
22
- let wf_notify = notify.clone();
23
- worker.register_wf(wf_name.to_owned(), move |ctx: WfContext| {
24
- let notify = wf_notify.clone();
25
- async move {
26
- // Make a couple workflow tasks
27
- ctx.timer(Duration::from_secs(1)).await;
28
- ctx.timer(Duration::from_secs(1)).await;
29
- // Tell outer scope to send the reset
30
- notify.notify_one();
31
- let _ = ctx
32
- .make_signal_channel(POST_RESET_SIG)
33
- .next()
34
- .await
35
- .unwrap();
36
- Ok(().into())
37
- }
38
- });
39
-
40
- let run_id = worker
41
- .submit_wf(
42
- wf_name.to_owned(),
43
- wf_name.to_owned(),
44
- vec![],
45
- WorkflowOptions::default(),
46
- )
47
- .await
48
- .unwrap();
49
-
50
- let mut client = starter.get_client().await;
51
- let client = Arc::make_mut(&mut client);
52
- let resetter_fut = async {
53
- notify.notified().await;
54
- // Do the reset
55
- client
56
- .reset_workflow_execution(ResetWorkflowExecutionRequest {
57
- namespace: NAMESPACE.to_owned(),
58
- workflow_execution: Some(WorkflowExecution {
59
- workflow_id: wf_name.to_owned(),
60
- run_id: run_id.clone(),
61
- }),
62
- // End of first WFT
63
- workflow_task_finish_event_id: 4,
64
- request_id: "test-req-id".to_owned(),
65
- ..Default::default()
66
- })
67
- .await
68
- .unwrap();
69
-
70
- // Unblock the workflow by sending the signal. Run ID will have changed after reset so
71
- // we use empty run id
72
- WorkflowClientTrait::signal_workflow_execution(
73
- client,
74
- wf_name.to_owned(),
75
- "".to_owned(),
76
- POST_RESET_SIG.to_owned(),
77
- None,
78
- None,
79
- )
80
- .await
81
- .unwrap();
82
-
83
- // Wait for the now-reset workflow to finish
84
- client
85
- .get_untyped_workflow_handle(wf_name.to_owned(), "")
86
- .get_workflow_result(Default::default())
87
- .await
88
- .unwrap();
89
- starter.shutdown().await;
90
- };
91
- let run_fut = worker.run_until_done();
92
- let (_, rr) = tokio::join!(resetter_fut, run_fut);
93
- rr.unwrap();
94
- }
@@ -1,171 +0,0 @@
1
- use std::collections::HashMap;
2
-
3
- use futures::StreamExt;
4
- use temporal_client::{
5
- SignalWithStartOptions, WorkflowClientTrait, WorkflowExecutionInfo, WorkflowOptions,
6
- };
7
- use temporal_sdk::{
8
- ChildWorkflowOptions, Signal, SignalWorkflowOptions, WfContext, WorkflowResult,
9
- };
10
- use temporal_sdk_core_protos::{coresdk::IntoPayloadsExt, temporal::api::common::v1::Payload};
11
- use temporal_sdk_core_test_utils::CoreWfStarter;
12
- use uuid::Uuid;
13
-
14
- const SIGNAME: &str = "signame";
15
- const RECEIVER_WFID: &str = "sends-signal-signal-receiver";
16
-
17
- async fn signal_sender(ctx: WfContext) -> WorkflowResult<()> {
18
- let run_id = std::str::from_utf8(&ctx.get_args()[0].data)
19
- .unwrap()
20
- .to_owned();
21
- let mut dat = SignalWorkflowOptions::new(RECEIVER_WFID, run_id, SIGNAME, [b"hi!"]);
22
- dat.with_header("tupac", b"shakur");
23
- let sigres = ctx.signal_workflow(dat).await;
24
- if ctx.get_args().get(1).is_some() {
25
- // We expect failure
26
- assert!(sigres.is_err());
27
- } else {
28
- sigres.unwrap();
29
- }
30
- Ok(().into())
31
- }
32
-
33
- #[tokio::test]
34
- async fn sends_signal_to_missing_wf() {
35
- let wf_name = "sends_signal_to_missing_wf";
36
- let mut starter = CoreWfStarter::new(wf_name);
37
- starter.no_remote_activities();
38
- let mut worker = starter.worker().await;
39
- worker.register_wf(wf_name.to_owned(), signal_sender);
40
-
41
- worker
42
- .submit_wf(
43
- wf_name,
44
- wf_name,
45
- vec![Uuid::new_v4().to_string().into(), [1].into()],
46
- WorkflowOptions::default(),
47
- )
48
- .await
49
- .unwrap();
50
- worker.run_until_done().await.unwrap();
51
- }
52
-
53
- async fn signal_receiver(ctx: WfContext) -> WorkflowResult<()> {
54
- let res = ctx.make_signal_channel(SIGNAME).next().await.unwrap();
55
- assert_eq!(&res.input, &[b"hi!".into()]);
56
- assert_eq!(
57
- *res.headers.get("tupac").expect("tupac header exists"),
58
- b"shakur".into()
59
- );
60
- Ok(().into())
61
- }
62
-
63
- async fn signal_with_create_wf_receiver(ctx: WfContext) -> WorkflowResult<()> {
64
- let res = ctx.make_signal_channel(SIGNAME).next().await.unwrap();
65
- assert_eq!(&res.input, &[b"tada".into()]);
66
- assert_eq!(
67
- *res.headers.get("tupac").expect("tupac header exists"),
68
- b"shakur".into()
69
- );
70
- Ok(().into())
71
- }
72
-
73
- #[tokio::test]
74
- async fn sends_signal_to_other_wf() {
75
- let mut starter = CoreWfStarter::new("sends_signal_to_other_wf");
76
- starter.no_remote_activities();
77
- let mut worker = starter.worker().await;
78
- worker.register_wf("sender", signal_sender);
79
- worker.register_wf("receiver", signal_receiver);
80
-
81
- let receiver_run_id = worker
82
- .submit_wf(
83
- RECEIVER_WFID,
84
- "receiver",
85
- vec![],
86
- WorkflowOptions::default(),
87
- )
88
- .await
89
- .unwrap();
90
- worker
91
- .submit_wf(
92
- "sends-signal-sender",
93
- "sender",
94
- vec![receiver_run_id.into()],
95
- WorkflowOptions::default(),
96
- )
97
- .await
98
- .unwrap();
99
- worker.run_until_done().await.unwrap();
100
- }
101
-
102
- #[tokio::test]
103
- async fn sends_signal_with_create_wf() {
104
- let mut starter = CoreWfStarter::new("sends_signal_with_create_wf");
105
- starter.no_remote_activities();
106
- let mut worker = starter.worker().await;
107
- worker.register_wf("receiver_signal", signal_with_create_wf_receiver);
108
-
109
- let client = starter.get_client().await;
110
- let mut header: HashMap<String, Payload> = HashMap::new();
111
- header.insert("tupac".into(), "shakur".into());
112
- let options = SignalWithStartOptions::builder()
113
- .task_queue(worker.inner_mut().task_queue())
114
- .workflow_id("sends_signal_with_create_wf")
115
- .workflow_type("receiver_signal")
116
- .signal_name(SIGNAME)
117
- .signal_input(vec![b"tada".into()].into_payloads())
118
- .signal_header(header.into())
119
- .build()
120
- .unwrap();
121
- let res = client
122
- .signal_with_start_workflow_execution(options, WorkflowOptions::default())
123
- .await
124
- .expect("request succeeds.qed");
125
-
126
- worker.started_workflows.lock().push(WorkflowExecutionInfo {
127
- namespace: client.namespace().to_string(),
128
- workflow_id: "sends_signal_with_create_wf".to_owned(),
129
- run_id: Some(res.run_id.clone()),
130
- });
131
-
132
- worker.run_until_done().await.unwrap();
133
- }
134
-
135
- async fn signals_child(ctx: WfContext) -> WorkflowResult<()> {
136
- let started_child = ctx
137
- .child_workflow(ChildWorkflowOptions {
138
- workflow_id: "my_precious_child".to_string(),
139
- workflow_type: "child_receiver".to_string(),
140
- ..Default::default()
141
- })
142
- .start(&ctx)
143
- .await
144
- .into_started()
145
- .expect("Must start ok");
146
- let mut sig = Signal::new(SIGNAME, [b"hi!"]);
147
- sig.data.with_header("tupac", b"shakur");
148
- started_child.signal(&ctx, sig).await.unwrap();
149
- started_child.result().await.status.unwrap();
150
- Ok(().into())
151
- }
152
-
153
- #[tokio::test]
154
- async fn sends_signal_to_child() {
155
- let mut starter = CoreWfStarter::new("sends_signal_to_child");
156
- starter.no_remote_activities();
157
- let mut worker = starter.worker().await;
158
- worker.register_wf("child_signaler", signals_child);
159
- worker.register_wf("child_receiver", signal_receiver);
160
-
161
- worker
162
- .submit_wf(
163
- "sends-signal-to-child",
164
- "child_signaler",
165
- vec![],
166
- WorkflowOptions::default(),
167
- )
168
- .await
169
- .unwrap();
170
- worker.run_until_done().await.unwrap();
171
- }