temporalio 1.4.1 → 1.6.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 (509) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +1456 -616
  3. data/Cargo.toml +1 -1
  4. data/Gemfile +6 -5
  5. data/README.md +99 -1
  6. data/ext/Cargo.toml +9 -3
  7. data/lib/temporalio/activity/definition.rb +22 -0
  8. data/lib/temporalio/activity/info.rb +21 -5
  9. data/lib/temporalio/api/activity/v1/message.rb +1 -1
  10. data/lib/temporalio/api/cloud/billing/v1/message.rb +2 -1
  11. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +17 -1
  12. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +1 -1
  13. data/lib/temporalio/api/cloud/connectivityrule/v1/message.rb +1 -1
  14. data/lib/temporalio/api/cloud/identity/v1/message.rb +8 -1
  15. data/lib/temporalio/api/cloud/namespace/v1/message.rb +5 -1
  16. data/lib/temporalio/api/command/v1/message.rb +2 -1
  17. data/lib/temporalio/api/common/v1/message.rb +5 -1
  18. data/lib/temporalio/api/deployment/v1/message.rb +3 -1
  19. data/lib/temporalio/api/history/v1/message.rb +3 -1
  20. data/lib/temporalio/api/namespace/v1/message.rb +1 -1
  21. data/lib/temporalio/api/nexus/v1/message.rb +1 -1
  22. data/lib/temporalio/api/nexusannotations/v1/options.rb +20 -0
  23. data/lib/temporalio/api/payload_visitor.rb +32 -0
  24. data/lib/temporalio/api/schedule/v1/message.rb +1 -1
  25. data/lib/temporalio/api/sdk/v1/event_group_marker.rb +26 -0
  26. data/lib/temporalio/api/update/v1/message.rb +1 -1
  27. data/lib/temporalio/api/workflow/v1/message.rb +3 -2
  28. data/lib/temporalio/api/workflowservice/v1/request_response.rb +11 -1
  29. data/lib/temporalio/api/workflowservice/v1/service.rb +3 -2
  30. data/lib/temporalio/client/activity_execution.rb +221 -0
  31. data/lib/temporalio/client/activity_execution_count.rb +40 -0
  32. data/lib/temporalio/client/activity_execution_status.rb +20 -0
  33. data/lib/temporalio/client/activity_handle.rb +123 -0
  34. data/lib/temporalio/client/activity_id_reference.rb +42 -7
  35. data/lib/temporalio/client/connection/cloud_service.rb +120 -0
  36. data/lib/temporalio/client/connection/workflow_service.rb +75 -0
  37. data/lib/temporalio/client/connection.rb +37 -2
  38. data/lib/temporalio/client/interceptor.rb +149 -0
  39. data/lib/temporalio/client/pending_activity_state.rb +18 -0
  40. data/lib/temporalio/client/with_start_workflow_operation.rb +6 -0
  41. data/lib/temporalio/client.rb +214 -5
  42. data/lib/temporalio/common_enums.rb +28 -0
  43. data/lib/temporalio/error/failure.rb +22 -0
  44. data/lib/temporalio/error.rb +11 -0
  45. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +1 -1
  46. data/lib/temporalio/internal/bridge/client.rb +6 -1
  47. data/lib/temporalio/internal/bridge.rb +20 -0
  48. data/lib/temporalio/internal/client/implementation.rb +213 -22
  49. data/lib/temporalio/internal/google_protobuf.rb +11 -0
  50. data/lib/temporalio/internal/worker/activity_worker.rb +15 -5
  51. data/lib/temporalio/internal/worker/workflow_instance/context.rb +2 -0
  52. data/lib/temporalio/internal/worker/workflow_instance/details.rb +3 -1
  53. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +14 -4
  54. data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +73 -2
  55. data/lib/temporalio/internal/worker/workflow_instance.rb +36 -6
  56. data/lib/temporalio/internal/worker/workflow_worker.rb +10 -2
  57. data/lib/temporalio/internal/workflow_task_failure_error.rb +9 -0
  58. data/lib/temporalio/testing/activity_environment.rb +2 -0
  59. data/lib/temporalio/version.rb +1 -1
  60. data/lib/temporalio/worker/activity_executor/fiber.rb +1 -1
  61. data/lib/temporalio/worker/activity_executor/thread_pool.rb +1 -1
  62. data/lib/temporalio/worker/illegal_workflow_call_validator.rb +3 -1
  63. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +5 -1
  64. data/lib/temporalio/worker/workflow_replayer.rb +17 -4
  65. data/lib/temporalio/worker.rb +30 -5
  66. data/lib/temporalio/workflow/future.rb +5 -0
  67. data/lib/temporalio/workflow/nexus_operation_cancellation_type.rb +4 -2
  68. data/lib/temporalio/workflow.rb +8 -0
  69. data/rbi/google/protobuf.rbi +25 -0
  70. data/rbi/temporalio/activity/cancellation_details.rbi +33 -0
  71. data/rbi/temporalio/activity/complete_async_error.rbi +3 -0
  72. data/rbi/temporalio/activity/context.rbi +42 -0
  73. data/rbi/temporalio/activity/definition.rbi +74 -0
  74. data/rbi/temporalio/activity/info.rbi +112 -0
  75. data/rbi/temporalio/activity.rbi +3 -0
  76. data/rbi/temporalio/api/activity/v1/message.rbi +1453 -0
  77. data/rbi/temporalio/api/batch/v1/message.rbi +1283 -0
  78. data/rbi/temporalio/api/callback/v1/message.rbi +188 -0
  79. data/rbi/temporalio/api/cloud/account/v1/message.rbi +650 -0
  80. data/rbi/temporalio/api/cloud/auditlog/v1/message.rbi +318 -0
  81. data/rbi/temporalio/api/cloud/billing/v1/message.rbi +480 -0
  82. data/rbi/temporalio/api/cloud/cloudservice/v1/request_response.rbi +12454 -0
  83. data/rbi/temporalio/api/cloud/cloudservice/v1/service.rbi +3 -0
  84. data/rbi/temporalio/api/cloud/cloudservice/v1/service_services.rbi +709 -0
  85. data/rbi/temporalio/api/cloud/cloudservice.rbi +5 -0
  86. data/rbi/temporalio/api/cloud/connectivityrule/v1/message.rbi +403 -0
  87. data/rbi/temporalio/api/cloud/identity/v1/message.rbi +3072 -0
  88. data/rbi/temporalio/api/cloud/namespace/v1/message.rbi +3659 -0
  89. data/rbi/temporalio/api/cloud/nexus/v1/message.rbi +595 -0
  90. data/rbi/temporalio/api/cloud/operation/v1/message.rbi +244 -0
  91. data/rbi/temporalio/api/cloud/region/v1/message.rbi +166 -0
  92. data/rbi/temporalio/api/cloud/resource/v1/message.rbi +29 -0
  93. data/rbi/temporalio/api/cloud/sink/v1/message.rbi +438 -0
  94. data/rbi/temporalio/api/cloud/usage/v1/message.rbi +409 -0
  95. data/rbi/temporalio/api/command/v1/message.rbi +2655 -0
  96. data/rbi/temporalio/api/common/v1/grpc_status.rbi +92 -0
  97. data/rbi/temporalio/api/common/v1/message.rbi +2983 -0
  98. data/rbi/temporalio/api/compute/v1/config.rbi +421 -0
  99. data/rbi/temporalio/api/compute/v1/provider.rbi +125 -0
  100. data/rbi/temporalio/api/compute/v1/scaler.rbi +102 -0
  101. data/rbi/temporalio/api/deployment/v1/message.rbi +2340 -0
  102. data/rbi/temporalio/api/enums/v1/activity.rbi +62 -0
  103. data/rbi/temporalio/api/enums/v1/batch_operation.rbi +47 -0
  104. data/rbi/temporalio/api/enums/v1/command_type.rbi +36 -0
  105. data/rbi/temporalio/api/enums/v1/common.rbi +181 -0
  106. data/rbi/temporalio/api/enums/v1/deployment.rbi +80 -0
  107. data/rbi/temporalio/api/enums/v1/event_type.rbi +79 -0
  108. data/rbi/temporalio/api/enums/v1/failed_cause.rbi +155 -0
  109. data/rbi/temporalio/api/enums/v1/namespace.rbi +58 -0
  110. data/rbi/temporalio/api/enums/v1/nexus.rbi +98 -0
  111. data/rbi/temporalio/api/enums/v1/query.rbi +40 -0
  112. data/rbi/temporalio/api/enums/v1/reset.rbi +60 -0
  113. data/rbi/temporalio/api/enums/v1/schedule.rbi +25 -0
  114. data/rbi/temporalio/api/enums/v1/task_queue.rbi +134 -0
  115. data/rbi/temporalio/api/enums/v1/update.rbi +39 -0
  116. data/rbi/temporalio/api/enums/v1/workflow.rbi +259 -0
  117. data/rbi/temporalio/api/errordetails/v1/message.rbi +1389 -0
  118. data/rbi/temporalio/api/export/v1/message.rbi +123 -0
  119. data/rbi/temporalio/api/failure/v1/message.rbi +1303 -0
  120. data/rbi/temporalio/api/filter/v1/message.rbi +267 -0
  121. data/rbi/temporalio/api/history/v1/message.rbi +10737 -0
  122. data/rbi/temporalio/api/namespace/v1/message.rbi +1044 -0
  123. data/rbi/temporalio/api/nexus/v1/message.rbi +2780 -0
  124. data/rbi/temporalio/api/nexusannotations/v1/options.rbi +161 -0
  125. data/rbi/temporalio/api/nexusservices/workerservice/v1/request_response.rbi +124 -0
  126. data/rbi/temporalio/api/operatorservice/v1/request_response.rbi +1836 -0
  127. data/rbi/temporalio/api/operatorservice/v1/service.rbi +3 -0
  128. data/rbi/temporalio/api/operatorservice/v1/service_services.rbi +143 -0
  129. data/rbi/temporalio/api/operatorservice.rbi +5 -0
  130. data/rbi/temporalio/api/payload_visitor.rbi +876 -0
  131. data/rbi/temporalio/api/protoc_gen_openapiv2/options/annotations.rbi +3 -0
  132. data/rbi/temporalio/api/protoc_gen_openapiv2/options/openapiv2.rbi +3482 -0
  133. data/rbi/temporalio/api/protocol/v1/message.rbi +139 -0
  134. data/rbi/temporalio/api/protometa/v1/annotations.rbi +97 -0
  135. data/rbi/temporalio/api/query/v1/message.rbi +288 -0
  136. data/rbi/temporalio/api/replication/v1/message.rbi +226 -0
  137. data/rbi/temporalio/api/rules/v1/message.rbi +492 -0
  138. data/rbi/temporalio/api/schedule/v1/message.rbi +2377 -0
  139. data/rbi/temporalio/api/sdk/v1/enhanced_stack_trace.rbi +478 -0
  140. data/rbi/temporalio/api/sdk/v1/event_group_marker.rbi +337 -0
  141. data/rbi/temporalio/api/sdk/v1/external_storage.rbi +85 -0
  142. data/rbi/temporalio/api/sdk/v1/task_complete_metadata.rbi +206 -0
  143. data/rbi/temporalio/api/sdk/v1/user_metadata.rbi +98 -0
  144. data/rbi/temporalio/api/sdk/v1/worker_config.rbi +255 -0
  145. data/rbi/temporalio/api/sdk/v1/workflow_metadata.rbi +297 -0
  146. data/rbi/temporalio/api/taskqueue/v1/message.rbi +2460 -0
  147. data/rbi/temporalio/api/testservice/v1/request_response.rbi +380 -0
  148. data/rbi/temporalio/api/testservice/v1/service.rbi +3 -0
  149. data/rbi/temporalio/api/testservice/v1/service_services.rbi +100 -0
  150. data/rbi/temporalio/api/update/v1/message.rbi +800 -0
  151. data/rbi/temporalio/api/version/v1/message.rbi +281 -0
  152. data/rbi/temporalio/api/worker/v1/message.rbi +1565 -0
  153. data/rbi/temporalio/api/workflow/v1/message.rbi +5011 -0
  154. data/rbi/temporalio/api/workflowservice/v1/request_response.rbi +30477 -0
  155. data/rbi/temporalio/api/workflowservice/v1/service.rbi +3 -0
  156. data/rbi/temporalio/api/workflowservice/v1/service_services.rbi +1571 -0
  157. data/rbi/temporalio/api/workflowservice.rbi +5 -0
  158. data/rbi/temporalio/api.rbi +7 -0
  159. data/rbi/temporalio/cancellation.rbi +40 -0
  160. data/rbi/temporalio/client/activity_execution.rbi +134 -0
  161. data/rbi/temporalio/client/activity_execution_count.rbi +23 -0
  162. data/rbi/temporalio/client/activity_execution_status.rbi +11 -0
  163. data/rbi/temporalio/client/activity_handle.rbi +49 -0
  164. data/rbi/temporalio/client/activity_id_reference.rbi +24 -0
  165. data/rbi/temporalio/client/async_activity_handle.rbi +49 -0
  166. data/rbi/temporalio/client/connection/cloud_service.rbi +239 -0
  167. data/rbi/temporalio/client/connection/operator_service.rbi +47 -0
  168. data/rbi/temporalio/client/connection/service.rbi +19 -0
  169. data/rbi/temporalio/client/connection/test_service.rbi +29 -0
  170. data/rbi/temporalio/client/connection/workflow_service.rbi +377 -0
  171. data/rbi/temporalio/client/connection.rbi +284 -0
  172. data/rbi/temporalio/client/interceptor.rbi +1067 -0
  173. data/rbi/temporalio/client/pending_activity_state.rbi +9 -0
  174. data/rbi/temporalio/client/plugin.rbi +17 -0
  175. data/rbi/temporalio/client/schedule.rbi +677 -0
  176. data/rbi/temporalio/client/schedule_handle.rbi +40 -0
  177. data/rbi/temporalio/client/with_start_workflow_operation.rbi +126 -0
  178. data/rbi/temporalio/client/workflow_execution.rbi +62 -0
  179. data/rbi/temporalio/client/workflow_execution_count.rbi +23 -0
  180. data/rbi/temporalio/client/workflow_execution_status.rbi +11 -0
  181. data/rbi/temporalio/client/workflow_handle.rbi +148 -0
  182. data/rbi/temporalio/client/workflow_query_reject_condition.rbi +7 -0
  183. data/rbi/temporalio/client/workflow_update_handle.rbi +38 -0
  184. data/rbi/temporalio/client/workflow_update_wait_stage.rbi +7 -0
  185. data/rbi/temporalio/client.rbi +534 -0
  186. data/rbi/temporalio/common_enums.rbi +45 -0
  187. data/rbi/temporalio/contrib/open_telemetry.rbi +73 -0
  188. data/rbi/temporalio/converters/data_converter.rbi +44 -0
  189. data/rbi/temporalio/converters/failure_converter.rbi +20 -0
  190. data/rbi/temporalio/converters/payload_codec.rbi +11 -0
  191. data/rbi/temporalio/converters/payload_converter/binary_null.rbi +5 -0
  192. data/rbi/temporalio/converters/payload_converter/binary_plain.rbi +5 -0
  193. data/rbi/temporalio/converters/payload_converter/binary_protobuf.rbi +5 -0
  194. data/rbi/temporalio/converters/payload_converter/composite.rbi +20 -0
  195. data/rbi/temporalio/converters/payload_converter/encoding.rbi +14 -0
  196. data/rbi/temporalio/converters/payload_converter/json_plain.rbi +10 -0
  197. data/rbi/temporalio/converters/payload_converter/json_protobuf.rbi +5 -0
  198. data/rbi/temporalio/converters/payload_converter.rbi +28 -0
  199. data/rbi/temporalio/converters/raw_value.rbi +11 -0
  200. data/rbi/temporalio/converters.rbi +3 -0
  201. data/rbi/temporalio/env_config.rbi +156 -0
  202. data/rbi/temporalio/error/failure.rbi +3 -0
  203. data/rbi/temporalio/error.rbi +313 -0
  204. data/rbi/temporalio/internal/bridge/api/activity_result/activity_result.rbi +547 -0
  205. data/rbi/temporalio/internal/bridge/api/activity_task/activity_task.rbi +705 -0
  206. data/rbi/temporalio/internal/bridge/api/child_workflow/child_workflow.rbi +332 -0
  207. data/rbi/temporalio/internal/bridge/api/common/common.rbi +191 -0
  208. data/rbi/temporalio/internal/bridge/api/core_interface.rbi +567 -0
  209. data/rbi/temporalio/internal/bridge/api/external_data/external_data.rbi +255 -0
  210. data/rbi/temporalio/internal/bridge/api/nexus/nexus.rbi +527 -0
  211. data/rbi/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rbi +2808 -0
  212. data/rbi/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rbi +3309 -0
  213. data/rbi/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rbi +272 -0
  214. data/rbi/temporalio/internal/bridge/api.rbi +3 -0
  215. data/rbi/temporalio/internal/bridge/client.rbi +346 -0
  216. data/rbi/temporalio/internal/bridge/runtime.rbi +231 -0
  217. data/rbi/temporalio/internal/bridge/testing.rbi +109 -0
  218. data/rbi/temporalio/internal/bridge/worker.rbi +250 -0
  219. data/rbi/temporalio/internal/bridge.rbi +47 -0
  220. data/rbi/temporalio/internal/client/implementation.rbi +53 -0
  221. data/rbi/temporalio/internal/google_protobuf.rbi +8 -0
  222. data/rbi/temporalio/internal/metric.rbi +55 -0
  223. data/rbi/temporalio/internal/proto_utils.rbi +148 -0
  224. data/rbi/temporalio/internal/worker/activity_worker.rbi +108 -0
  225. data/rbi/temporalio/internal/worker/multi_runner.rbi +175 -0
  226. data/rbi/temporalio/internal/worker/workflow_instance/child_workflow_handle.rbi +20 -0
  227. data/rbi/temporalio/internal/worker/workflow_instance/context.rbi +290 -0
  228. data/rbi/temporalio/internal/worker/workflow_instance/details.rbi +87 -0
  229. data/rbi/temporalio/internal/worker/workflow_instance/external_workflow_handle.rbi +14 -0
  230. data/rbi/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rbi +17 -0
  231. data/rbi/temporalio/internal/worker/workflow_instance/handler_execution.rbi +17 -0
  232. data/rbi/temporalio/internal/worker/workflow_instance/handler_hash.rbi +24 -0
  233. data/rbi/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rbi +17 -0
  234. data/rbi/temporalio/internal/worker/workflow_instance/inbound_implementation.rbi +21 -0
  235. data/rbi/temporalio/internal/worker/workflow_instance/nexus_client.rbi +47 -0
  236. data/rbi/temporalio/internal/worker/workflow_instance/nexus_operation_handle.rbi +19 -0
  237. data/rbi/temporalio/internal/worker/workflow_instance/outbound_implementation.rbi +43 -0
  238. data/rbi/temporalio/internal/worker/workflow_instance/replay_safe_logger.rbi +11 -0
  239. data/rbi/temporalio/internal/worker/workflow_instance/replay_safe_metric.rbi +15 -0
  240. data/rbi/temporalio/internal/worker/workflow_instance/scheduler.rbi +36 -0
  241. data/rbi/temporalio/internal/worker/workflow_instance.rbi +231 -0
  242. data/rbi/temporalio/internal/worker/workflow_worker.rbi +199 -0
  243. data/rbi/temporalio/internal/workflow_task_failure_error.rbi +3 -0
  244. data/rbi/temporalio/internal.rbi +3 -0
  245. data/rbi/temporalio/metric.rbi +56 -0
  246. data/rbi/temporalio/priority.rbi +38 -0
  247. data/rbi/temporalio/retry_policy.rbi +40 -0
  248. data/rbi/temporalio/runtime/metric_buffer.rbi +45 -0
  249. data/rbi/temporalio/runtime.rbi +185 -0
  250. data/rbi/temporalio/scoped_logger.rbi +50 -0
  251. data/rbi/temporalio/search_attributes.rbi +94 -0
  252. data/rbi/temporalio/simple_plugin.rbi +41 -0
  253. data/rbi/temporalio/testing/activity_environment.rbi +43 -0
  254. data/rbi/temporalio/testing/workflow_environment.rbi +116 -0
  255. data/rbi/temporalio/testing.rbi +3 -0
  256. data/rbi/temporalio/version.rbi +5 -0
  257. data/rbi/temporalio/versioning_override.rbi +13 -0
  258. data/rbi/temporalio/worker/activity_executor/fiber.rbi +20 -0
  259. data/rbi/temporalio/worker/activity_executor/thread_pool.rbi +20 -0
  260. data/rbi/temporalio/worker/activity_executor.rbi +20 -0
  261. data/rbi/temporalio/worker/deployment_options.rbi +23 -0
  262. data/rbi/temporalio/worker/illegal_workflow_call_validator.rbi +33 -0
  263. data/rbi/temporalio/worker/interceptor.rbi +489 -0
  264. data/rbi/temporalio/worker/plugin.rbi +49 -0
  265. data/rbi/temporalio/worker/poller_behavior.rbi +29 -0
  266. data/rbi/temporalio/worker/thread_pool.rbi +38 -0
  267. data/rbi/temporalio/worker/tuner.rbi +221 -0
  268. data/rbi/temporalio/worker/workflow_executor/thread_pool.rbi +15 -0
  269. data/rbi/temporalio/worker/workflow_executor.rbi +8 -0
  270. data/rbi/temporalio/worker/workflow_replayer.rbi +152 -0
  271. data/rbi/temporalio/worker.rbi +258 -0
  272. data/rbi/temporalio/worker_deployment_version.rbi +29 -0
  273. data/rbi/temporalio/workflow/activity_cancellation_type.rbi +7 -0
  274. data/rbi/temporalio/workflow/child_workflow_cancellation_type.rbi +8 -0
  275. data/rbi/temporalio/workflow/child_workflow_handle.rbi +27 -0
  276. data/rbi/temporalio/workflow/definition.rbi +305 -0
  277. data/rbi/temporalio/workflow/external_workflow_handle.rbi +24 -0
  278. data/rbi/temporalio/workflow/future.rbi +62 -0
  279. data/rbi/temporalio/workflow/handler_unfinished_policy.rbi +6 -0
  280. data/rbi/temporalio/workflow/info.rbi +100 -0
  281. data/rbi/temporalio/workflow/nexus_client.rbi +65 -0
  282. data/rbi/temporalio/workflow/nexus_operation_cancellation_type.rbi +8 -0
  283. data/rbi/temporalio/workflow/nexus_operation_handle.rbi +14 -0
  284. data/rbi/temporalio/workflow/parent_close_policy.rbi +8 -0
  285. data/rbi/temporalio/workflow/update_info.rbi +14 -0
  286. data/rbi/temporalio/workflow.rbi +393 -0
  287. data/rbi/temporalio/workflow_history.rbi +21 -0
  288. data/rbi/temporalio.rbi +5 -0
  289. data/sig/common.rbs +1 -0
  290. data/sig/google/protobuf_compat.rbs +17 -0
  291. data/sig/open_telemetry.rbs +47 -0
  292. data/sig/temporalio/activity/cancellation_details.rbs +21 -0
  293. data/sig/temporalio/activity/complete_async_error.rbs +6 -0
  294. data/sig/temporalio/activity/context.rbs +26 -0
  295. data/sig/temporalio/activity/definition.rbs +60 -0
  296. data/sig/temporalio/activity/info.rbs +57 -0
  297. data/sig/temporalio/activity.rbs +4 -0
  298. data/sig/temporalio/api/activity/v1/message.rbs +708 -0
  299. data/sig/temporalio/api/batch/v1/message.rbs +594 -0
  300. data/sig/temporalio/api/callback/v1/message.rbs +112 -0
  301. data/sig/temporalio/api/cloud/account/v1/message.rbs +314 -0
  302. data/sig/temporalio/api/cloud/auditlog/v1/message.rbs +168 -0
  303. data/sig/temporalio/api/cloud/billing/v1/message.rbs +279 -0
  304. data/sig/temporalio/api/cloud/cloudservice/v1/request_response.rbs +4726 -0
  305. data/sig/temporalio/api/cloud/cloudservice/v1/service.rbs +25 -0
  306. data/sig/temporalio/api/cloud/cloudservice.rbs +8 -0
  307. data/sig/temporalio/api/cloud/connectivityrule/v1/message.rbs +191 -0
  308. data/sig/temporalio/api/cloud/identity/v1/message.rbs +1372 -0
  309. data/sig/temporalio/api/cloud/namespace/v1/message.rbs +1571 -0
  310. data/sig/temporalio/api/cloud/nexus/v1/message.rbs +269 -0
  311. data/sig/temporalio/api/cloud/operation/v1/message.rbs +156 -0
  312. data/sig/temporalio/api/cloud/region/v1/message.rbs +109 -0
  313. data/sig/temporalio/api/cloud/resource/v1/message.rbs +61 -0
  314. data/sig/temporalio/api/cloud/sink/v1/message.rbs +207 -0
  315. data/sig/temporalio/api/cloud/usage/v1/message.rbs +230 -0
  316. data/sig/temporalio/api/command/v1/message.rbs +1211 -0
  317. data/sig/temporalio/api/common/v1/grpc_status.rbs +59 -0
  318. data/sig/temporalio/api/common/v1/message.rbs +1238 -0
  319. data/sig/temporalio/api/compute/v1/config.rbs +176 -0
  320. data/sig/temporalio/api/compute/v1/provider.rbs +73 -0
  321. data/sig/temporalio/api/compute/v1/scaler.rbs +60 -0
  322. data/sig/temporalio/api/deployment/v1/message.rbs +1063 -0
  323. data/sig/temporalio/api/enums/v1/activity.rbs +134 -0
  324. data/sig/temporalio/api/enums/v1/batch_operation.rbs +80 -0
  325. data/sig/temporalio/api/enums/v1/command_type.rbs +74 -0
  326. data/sig/temporalio/api/enums/v1/common.rbs +271 -0
  327. data/sig/temporalio/api/enums/v1/deployment.rbs +177 -0
  328. data/sig/temporalio/api/enums/v1/event_type.rbs +263 -0
  329. data/sig/temporalio/api/enums/v1/failed_cause.rbs +281 -0
  330. data/sig/temporalio/api/enums/v1/namespace.rbs +87 -0
  331. data/sig/temporalio/api/enums/v1/nexus.rbs +172 -0
  332. data/sig/temporalio/api/enums/v1/query.rbs +69 -0
  333. data/sig/temporalio/api/enums/v1/reset.rbs +106 -0
  334. data/sig/temporalio/api/enums/v1/schedule.rbs +68 -0
  335. data/sig/temporalio/api/enums/v1/task_queue.rbs +238 -0
  336. data/sig/temporalio/api/enums/v1/update.rbs +87 -0
  337. data/sig/temporalio/api/enums/v1/workflow.rbs +435 -0
  338. data/sig/temporalio/api/errordetails/v1/message.rbs +532 -0
  339. data/sig/temporalio/api/export/v1/message.rbs +63 -0
  340. data/sig/temporalio/api/failure/v1/message.rbs +579 -0
  341. data/sig/temporalio/api/filter/v1/message.rbs +121 -0
  342. data/sig/temporalio/api/history/v1/message.rbs +4928 -0
  343. data/sig/temporalio/api/namespace/v1/message.rbs +465 -0
  344. data/sig/temporalio/api/nexus/v1/message.rbs +1268 -0
  345. data/sig/temporalio/api/nexusannotations/v1/options.rbs +76 -0
  346. data/sig/temporalio/api/nexusservices/workerservice/v1/request_response.rbs +65 -0
  347. data/sig/temporalio/api/operatorservice/v1/request_response.rbs +679 -0
  348. data/sig/temporalio/api/operatorservice/v1/service.rbs +23 -0
  349. data/sig/temporalio/api/operatorservice.rbs +6 -0
  350. data/sig/temporalio/api/payload_visitor.rbs +298 -0
  351. data/sig/temporalio/api/protoc_gen_openapiv2/options/annotations.rbs +23 -0
  352. data/sig/temporalio/api/protoc_gen_openapiv2/options/openapiv2.rbs +1691 -0
  353. data/sig/temporalio/api/protocol/v1/message.rbs +90 -0
  354. data/sig/temporalio/api/protometa/v1/annotations.rbs +62 -0
  355. data/sig/temporalio/api/query/v1/message.rbs +138 -0
  356. data/sig/temporalio/api/replication/v1/message.rbs +109 -0
  357. data/sig/temporalio/api/rules/v1/message.rbs +213 -0
  358. data/sig/temporalio/api/schedule/v1/message.rbs +1066 -0
  359. data/sig/temporalio/api/sdk/v1/enhanced_stack_trace.rbs +210 -0
  360. data/sig/temporalio/api/sdk/v1/event_group_marker.rbs +154 -0
  361. data/sig/temporalio/api/sdk/v1/external_storage.rbs +54 -0
  362. data/sig/temporalio/api/sdk/v1/task_complete_metadata.rbs +92 -0
  363. data/sig/temporalio/api/sdk/v1/user_metadata.rbs +58 -0
  364. data/sig/temporalio/api/sdk/v1/worker_config.rbs +122 -0
  365. data/sig/temporalio/api/sdk/v1/workflow_metadata.rbs +138 -0
  366. data/sig/temporalio/api/taskqueue/v1/message.rbs +1013 -0
  367. data/sig/temporalio/api/testservice/v1/request_response.rbs +125 -0
  368. data/sig/temporalio/api/testservice/v1/service.rbs +23 -0
  369. data/sig/temporalio/api/update/v1/message.rbs +349 -0
  370. data/sig/temporalio/api/version/v1/message.rbs +143 -0
  371. data/sig/temporalio/api/worker/v1/message.rbs +716 -0
  372. data/sig/temporalio/api/workflow/v1/message.rbs +2322 -0
  373. data/sig/temporalio/api/workflowservice/v1/request_response.rbs +12735 -0
  374. data/sig/temporalio/api/workflowservice/v1/service.rbs +23 -0
  375. data/sig/temporalio/api/workflowservice.rbs +6 -0
  376. data/sig/temporalio/api.rbs +4 -0
  377. data/sig/temporalio/cancellation.rbs +20 -0
  378. data/sig/temporalio/client/activity_execution.rbs +50 -0
  379. data/sig/temporalio/client/activity_execution_count.rbs +17 -0
  380. data/sig/temporalio/client/activity_execution_status.rbs +15 -0
  381. data/sig/temporalio/client/activity_handle.rbs +26 -0
  382. data/sig/temporalio/client/activity_id_reference.rbs +16 -0
  383. data/sig/temporalio/client/async_activity_handle.rbs +41 -0
  384. data/sig/temporalio/client/connection/cloud_service.rbs +315 -0
  385. data/sig/temporalio/client/connection/operator_service.rbs +59 -0
  386. data/sig/temporalio/client/connection/service.rbs +17 -0
  387. data/sig/temporalio/client/connection/test_service.rbs +35 -0
  388. data/sig/temporalio/client/connection/workflow_service.rbs +499 -0
  389. data/sig/temporalio/client/connection.rbs +143 -0
  390. data/sig/temporalio/client/interceptor.rbs +622 -0
  391. data/sig/temporalio/client/pending_activity_state.rbs +14 -0
  392. data/sig/temporalio/client/plugin.rbs +14 -0
  393. data/sig/temporalio/client/schedule.rbs +337 -0
  394. data/sig/temporalio/client/schedule_handle.rbs +44 -0
  395. data/sig/temporalio/client/with_start_workflow_operation.rbs +82 -0
  396. data/sig/temporalio/client/workflow_execution.rbs +37 -0
  397. data/sig/temporalio/client/workflow_execution_count.rbs +17 -0
  398. data/sig/temporalio/client/workflow_execution_status.rbs +16 -0
  399. data/sig/temporalio/client/workflow_handle.rbs +95 -0
  400. data/sig/temporalio/client/workflow_query_reject_condition.rbs +12 -0
  401. data/sig/temporalio/client/workflow_update_handle.rbs +26 -0
  402. data/sig/temporalio/client/workflow_update_wait_stage.rbs +12 -0
  403. data/sig/temporalio/client.rbs +271 -0
  404. data/sig/temporalio/common_enums.rbs +60 -0
  405. data/sig/temporalio/contrib/open_telemetry.rbs +74 -0
  406. data/sig/temporalio/converters/data_converter.rbs +32 -0
  407. data/sig/temporalio/converters/failure_converter.rbs +12 -0
  408. data/sig/temporalio/converters/payload_codec.rbs +8 -0
  409. data/sig/temporalio/converters/payload_converter/binary_null.rbs +9 -0
  410. data/sig/temporalio/converters/payload_converter/binary_plain.rbs +9 -0
  411. data/sig/temporalio/converters/payload_converter/binary_protobuf.rbs +9 -0
  412. data/sig/temporalio/converters/payload_converter/composite.rbs +16 -0
  413. data/sig/temporalio/converters/payload_converter/encoding.rbs +13 -0
  414. data/sig/temporalio/converters/payload_converter/json_plain.rbs +14 -0
  415. data/sig/temporalio/converters/payload_converter/json_protobuf.rbs +9 -0
  416. data/sig/temporalio/converters/payload_converter.rbs +24 -0
  417. data/sig/temporalio/converters/raw_value.rbs +9 -0
  418. data/sig/temporalio/converters.rbs +4 -0
  419. data/sig/temporalio/env_config.rbs +86 -0
  420. data/sig/temporalio/error/failure.rbs +170 -0
  421. data/sig/temporalio/error.rbs +88 -0
  422. data/sig/temporalio/internal/bridge/api/activity_result/activity_result.rbs +247 -0
  423. data/sig/temporalio/internal/bridge/api/activity_task/activity_task.rbs +372 -0
  424. data/sig/temporalio/internal/bridge/api/child_workflow/child_workflow.rbs +207 -0
  425. data/sig/temporalio/internal/bridge/api/common/common.rbs +123 -0
  426. data/sig/temporalio/internal/bridge/api/core_interface.rbs +231 -0
  427. data/sig/temporalio/internal/bridge/api/external_data/external_data.rbs +134 -0
  428. data/sig/temporalio/internal/bridge/api/nexus/nexus.rbs +285 -0
  429. data/sig/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rbs +1304 -0
  430. data/sig/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rbs +1526 -0
  431. data/sig/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rbs +136 -0
  432. data/sig/temporalio/internal/bridge/api.rbs +8 -0
  433. data/sig/temporalio/internal/bridge/client.rbs +144 -0
  434. data/sig/temporalio/internal/bridge/metric.rbs +28 -0
  435. data/sig/temporalio/internal/bridge/runtime.rbs +97 -0
  436. data/sig/temporalio/internal/bridge/testing.rbs +91 -0
  437. data/sig/temporalio/internal/bridge/worker.rbs +199 -0
  438. data/sig/temporalio/internal/bridge.rbs +36 -0
  439. data/sig/temporalio/internal/client/implementation.rbs +33 -0
  440. data/sig/temporalio/internal/google_protobuf.rbs +7 -0
  441. data/sig/temporalio/internal/metric.rbs +35 -0
  442. data/sig/temporalio/internal/proto_utils.rbs +94 -0
  443. data/sig/temporalio/internal/worker/activity_worker.rbs +64 -0
  444. data/sig/temporalio/internal/worker/multi_runner.rbs +132 -0
  445. data/sig/temporalio/internal/worker/workflow_instance/child_workflow_handle.rbs +22 -0
  446. data/sig/temporalio/internal/worker/workflow_instance/context.rbs +172 -0
  447. data/sig/temporalio/internal/worker/workflow_instance/details.rbs +43 -0
  448. data/sig/temporalio/internal/worker/workflow_instance/external_workflow_handle.rbs +15 -0
  449. data/sig/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rbs +16 -0
  450. data/sig/temporalio/internal/worker/workflow_instance/handler_execution.rbs +19 -0
  451. data/sig/temporalio/internal/worker/workflow_instance/handler_hash.rbs +14 -0
  452. data/sig/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rbs +20 -0
  453. data/sig/temporalio/internal/worker/workflow_instance/inbound_implementation.rbs +19 -0
  454. data/sig/temporalio/internal/worker/workflow_instance/nexus_client.rbs +25 -0
  455. data/sig/temporalio/internal/worker/workflow_instance/nexus_operation_handle.rbs +19 -0
  456. data/sig/temporalio/internal/worker/workflow_instance/outbound_implementation.rbs +35 -0
  457. data/sig/temporalio/internal/worker/workflow_instance/replay_safe_logger.rbs +16 -0
  458. data/sig/temporalio/internal/worker/workflow_instance/replay_safe_metric.rbs +15 -0
  459. data/sig/temporalio/internal/worker/workflow_instance/scheduler.rbs +52 -0
  460. data/sig/temporalio/internal/worker/workflow_instance.rbs +111 -0
  461. data/sig/temporalio/internal/worker/workflow_worker.rbs +99 -0
  462. data/sig/temporalio/internal/workflow_task_failure_error.rbs +6 -0
  463. data/sig/temporalio/internal.rbs +4 -0
  464. data/sig/temporalio/metric.rbs +55 -0
  465. data/sig/temporalio/priority.rbs +17 -0
  466. data/sig/temporalio/retry_policy.rbs +21 -0
  467. data/sig/temporalio/runtime/metric_buffer.rbs +49 -0
  468. data/sig/temporalio/runtime.rbs +118 -0
  469. data/sig/temporalio/scoped_logger.rbs +15 -0
  470. data/sig/temporalio/search_attributes.rbs +82 -0
  471. data/sig/temporalio/simple_plugin.rbs +65 -0
  472. data/sig/temporalio/testing/activity_environment.rbs +52 -0
  473. data/sig/temporalio/testing/workflow_environment.rbs +141 -0
  474. data/sig/temporalio/testing.rbs +4 -0
  475. data/sig/temporalio/version.rbs +3 -0
  476. data/sig/temporalio/versioning_override.rbs +17 -0
  477. data/sig/temporalio/worker/activity_executor/fiber.rbs +9 -0
  478. data/sig/temporalio/worker/activity_executor/thread_pool.rbs +11 -0
  479. data/sig/temporalio/worker/activity_executor.rbs +12 -0
  480. data/sig/temporalio/worker/deployment_options.rbs +17 -0
  481. data/sig/temporalio/worker/illegal_workflow_call_validator.rbs +25 -0
  482. data/sig/temporalio/worker/interceptor.rbs +373 -0
  483. data/sig/temporalio/worker/plugin.rbs +47 -0
  484. data/sig/temporalio/worker/poller_behavior.rbs +23 -0
  485. data/sig/temporalio/worker/thread_pool.rbs +44 -0
  486. data/sig/temporalio/worker/tuner.rbs +121 -0
  487. data/sig/temporalio/worker/workflow_executor/thread_pool.rbs +58 -0
  488. data/sig/temporalio/worker/workflow_executor.rbs +15 -0
  489. data/sig/temporalio/worker/workflow_replayer.rbs +105 -0
  490. data/sig/temporalio/worker.rbs +168 -0
  491. data/sig/temporalio/worker_deployment_version.rbs +17 -0
  492. data/sig/temporalio/workflow/activity_cancellation_type.rbs +11 -0
  493. data/sig/temporalio/workflow/child_workflow_cancellation_type.rbs +12 -0
  494. data/sig/temporalio/workflow/child_workflow_handle.rbs +18 -0
  495. data/sig/temporalio/workflow/definition.rbs +181 -0
  496. data/sig/temporalio/workflow/external_workflow_handle.rbs +17 -0
  497. data/sig/temporalio/workflow/future.rbs +24 -0
  498. data/sig/temporalio/workflow/handler_unfinished_policy.rbs +10 -0
  499. data/sig/temporalio/workflow/info.rbs +79 -0
  500. data/sig/temporalio/workflow/nexus_client.rbs +34 -0
  501. data/sig/temporalio/workflow/nexus_operation_cancellation_type.rbs +12 -0
  502. data/sig/temporalio/workflow/nexus_operation_handle.rbs +10 -0
  503. data/sig/temporalio/workflow/parent_close_policy.rbs +12 -0
  504. data/sig/temporalio/workflow/update_info.rbs +15 -0
  505. data/sig/temporalio/workflow.rbs +215 -0
  506. data/sig/temporalio/workflow_history.rbs +13 -0
  507. data/sig/temporalio.rbs +3 -0
  508. data/temporalio.gemspec +1 -1
  509. metadata +450 -2
