temporalio 0.0.1

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 (317) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +130 -0
  5. data/bridge/Cargo.lock +2865 -0
  6. data/bridge/Cargo.toml +26 -0
  7. data/bridge/sdk-core/ARCHITECTURE.md +76 -0
  8. data/bridge/sdk-core/Cargo.lock +2606 -0
  9. data/bridge/sdk-core/Cargo.toml +2 -0
  10. data/bridge/sdk-core/LICENSE.txt +23 -0
  11. data/bridge/sdk-core/README.md +107 -0
  12. data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
  13. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
  14. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  15. data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
  16. data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
  17. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  18. data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
  19. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
  20. data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
  21. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
  22. data/bridge/sdk-core/client/Cargo.toml +40 -0
  23. data/bridge/sdk-core/client/LICENSE.txt +23 -0
  24. data/bridge/sdk-core/client/src/lib.rs +1294 -0
  25. data/bridge/sdk-core/client/src/metrics.rs +165 -0
  26. data/bridge/sdk-core/client/src/raw.rs +931 -0
  27. data/bridge/sdk-core/client/src/retry.rs +674 -0
  28. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
  29. data/bridge/sdk-core/core/Cargo.toml +116 -0
  30. data/bridge/sdk-core/core/LICENSE.txt +23 -0
  31. data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
  32. data/bridge/sdk-core/core/src/abstractions.rs +166 -0
  33. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
  34. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
  35. data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
  36. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
  37. data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
  38. data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
  39. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
  40. data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
  41. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
  42. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
  43. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
  44. data/bridge/sdk-core/core/src/lib.rs +175 -0
  45. data/bridge/sdk-core/core/src/log_export.rs +62 -0
  46. data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
  47. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
  48. data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
  49. data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
  50. data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
  51. data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
  52. data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
  53. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
  54. data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
  55. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
  56. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
  57. data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
  58. data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
  59. data/bridge/sdk-core/core/src/worker/client.rs +347 -0
  60. data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
  63. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
  64. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
  66. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
  69. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
  70. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
  71. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
  72. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
  73. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
  74. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
  75. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
  76. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
  77. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
  78. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
  79. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
  80. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
  81. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
  82. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
  83. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  84. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
  85. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
  86. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
  87. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  88. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
  89. data/bridge/sdk-core/core-api/Cargo.toml +31 -0
  90. data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
  91. data/bridge/sdk-core/core-api/src/errors.rs +95 -0
  92. data/bridge/sdk-core/core-api/src/lib.rs +151 -0
  93. data/bridge/sdk-core/core-api/src/worker.rs +135 -0
  94. data/bridge/sdk-core/etc/deps.svg +187 -0
  95. data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
  96. data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
  97. data/bridge/sdk-core/etc/prometheus.yaml +6 -0
  98. data/bridge/sdk-core/fsm/Cargo.toml +18 -0
  99. data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
  100. data/bridge/sdk-core/fsm/README.md +3 -0
  101. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
  102. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
  103. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
  104. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
  105. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
  106. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
  107. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
  108. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
  109. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
  110. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
  111. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
  112. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
  113. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
  114. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
  115. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
  116. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
  117. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
  118. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
  119. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  120. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
  121. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  122. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
  123. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
  124. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
  125. data/bridge/sdk-core/fsm/src/lib.rs +2 -0
  126. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  127. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  128. data/bridge/sdk-core/integ-with-otel.sh +7 -0
  129. data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
  130. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
  131. data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
  132. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
  133. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
  134. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  135. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
  136. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
  137. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
  138. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  139. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
  140. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
  141. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
  142. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
  143. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
  144. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
  145. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
  146. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  147. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
  148. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
  149. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
  150. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
  151. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
  152. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
  153. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
  154. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
  155. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
  156. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
  157. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
  158. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
  159. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  160. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
  161. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
  162. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
  163. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
  164. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
  165. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
  166. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
  167. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  168. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
  169. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
  170. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
  171. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
  172. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
  173. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  174. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
  175. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
  176. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
  177. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
  178. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
  179. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
  180. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
  181. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
  182. data/bridge/sdk-core/rustfmt.toml +1 -0
  183. data/bridge/sdk-core/sdk/Cargo.toml +47 -0
  184. data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
  185. data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
  186. data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
  187. data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
  188. data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
  189. data/bridge/sdk-core/sdk/src/lib.rs +792 -0
  190. data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
  191. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
  192. data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
  193. data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
  194. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
  195. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
  196. data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
  197. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  198. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
  199. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
  200. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
  201. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  202. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  203. data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
  204. data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
  205. data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
  206. data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
  207. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
  208. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
  209. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
  210. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
  211. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
  212. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
  213. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
  214. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  215. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
  216. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
  217. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
  218. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
  219. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
  220. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
  221. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
  222. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
  223. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
  224. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
  225. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
  226. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
  227. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
  228. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
  229. data/bridge/sdk-core/tests/load_tests.rs +191 -0
  230. data/bridge/sdk-core/tests/main.rs +111 -0
  231. data/bridge/sdk-core/tests/runner.rs +93 -0
  232. data/bridge/src/connection.rs +167 -0
  233. data/bridge/src/lib.rs +180 -0
  234. data/bridge/src/runtime.rs +47 -0
  235. data/bridge/src/worker.rs +73 -0
  236. data/ext/Rakefile +9 -0
  237. data/lib/bridge.so +0 -0
  238. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
  239. data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
  240. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
  241. data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
  242. data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
  243. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
  244. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
  245. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
  246. data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
  247. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
  248. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
  249. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
  250. data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
  251. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
  252. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
  253. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
  254. data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
  255. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
  256. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
  257. data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
  258. data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
  259. data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
  260. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
  261. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
  262. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
  263. data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
  264. data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
  265. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
  266. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
  267. data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
  268. data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
  269. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
  270. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
  271. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
  272. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
  273. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
  274. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
  275. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
  276. data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
  277. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
  278. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
  279. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
  280. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
  281. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
  282. data/lib/temporal/bridge.rb +14 -0
  283. data/lib/temporal/client/implementation.rb +339 -0
  284. data/lib/temporal/client/workflow_handle.rb +243 -0
  285. data/lib/temporal/client.rb +144 -0
  286. data/lib/temporal/connection.rb +736 -0
  287. data/lib/temporal/data_converter.rb +150 -0
  288. data/lib/temporal/error/failure.rb +194 -0
  289. data/lib/temporal/error/workflow_failure.rb +17 -0
  290. data/lib/temporal/errors.rb +22 -0
  291. data/lib/temporal/failure_converter/base.rb +26 -0
  292. data/lib/temporal/failure_converter/basic.rb +313 -0
  293. data/lib/temporal/failure_converter.rb +8 -0
  294. data/lib/temporal/interceptor/chain.rb +27 -0
  295. data/lib/temporal/interceptor/client.rb +102 -0
  296. data/lib/temporal/payload_codec/base.rb +32 -0
  297. data/lib/temporal/payload_converter/base.rb +24 -0
  298. data/lib/temporal/payload_converter/bytes.rb +26 -0
  299. data/lib/temporal/payload_converter/composite.rb +47 -0
  300. data/lib/temporal/payload_converter/encoding_base.rb +35 -0
  301. data/lib/temporal/payload_converter/json.rb +25 -0
  302. data/lib/temporal/payload_converter/nil.rb +25 -0
  303. data/lib/temporal/payload_converter.rb +14 -0
  304. data/lib/temporal/retry_policy.rb +82 -0
  305. data/lib/temporal/retry_state.rb +35 -0
  306. data/lib/temporal/runtime.rb +22 -0
  307. data/lib/temporal/timeout_type.rb +29 -0
  308. data/lib/temporal/version.rb +3 -0
  309. data/lib/temporal/workflow/execution_info.rb +54 -0
  310. data/lib/temporal/workflow/execution_status.rb +36 -0
  311. data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
  312. data/lib/temporal/workflow/query_reject_condition.rb +33 -0
  313. data/lib/temporal.rb +8 -0
  314. data/lib/temporalio.rb +3 -0
  315. data/lib/thermite_patch.rb +23 -0
  316. data/temporalio.gemspec +41 -0
  317. metadata +583 -0
