temporalio 0.0.1 → 0.1.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 (310) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +180 -7
  3. data/bridge/Cargo.lock +208 -76
  4. data/bridge/Cargo.toml +5 -2
  5. data/bridge/sdk-core/Cargo.toml +1 -1
  6. data/bridge/sdk-core/README.md +20 -10
  7. data/bridge/sdk-core/client/Cargo.toml +1 -1
  8. data/bridge/sdk-core/client/src/lib.rs +227 -59
  9. data/bridge/sdk-core/client/src/metrics.rs +17 -8
  10. data/bridge/sdk-core/client/src/raw.rs +13 -12
  11. data/bridge/sdk-core/client/src/retry.rs +132 -43
  12. data/bridge/sdk-core/core/Cargo.toml +28 -15
  13. data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
  14. data/bridge/sdk-core/core/src/abstractions.rs +225 -36
  15. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +217 -79
  16. data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
  17. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +565 -34
  18. data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -90
  19. data/bridge/sdk-core/core/src/core_tests/workers.rs +3 -5
  20. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  21. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +430 -67
  22. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
  23. data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
  24. data/bridge/sdk-core/core/src/lib.rs +148 -34
  25. data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
  26. data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
  27. data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
  28. data/bridge/sdk-core/core/src/telemetry/metrics.rs +219 -140
  29. data/bridge/sdk-core/core/src/telemetry/mod.rs +326 -315
  30. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +20 -14
  31. data/bridge/sdk-core/core/src/test_help/mod.rs +85 -21
  32. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
  33. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
  34. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +364 -128
  35. data/bridge/sdk-core/core/src/worker/activities.rs +263 -170
  36. data/bridge/sdk-core/core/src/worker/client/mocks.rs +23 -3
  37. data/bridge/sdk-core/core/src/worker/client.rs +48 -6
  38. data/bridge/sdk-core/core/src/worker/mod.rs +186 -75
  39. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
  40. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +13 -24
  41. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +879 -226
  42. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +101 -48
  43. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -12
  44. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -9
  45. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +90 -32
  46. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +6 -9
  47. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -10
  48. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -9
  49. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +160 -83
  50. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +36 -54
  51. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +179 -0
  52. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +104 -157
  53. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +8 -12
  54. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -13
  55. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +10 -4
  56. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -11
  57. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
  58. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +395 -299
  59. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +12 -20
  60. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +33 -18
  61. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1032 -374
  62. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +525 -392
  63. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
  64. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -6
  66. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +456 -681
  69. data/bridge/sdk-core/core-api/Cargo.toml +6 -4
  70. data/bridge/sdk-core/core-api/src/errors.rs +1 -34
  71. data/bridge/sdk-core/core-api/src/lib.rs +7 -45
  72. data/bridge/sdk-core/core-api/src/telemetry.rs +141 -0
  73. data/bridge/sdk-core/core-api/src/worker.rs +27 -1
  74. data/bridge/sdk-core/etc/deps.svg +115 -140
  75. data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
  76. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
  77. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  78. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
  79. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  80. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  81. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  82. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
  83. data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
  84. data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
  85. data/bridge/sdk-core/protos/api_upstream/{temporal/api/enums/v1/cluster.proto → build/tools.go} +7 -18
  86. data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
  87. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
  88. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +15 -26
  89. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
  90. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
  91. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -9
  92. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
  93. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +10 -8
  94. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +28 -2
  95. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
  96. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
  97. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
  98. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
  99. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
  100. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
  101. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
  102. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
  103. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
  104. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
  105. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +62 -26
  106. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
  107. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +24 -61
  108. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
  109. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
  110. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
  111. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
  112. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
  113. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
  114. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
  115. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
  116. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
  117. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
  118. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +111 -36
  119. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +19 -5
  120. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
  121. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
  122. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
  123. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
  124. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
  125. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
  126. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +9 -0
  127. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +9 -1
  128. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
  129. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
  130. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
  131. data/bridge/sdk-core/sdk/Cargo.toml +4 -3
  132. data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
  133. data/bridge/sdk-core/sdk/src/lib.rs +94 -25
  134. data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
  135. data/bridge/sdk-core/sdk/src/workflow_future.rs +10 -13
  136. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
  137. data/bridge/sdk-core/sdk-core-protos/build.rs +36 -2
  138. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +164 -104
  139. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +27 -23
  140. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +252 -74
  141. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
  142. data/bridge/sdk-core/test-utils/Cargo.toml +4 -1
  143. data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
  144. data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
  145. data/bridge/sdk-core/test-utils/src/lib.rs +161 -50
  146. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
  147. data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
  148. data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
  149. data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
  150. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
  151. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
  152. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +239 -0
  153. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -60
  154. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
  155. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
  156. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
  157. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
  158. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
  159. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
  160. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
  161. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
  162. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +151 -116
  163. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +54 -0
  164. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
  165. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +115 -24
  166. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
  167. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
  168. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
  169. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
  170. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
  171. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +27 -18
  172. data/bridge/sdk-core/tests/main.rs +8 -16
  173. data/bridge/sdk-core/tests/runner.rs +75 -36
  174. data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
  175. data/bridge/src/connection.rs +117 -82
  176. data/bridge/src/lib.rs +356 -42
  177. data/bridge/src/runtime.rs +10 -3
  178. data/bridge/src/test_server.rs +153 -0
  179. data/bridge/src/worker.rs +133 -9
  180. data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
  181. data/lib/gen/temporal/api/command/v1/message_pb.rb +10 -16
  182. data/lib/gen/temporal/api/common/v1/message_pb.rb +5 -1
  183. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
  184. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -3
  185. data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
  186. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +5 -4
  187. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +9 -1
  188. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
  189. data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
  190. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
  191. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
  192. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
  193. data/lib/gen/temporal/api/enums/v1/update_pb.rb +7 -10
  194. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
  195. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
  196. data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
  197. data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
  198. data/lib/gen/temporal/api/history/v1/message_pb.rb +34 -25
  199. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +2 -1
  200. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +14 -51
  201. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
  202. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
  203. data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
  204. data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
  205. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
  206. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
  207. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
  208. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
  209. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
  210. data/lib/gen/temporal/api/update/v1/message_pb.rb +49 -3
  211. data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
  212. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
  213. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +47 -20
  214. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
  215. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
  216. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
  217. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
  218. data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
  219. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
  220. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
  221. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +28 -21
  222. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +32 -24
  223. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
  224. data/lib/temporalio/activity/context.rb +102 -0
  225. data/lib/temporalio/activity/info.rb +67 -0
  226. data/lib/temporalio/activity.rb +85 -0
  227. data/lib/temporalio/bridge/connect_options.rb +15 -0
  228. data/lib/temporalio/bridge/error.rb +8 -0
  229. data/lib/temporalio/bridge/retry_config.rb +24 -0
  230. data/lib/temporalio/bridge/tls_options.rb +19 -0
  231. data/lib/temporalio/bridge.rb +14 -0
  232. data/lib/{temporal → temporalio}/client/implementation.rb +57 -56
  233. data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
  234. data/lib/{temporal → temporalio}/client.rb +19 -32
  235. data/lib/temporalio/connection/retry_config.rb +44 -0
  236. data/lib/temporalio/connection/service.rb +20 -0
  237. data/lib/temporalio/connection/test_service.rb +92 -0
  238. data/lib/temporalio/connection/tls_options.rb +51 -0
  239. data/lib/temporalio/connection/workflow_service.rb +731 -0
  240. data/lib/temporalio/connection.rb +86 -0
  241. data/lib/{temporal → temporalio}/data_converter.rb +76 -35
  242. data/lib/{temporal → temporalio}/error/failure.rb +6 -6
  243. data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
  244. data/lib/{temporal → temporalio}/errors.rb +19 -1
  245. data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
  246. data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
  247. data/lib/temporalio/failure_converter.rb +7 -0
  248. data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
  249. data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
  250. data/lib/{temporal → temporalio}/interceptor/chain.rb +7 -6
  251. data/lib/{temporal → temporalio}/interceptor/client.rb +27 -2
  252. data/lib/temporalio/interceptor.rb +22 -0
  253. data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
  254. data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
  255. data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
  256. data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
  257. data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
  258. data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
  259. data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
  260. data/lib/temporalio/payload_converter.rb +14 -0
  261. data/lib/{temporal → temporalio}/retry_policy.rb +17 -7
  262. data/lib/{temporal → temporalio}/retry_state.rb +1 -1
  263. data/lib/temporalio/runtime.rb +25 -0
  264. data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
  265. data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
  266. data/lib/temporalio/testing/workflow_environment.rb +112 -0
  267. data/lib/temporalio/testing.rb +175 -0
  268. data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
  269. data/lib/temporalio/version.rb +3 -0
  270. data/lib/temporalio/worker/activity_runner.rb +114 -0
  271. data/lib/temporalio/worker/activity_worker.rb +164 -0
  272. data/lib/temporalio/worker/reactor.rb +46 -0
  273. data/lib/temporalio/worker/runner.rb +63 -0
  274. data/lib/temporalio/worker/sync_worker.rb +124 -0
  275. data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
  276. data/lib/temporalio/worker.rb +204 -0
  277. data/lib/temporalio/workflow/async.rb +46 -0
  278. data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
  279. data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
  280. data/lib/temporalio/workflow/future.rb +138 -0
  281. data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
  282. data/lib/temporalio/workflow/info.rb +76 -0
  283. data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
  284. data/lib/temporalio.rb +12 -3
  285. data/temporalio.gemspec +11 -6
  286. metadata +137 -64
  287. data/bridge/sdk-core/Cargo.lock +0 -2606
  288. data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
  289. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
  290. data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
  291. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
  292. data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
  293. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
  294. data/bridge/sdk-core/core/src/log_export.rs +0 -62
  295. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
  296. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
  297. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
  298. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
  299. data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
  300. data/lib/bridge.so +0 -0
  301. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
  302. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
  303. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
  304. data/lib/temporal/bridge.rb +0 -14
  305. data/lib/temporal/connection.rb +0 -736
  306. data/lib/temporal/failure_converter.rb +0 -8
  307. data/lib/temporal/payload_converter.rb +0 -14
  308. data/lib/temporal/runtime.rb +0 -22
  309. data/lib/temporal/version.rb +0 -3
  310. data/lib/temporal.rb +0 -8