@@ -4,6 +4,9 @@ require 'google/protobuf/well_known_types'
4
4
  require 'securerandom'
5
5
  require 'temporalio/activity'
6
6
  require 'temporalio/api'
7
+ require 'temporalio/client/activity_execution'
8
+ require 'temporalio/client/activity_execution_count'
9
+ require 'temporalio/client/activity_handle'
7
10
  require 'temporalio/client/activity_id_reference'
8
11
  require 'temporalio/client/async_activity_handle'
9
12
  require 'temporalio/client/connection'
@@ -27,6 +30,35 @@ module Temporalio
27
30
  module Internal
28
31
  module Client
29
32
  class Implementation < Temporalio::Client::Interceptor::Outbound
33
+ # Proto routing convention for standalone activity completion: `*_by_id` requests carry
34
+ # `resource_id = "activity:<activity_id>"`. See the resource_id field comment on
35
+ # `RecordActivityTaskHeartbeatByIdRequest` (and the analogous Completed/Failed/Canceled
36
+ # requests) in `workflowservice/v1/request_response.proto`. Workflow-scheduled activities
37
+ # leave resource_id empty.
38
+ STANDALONE_ACTIVITY_RESOURCE_ID_PREFIX = 'activity:'
39
+
40
+ # Returns the activity_id / workflow_id / run_id / resource_id fields for a `*_by_id`
41
+ # async-completion request, depending on whether the reference is the standalone or
42
+ # workflow-bound form. Splat into the request constructor's kwargs alongside the
43
+ # request-specific fields.
44
+ def self._activity_id_reference_request_fields(ref)
45
+ if ref.standalone?
46
+ {
47
+ workflow_id: nil,
48
+ run_id: ref.activity_run_id,
49
+ activity_id: ref.activity_id,
50
+ resource_id: "#{STANDALONE_ACTIVITY_RESOURCE_ID_PREFIX}#{ref.activity_id}"
51
+ }
52
+ else
53
+ {
54
+ workflow_id: ref.workflow_id,
55
+ run_id: ref.run_id,
56
+ activity_id: ref.activity_id,
57
+ resource_id: nil
58
+ }
59
+ end
60
+ end
61
+
30
62
  def self.with_default_rpc_options(user_rpc_options)