@@ -0,0 +1,383 @@
1
+ use super::TELEM_SERVICE_NAME;
2
+ use crate::telemetry::GLOBAL_TELEM_DAT;
3
+ use opentelemetry::sdk::metrics::aggregators::Aggregator;
4
+ use opentelemetry::sdk::metrics::sdk_api::{Descriptor, InstrumentKind};
5
+ use opentelemetry::{
6
+ global,
7
+ metrics::{Counter, Histogram, Meter},
8
+ sdk::{
9
+ export::metrics::AggregatorSelector,
10
+ metrics::aggregators::{histogram, last_value, sum},
11
+ },
12
+ Context, KeyValue,
13
+ };
14
+ use std::{sync::Arc, time::Duration};
15
+
16
+ /// Used to track context associated with metrics, and record/update them
17
+ ///
18
+ /// Possible improvement: make generic over some type tag so that methods are only exposed if the
19
+ /// appropriate k/vs have already been set.
20
+ #[derive(Default, Clone, Debug)]
21
+ pub(crate) struct MetricsContext {
22
+ ctx: Context,
23
+ kvs: Arc<Vec<KeyValue>>,
24
+ }
25
+
26
+ impl MetricsContext {
27
+ fn new(kvs: Vec<KeyValue>) -> Self {
28
+ Self {
29
+ ctx: Context::current(),
30
+ kvs: Arc::new(kvs),
31
+ }
32
+ }
33
+
34
+ pub(crate) fn top_level(namespace: String) -> Self {
35
+ Self::new(vec![KeyValue::new(KEY_NAMESPACE, namespace)])
36
+ }
37
+
38
+ pub(crate) fn with_task_q(mut self, tq: String) -> Self {
39
+ Arc::make_mut(&mut self.kvs).push(task_queue(tq));
40
+ self
41
+ }
42
+
43
+ /// Extend an existing metrics context with new attributes
44
+ pub(crate) fn with_new_attrs(&self, new_kvs: impl IntoIterator<Item = KeyValue>) -> Self {
45
+ let mut kvs = self.kvs.clone();
46
+ Arc::make_mut(&mut kvs).extend(new_kvs);
47
+ Self {
48
+ ctx: Context::current(),
49
+ kvs,
50
+ }
51
+ }
52
+
53
+ /// A workflow task queue poll succeeded
54
+ pub(crate) fn wf_tq_poll_ok(&self) {
55
+ WF_TASK_QUEUE_POLL_SUCCEED_COUNTER.add(&self.ctx, 1, &self.kvs);
56
+ }
57
+
58
+ /// A workflow task queue poll timed out / had empty response
59
+ pub(crate) fn wf_tq_poll_empty(&self) {
60
+ WF_TASK_QUEUE_POLL_EMPTY_COUNTER.add(&self.ctx, 1, &self.kvs);
61
+ }
62
+
63
+ /// A workflow task execution failed
64
+ pub(crate) fn wf_task_failed(&self) {
65
+ WF_TASK_EXECUTION_FAILURE_COUNTER.add(&self.ctx, 1, &self.kvs);
66
+ }
67
+
68
+ /// A workflow completed successfully
69
+ pub(crate) fn wf_completed(&self) {
70
+ WF_COMPLETED_COUNTER.add(&self.ctx, 1, &self.kvs);
71
+ }
72
+
73
+ /// A workflow ended cancelled
74
+ pub(crate) fn wf_canceled(&self) {
75
+ WF_CANCELED_COUNTER.add(&self.ctx, 1, &self.kvs);
76
+ }
77
+
78
+ /// A workflow ended failed
79
+ pub(crate) fn wf_failed(&self) {
80
+ WF_FAILED_COUNTER.add(&self.ctx, 1, &self.kvs);
81
+ }
82
+
83
+ /// A workflow continued as new
84
+ pub(crate) fn wf_continued_as_new(&self) {
85
+ WF_CONT_COUNTER.add(&self.ctx, 1, &self.kvs);
86
+ }
87
+
88
+ /// Record workflow total execution time in milliseconds
89
+ pub(crate) fn wf_e2e_latency(&self, dur: Duration) {
90
+ WF_E2E_LATENCY.record(&self.ctx, dur.as_millis() as u64, &self.kvs);
91
+ }
92
+
93
+ /// Record workflow task schedule to start time in millis
94
+ pub(crate) fn wf_task_sched_to_start_latency(&self, dur: Duration) {
95
+ WF_TASK_SCHED_TO_START_LATENCY.record(&self.ctx, dur.as_millis() as u64, &self.kvs);
96
+ }
97
+
98
+ /// Record workflow task execution time in milliseconds
99
+ pub(crate) fn wf_task_latency(&self, dur: Duration) {
100
+ WF_TASK_EXECUTION_LATENCY.record(&self.ctx, dur.as_millis() as u64, &self.kvs);
101
+ }
102
+
103
+ /// Record time it takes to catch up on replaying a WFT
104
+ pub(crate) fn wf_task_replay_latency(&self, dur: Duration) {
105
+ WF_TASK_REPLAY_LATENCY.record(&self.ctx, dur.as_millis() as u64, &self.kvs);
106
+ }
107
+
108
+ /// An activity long poll timed out
109
+ pub(crate) fn act_poll_timeout(&self) {
110
+ ACT_POLL_NO_TASK.add(&self.ctx, 1, &self.kvs);
111
+ }
112
+
113
+ /// An activity execution failed
114
+ pub(crate) fn act_execution_failed(&self) {
115
+ ACT_EXECUTION_FAILED.add(&self.ctx, 1, &self.kvs);
116
+ }
117
+
118
+ /// Record activity task schedule to start time in millis
119
+ pub(crate) fn act_sched_to_start_latency(&self, dur: Duration) {
120
+ ACT_SCHED_TO_START_LATENCY.record(&self.ctx, dur.as_millis() as u64, &self.kvs);
121
+ }
122
+
123
+ /// Record time it took to complete activity execution, from the time core generated the
124
+ /// activity task, to the time lang responded with a completion (failure or success).
125
+ pub(crate) fn act_execution_latency(&self, dur: Duration) {
126
+ ACT_EXEC_LATENCY.record(&self.ctx, dur.as_millis() as u64, &self.kvs);
127
+ }
128
+
129
+ /// A worker was registered
130
+ pub(crate) fn worker_registered(&self) {
131
+ WORKER_REGISTERED.add(&self.ctx, 1, &self.kvs);
132
+ }
133
+
134
+ /// Record current number of available task slots. Context should have worker type set.
135
+ pub(crate) fn available_task_slots(&self, num: usize) {
136
+ TASK_SLOTS_AVAILABLE.record(&self.ctx, num as u64, &self.kvs)
137
+ }
138
+
139
+ /// Record current number of pollers. Context should include poller type / task queue tag.
140
+ pub(crate) fn record_num_pollers(&self, num: usize) {
141
+ NUM_POLLERS.record(&self.ctx, num as u64, &self.kvs);
142
+ }
143
+
144
+ /// A workflow task found a cached workflow to run against
145
+ pub(crate) fn sticky_cache_hit(&self) {
146
+ STICKY_CACHE_HIT.add(&self.ctx, 1, &self.kvs);
147
+ }
148
+
149
+ /// A workflow task did not find a cached workflow
150
+ pub(crate) fn sticky_cache_miss(&self) {
151
+ STICKY_CACHE_MISS.add(&self.ctx, 1, &self.kvs);
152
+ }
153
+
154
+ /// Record current cache size (in number of wfs, not bytes)
155
+ pub(crate) fn cache_size(&self, size: u64) {
156
+ STICKY_CACHE_SIZE.record(&self.ctx, size, &self.kvs);
157
+ }
158
+ }
159
+
160
+ lazy_static::lazy_static! {
161
+ pub(crate) static ref METRIC_METER: Meter = {
162
+ #[cfg(not(test))]
163
+ if crate::telemetry::GLOBAL_TELEM_DAT.get().is_none() {
164
+ panic!("Tried to use a metric but telemetry has not been initialized")
165
+ }
166
+ global::meter(TELEM_SERVICE_NAME)
167
+ };
168
+ }
169
+ fn metric_prefix() -> &'static str {
170
+ GLOBAL_TELEM_DAT
171
+ .get()
172
+ .map(|gtd| {
173
+ if gtd.no_temporal_prefix_for_metrics {
174
+ ""
175
+ } else {
176
+ "temporal_"
177
+ }
178
+ })
179
+ .unwrap_or("")
180
+ }
181
+
182
+ /// Define a temporal metric. All metrics are kept private to this file, and should be accessed
183
+ /// through functions on the [MetricsContext]
184
+ macro_rules! tm {
185
+ (ctr, $ident:ident, $name:expr) => {
186
+ lazy_static::lazy_static! {
187
+ static ref $ident: Counter<u64> = {
188
+ METRIC_METER.u64_counter(metric_prefix().to_string() + $name).init()
189
+ };
190
+ }
191
+ };
192
+ (vr_u64, $ident:ident, $name:expr) => {
193
+ lazy_static::lazy_static! {
194
+ static ref $ident: Histogram<u64> = {
195
+ METRIC_METER.u64_histogram(metric_prefix().to_string() + $name).init()
196
+ };
197
+ }
198
+ };
199
+ }
200
+
201
+ const KEY_NAMESPACE: &str = "namespace";
202
+ const KEY_WF_TYPE: &str = "workflow_type";
203
+ const KEY_TASK_QUEUE: &str = "task_queue";
204
+ const KEY_ACT_TYPE: &str = "activity_type";
205
+ const KEY_POLLER_TYPE: &str = "poller_type";
206
+ const KEY_WORKER_TYPE: &str = "worker_type";
207
+
208
+ pub(crate) fn workflow_poller() -> KeyValue {
209
+ KeyValue::new(KEY_POLLER_TYPE, "workflow_task")
210
+ }
211
+ pub(crate) fn workflow_sticky_poller() -> KeyValue {
212
+ KeyValue::new(KEY_POLLER_TYPE, "sticky_workflow_task")
213
+ }
214
+ pub(crate) fn activity_poller() -> KeyValue {
215
+ KeyValue::new(KEY_POLLER_TYPE, "activity_task")
216
+ }
217
+ pub(crate) fn task_queue(tq: String) -> KeyValue {
218
+ KeyValue::new(KEY_TASK_QUEUE, tq)
219
+ }
220
+ pub(crate) fn activity_type(ty: String) -> KeyValue {
221
+ KeyValue::new(KEY_ACT_TYPE, ty)
222
+ }
223
+ pub(crate) fn workflow_type(ty: String) -> KeyValue {
224
+ KeyValue::new(KEY_WF_TYPE, ty)
225
+ }
226
+ pub(crate) fn workflow_worker_type() -> KeyValue {
227
+ KeyValue {
228
+ key: opentelemetry::Key::from_static_str(KEY_WORKER_TYPE),
229
+ value: opentelemetry::Value::String("WorkflowWorker".into()),
230
+ }
231
+ }
232
+ pub(crate) fn activity_worker_type() -> KeyValue {
233
+ KeyValue {
234
+ key: opentelemetry::Key::from_static_str(KEY_WORKER_TYPE),
235
+ value: opentelemetry::Value::String("ActivityWorker".into()),
236
+ }
237
+ }
238
+ pub(crate) fn local_activity_worker_type() -> KeyValue {
239
+ KeyValue {
240
+ key: opentelemetry::Key::from_static_str(KEY_WORKER_TYPE),
241
+ value: opentelemetry::Value::String("LocalActivityWorker".into()),
242
+ }
243
+ }
244
+
245
+ tm!(ctr, WF_COMPLETED_COUNTER, "workflow_completed");
246
+ tm!(ctr, WF_CANCELED_COUNTER, "workflow_canceled");
247
+ tm!(ctr, WF_FAILED_COUNTER, "workflow_failed");
248
+ tm!(ctr, WF_CONT_COUNTER, "workflow_continue_as_new");
249
+ const WF_E2E_LATENCY_NAME: &str = "workflow_endtoend_latency";
250
+ tm!(vr_u64, WF_E2E_LATENCY, WF_E2E_LATENCY_NAME);
251
+
252
+ tm!(
253
+ ctr,
254
+ WF_TASK_QUEUE_POLL_EMPTY_COUNTER,
255
+ "workflow_task_queue_poll_empty"
256
+ );
257
+ tm!(
258
+ ctr,
259
+ WF_TASK_QUEUE_POLL_SUCCEED_COUNTER,
260
+ "workflow_task_queue_poll_succeed"
261
+ );
262
+ tm!(
263
+ ctr,
264
+ WF_TASK_EXECUTION_FAILURE_COUNTER,
265
+ "workflow_task_execution_failed"
266
+ );
267
+ const WF_TASK_SCHED_TO_START_LATENCY_NAME: &str = "workflow_task_schedule_to_start_latency";
268
+ tm!(
269
+ vr_u64,
270
+ WF_TASK_SCHED_TO_START_LATENCY,
271
+ WF_TASK_SCHED_TO_START_LATENCY_NAME
272
+ );
273
+ const WF_TASK_REPLAY_LATENCY_NAME: &str = "workflow_task_replay_latency";
274
+ tm!(vr_u64, WF_TASK_REPLAY_LATENCY, WF_TASK_REPLAY_LATENCY_NAME);
275
+ const WF_TASK_EXECUTION_LATENCY_NAME: &str = "workflow_task_execution_latency";
276
+ tm!(
277
+ vr_u64,
278
+ WF_TASK_EXECUTION_LATENCY,
279
+ WF_TASK_EXECUTION_LATENCY_NAME
280
+ );
281
+
282
+ tm!(ctr, ACT_POLL_NO_TASK, "activity_poll_no_task");
283
+ tm!(ctr, ACT_EXECUTION_FAILED, "activity_execution_failed");
284
+ // Act task unregistered can't be known by core right now since it's not well defined as an
285
+ // activity result. We could add a flag to the failed activity result if desired.
286
+ const ACT_SCHED_TO_START_LATENCY_NAME: &str = "activity_schedule_to_start_latency";
287
+ tm!(
288
+ vr_u64,
289
+ ACT_SCHED_TO_START_LATENCY,
290
+ ACT_SCHED_TO_START_LATENCY_NAME
291
+ );
292
+ const ACT_EXEC_LATENCY_NAME: &str = "activity_execution_latency";
293
+ tm!(vr_u64, ACT_EXEC_LATENCY, ACT_EXEC_LATENCY_NAME);
294
+
295
+ // name kept as worker start for compat with old sdk / what users expect
296
+ tm!(ctr, WORKER_REGISTERED, "worker_start");
297
+ const NUM_POLLERS_NAME: &str = "num_pollers";
298
+ tm!(vr_u64, NUM_POLLERS, NUM_POLLERS_NAME);
299
+ const TASK_SLOTS_AVAILABLE_NAME: &str = "worker_task_slots_available";
300
+ tm!(vr_u64, TASK_SLOTS_AVAILABLE, TASK_SLOTS_AVAILABLE_NAME);
301
+
302
+ tm!(ctr, STICKY_CACHE_HIT, "sticky_cache_hit");
303
+ tm!(ctr, STICKY_CACHE_MISS, "sticky_cache_miss");
304
+ const STICKY_CACHE_SIZE_NAME: &str = "sticky_cache_size";
305
+ tm!(vr_u64, STICKY_CACHE_SIZE, STICKY_CACHE_SIZE_NAME);
306
+
307
+ /// Artisanal, handcrafted latency buckets for workflow e2e latency which should expose a useful
308
+ /// set of buckets for < 1 day runtime workflows. Beyond that, this metric probably isn't very
309
+ /// helpful
310
+ static WF_LATENCY_MS_BUCKETS: &[f64] = &[
311
+ 100.,
312
+ 500.,
313
+ 1000.,
314
+ 1500.,
315
+ 2000.,
316
+ 5000.,
317
+ 10_000.,
318
+ 30_000.,
319
+ 60_000.,
320
+ 120_000.,
321
+ 300_000.,
322
+ 600_000.,
323
+ 1_800_000., // 30 min
324
+ 3_600_000., // 1 hr
325
+ 30_600_000., // 10 hrs
326
+ 8.64e7, // 24 hrs
327
+ ];
328
+
329
+ /// Task latencies are expected to be fast, no longer than a second which was generally the deadlock
330
+ /// timeout in old SDKs. Here it's a bit different since a WFT may represent multiple activations.
331
+ static WF_TASK_MS_BUCKETS: &[f64] = &[1., 10., 20., 50., 100., 200., 500., 1000.];
332
+
333
+ /// Activity are generally expected to take at least a little time, and sometimes quite a while,
334
+ /// since they're doing side-effecty things, etc.
335
+ static ACT_EXE_MS_BUCKETS: &[f64] = &[50., 100., 500., 1000., 5000., 10_000., 60_000.];
336
+
337
+ /// Schedule-to-start latency buckets for both WFT and AT
338
+ static TASK_SCHED_TO_START_MS_BUCKETS: &[f64] = &[100., 500., 1000., 5000., 10_000.];
339
+
340
+ /// Default buckets. Should never really be used as they will be meaningless for many things, but
341
+ /// broadly it's trying to represent latencies in millis.
342
+ pub(super) static DEFAULT_MS_BUCKETS: &[f64] = &[50., 100., 500., 1000., 2500., 10_000.];
343
+
344
+ /// Chooses appropriate aggregators for our metrics
345
+ #[derive(Debug)]
346
+ pub struct SDKAggSelector;
347
+
348
+ impl AggregatorSelector for SDKAggSelector {
349
+ fn aggregator_for(&self, descriptor: &Descriptor) -> Option<Arc<dyn Aggregator + Send + Sync>> {
350
+ // Gauges are always last value
351
+ if *descriptor.instrument_kind() == InstrumentKind::GaugeObserver {
352
+ return Some(Arc::new(last_value()));
353
+ }
354
+
355
+ if *descriptor.instrument_kind() == InstrumentKind::Histogram {
356
+ let dname = descriptor
357
+ .name()
358
+ .strip_prefix(metric_prefix())
359
+ .unwrap_or_else(|| descriptor.name());
360
+ // Some recorders are just gauges
361
+ match dname {
362
+ STICKY_CACHE_SIZE_NAME | NUM_POLLERS_NAME | TASK_SLOTS_AVAILABLE_NAME => {
363
+ return Some(Arc::new(last_value()))
364
+ }
365
+ _ => (),
366
+ }
367
+
368
+ // Other recorders will select their appropriate buckets
369
+ let buckets = match dname {
370
+ WF_E2E_LATENCY_NAME => WF_LATENCY_MS_BUCKETS,
371
+ WF_TASK_EXECUTION_LATENCY_NAME | WF_TASK_REPLAY_LATENCY_NAME => WF_TASK_MS_BUCKETS,
372
+ WF_TASK_SCHED_TO_START_LATENCY_NAME | ACT_SCHED_TO_START_LATENCY_NAME => {
373
+ TASK_SCHED_TO_START_MS_BUCKETS
374
+ }
375
+ ACT_EXEC_LATENCY_NAME => ACT_EXE_MS_BUCKETS,
376
+ _ => DEFAULT_MS_BUCKETS,
377
+ };
378
+ return Some(Arc::new(histogram(buckets)));
379
+ }
380
+
381
+ Some(Arc::new(sum()))
382
+ }
383
+ }