@@ -14,7 +14,7 @@ categories = ["development-tools"]
14
14
  anyhow = "1.0"
15
15
  async-trait = "0.1"
16
16
  backoff = "0.4"
17
- derive_builder = "0.11"
17
+ derive_builder = "0.12"
18
18
  derive_more = "0.99"
19
19
  futures = "0.3"
20
20
  futures-retry = "0.6.0"
@@ -13,14 +13,17 @@ mod retry;
13
13
  mod workflow_handle;
14
14
 
15
15
  pub use crate::retry::{CallType, RetryClient, RETRYABLE_ERROR_CODES};
16
+ pub use metrics::ClientMetricProvider;
16
17
  pub use raw::{HealthService, OperatorService, TestService, WorkflowService};
17
18
  pub use temporal_sdk_core_protos::temporal::api::{
19
+ enums::v1::ArchivalState,
18
20
  filter::v1::{StartTimeFilter, StatusFilter, WorkflowExecutionFilter, WorkflowTypeFilter},
19
21
  workflowservice::v1::{
20
22
  list_closed_workflow_executions_request::Filters as ListClosedFilters,
21
23
  list_open_workflow_executions_request::Filters as ListOpenFilters,
22
24
  },
23
25
  };
26
+ pub use tonic;
24
27
  pub use workflow_handle::{WorkflowExecutionInfo, WorkflowExecutionResult};