31
63
  # If the user did not provide an override_retry, we need to make sure
32
64
  # we use an option set that has it as "true"
@@ -185,7 +217,7 @@ module Temporalio
185
217
  end
186
218
 
187
219
  # If the user wants to wait until completed, we must poll until outcome if not already there
188
- if input.wait_for_stage == Temporalio::Client::WorkflowUpdateWaitStage::COMPLETED && update_resp.outcome
220
+ if input.wait_for_stage == Temporalio::Client::WorkflowUpdateWaitStage::COMPLETED && !update_resp.outcome
189
221
  update_resp.outcome = @client._impl.poll_workflow_update(
190
222
  Temporalio::Client::Interceptor::PollWorkflowUpdateInput.new(
191
223
  workflow_id: start_options.id,
@@ -327,7 +359,8 @@ module Temporalio
327
359
  user_metadata: ProtoUtils.to_user_metadata(
328
360
  start_options.static_summary, start_options.static_details, @client.data_converter
329
361
  ),
330
- header: ProtoUtils.headers_to_proto(start_options.headers, @client.data_converter)
362
+ header: ProtoUtils.headers_to_proto(start_options.headers, @client.data_converter),
363
+ priority: start_options.priority._to_proto
331
364
  )
332
365
  end
333
366
 
@@ -807,12 +840,11 @@ module Temporalio
807
840
  end
808
841
 
809
842
  def heartbeat_async_activity(input)
810
- resp = if input.task_token_or_id_reference.is_a?(Temporalio::Client::ActivityIDReference)
843
+ ref = input.task_token_or_id_reference
844
+ resp = if ref.is_a?(Temporalio::Client::ActivityIDReference)
811
845
  @client.workflow_service.record_activity_task_heartbeat_by_id(
812
846
  Api::WorkflowService::V1::RecordActivityTaskHeartbeatByIdRequest.new(
813
- workflow_id: input.task_token_or_id_reference.workflow_id,
814
- run_id: input.task_token_or_id_reference.run_id,
815
- activity_id: input.task_token_or_id_reference.activity_id,
847
+ **Implementation._activity_id_reference_request_fields(ref),
816
848
  namespace: @client.namespace,
817
849
  identity: @client.connection.identity,
818
850
  details: @client.data_converter.to_payloads(input.details, hints: input.detail_hints)
@@ -822,7 +854,7 @@ module Temporalio
822
854
  else
823
855
  @client.workflow_service.record_activity_task_heartbeat(
824
856
  Api::WorkflowService::V1::RecordActivityTaskHeartbeatRequest.new(
825
- task_token: input.task_token_or_id_reference,
857
+ task_token: ref,
826
858
  namespace: @client.namespace,
827
859
  identity: @client.connection.identity,
828
860
  details: @client.data_converter.to_payloads(input.details, hints: input.detail_hints)
@@ -840,12 +872,11 @@ module Temporalio
840
872
  end
841
873
 
842
874
  def complete_async_activity(input)
843
- if input.task_token_or_id_reference.is_a?(Temporalio::Client::ActivityIDReference)
875
+ ref = input.task_token_or_id_reference
876
+ if ref.is_a?(Temporalio::Client::ActivityIDReference)
844
877
  @client.workflow_service.respond_activity_task_completed_by_id(
845
878
  Api::WorkflowService::V1::RespondActivityTaskCompletedByIdRequest.new(
846
- workflow_id: input.task_token_or_id_reference.workflow_id,
847
- run_id: input.task_token_or_id_reference.run_id,
848
- activity_id: input.task_token_or_id_reference.activity_id,
879
+ **Implementation._activity_id_reference_request_fields(ref),
849
880
  namespace: @client.namespace,
850
881
  identity: @client.connection.identity,
851
882
  result: @client.data_converter.to_payloads([input.result], hints: Array(input.result_hint))
@@ -855,7 +886,7 @@ module Temporalio
855
886
  else
856
887
  @client.workflow_service.respond_activity_task_completed(
857
888
  Api::WorkflowService::V1::RespondActivityTaskCompletedRequest.new(
858
- task_token: input.task_token_or_id_reference,
889
+ task_token: ref,
859
890
  namespace: @client.namespace,
860
891
  identity: @client.connection.identity,
861
892
  result: @client.data_converter.to_payloads([input.result], hints: Array(input.result_hint))
@@ -875,12 +906,11 @@ module Temporalio
875
906
  hints: input.last_heartbeat_detail_hints
876
907
  )
877
908
  end
878
- if input.task_token_or_id_reference.is_a?(Temporalio::Client::ActivityIDReference)
909
+ ref = input.task_token_or_id_reference
910
+ if ref.is_a?(Temporalio::Client::ActivityIDReference)
879
911
  @client.workflow_service.respond_activity_task_failed_by_id(
880
912
  Api::WorkflowService::V1::RespondActivityTaskFailedByIdRequest.new(
881
- workflow_id: input.task_token_or_id_reference.workflow_id,
882
- run_id: input.task_token_or_id_reference.run_id,
883
- activity_id: input.task_token_or_id_reference.activity_id,
913
+ **Implementation._activity_id_reference_request_fields(ref),
884
914
  namespace: @client.namespace,
885
915
  identity: @client.connection.identity,
886
916
  failure: @client.data_converter.to_failure(input.error),
@@ -891,7 +921,7 @@ module Temporalio
891
921
  else
892
922
  @client.workflow_service.respond_activity_task_failed(
893
923
  Api::WorkflowService::V1::RespondActivityTaskFailedRequest.new(
894
- task_token: input.task_token_or_id_reference,
924
+ task_token: ref,
895
925
  namespace: @client.namespace,
896
926
  identity: @client.connection.identity,
897
927
  failure: @client.data_converter.to_failure(input.error),
@@ -904,12 +934,11 @@ module Temporalio
904
934
  end
905
935
 
906
936
  def report_cancellation_async_activity(input)
907
- if input.task_token_or_id_reference.is_a?(Temporalio::Client::ActivityIDReference)
937
+ ref = input.task_token_or_id_reference
938
+ if ref.is_a?(Temporalio::Client::ActivityIDReference)
908
939
  @client.workflow_service.respond_activity_task_canceled_by_id(
909
940
  Api::WorkflowService::V1::RespondActivityTaskCanceledByIdRequest.new(
910
- workflow_id: input.task_token_or_id_reference.workflow_id,
911
- run_id: input.task_token_or_id_reference.run_id,
912
- activity_id: input.task_token_or_id_reference.activity_id,
941
+ **Implementation._activity_id_reference_request_fields(ref),
913
942
  namespace: @client.namespace,
914
943
  identity: @client.connection.identity,
915
944
  details: @client.data_converter.to_payloads(input.details, hints: input.detail_hints)
@@ -919,7 +948,7 @@ module Temporalio
919
948
  else
920
949
  @client.workflow_service.respond_activity_task_canceled(
921
950
  Api::WorkflowService::V1::RespondActivityTaskCanceledRequest.new(
922
- task_token: input.task_token_or_id_reference,
951
+ task_token: ref,
923
952
  namespace: @client.namespace,
924
953
  identity: @client.connection.identity,
925
954
  details: @client.data_converter.to_payloads(input.details, hints: input.detail_hints)
@@ -929,6 +958,168 @@ module Temporalio
929
958
  end
930
959
  nil
931
960
  end
961
+
962
+ def start_activity(input)
963
+ raise ArgumentError, 'activity_id is required' if input.activity_id.nil? || input.activity_id.empty?
964
+ raise ArgumentError, 'task_queue is required' if input.task_queue.nil? || input.task_queue.to_s.empty?
965
+ if input.schedule_to_close_timeout.nil? && input.start_to_close_timeout.nil?
966
+ raise ArgumentError, 'either schedule_to_close_timeout or start_to_close_timeout is required'
967
+ end
968
+ raise ArgumentError, 'start_delay must be non-negative' if input.start_delay&.negative?
969
+
970
+ req = Api::WorkflowService::V1::StartActivityExecutionRequest.new(
971
+ namespace: @client.namespace,
972
+ identity: @client.connection.identity,
973
+ request_id: SecureRandom.uuid,
974
+ activity_id: input.activity_id,
975
+ activity_type: Api::Common::V1::ActivityType.new(name: input.activity),
976
+ task_queue: Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
977
+ input: @client.data_converter.to_payloads(input.args, hints: input.arg_hints),
978
+ schedule_to_close_timeout: ProtoUtils.seconds_to_duration(input.schedule_to_close_timeout),
979
+ schedule_to_start_timeout: ProtoUtils.seconds_to_duration(input.schedule_to_start_timeout),
980
+ start_to_close_timeout: ProtoUtils.seconds_to_duration(input.start_to_close_timeout),
981
+ heartbeat_timeout: ProtoUtils.seconds_to_duration(input.heartbeat_timeout),
982
+ id_reuse_policy: input.id_reuse_policy,
983
+ id_conflict_policy: input.id_conflict_policy,
984
+ retry_policy: input.retry_policy&._to_proto,
985
+ search_attributes: input.search_attributes&._to_proto,
986
+ user_metadata: ProtoUtils.to_user_metadata(
987
+ input.static_summary, input.static_details, @client.data_converter
988
+ ),
989
+ header: ProtoUtils.headers_to_proto(input.headers, @client.data_converter),
990
+ priority: input.priority._to_proto,
991
+ start_delay: ProtoUtils.seconds_to_duration(input.start_delay)
992
+ )
993
+
994
+ begin
995
+ resp = @client.workflow_service.start_activity_execution(
996
+ req,
997
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
998
+ )
999
+ rescue Error::RPCError => e
1000
+ if e.code == Error::RPCError::Code::ALREADY_EXISTS && e.grpc_status.details.first
1001
+ details = e.grpc_status.details.first.unpack(
1002
+ Api::ErrorDetails::V1::ActivityExecutionAlreadyStartedFailure
1003
+ )
1004
+ if details
1005
+ raise Error::ActivityAlreadyStartedError.new(
1006
+ activity_id: input.activity_id,
1007
+ activity_type: input.activity,
1008
+ activity_run_id: details.run_id
1009
+ )
1010
+ end
1011
+ end
1012
+ raise
1013
+ end
1014
+
1015
+ Temporalio::Client::ActivityHandle.new(
1016
+ client: @client,
1017
+ id: input.activity_id,
1018
+ run_id: resp.run_id,
1019
+ result_hint: input.result_hint
1020
+ )
1021
+ end
1022
+
1023
+ def describe_activity(input)
1024
+ resp = @client.workflow_service.describe_activity_execution(
1025
+ Api::WorkflowService::V1::DescribeActivityExecutionRequest.new(
1026
+ namespace: @client.namespace,
1027
+ activity_id: input.activity_id,
1028
+ run_id: input.activity_run_id || ''
1029
+ ),
1030
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
1031
+ )
1032
+ Temporalio::Client::ActivityExecution::Description.new(resp, @client.data_converter)
1033
+ end
1034
+
1035
+ def cancel_activity(input)
1036
+ @client.workflow_service.request_cancel_activity_execution(
1037
+ Api::WorkflowService::V1::RequestCancelActivityExecutionRequest.new(
1038
+ namespace: @client.namespace,
1039
+ activity_id: input.activity_id,
1040
+ run_id: input.activity_run_id || '',
1041
+ identity: @client.connection.identity,
1042
+ request_id: SecureRandom.uuid,
1043
+ reason: input.reason
1044
+ ),
1045
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
1046
+ )
1047
+ nil
1048
+ end
1049
+
1050
+ def terminate_activity(input)
1051
+ @client.workflow_service.terminate_activity_execution(
1052
+ Api::WorkflowService::V1::TerminateActivityExecutionRequest.new(
1053
+ namespace: @client.namespace,
1054
+ activity_id: input.activity_id,
1055
+ run_id: input.activity_run_id || '',
1056
+ identity: @client.connection.identity,
1057
+ request_id: SecureRandom.uuid,
1058
+ reason: input.reason
1059
+ ),
1060
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
1061
+ )
1062
+ nil
1063
+ end
1064
+
1065
+ def list_activities(input)
1066
+ Enumerator.new do |yielder|
1067
+ req = Api::WorkflowService::V1::ListActivityExecutionsRequest.new(
1068
+ namespace: @client.namespace,
1069
+ query: input.query || ''
1070
+ )
1071
+ loop do
1072
+ resp = @client.workflow_service.list_activity_executions(
1073
+ req,
1074
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
1075
+ )
1076
+ resp.executions.each do |raw_info|
1077
+ yielder << Temporalio::Client::ActivityExecution.new(raw_info)
1078
+ end
1079
+ break if resp.next_page_token.empty?
1080
+
1081
+ req.next_page_token = resp.next_page_token
1082
+ end
1083
+ end
1084
+ end
1085
+
1086
+ def count_activities(input)
1087
+ resp = @client.workflow_service.count_activity_executions(
1088
+ Api::WorkflowService::V1::CountActivityExecutionsRequest.new(
1089
+ namespace: @client.namespace,
1090
+ query: input.query || ''
1091
+ ),
1092
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
1093
+ )
1094
+ Temporalio::Client::ActivityExecutionCount.new(
1095
+ resp.count,
1096
+ resp.groups.map do |group|
1097
+ Temporalio::Client::ActivityExecutionCount::AggregationGroup.new(
1098
+ group.count,
1099
+ group.group_values.map { |payload| SearchAttributes._value_from_payload(payload) }
1100
+ )
1101
+ end
1102
+ )
1103
+ end
1104
+
1105
+ # Long-polls PollActivityExecution until the activity reaches a terminal state. Returns the
1106
+ # ActivityExecutionOutcome. The server's long-poll deadline may expire before the activity
1107
+ # completes; in that case PollActivityExecutionResponse comes back with an unpopulated
1108
+ # `outcome` field and the call must be reissued.
1109
+ def fetch_activity_outcome(input)
1110
+ req = Api::WorkflowService::V1::PollActivityExecutionRequest.new(
1111
+ namespace: @client.namespace,
1112
+ activity_id: input.activity_id,
1113
+ run_id: input.activity_run_id || ''
1114
+ )
1115
+ loop do
1116
+ resp = @client.workflow_service.poll_activity_execution(
1117
+ req,
1118
+ rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
1119
+ )
1120
+ return resp.outcome if resp.outcome
1121
+ end
1122
+ end
932
1123
  end
933
1124
  end
934
1125
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Temporalio
4
+ module Internal
5
+ module GoogleProtobuf
6
+ def self.in_call_stack?(locations)
7
+ locations&.any? { |loc| loc.path&.include?('google/protobuf/') } || false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -168,9 +168,18 @@ module Temporalio
168
168
  end
169
169
 
170
170
  def execute_activity(task_token, defn, start)
171
- # Build info
171
+ # Build info. Standalone activities have some empty fields on the wire; translate
172
+ # empty strings to nil for the user-facing Info fields.
173
+ workflow_id = Internal::ProtoUtils.string_or(start.workflow_execution&.workflow_id, nil)
174
+ workflow_run_id = Internal::ProtoUtils.string_or(start.workflow_execution&.run_id, nil)
175
+ workflow_type = Internal::ProtoUtils.string_or(start.workflow_type, nil)
176
+ activity_run_id = Internal::ProtoUtils.string_or(start.run_id, nil)
177
+ # `namespace` is always set. `workflow_namespace` is the deprecated accessor, nil for standalone activities.
178
+ namespace = Internal::ProtoUtils.string_or(start.workflow_namespace, @worker.options.client.namespace)
179
+ workflow_namespace = workflow_id.nil? ? nil : namespace
172
180
  info = Activity::Info.new(
173
181
  activity_id: start.activity_id,
182
+ activity_run_id: activity_run_id,
174
183
  activity_type: start.activity_type,
175
184
  attempt: start.attempt,
176
185
  current_attempt_scheduled_time: Internal::ProtoUtils.timestamp_to_time(
@@ -178,6 +187,7 @@ module Temporalio
178
187
  ) || raise, # Never nil
179
188
  heartbeat_timeout: Internal::ProtoUtils.duration_to_seconds(start.heartbeat_timeout),
180
189
  local?: start.is_local,
190
+ namespace: namespace,
181
191
  priority: Priority._from_proto(start.priority),
182
192
  raw_heartbeat_details: begin
183
193
  payloads = start.heartbeat_details.to_ary
@@ -192,10 +202,10 @@ module Temporalio
192
202
  started_time: Internal::ProtoUtils.timestamp_to_time(start.started_time) || raise, # Never nil
193
203
  task_queue: @worker.options.task_queue,
194
204
  task_token:,
195
- workflow_id: start.workflow_execution.workflow_id,
196
- workflow_namespace: start.workflow_namespace,
197
- workflow_run_id: start.workflow_execution.run_id,
198
- workflow_type: start.workflow_type
205
+ workflow_id: workflow_id,
206
+ workflow_namespace: workflow_namespace,
207
+ workflow_run_id: workflow_run_id,
208
+ workflow_type: workflow_type
199
209
  )
200
210
 
201
211
  # Build input
@@ -248,6 +248,8 @@ module Temporalio
248
248
  end
249
249
 
250
250
  def random
251
+ raise Workflow::InvalidWorkflowStateError, 'Cannot use random in this context' if @instance.random_disabled
252
+
251
253
  @instance.random
252
254
  end
253
255
 
@@ -9,7 +9,7 @@ module Temporalio
9
9
  attr_reader :namespace, :task_queue, :definition, :initial_activation, :logger, :metric_meter,
10
10
  :payload_converter, :failure_converter, :interceptors, :disable_eager_activity_execution,
11
11
  :illegal_calls, :workflow_failure_exception_types, :unsafe_workflow_io_enabled,
12
- :assert_valid_local_activity
12
+ :patch_activation_callback, :assert_valid_local_activity
13
13
 
14
14
  def initialize(
15
15
  namespace:,
@@ -25,6 +25,7 @@ module Temporalio
25
25
  illegal_calls:,
26
26
  workflow_failure_exception_types:,
27
27
  unsafe_workflow_io_enabled:,
28
+ patch_activation_callback:,
28
29
  assert_valid_local_activity:
29
30
  )
30
31
  @namespace = namespace
@@ -40,6 +41,7 @@ module Temporalio
40
41
  @illegal_calls = illegal_calls
41
42
  @workflow_failure_exception_types = workflow_failure_exception_types
42
43
  @unsafe_workflow_io_enabled = unsafe_workflow_io_enabled
44
+ @patch_activation_callback = patch_activation_callback
43
45
  @assert_valid_local_activity = assert_valid_local_activity
44
46
  end
45
47
  end
@@ -481,15 +481,25 @@ module Temporalio
481
481
  @instance.pending_nexus_operation_starts.delete(seq)
482
482
  end
483
483
 
484
- # Handle start failure
485
- if resolution.failed
484
+ # Handle start resolution
485
+ case resolution.status
486
+ when :operation_token
487
+ operation_token = resolution.operation_token
488
+ when :started_sync
489
+ operation_token = nil
490
+ when :failed
491
+ input.cancellation.remove_cancel_callback(cancel_callback_key)
492
+ raise @instance.failure_converter.from_failure(
493
+ resolution.failed, @instance.payload_converter
494
+ )
495
+ else
486
496
  input.cancellation.remove_cancel_callback(cancel_callback_key)
487
- raise @instance.failure_converter.from_failure(resolution.failed, @instance.payload_converter)
497
+ raise "Unknown Nexus operation start status: #{resolution.status.inspect}"
488
498
  end
489
499
 
490
500
  # Create handle and add to pending operations (result will come via resolve_nexus_operation)
491
501
  handle = NexusOperationHandle.new(
492
- operation_token: resolution.operation_token,
502
+ operation_token:,
493
503
  instance: @instance,
494
504
  cancellation: input.cancellation,
495
505
  cancel_callback_key:,
@@ -3,6 +3,7 @@
3
3
  require 'temporalio'
4
4
  require 'temporalio/cancellation'
5
5
  require 'temporalio/error'
6
+ require 'temporalio/internal/google_protobuf'
6
7
  require 'temporalio/internal/worker/workflow_instance'
7
8
  require 'temporalio/workflow'
8
9
  require 'timeout'
@@ -19,6 +20,10 @@ module Temporalio
19
20
  @ready = []
20
21
  @wait_conditions = {}
21
22
  @wait_condition_counter = 0
23
+ @thread_blocking_fibers = {}
24
+ @thread_blocking_mutex = Mutex.new
25
+ @thread_blocking_condition = ConditionVariable.new
26
+ @workflow_thread = nil
22
27
  end
23
28
 
24
29
  def context
@@ -26,12 +31,17 @@ module Temporalio
26
31
  end
27
32
 
28
33
  def run_until_all_yielded
34
+ @workflow_thread = Thread.current
29
35
  loop do
30
36
  # Run all fibers until all yielded
31
37
  while (fiber = @ready.shift)
32
38
  fiber.resume
33
39
  end
34
40
 
41
+ # Thread-blocking fibers are not durable workflow yields. Wait for them to unblock before satisfying any
42
+ # wait condition so the condition sees the workflow after all runnable work has settled.
43
+ next if wait_for_thread_blocking_fiber
44
+
35
45
  # Find the _first_ resolvable wait condition and if there, resolve it, and loop again, otherwise return.
36
46
  # It is important that we both let fibers get all settled _before_ this and only allow a _single_ wait
37
47
  # condition to be satisfied before looping. This allows wait condition users to trust that the line of
@@ -55,6 +65,8 @@ module Temporalio
55
65
 
56
66
  cond_fiber.resume(cond_result)
57
67
  end
68
+ ensure
69
+ @workflow_thread = nil
58
70
  end
59
71
 
60
72
  def wait_condition(cancellation:, &block)
@@ -110,9 +122,26 @@ module Temporalio
110
122
  # work inside of workflows. So we only implement the bare minimum.
111
123
  ###
112
124
 
113
- def block(_blocker, timeout = nil)
125
+ def block(blocker, timeout = nil)
114
126
  # TODO(cretz): Make the blocker visible in the stack trace?
115
127
 
128
+ # Protobuf's object cache uses a process-local Mutex. We allowlist that Mutex use, but it is not a durable
129
+ # workflow yield: if it blocks the only runnable workflow fiber, the workflow task must remain blocked so
130
+ # deadlock detection can fail it instead of completing a partial command set.
131
+ if timeout.nil? && thread_blocking_protobuf_mutex_wait?(blocker)
132
+ fiber = Fiber.current
133
+ synchronize_thread_blocking_fibers { @thread_blocking_fibers[fiber] = true }
134
+ begin
135
+ Fiber.yield
136
+ return true
137
+ ensure
138
+ synchronize_thread_blocking_fibers do
139
+ @thread_blocking_fibers.delete(fiber)
140
+ @thread_blocking_condition.broadcast
141
+ end
142
+ end
143
+ end
144
+
116
145
  # We just yield because unblock will resume this. We will just wrap in timeout if needed.
117
146
  if timeout
118
147
  begin
@@ -189,7 +218,49 @@ module Temporalio
189
218
  end
190
219
 
191
220
  def unblock(_blocker, fiber)
192
- @ready << fiber
221
+ synchronize_thread_blocking_fibers do
222
+ @thread_blocking_fibers.delete(fiber)
223
+ @ready << fiber
224
+ @thread_blocking_condition.broadcast
225
+ end
226
+ end
227
+
228
+ private
229
+
230
+ def thread_blocking_protobuf_mutex_wait?(blocker)
231
+ blocker.is_a?(::Mutex) &&
232
+ ::Temporalio::Internal::GoogleProtobuf.in_call_stack?(caller_locations)
233
+ end
234
+
235
+ def wait_for_thread_blocking_fiber
236
+ synchronize_thread_blocking_fibers do
237
+ return true unless @ready.empty?
238
+ return false if @thread_blocking_fibers.empty?
239
+
240
+ @thread_blocking_condition.wait(@thread_blocking_mutex) while @ready.empty? &&
241
+ !@thread_blocking_fibers.empty?
242
+ true
243
+ end
244
+ end
245
+
246
+ def synchronize_thread_blocking_fibers(&)
247
+ if Thread.current == @workflow_thread
248
+ with_workflow_scheduler_disabled do
249
+ @thread_blocking_mutex.synchronize(&)
250
+ end
251
+ else
252
+ @thread_blocking_mutex.synchronize(&)
253
+ end
254
+ end
255
+
256
+ def with_workflow_scheduler_disabled
257
+ previous_scheduler = Fiber.scheduler
258
+ @instance.illegal_call_tracing_disabled do
259
+ Fiber.set_scheduler(nil)
260
+ yield
261
+ ensure
262
+ Fiber.set_scheduler(previous_scheduler)
263
+ end
193
264
  end
194
265
  end
195
266
  end
@@ -61,7 +61,7 @@ module Temporalio
61
61
  :current_deployment_version,
62
62
  :current_history_length, :current_history_size, :replaying, :random,
63
63
  :signal_handlers, :query_handlers, :update_handlers, :context_frozen, :assert_valid_local_activity,
64
- :in_query_or_validator
64
+ :in_query_or_validator, :random_disabled, :patch_activation_callback
65
65
  attr_accessor :io_enabled, :current_details
66
66
 
67
67
  def initialize(details)
@@ -77,6 +77,7 @@ module Temporalio
77
77
  @scheduler = Scheduler.new(self)
78
78
  @payload_converter = details.payload_converter
79
79
  @failure_converter = details.failure_converter
80
+ @patch_activation_callback = details.patch_activation_callback
80
81
  @disable_eager_activity_execution = details.disable_eager_activity_execution
81
82
  @pending_activities = {} # Keyed by sequence, value is fiber to resume with proto result
82
83
  @pending_timers = {} # Keyed by sequence, value is fiber to resume with proto result
@@ -99,7 +100,9 @@ module Temporalio
99
100
  @current_history_length = 0
100
101
  @current_history_size = 0
101
102
  @replaying = false
103
+ @context_frozen = false
102
104
  @in_query_or_validator = false
105
+ @random_disabled = false
103
106
  @workflow_failure_exception_types = details.workflow_failure_exception_types
104
107
  @signal_handlers = HandlerHash.new(
105
108
  details.definition.signals,
@@ -180,7 +183,9 @@ module Temporalio
180
183
  @commands = []
181
184
  @current_activation_error = nil
182
185
  @continue_as_new_suggested = activation.continue_as_new_suggested
183
- @suggest_continue_as_new_reasons = activation.suggest_continue_as_new_reasons.map(&:to_i)
186
+ @suggest_continue_as_new_reasons = activation.suggest_continue_as_new_reasons.map do |reason|
187
+ ProtoUtils.enum_to_int(Api::Enums::V1::SuggestContinueAsNewReason, reason)
188
+ end
184
189
  @target_worker_deployment_version_changed = activation.target_worker_deployment_version_changed
185
190
  @current_deployment_version = WorkerDeploymentVersion._from_bridge(
186
191
  activation.deployment_version_for_current_task
@@ -290,7 +295,12 @@ module Temporalio
290
295
  patch_id = patch_id.to_s
291
296
  @patches_memoized ||= {}
292
297
  @patches_memoized.fetch(patch_id) do
293
- patched = !replaying || @patches_notified.include?(patch_id)
298
+ # Only fresh, non-replay patches can consult rollout policy; replay and deprecation must follow history.
299
+ patched = if deprecated || replaying || @patches_notified.include?(patch_id)
300
+ !replaying || @patches_notified.include?(patch_id)
301
+ else
302
+ patch_activated?(patch_id)
303
+ end
294
304
  @patches_memoized[patch_id] = patched
295
305
  if patched
296
306
  add_command(
@@ -303,6 +313,20 @@ module Temporalio
303
313
  end
304
314
  end
305
315
 
316
+ def patch_activated?(patch_id)
317
+ return true unless patch_activation_callback
318
+
319
+ patched = with_context_frozen(in_query_or_validator: false, random_disabled: true) do
320
+ patch_activation_callback.call(Temporalio::Worker::PatchActivationInput.new(
321
+ workflow_info: info,
322
+ patch_id:
323
+ ))
324
+ end
325
+ return patched if patched == true || patched == false
326
+
327
+ raise TypeError, 'Patch activation callback must return true or false'
328
+ end
329
+
306
330
  def metric_meter
307
331
  @metric_meter ||= ReplaySafeMetric::Meter.new(
308
332
  @runtime_metric_meter.with_additional_attributes(
@@ -642,6 +666,7 @@ module Temporalio
642
666
  hints: err.arg_hints || defn_arg_hints),
643
667
  workflow_run_timeout: ProtoUtils.seconds_to_duration(err.run_timeout),
644
668
  workflow_task_timeout: ProtoUtils.seconds_to_duration(err.task_timeout),
669
+ backoff_start_interval: ProtoUtils.seconds_to_duration(err.backoff_start_interval),
645
670
  memo: ProtoUtils.memo_to_proto_hash(err.memo, payload_converter),
646
671
  headers: ProtoUtils.headers_to_proto_hash(err.headers, payload_converter),
647
672
  search_attributes: err.search_attributes&._to_proto,
@@ -683,13 +708,18 @@ module Temporalio
683
708
  @definition_options.failure_exception_types&.any? { |cls| err.is_a?(cls) }
684
709
  end
685
710
 
686
- def with_context_frozen(in_query_or_validator:, &)
711
+ def with_context_frozen(in_query_or_validator:, random_disabled: false, &)
712
+ previous_context_frozen = @context_frozen
713
+ previous_in_query_or_validator = @in_query_or_validator
714
+ previous_random_disabled = @random_disabled
687
715
  @context_frozen = true
688
716
  @in_query_or_validator = in_query_or_validator
717
+ @random_disabled = random_disabled
689
718
  yield
690
719
  ensure
691
- @context_frozen = false
692
- @in_query_or_validator = false
720
+ @context_frozen = previous_context_frozen
721
+ @in_query_or_validator = previous_in_query_or_validator
722
+ @random_disabled = previous_random_disabled
693
723
  end
694
724
 
695
725
  def convert_handler_args(payload_array:, defn:)