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
@@ -28,24 +28,17 @@ option go_package = "go.temporal.io/api/operatorservice/v1;operatorservice";
28
28
  option java_package = "io.temporal.api.operatorservice.v1";
29
29
  option java_multiple_files = true;
30
30
  option java_outer_classname = "RequestResponseProto";
31
- option ruby_package = "Temporal::Api::OperatorService::V1";
32
- option csharp_namespace = "Temporal.Api.OperatorService.V1";
31
+ option ruby_package = "Temporalio::Api::OperatorService::V1";
32
+ option csharp_namespace = "Temporalio.Api.OperatorService.V1";
33
33
 
34
- import "dependencies/gogoproto/gogo.proto";
35
- import "google/protobuf/timestamp.proto";
36
- import "google/protobuf/duration.proto";
37
-
38
- import "temporal/api/cluster/v1/message.proto";
39
- import "temporal/api/common/v1/message.proto";
40
- import "temporal/api/enums/v1/cluster.proto";
41
34
  import "temporal/api/enums/v1/common.proto";
42
- import "temporal/api/version/v1/message.proto";
43
35
 
44
36
  // (-- Search Attribute --)
45
37
 
46
38
  message AddSearchAttributesRequest {
47
39
  // Mapping between search attribute name and its IndexedValueType.
48
40
  map<string, temporal.api.enums.v1.IndexedValueType> search_attributes = 1;
41
+ string namespace = 2;
49
42
  }
50
43
 