25
28
 
26
29
  use crate::{
@@ -32,7 +35,6 @@ use crate::{
32
35
  use backoff::{exponential, ExponentialBackoff, SystemClock};
33
36
  use http::uri::InvalidUri;
34
37
  use once_cell::sync::OnceCell;
35
- use opentelemetry::metrics::Meter;
36
38
  use parking_lot::RwLock;
37
39
  use std::{
38
40
  collections::HashMap,
@@ -46,13 +48,13 @@ use temporal_sdk_core_protos::{
46
48
  coresdk::{workflow_commands::QueryResult, IntoPayloadsExt},
47
49
  grpc::health::v1::health_client::HealthClient,
48
50
  temporal::api::{
49
- command::v1::Command,
50
51
  common::v1::{Header, Payload, Payloads, WorkflowExecution, WorkflowType},
51
52
  enums::v1::{TaskQueueKind, WorkflowIdReusePolicy, WorkflowTaskFailedCause},
52
53
  failure::v1::Failure,
53
54
  operatorservice::v1::operator_service_client::OperatorServiceClient,
54
55
  query::v1::WorkflowQuery,
55
- taskqueue::v1::{StickyExecutionAttributes, TaskQueue},
56
+ replication::v1::ClusterReplicationConfig,
57
+ taskqueue::v1::TaskQueue,
56
58
  testservice::v1::test_service_client::TestServiceClient,
57
59
  workflowservice::v1::{workflow_service_client::WorkflowServiceClient, *},
58
60
  },
@@ -181,6 +183,17 @@ impl RetryConfig {
181
183
  }
182
184
  }
183
185
 
186
+ pub(crate) const fn throttle_retry_policy() -> Self {
187
+ Self {
188
+ initial_interval: Duration::from_secs(1),
189
+ randomization_factor: 0.2,
190
+ multiplier: 2.0,
191
+ max_interval: Duration::from_secs(10),
192
+ max_elapsed_time: None,
193
+ max_retries: 0,
194
+ }
195
+ }
196
+
184
197
  pub(crate) fn into_exp_backoff<C>(self, clock: C) -> exponential::ExponentialBackoff<C> {
185
198
  exponential::ExponentialBackoff {
186
199
  current_interval: self.initial_interval,
@@ -273,7 +286,7 @@ impl ClientOptions {
273
286
  pub async fn connect(
274
287
  &self,
275
288
  namespace: impl Into<String>,
276
- metrics_meter: Option<&Meter>,
289
+ metrics_meter: Option<&dyn ClientMetricProvider>,
277
290
  headers: Option<Arc<RwLock<HashMap<String, String>>>>,
278
291
  ) -> Result<RetryClient<Client>, ClientInitError> {
279
292
  let client = self
@@ -291,7 +304,7 @@ impl ClientOptions {
291
304
  /// See [RetryClient] for more
292
305
  pub async fn connect_no_namespace(
293
306
  &self,
294
- metrics_meter: Option<&Meter>,
307
+ metrics_meter: Option<&dyn ClientMetricProvider>,
295
308
  headers: Option<Arc<RwLock<HashMap<String, String>>>>,
296
309
  ) -> Result<RetryClient<ConfiguredClient<TemporalServiceClientWithMetrics>>, ClientInitError>
297
310
  {
@@ -362,24 +375,6 @@ impl ClientOptions {
362
375
  }
363
376
  }
364
377
 
365
- /// A version of [RespondWorkflowTaskCompletedRequest] that will finish being filled out by the
366
- /// server client
367
- #[derive(Debug, Clone, PartialEq)]
368
- pub struct WorkflowTaskCompletion {
369
- /// The task token that would've been received from polling for a workflow activation
370
- pub task_token: TaskToken,
371
- /// A list of new commands to send to the server, such as starting a timer.
372
- pub commands: Vec<Command>,
373
- /// If set, indicate that next task should be queued on sticky queue with given attributes.
374
- pub sticky_attributes: Option<StickyExecutionAttributes>,
375
- /// Responses to queries in the `queries` field of the workflow task.
376
- pub query_responses: Vec<QueryResult>,
377
- /// Indicate that the task completion should return a new WFT if one is available
378
- pub return_new_workflow_task: bool,
379
- /// Force a new WFT to be created after this completion
380
- pub force_create_new_workflow_task: bool,
381
- }
382
-
383
378
  /// Interceptor which attaches common metadata (like "client-name") to every outgoing call
384
379
  #[derive(Clone)]
385
380
  pub struct ServiceCallInterceptor {
@@ -600,6 +595,133 @@ impl Namespace {
600
595
  }
601
596
  }
602
597
 
598
+ /// Default workflow execution retention for a Namespace is 3 days
599
+ pub const DEFAULT_WORKFLOW_EXECUTION_RETENTION_PERIOD: Duration =
600
+ Duration::from_secs(60 * 60 * 24 * 3);
601
+
602
+ /// Helper struct for `register_namespace`.
603
+ #[derive(Clone, derive_builder::Builder)]
604
+ pub struct RegisterNamespaceOptions {
605
+ /// Name (required)
606
+ #[builder(setter(into))]
607
+ pub namespace: String,
608
+ /// Description (required)
609
+ #[builder(setter(into))]
610
+ pub description: String,
611
+ /// Owner's email
612
+ #[builder(setter(into), default)]
613
+ pub owner_email: String,
614
+ /// Workflow execution retention period
615
+ #[builder(default = "DEFAULT_WORKFLOW_EXECUTION_RETENTION_PERIOD")]
616
+ pub workflow_execution_retention_period: Duration,
617
+ /// Cluster settings
618
+ #[builder(setter(strip_option, custom), default)]
619
+ pub clusters: Vec<ClusterReplicationConfig>,
620
+ /// Active cluster name
621
+ #[builder(setter(into), default)]
622
+ pub active_cluster_name: String,
623
+ /// Custom Data
624
+ #[builder(default)]
625
+ pub data: HashMap<String, String>,
626
+ /// Security Token
627
+ #[builder(setter(into), default)]
628
+ pub security_token: String,
629
+ /// Global namespace
630
+ #[builder(default)]
631
+ pub is_global_namespace: bool,
632
+ /// History Archival setting
633
+ #[builder(setter(into), default = "ArchivalState::Unspecified")]
634
+ pub history_archival_state: ArchivalState,
635
+ /// History Archival uri
636
+ #[builder(setter(into), default)]
637
+ pub history_archival_uri: String,
638
+ /// Visibility Archival setting
639
+ #[builder(setter(into), default = "ArchivalState::Unspecified")]
640
+ pub visibility_archival_state: ArchivalState,
641
+ /// Visibility Archival uri
642
+ #[builder(setter(into), default)]
643
+ pub visibility_archival_uri: String,
644
+ }
645
+
646
+ impl RegisterNamespaceOptions {
647
+ /// Builder convenience. Less `use` imports
648
+ pub fn builder() -> RegisterNamespaceOptionsBuilder {
649
+ Default::default()
650
+ }
651
+ }
652
+
653
+ impl From<RegisterNamespaceOptions> for RegisterNamespaceRequest {
654
+ fn from(val: RegisterNamespaceOptions) -> Self {
655
+ RegisterNamespaceRequest {
656
+ namespace: val.namespace,
657
+ description: val.description,
658
+ owner_email: val.owner_email,
659
+ workflow_execution_retention_period: val
660
+ .workflow_execution_retention_period
661
+ .try_into()
662
+ .ok(),
663
+ clusters: val.clusters,
664
+ active_cluster_name: val.active_cluster_name,
665
+ data: val.data,
666
+ security_token: val.security_token,
667
+ is_global_namespace: val.is_global_namespace,
668
+ history_archival_state: val.history_archival_state as i32,
669
+ history_archival_uri: val.history_archival_uri,
670
+ visibility_archival_state: val.visibility_archival_state as i32,
671
+ visibility_archival_uri: val.visibility_archival_uri,
672
+ }
673
+ }
674
+ }
675
+
676
+ impl RegisterNamespaceOptionsBuilder {
677
+ /// Custum builder function for convenience
678
+ /// Warning: setting cluster_names could blow away any previously set cluster configs
679
+ pub fn cluster_names(&mut self, clusters: Vec<String>) {
680
+ self.clusters = Some(
681
+ clusters
682
+ .into_iter()
683
+ .map(|s| ClusterReplicationConfig { cluster_name: s })
684
+ .collect(),
685
+ );
686
+ }
687
+ }
688
+
689
+ /// Helper struct for `signal_with_start_workflow_execution`.
690
+ #[derive(Clone, derive_builder::Builder)]
691
+ pub struct SignalWithStartOptions {
692
+ /// Input payload for the workflow run
693
+ #[builder(setter(strip_option), default)]
694
+ pub input: Option<Payloads>,
695
+ /// Task Queue to target (required)
696
+ #[builder(setter(into))]
697
+ pub task_queue: String,
698
+ /// Workflow id for the workflow run
699
+ #[builder(setter(into))]
700
+ pub workflow_id: String,
701
+ /// Workflow type for the workflow run
702
+ #[builder(setter(into))]
703
+ pub workflow_type: String,
704
+ #[builder(setter(strip_option), default)]
705
+ /// Request id for idempotency/deduplication
706
+ pub request_id: Option<String>,
707
+ /// The signal name to send (required)
708
+ #[builder(setter(into))]
709
+ pub signal_name: String,
710
+ /// Payloads for the signal
711
+ #[builder(default)]
712
+ pub signal_input: Option<Payloads>,
713
+ #[builder(setter(strip_option), default)]
714
+ /// Headers for the signal
715
+ pub signal_header: Option<Header>,
716
+ }
717
+
718
+ impl SignalWithStartOptions {
719
+ /// Builder convenience. Less `use` imports
720
+ pub fn builder() -> SignalWithStartOptionsBuilder {
721
+ Default::default()
722
+ }
723
+ }
724
+
603
725
  /// This trait provides higher-level friendlier interaction with the server.
604
726
  /// See the [WorkflowService] trait for a lower-level client.
605
727
  #[cfg_attr(test, mockall::automock)]
@@ -685,15 +807,8 @@ pub trait WorkflowClientTrait {
685
807
  #[allow(clippy::too_many_arguments)]
686
808
  async fn signal_with_start_workflow_execution(
687
809
  &self,
688
- input: Option<Payloads>,
689
- task_queue: String,
690
- workflow_id: String,
691
- workflow_type: String,
692
- request_id: Option<String>,
693
- options: WorkflowOptions,
694
- signal_name: String,
695
- signal_input: Option<Payloads>,
696
- signal_header: Option<Header>,
810
+ options: SignalWithStartOptions,
811
+ workflow_options: WorkflowOptions,
697
812
  ) -> Result<SignalWithStartWorkflowExecutionResponse>;
698
813
 
699
814
  /// Request a query of a certain workflow instance
@@ -742,13 +857,19 @@ pub trait WorkflowClientTrait {
742
857
  run_id: Option<String>,
743
858
  ) -> Result<TerminateWorkflowExecutionResponse>;
744
859
 
860
+ /// Register a new namespace
861
+ async fn register_namespace(
862
+ &self,
863
+ options: RegisterNamespaceOptions,
864
+ ) -> Result<RegisterNamespaceResponse>;
865
+
745
866
  /// Lists all available namespaces
746
867
  async fn list_namespaces(&self) -> Result<ListNamespacesResponse>;
747
868
 
748
869
  /// Query namespace details
749
870
  async fn describe_namespace(&self, namespace: Namespace) -> Result<DescribeNamespaceResponse>;
750
871
 
751
- /// List open workflows with Standard Visibility filtering
872
+ /// List open workflow executions with Standard Visibility filtering
752
873
  async fn list_open_workflow_executions(
753
874
  &self,
754
875
  max_page_size: i32,
@@ -757,7 +878,7 @@ pub trait WorkflowClientTrait {
757
878
  filters: Option<ListOpenFilters>,
758
879
  ) -> Result<ListOpenWorkflowExecutionsResponse>;
759
880
 
760
- /// List closed workflows Standard Visibility filtering
881
+ /// List closed workflow executions Standard Visibility filtering
761
882
  async fn list_closed_workflow_executions(
762
883
  &self,
763
884
  max_page_size: i32,
@@ -766,14 +887,25 @@ pub trait WorkflowClientTrait {
766
887
  filters: Option<ListClosedFilters>,
767
888
  ) -> Result<ListClosedWorkflowExecutionsResponse>;
768
889
 
769
- /// List workflows with Advanced Visibility filtering
890
+ /// List workflow executions with Advanced Visibility filtering
770
891
  async fn list_workflow_executions(
771
892
  &self,
772
- max_page_size: i32,
893
+ page_size: i32,
773
894
  next_page_token: Vec<u8>,
774
895
  query: String,
775
896
  ) -> Result<ListWorkflowExecutionsResponse>;
776
897
 
898
+ /// List archived workflow executions
899
+ async fn list_archived_workflow_executions(
900
+ &self,
901
+ page_size: i32,
902
+ next_page_token: Vec<u8>,
903
+ query: String,
904
+ ) -> Result<ListArchivedWorkflowExecutionsResponse>;
905
+
906
+ /// Get Cluster Search Attributes
907
+ async fn get_search_attributes(&self) -> Result<GetSearchAttributesResponse>;
908
+
777
909
  /// Returns options that were used to initialize the client
778
910
  fn get_options(&self) -> &ClientOptions;
779
911
 
@@ -945,6 +1077,7 @@ impl WorkflowClientTrait for Client {
945
1077
  identity: self.inner.options.identity.clone(),
946
1078
  binary_checksum: self.bound_worker_build_id.clone().unwrap_or_default(),
947
1079
  namespace: self.namespace.clone(),
1080
+ messages: vec![],
948
1081
  };
949
1082
  Ok(self
950
1083
  .wf_svc()
@@ -981,42 +1114,43 @@ impl WorkflowClientTrait for Client {
981
1114
 
982
1115
  async fn signal_with_start_workflow_execution(
983
1116
  &self,
984
- input: Option<Payloads>,
985
- task_queue: String,
986
- workflow_id: String,
987
- workflow_type: String,
988
- request_id: Option<String>,
989
- options: WorkflowOptions,
990
- signal_name: String,
991
- signal_input: Option<Payloads>,
992
- signal_header: Option<Header>,
1117
+ options: SignalWithStartOptions,
1118
+ workflow_options: WorkflowOptions,
993
1119
  ) -> Result<SignalWithStartWorkflowExecutionResponse> {
994
1120
  Ok(self
995
1121
  .wf_svc()
996
1122
  .signal_with_start_workflow_execution(SignalWithStartWorkflowExecutionRequest {
997
1123
  namespace: self.namespace.clone(),
998
- workflow_id,
1124
+ workflow_id: options.workflow_id,
999
1125
  workflow_type: Some(WorkflowType {
1000
- name: workflow_type,
1126
+ name: options.workflow_type,
1001
1127
  }),
1002
1128
  task_queue: Some(TaskQueue {
1003
- name: task_queue,
1129
+ name: options.task_queue,
1004
1130
  kind: TaskQueueKind::Normal as i32,
1005
1131
  }),
1006
- input,
1007
- signal_name,
1008
- signal_input,
1132
+ input: options.input,
1133
+ signal_name: options.signal_name,
1134
+ signal_input: options.signal_input,
1009
1135
  identity: self.inner.options.identity.clone(),
1010
- request_id: request_id.unwrap_or_else(|| Uuid::new_v4().to_string()),
1011
- workflow_id_reuse_policy: options.id_reuse_policy as i32,
1012
- workflow_execution_timeout: options
1136
+ request_id: options
1137
+ .request_id
1138
+ .unwrap_or_else(|| Uuid::new_v4().to_string()),
1139
+ workflow_id_reuse_policy: workflow_options.id_reuse_policy as i32,
1140
+ workflow_execution_timeout: workflow_options
1013
1141
  .execution_timeout
1014
1142
  .and_then(|d| d.try_into().ok()),
1015
- workflow_run_timeout: options.execution_timeout.and_then(|d| d.try_into().ok()),
1016
- workflow_task_timeout: options.task_timeout.and_then(|d| d.try_into().ok()),
1017
- search_attributes: options.search_attributes.and_then(|d| d.try_into().ok()),
1018
- cron_schedule: options.cron_schedule.unwrap_or_default(),
1019
- header: signal_header,
1143
+ workflow_run_timeout: workflow_options
1144
+ .execution_timeout
1145
+ .and_then(|d| d.try_into().ok()),
1146
+ workflow_task_timeout: workflow_options
1147
+ .task_timeout
1148
+ .and_then(|d| d.try_into().ok()),
1149
+ search_attributes: workflow_options
1150
+ .search_attributes
1151
+ .and_then(|d| d.try_into().ok()),
1152
+ cron_schedule: workflow_options.cron_schedule.unwrap_or_default(),
1153
+ header: options.signal_header,
1020
1154
  ..Default::default()
1021
1155
  })
1022
1156
  .await?
@@ -1148,6 +1282,14 @@ impl WorkflowClientTrait for Client {
1148
1282
  .into_inner())
1149
1283
  }
1150
1284
 
1285
+ async fn register_namespace(
1286
+ &self,
1287
+ options: RegisterNamespaceOptions,
1288
+ ) -> Result<RegisterNamespaceResponse> {
1289
+ let req = Into::<RegisterNamespaceRequest>::into(options);
1290
+ Ok(self.wf_svc().register_namespace(req).await?.into_inner())
1291
+ }
1292
+
1151
1293
  async fn list_namespaces(&self) -> Result<ListNamespacesResponse> {
1152
1294
  Ok(self
1153
1295
  .wf_svc()
@@ -1222,6 +1364,32 @@ impl WorkflowClientTrait for Client {
1222
1364
  .into_inner())
1223
1365
  }
1224
1366
 
1367
+ async fn list_archived_workflow_executions(
1368
+ &self,
1369
+ page_size: i32,
1370
+ next_page_token: Vec<u8>,
1371
+ query: String,
1372
+ ) -> Result<ListArchivedWorkflowExecutionsResponse> {
1373
+ Ok(self
1374
+ .wf_svc()
1375
+ .list_archived_workflow_executions(ListArchivedWorkflowExecutionsRequest {
1376
+ namespace: self.namespace.clone(),
1377
+ page_size,
1378
+ next_page_token,
1379
+ query,
1380
+ })
1381
+ .await?
1382
+ .into_inner())
1383
+ }
1384
+
1385
+ async fn get_search_attributes(&self) -> Result<GetSearchAttributesResponse> {
1386
+ Ok(self
1387
+ .wf_svc()
1388
+ .get_search_attributes(GetSearchAttributesRequest {})
1389
+ .await?
1390
+ .into_inner())
1391
+ }
1392
+
1225
1393
  fn get_options(&self) -> &ClientOptions {
1226
1394
  &self.inner.options
1227
1395
  }
@@ -1,7 +1,7 @@
1
1
  use crate::{AttachMetricLabels, LONG_POLL_METHOD_NAMES};
2
2
  use futures::{future::BoxFuture, FutureExt};
3
3
  use opentelemetry::{
4
- metrics::{Counter, Histogram, Meter},
4
+ metrics::{Counter, Histogram},
5
5
  KeyValue,
6
6
  };
7
7
  use std::{
@@ -30,18 +30,27 @@ pub struct MetricsContext {
30
30
  long_svc_request_latency: Histogram<u64>,
31
31
  }
32
32
 
33
+ /// Things that can provide metrics for the client implement this. Trait exists to avoid having
34
+ /// to make a whole new lower-level crate just for a tiny shared wrapper around OTel meters.
35
+ pub trait ClientMetricProvider {
36
+ /// Construct a counter metric
37
+ fn counter(&self, name: &'static str) -> Counter<u64>;
38
+ /// Construct a histogram metric
39
+ fn histogram(&self, name: &'static str) -> Histogram<u64>;
40
+ }
41
+
33
42
  impl MetricsContext {
34
- pub(crate) fn new(kvs: Vec<KeyValue>, meter: &Meter) -> Self {
43
+ pub(crate) fn new(kvs: Vec<KeyValue>, metric_provider: &dyn ClientMetricProvider) -> Self {
35
44
  Self {
36
45
  ctx: opentelemetry::Context::current(),
37
46
  kvs: Arc::new(kvs),
38
47
  poll_is_long: false,
39
- svc_request: meter.u64_counter("request").init(),
40
- svc_request_failed: meter.u64_counter("request_failure").init(),
41
- long_svc_request: meter.u64_counter("long_request").init(),
42
- long_svc_request_failed: meter.u64_counter("long_request_failure").init(),
43
- svc_request_latency: meter.u64_histogram("request_latency").init(),
44
- long_svc_request_latency: meter.u64_histogram("long_request_latency").init(),
48
+ svc_request: metric_provider.counter("request"),
49
+ svc_request_failed: metric_provider.counter("request_failure"),
50
+ long_svc_request: metric_provider.counter("long_request"),
51
+ long_svc_request_failed: metric_provider.counter("long_request_failure"),
52
+ svc_request_latency: metric_provider.histogram("request_latency"),
53
+ long_svc_request_latency: metric_provider.histogram("long_request_latency"),
45
54
  }
46
55
  }
47
56
 
@@ -542,6 +542,15 @@ proxier! {
542
542
  r.extensions_mut().insert(labels);
543
543
  }
544
544
  );
545
+ (
546
+ delete_workflow_execution,
547
+ DeleteWorkflowExecutionRequest,
548
+ DeleteWorkflowExecutionResponse,
549
+ |r| {
550
+ let labels = AttachMetricLabels::namespace(r.get_ref().namespace.clone());
551
+ r.extensions_mut().insert(labels);
552
+ }
553
+ );
545
554
  (
546
555
  list_open_workflow_executions,
547
556
  ListOpenWorkflowExecutionsRequest,
@@ -751,9 +760,9 @@ proxier! {
751
760
  }
752
761
  );
753
762
  (
754
- update_workflow,
755
- UpdateWorkflowRequest,
756
- UpdateWorkflowResponse,
763
+ update_workflow_execution,
764
+ UpdateWorkflowExecutionRequest,
765
+ UpdateWorkflowExecutionResponse,
757
766
  |r| {
758
767
  let labels = AttachMetricLabels::namespace(r.get_ref().namespace.clone());
759
768
  r.extensions_mut().insert(labels);
@@ -808,17 +817,9 @@ proxier! {
808
817
  r.extensions_mut().insert(labels);
809
818
  }
810
819
  );
811
- (delete_workflow_execution, DeleteWorkflowExecutionRequest, DeleteWorkflowExecutionResponse,
812
- |r| {
813
- let labels = AttachMetricLabels::namespace(r.get_ref().namespace.clone());
814
- r.extensions_mut().insert(labels);
815
- }
816
- );
817
820
  (add_or_update_remote_cluster, AddOrUpdateRemoteClusterRequest, AddOrUpdateRemoteClusterResponse);
818
821
  (remove_remote_cluster, RemoveRemoteClusterRequest, RemoveRemoteClusterResponse);
819
- (describe_cluster, DescribeClusterRequest, DescribeClusterResponse);
820
822
  (list_clusters, ListClustersRequest, ListClustersResponse);
821
- (list_cluster_members, ListClusterMembersRequest, ListClusterMembersResponse);
822
823
  }
823
824
 
824
825
  proxier! {
@@ -897,7 +898,7 @@ mod tests {
897
898
  let no_underscores: HashSet<_> = impl_list.iter().map(|x| x.replace('_', "")).collect();
898
899
  for method in methods {
899
900
  if !no_underscores.contains(&method.to_lowercase()) {
900
- panic!("RPC method {} is not implemented by raw client", method)
901
+ panic!("RPC method {method} is not implemented by raw client")
901
902
  }
902
903
  }
903
904
  }