51
44
  message AddSearchAttributesResponse {
@@ -54,12 +47,14 @@ message AddSearchAttributesResponse {
54
47
  message RemoveSearchAttributesRequest {
55
48
  // Search attribute names to delete.
56
49
  repeated string search_attributes = 1;
50
+ string namespace = 2;
57
51
  }
58
52
 
59
53
  message RemoveSearchAttributesResponse {
60
54
  }
61
55
 
62
56
  message ListSearchAttributesRequest {
57
+ string namespace = 1;
63
58
  }
64
59
 
65
60
  message ListSearchAttributesResponse {
@@ -84,21 +79,10 @@ message DeleteNamespaceResponse {
84
79
  string deleted_namespace = 1;
85
80
  }
86
81
 
87
- // (-- api-linter: core::0135::request-unknown-fields=disabled
88
- // aip.dev/not-precedent: DeleteNamespace RPC doesn't follow Google API format. --)
89
- // (-- api-linter: core::0135::request-name-required=disabled
90
- // aip.dev/not-precedent: DeleteNamespace RPC doesn't follow Google API format. --)
91
- message DeleteWorkflowExecutionRequest {
92
- string namespace = 1;
93
- // Workflow Execution to delete. If run_id is not specified, the latest one is used.
94
- temporal.api.common.v1.WorkflowExecution workflow_execution = 2;
95
- }
96
-
97
- message DeleteWorkflowExecutionResponse {
98
- }
99
-
100
82
  message AddOrUpdateRemoteClusterRequest {
83
+ // Frontend Address is a cross cluster accessible address.
101
84
  string frontend_address = 1;
85
+ // Flag to enable / disable the cross cluster connection.
102
86
  bool enable_remote_cluster_connection = 2;
103
87
  }
104
88
 
@@ -106,56 +90,35 @@ message AddOrUpdateRemoteClusterResponse {
106
90
  }
107
91
 
108
92
  message RemoveRemoteClusterRequest {
93
+ // Remote cluster name to be removed.
109
94
  string cluster_name = 1;
110
95
  }
111
96
 
112
97
  message RemoveRemoteClusterResponse {
113
98
  }
114
99
 
115
- message DescribeClusterRequest {
116
- string cluster_name = 1;
117
- }
118
-
119
- message DescribeClusterResponse {
120
- map<string,string> supported_clients = 1;
121
- string server_version = 2;
122
- temporal.api.cluster.v1.MembershipInfo membership_info = 3;
123
- string cluster_id = 4;
124
- string cluster_name = 5;
125
- int32 history_shard_count = 6;
126
- string persistence_store = 7;
127
- string visibility_store = 8;
128
- temporal.api.version.v1.VersionInfo version_info = 9;
129
- int64 failover_version_increment = 10;
130
- int64 initial_failover_version = 11;
131
- bool is_global_namespace_enabled = 12;
132
- }
133
-
134
100
  message ListClustersRequest {
135
101
  int32 page_size = 1;
136
102
  bytes next_page_token = 2;
137
103
  }
138
104
 
139
105
  message ListClustersResponse {
140
- repeated temporal.api.cluster.v1.ClusterMetadata clusters = 1;
141
- bytes next_page_token = 2;
142
- }
143
-
144
- message ListClusterMembersRequest {
145
- // (-- api-linter: core::0140::prepositions=disabled
146
- // aip.dev/not-precedent: "within" is used to indicate a time range. --)
147
- google.protobuf.Duration last_heartbeat_within = 1 [(gogoproto.stdduration) = true];
148
- string rpc_address = 2;
149
- string host_id = 3;
150
- temporal.api.enums.v1.ClusterMemberRole role = 4;
151
- // (-- api-linter: core::0140::prepositions=disabled
152
- // aip.dev/not-precedent: "after" is used to indicate a time range. --)
153
- google.protobuf.Timestamp session_started_after_time = 5 [(gogoproto.stdtime) = true];
154
- int32 page_size = 6;
155
- bytes next_page_token = 7;
106
+ // List of all cluster information
107
+ repeated ClusterMetadata clusters = 1;
108
+ bytes next_page_token = 4;
156
109
  }
157
110
 
158
- message ListClusterMembersResponse {
159
- repeated temporal.api.cluster.v1.ClusterMember active_members = 1;
160
- bytes next_page_token = 2;
111
+ message ClusterMetadata {
112
+ // Name of the cluster name.
113
+ string cluster_name = 1;
114
+ // Id of the cluster.
115
+ string cluster_id = 2;
116
+ // Cluster accessible address.
117
+ string address = 3;
118
+ // A unique failover version across all connected clusters.
119
+ int64 initial_failover_version = 4;
120
+ // History service shard number.
121
+ int32 history_shard_count = 5;
122
+ // A flag to indicate if a connection is active.
123
+ bool is_connection_enabled = 6;
161
124
  }
@@ -28,8 +28,8 @@ option go_package = "go.temporal.io/api/operatorservice/v1;operatorservice";
28
28
  option java_package = "io.temporal.api.operatorservice.v1";
29
29
  option java_multiple_files = true;
30
30
  option java_outer_classname = "ServiceProto";
31
- option ruby_package = "Temporal::Api::OperatorService::V1";
32
- option csharp_namespace = "Temporal.Api.OperatorService.V1";
31
+ option ruby_package = "Temporalio::Api::OperatorService::V1";
32
+ option csharp_namespace = "Temporalio.Api.OperatorService.V1";
33
33
 
34
34
 
35
35
  import "temporal/api/operatorservice/v1/request_response.proto";
@@ -66,17 +66,6 @@ service OperatorService {
66
66
  rpc DeleteNamespace (DeleteNamespaceRequest) returns (DeleteNamespaceResponse) {
67
67
  }
68
68
 
69
- // DeleteWorkflowExecution asynchronously deletes a specific Workflow Execution (when
70
- // WorkflowExecution.run_id is provided) or the latest Workflow Execution (when
71
- // WorkflowExecution.run_id is not provided). If the Workflow Execution is Running, it will be
72
- // terminated before deletion.
73
- // (-- api-linter: core::0135::method-signature=disabled
74
- // aip.dev/not-precedent: DeleteNamespace RPC doesn't follow Google API format. --)
75
- // (-- api-linter: core::0135::response-message-name=disabled
76
- // aip.dev/not-precedent: DeleteNamespace RPC doesn't follow Google API format. --)
77
- rpc DeleteWorkflowExecution (DeleteWorkflowExecutionRequest) returns (DeleteWorkflowExecutionResponse) {
78
- }
79
-
80
69
  // AddOrUpdateRemoteCluster adds or updates remote cluster.
81
70
  rpc AddOrUpdateRemoteCluster(AddOrUpdateRemoteClusterRequest) returns (AddOrUpdateRemoteClusterResponse) {
82
71
  }
@@ -85,15 +74,7 @@ service OperatorService {
85
74
  rpc RemoveRemoteCluster(RemoveRemoteClusterRequest) returns (RemoveRemoteClusterResponse) {
86
75
  }
87
76
 
88
- // DescribeCluster returns information about Temporal cluster.
89
- rpc DescribeCluster(DescribeClusterRequest) returns (DescribeClusterResponse) {
90
- }
91
-
92
77
  // ListClusters returns information about Temporal clusters.
93
78
  rpc ListClusters(ListClustersRequest) returns (ListClustersResponse) {
94
79
  }
95
-
96
- // ListClusterMembers returns information about Temporal cluster members.
97
- rpc ListClusterMembers(ListClusterMembersRequest) returns (ListClusterMembersResponse) {
98
- }
99
80
  }
@@ -0,0 +1,57 @@
1
+ // The MIT License
2
+ //
3
+ // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved.
4
+ //
5
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ // of this software and associated documentation files (the "Software"), to deal
7
+ // in the Software without restriction, including without limitation the rights
8
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ // copies of the Software, and to permit persons to whom the Software is
10
+ // furnished to do so, subject to the following conditions:
11
+ //
12
+ // The above copyright notice and this permission notice shall be included in
13
+ // all copies or substantial portions of the Software.
14
+ //
15
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ // THE SOFTWARE.
22
+
23
+ syntax = "proto3";
24
+
25
+ package temporal.api.protocol.v1;
26
+
27
+ option go_package = "go.temporal.io/api/protocol/v1;protocol";
28
+ option java_package = "io.temporal.api.protocol.v1";
29
+ option java_multiple_files = true;
30
+ option java_outer_classname = "MessageProto";
31
+ option ruby_package = "Temporalio::Api::Protocol::V1";
32
+ option csharp_namespace = "Temporalt.Api.Protocol.V1";
33
+
34
+ import "google/protobuf/any.proto";
35
+
36
+ // (-- api-linter: core::0146::any=disabled
37
+ // aip.dev/not-precedent: We want runtime extensibility for the body field --)
38
+ message Message {
39
+ // An ID for this specific message.
40
+ string id = 1;
41
+
42
+ // Identifies the specific instance of a protocol to which this message
43
+ // belongs.
44
+ string protocol_instance_id = 2;
45
+
46
+ // The event ID or command ID after which this message can be delivered. The
47
+ // effects of history up to and including this event ID should be visible to
48
+ // the code that handles this message. Omit to opt out of sequencing.
49
+ oneof sequencing_id {
50
+ int64 event_id = 3;
51
+ int64 command_index = 4;
52
+ };
53
+
54
+ // The opaque data carried by this message. The protocol type can be
55
+ // extracted from the package name of the message carried inside the Any.
56
+ google.protobuf.Any body = 5;
57
+ }
@@ -28,8 +28,8 @@ option go_package = "go.temporal.io/api/query/v1;query";
28
28
  option java_package = "io.temporal.api.query.v1";
29
29
  option java_multiple_files = true;
30
30
  option java_outer_classname = "MessageProto";
31
- option ruby_package = "Temporal::Api::Query::V1";
32
- option csharp_namespace = "Temporal.Api.Query.V1";
31
+ option ruby_package = "Temporalio::Api::Query::V1";
32
+ option csharp_namespace = "Temporalio.Api.Query.V1";
33
33
 
34
34
  import "temporal/api/enums/v1/query.proto";
35
35
  import "temporal/api/enums/v1/workflow.proto";
@@ -28,8 +28,8 @@ option go_package = "go.temporal.io/api/replication/v1;replication";
28
28
  option java_package = "io.temporal.api.replication.v1";
29
29
  option java_multiple_files = true;
30
30
  option java_outer_classname = "MessageProto";
31
- option ruby_package = "Temporal::Api::Replication::V1";
32
- option csharp_namespace = "Temporal.Api.Replication.V1";
31
+ option ruby_package = "Temporalio::Api::Replication::V1";
32
+ option csharp_namespace = "Temporalio.Api.Replication.V1";
33
33
 
34
34
  import "google/protobuf/timestamp.proto";
35
35
 
@@ -20,6 +20,11 @@
20
20
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  // THE SOFTWARE.
22
22
 
23
+ // (-- api-linter: core::0203::optional=disabled
24
+ // aip.dev/not-precedent: field_behavior annotation not available in our gogo fork --)
25
+ // (-- api-linter: core::0203::input-only=disabled
26
+ // aip.dev/not-precedent: field_behavior annotation not available in our gogo fork --)
27
+
23
28
  syntax = "proto3";
24
29
 
25
30
  package temporal.api.schedule.v1;
@@ -28,8 +33,8 @@ option go_package = "go.temporal.io/api/schedule/v1;schedule";
28
33
  option java_package = "io.temporal.api.schedule.v1";
29
34
  option java_multiple_files = true;
30
35
  option java_outer_classname = "MessageProto";
31
- option ruby_package = "Temporal::Api::Schedule::V1";
32
- option csharp_namespace = "Temporal.Api.Schedule.V1";
36
+ option ruby_package = "Temporalio::Api::Schedule::V1";
37
+ option csharp_namespace = "Temporalio.Api.Schedule.V1";
33
38
 
34
39
  import "google/protobuf/duration.proto";
35
40
  import "google/protobuf/timestamp.proto";
@@ -41,7 +46,8 @@ import "temporal/api/enums/v1/schedule.proto";
41
46
  import "temporal/api/workflow/v1/message.proto";
42
47
 
43
48
  // CalendarSpec describes an event specification relative to the calendar,
44
- // similar to a traditional cron specification. Each field can be one of:
49
+ // similar to a traditional cron specification, but with labeled fields. Each
50
+ // field can be one of:
45
51
  // *: matches always
46
52
  // x: matches when the field equals x
47
53
  // x/y : matches when the field equals x+n*y where n is an integer
@@ -49,13 +55,14 @@ import "temporal/api/workflow/v1/message.proto";
49
55
  // w,x,y,...: matches when the field is one of the listed values
50
56
  // Each x, y, z, ... is either a decimal integer, or a month or day of week name
51
57
  // or abbreviation (in the appropriate fields).
52
- // A second in time matches if all fields match.
58
+ // A timestamp matches if all fields match.
59
+ // Note that fields have different default values, for convenience.
53
60
  // Note that the special case that some cron implementations have for treating
54
61
  // day_of_month and day_of_week as "or" instead of "and" when both are set is
55
62
  // not implemented.
56
63
  // day_of_week can accept 0 or 7 as Sunday
57
- // TODO: add relative-to-end-of-month
58
- // TODO: add nth day-of-week in month
64
+ // CalendarSpec gets compiled into StructuredCalendarSpec, which is what will be
65
+ // returned if you describe the schedule.
59
66
  message CalendarSpec {
60
67
  // Expression to match seconds. Default: 0
61
68
  string second = 1;
@@ -73,6 +80,51 @@ message CalendarSpec {
73
80
  string year = 6;
74
81
  // Expression to match days of the week. Default: *
75
82
  string day_of_week = 7;
83
+ // Free-form comment describing the intention of this spec.
84
+ string comment = 8;
85
+ }
86
+
87
+ // Range represents a set of integer values, used to match fields of a calendar
88
+ // time in StructuredCalendarSpec. If end < start, then end is interpreted as
89
+ // equal to start. This means you can use a Range with start set to a value, and
90
+ // end and step unset (defaulting to 0) to represent a single value.
91
+ message Range {
92
+ // Start of range (inclusive).
93
+ int32 start = 1;
94
+ // End of range (inclusive).
95
+ int32 end = 2;
96
+ // Step (optional, default 1).
97
+ int32 step = 3;
98
+ }
99
+
100
+ // StructuredCalendarSpec describes an event specification relative to the
101
+ // calendar, in a form that's easy to work with programmatically. Each field can
102
+ // be one or more ranges.
103
+ // A timestamp matches if at least one range of each field matches the
104
+ // corresponding fields of the timestamp, except for year: if year is missing,
105
+ // that means all years match. For all fields besides year, at least one Range
106
+ // must be present to match anything.
107
+ // TODO: add relative-to-end-of-month
108
+ // TODO: add nth day-of-week in month
109
+ message StructuredCalendarSpec {
110
+ // Match seconds (0-59)
111
+ repeated Range second = 1;
112
+ // Match minutes (0-59)
113
+ repeated Range minute = 2;
114
+ // Match hours (0-23)
115
+ repeated Range hour = 3;
116
+ // Match days of the month (1-31)
117
+ // (-- api-linter: core::0140::prepositions=disabled
118
+ // aip.dev/not-precedent: standard name of field --)
119
+ repeated Range day_of_month = 4;
120
+ // Match months (1-12)
121
+ repeated Range month = 5;
122
+ // Match years.
123
+ repeated Range year = 6;
124
+ // Match days of the week (0-6; 0 is Sunday).
125
+ repeated Range day_of_week = 7;
126
+ // Free-form comment describing the intention of this spec.
127
+ string comment = 8;
76
128
  }
77
129
 
78
130
  // IntervalSpec matches times that can be expressed as:
@@ -97,24 +149,56 @@ message IntervalSpec {
97
149
  // definition of a time zone can change over time (most commonly, when daylight
98
150
  // saving time policy changes for an area). To create a totally self-contained
99
151
  // ScheduleSpec, use UTC or include timezone_data.
152
+ //
153
+ // For input, you can provide zero or more of: structured_calendar, calendar,
154
+ // cron_string, interval, and exclude_structured_calendar, and all of them will
155
+ // be used (the schedule will take action at the union of all of their times,
156
+ // minus the ones that match exclude_structured_calendar).
157
+ //
158
+ // On input, calendar and cron_string fields will be compiled into
159
+ // structured_calendar (and maybe interval and timezone_name), so if you
160
+ // Describe a schedule, you'll see only structured_calendar, interval, etc.
100
161
  message ScheduleSpec {
162
+ // Calendar-based specifications of times.
163
+ repeated StructuredCalendarSpec structured_calendar = 7;
164
+ // cron_string holds a traditional cron specification as a string. It
165
+ // accepts 5, 6, or 7 fields, separated by spaces, and interprets them the
166
+ // same way as CalendarSpec.
167
+ // 5 fields: minute, hour, day_of_month, month, day_of_week
168
+ // 6 fields: minute, hour, day_of_month, month, day_of_week, year
169
+ // 7 fields: second, minute, hour, day_of_month, month, day_of_week, year
170
+ // If year is not given, it defaults to *. If second is not given, it
171
+ // defaults to 0.
172
+ // Shorthands @yearly, @monthly, @weekly, @daily, and @hourly are also
173
+ // accepted instead of the 5-7 time fields.
174
+ // Optionally, the string can be preceded by CRON_TZ=<timezone name> or
175
+ // TZ=<timezone name>, which will get copied to timezone_name. (There must
176
+ // not also be a timezone_name present.)
177
+ // Optionally "#" followed by a comment can appear at the end of the string.
178
+ // Note that the special case that some cron implementations have for
179
+ // treating day_of_month and day_of_week as "or" instead of "and" when both
180
+ // are set is not implemented.
181
+ // @every <interval>[/<phase>] is accepted and gets compiled into an
182
+ // IntervalSpec instead. <interval> and <phase> should be a decimal integer
183
+ // with a unit suffix s, m, h, or d.
184
+ repeated string cron_string = 8;
101
185
  // Calendar-based specifications of times.
102
186
  repeated CalendarSpec calendar = 1;
103
187
  // Interval-based specifications of times.
104
188
  repeated IntervalSpec interval = 2;
105
- // Any timestamps matching any of the exclude_calendar specs will be
106
- // skipped.
107
- repeated CalendarSpec exclude_calendar = 3;
108
- // Any timestamps before start_time will be skipped. Together, start_time
109
- // and end_time make an inclusive interval.
189
+ // Any timestamps matching any of exclude_* will be skipped.
190
+ repeated CalendarSpec exclude_calendar = 3 [deprecated = true]; // use exclude_structured_calendar
191
+ repeated StructuredCalendarSpec exclude_structured_calendar = 9;
192
+ // If start_time is set, any timestamps before start_time will be skipped.
193
+ // (Together, start_time and end_time make an inclusive interval.)
110
194
  google.protobuf.Timestamp start_time = 4 [(gogoproto.stdtime) = true];
111
- // Any timestamps after end_time will be skipped.
195
+ // If end_time is set, any timestamps after end_time will be skipped.
112
196
  google.protobuf.Timestamp end_time = 5 [(gogoproto.stdtime) = true];
113
197
  // All timestamps will be incremented by a random value from 0 to this
114
- // amount of jitter. Default: 1 second
198
+ // amount of jitter. Default: 0
115
199
  google.protobuf.Duration jitter = 6 [(gogoproto.stdduration) = true];
116
200
 
117
- // Time zone to interpret all CalendarSpecs in.
201
+ // Time zone to interpret all calendar-based specs in.
118
202
  //
119
203
  // If unset, defaults to UTC. We recommend using UTC for your application if
120
204
  // at all possible, to avoid various surprising properties of time zones.
@@ -134,21 +218,17 @@ message ScheduleSpec {
134
218
  // at 2:30am and specify a time zone that follows DST, that action will not
135
219
  // be triggered on the day that has no 2:30am. Similarly, an action that
136
220
  // fires at 1:30am will be triggered twice on the day that has two 1:30s.
221
+ //
222
+ // Also note that no actions are taken on leap-seconds (e.g. 23:59:60 UTC).
137
223
  string timezone_name = 10;
138
224
  bytes timezone_data = 11;
139
225
  }
140
226
 
141
227
  message SchedulePolicies {
142
228
  // Policy for overlaps.
143
- // Note that this can be changed after a schedule has taken some actions, and we can't
144
- // provide 100% sensible semantics for all changes. The most confusing case would be
145
- // changes to/from ALLOW_ALL: with that policy multiple scheduled workflows can run
146
- // concurrently, but for all other policies only one can run at a time. Changing
147
- // between these two classes will leave all workflows with the other class alone.
148
- // E.g., if changing from ALLOW_ALL to CANCEL_OTHER, and there are workflows running,
149
- // those workflows will not be cancelled. If changing from ALLOW_ALL to SKIP with
150
- // workflows running, the running workflows will not cause the next action to be
151
- // skipped.
229
+ // Note that this can be changed after a schedule has taken some actions,
230
+ // and some changes might produce unintuitive results. In general, the later
231
+ // policy overrides the earlier policy.
152
232
  temporal.api.enums.v1.ScheduleOverlapPolicy overlap_policy = 1;
153
233
 
154
234
  // Policy for catchups:
@@ -195,10 +275,11 @@ message ScheduleState {
195
275
  // If true, do not take any actions based on the schedule spec.
196
276
  bool paused = 2;
197
277
 
198
- // If limited_actions is true, decrement remaining_actions after each action, and do
199
- // not take any more scheduled actions if remaining_actions is zero. Actions may still
200
- // be taken by explicit request. Skipped actions (due to overlap policy) do not count
201
- // against remaining actions.
278
+ // If limited_actions is true, decrement remaining_actions after each
279
+ // action, and do not take any more scheduled actions if remaining_actions
280
+ // is zero. Actions may still be taken by explicit request (i.e. trigger
281
+ // immediately or backfill). Skipped actions (due to overlap policy) do not
282
+ // count against remaining actions.
202
283
  bool limited_actions = 3;
203
284
  int64 remaining_actions = 4;
204
285
  }
@@ -258,8 +339,7 @@ message ScheduleInfo {
258
339
  google.protobuf.Timestamp create_time = 6 [(gogoproto.stdtime) = true];
259
340
  google.protobuf.Timestamp update_time = 7 [(gogoproto.stdtime) = true];
260
341
 
261
- // Error for invalid schedule. If this is set, no actions will be taken.
262
- string invalid_schedule_error = 8;
342
+ string invalid_schedule_error = 8 [deprecated = true];
263
343
  }
264
344
 
265
345
  message Schedule {
@@ -273,8 +353,7 @@ message Schedule {
273
353
  // that's returned in ListSchedules.
274
354
  message ScheduleListInfo {
275
355
  // From spec:
276
- // Some fields are too large/unimportant for the purpose of listing, so we'll clear them
277
- // from this copy of spec: exclude_calendar, jitter, timezone_data.
356
+ // Some fields are dropped from this copy of spec: timezone_data
278
357
  ScheduleSpec spec = 1;
279
358
 
280
359
  // From action:
@@ -0,0 +1,63 @@
1
+ // The MIT License
2
+ //
3
+ // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved.
4
+ //
5
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ // of this software and associated documentation files (the "Software"), to deal
7
+ // in the Software without restriction, including without limitation the rights
8
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ // copies of the Software, and to permit persons to whom the Software is
10
+ // furnished to do so, subject to the following conditions:
11
+ //
12
+ // The above copyright notice and this permission notice shall be included in
13
+ // all copies or substantial portions of the Software.
14
+ //
15
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ // THE SOFTWARE.
22
+
23
+ syntax = "proto3";
24
+
25
+ package temporal.api.sdk.v1;
26
+
27
+ option go_package = "go.temporal.io/api/sdk/v1;sdk";
28
+ option java_package = "io.temporal.api.sdk.v1";
29
+ option java_multiple_files = true;
30
+ option java_outer_classname = "TaskCompleteMetadataProto";
31
+ option ruby_package = "Temporalio::Api::Sdk::V1";
32
+ option csharp_namespace = "Temporalio.Api.Sdk.V1";
33
+
34
+ message WorkflowTaskCompletedMetadata {
35
+ // Internal flags used by the core SDK. SDKs using flags must comply with the following behavior:
36
+ //
37
+ // During replay:
38
+ // * If a flag is not recognized (value is too high or not defined), it must fail the workflow
39
+ // task.
40
+ // * If a flag is recognized, it is stored in a set of used flags for the run. Code checks for
41
+ // that flag during and after this WFT are allowed to assume that the flag is present.
42
+ // * If a code check for a flag does not find the flag in the set of used flags, it must take
43
+ // the branch corresponding to the absence of that flag.
44
+ //
45
+ // During non-replay execution of new WFTs:
46
+ // * The SDK is free to use all flags it knows about. It must record any newly-used (IE: not
47
+ // previously recorded) flags when completing the WFT.
48
+ //
49
+ // SDKs which are too old to even know about this field at all are considered to produce
50
+ // undefined behavior if they replay workflows which used this mechanism.
51
+ //
52
+ // (-- api-linter: core::0141::forbidden-types=disabled
53
+ // aip.dev/not-precedent: These really shouldn't have negative values. --)
54
+ repeated uint32 core_used_flags = 1;
55
+
56
+ // Flags used by the SDK lang. No attempt is made to distinguish between different SDK languages
57
+ // here as processing a workflow with a different language than the one which authored it is
58
+ // already undefined behavior. See `core_used_patches` for more.
59
+ //
60
+ // (-- api-linter: core::0141::forbidden-types=disabled
61
+ // aip.dev/not-precedent: These really shouldn't have negative values. --)
62
+ repeated uint32 lang_used_flags = 2;
63
+ }
@@ -28,8 +28,8 @@ option go_package = "go.temporal.io/api/taskqueue/v1;taskqueue";
28
28
  option java_package = "io.temporal.api.taskqueue.v1";
29
29
  option java_multiple_files = true;
30
30
  option java_outer_classname = "MessageProto";
31
- option ruby_package = "Temporal::Api::TaskQueue::V1";
32
- option csharp_namespace = "Temporal.Api.TaskQueue.V1";
31
+ option ruby_package = "Temporalio::Api::TaskQueue::V1";
32
+ option csharp_namespace = "Temporalio.Api.TaskQueue.V1";
33
33
 
34
34
  import "google/protobuf/duration.proto";
35
35
  import "google/protobuf/timestamp.proto";
@@ -77,7 +77,7 @@ message PollerInfo {
77
77
  double rate_per_second = 3;
78
78
  // If a worker has specified an ID for use with the worker versioning feature while polling,
79
79
  // that id must appear here.
80
- string worker_versioning_build_id = 4;
80
+ VersionId worker_versioning_id = 4;
81
81
  }
82
82
 
83
83
  message StickyExecutionAttributes {
@@ -98,7 +98,7 @@ message VersionIdNode {
98
98
  }
99
99
 
100
100
  // Used by the worker versioning APIs, represents a specific version of something
101
- // Currently, that's just a whole-worker id. In the future, if we support
101
+ // Currently, that's just a whole-worker id. In the future, if we support
102
102
  // WASM workflow bundle based versioning, for example, then the inside of this
103
103
  // message may become a oneof of different version types.
104
104
  message VersionId {