temporalio 0.0.1 → 0.0.2

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 (232) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +175 -4
  3. data/bridge/Cargo.lock +44 -21
  4. data/bridge/Cargo.toml +1 -0
  5. data/bridge/sdk-core/Cargo.toml +1 -1
  6. data/bridge/sdk-core/README.md +1 -4
  7. data/bridge/sdk-core/client/Cargo.toml +1 -1
  8. data/bridge/sdk-core/client/src/lib.rs +12 -20
  9. data/bridge/sdk-core/client/src/raw.rs +9 -8
  10. data/bridge/sdk-core/client/src/retry.rs +100 -23
  11. data/bridge/sdk-core/core/Cargo.toml +7 -7
  12. data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
  13. data/bridge/sdk-core/core/src/abstractions.rs +22 -22
  14. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +146 -43
  15. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +419 -9
  16. data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -89
  17. data/bridge/sdk-core/core/src/core_tests/workers.rs +2 -2
  18. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  19. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +47 -27
  20. data/bridge/sdk-core/core/src/lib.rs +139 -32
  21. data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
  22. data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
  23. data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
  24. data/bridge/sdk-core/core/src/telemetry/metrics.rs +184 -139
  25. data/bridge/sdk-core/core/src/telemetry/mod.rs +310 -315
  26. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +4 -3
  27. data/bridge/sdk-core/core/src/test_help/mod.rs +23 -9
  28. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +12 -6
  29. data/bridge/sdk-core/core/src/worker/activities.rs +40 -23
  30. data/bridge/sdk-core/core/src/worker/client/mocks.rs +1 -1
  31. data/bridge/sdk-core/core/src/worker/client.rs +30 -4
  32. data/bridge/sdk-core/core/src/worker/mod.rs +23 -19
  33. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +10 -19
  34. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +99 -25
  35. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +1 -5
  36. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +1 -5
  37. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +1 -5
  38. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +3 -5
  39. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +1 -5
  40. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +2 -6
  41. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +1 -5
  42. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +24 -22
  43. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +12 -38
  44. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +178 -0
  45. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +1 -5
  46. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +1 -5
  47. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +1 -5
  48. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +8 -2
  49. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +1 -5
  50. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +1 -1
  51. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +233 -217
  52. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +1 -6
  53. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +4 -4
  54. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +13 -5
  55. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +86 -29
  56. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +2 -2
  57. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +56 -11
  58. data/bridge/sdk-core/core-api/Cargo.toml +4 -3
  59. data/bridge/sdk-core/core-api/src/lib.rs +1 -43
  60. data/bridge/sdk-core/core-api/src/telemetry.rs +147 -0
  61. data/bridge/sdk-core/core-api/src/worker.rs +13 -0
  62. data/bridge/sdk-core/etc/deps.svg +115 -140
  63. data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
  64. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  65. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  66. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  67. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
  68. data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
  69. data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
  70. data/bridge/sdk-core/protos/api_upstream/{temporal/api/update/v1/message.proto → build/tools.go} +6 -23
  71. data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
  72. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
  73. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +20 -19
  74. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +2 -2
  75. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
  76. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -4
  77. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
  78. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +5 -3
  79. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +23 -2
  80. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/{cluster.proto → interaction_type.proto} +10 -11
  81. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
  82. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
  83. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
  84. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
  85. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
  86. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +2 -13
  87. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
  88. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
  89. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
  90. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
  91. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +26 -19
  92. data/bridge/sdk-core/protos/api_upstream/temporal/api/interaction/v1/message.proto +87 -0
  93. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +2 -2
  94. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +21 -61
  95. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
  96. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
  97. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
  98. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
  99. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
  100. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
  101. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
  102. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +60 -16
  103. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +17 -3
  104. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +2 -0
  105. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +8 -1
  106. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
  107. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
  108. data/bridge/sdk-core/sdk/Cargo.toml +2 -2
  109. data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
  110. data/bridge/sdk-core/sdk/src/lib.rs +7 -5
  111. data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
  112. data/bridge/sdk-core/sdk/src/workflow_future.rs +3 -7
  113. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +1 -1
  114. data/bridge/sdk-core/sdk-core-protos/build.rs +0 -1
  115. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +65 -18
  116. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +22 -22
  117. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +104 -44
  118. data/bridge/sdk-core/test-utils/Cargo.toml +2 -1
  119. data/bridge/sdk-core/test-utils/src/lib.rs +81 -29
  120. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +5 -2
  121. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +37 -0
  122. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -13
  123. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +167 -13
  124. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +53 -0
  125. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +106 -20
  126. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +18 -8
  127. data/bridge/sdk-core/tests/main.rs +6 -4
  128. data/bridge/src/connection.rs +81 -62
  129. data/bridge/src/lib.rs +92 -33
  130. data/bridge/src/runtime.rs +9 -2
  131. data/bridge/src/worker.rs +53 -2
  132. data/lib/bridge.so +0 -0
  133. data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
  134. data/lib/gen/temporal/api/command/v1/message_pb.rb +17 -9
  135. data/lib/gen/temporal/api/common/v1/message_pb.rb +1 -1
  136. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
  137. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -1
  138. data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
  139. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +3 -2
  140. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +7 -1
  141. data/lib/gen/temporal/api/enums/v1/interaction_type_pb.rb +25 -0
  142. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
  143. data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
  144. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
  145. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
  146. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
  147. data/lib/gen/temporal/api/enums/v1/update_pb.rb +1 -6
  148. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
  149. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
  150. data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
  151. data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
  152. data/lib/gen/temporal/api/history/v1/message_pb.rb +19 -18
  153. data/lib/gen/temporal/api/interaction/v1/message_pb.rb +49 -0
  154. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +1 -1
  155. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +11 -51
  156. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
  157. data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
  158. data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
  159. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
  160. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
  161. data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
  162. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
  163. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +27 -10
  164. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
  165. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +1 -0
  166. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +5 -1
  167. data/lib/temporalio/activity/context.rb +97 -0
  168. data/lib/temporalio/activity/info.rb +67 -0
  169. data/lib/temporalio/activity.rb +85 -0
  170. data/lib/temporalio/bridge/error.rb +8 -0
  171. data/lib/temporalio/bridge.rb +14 -0
  172. data/lib/{temporal → temporalio}/client/implementation.rb +49 -48
  173. data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
  174. data/lib/{temporal → temporalio}/client.rb +19 -32
  175. data/lib/{temporal → temporalio}/connection.rb +238 -223
  176. data/lib/{temporal → temporalio}/data_converter.rb +76 -35
  177. data/lib/{temporal → temporalio}/error/failure.rb +6 -6
  178. data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
  179. data/lib/{temporal → temporalio}/errors.rb +19 -1
  180. data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
  181. data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
  182. data/lib/temporalio/failure_converter.rb +7 -0
  183. data/lib/{temporal → temporalio}/interceptor/chain.rb +2 -1
  184. data/lib/{temporal → temporalio}/interceptor/client.rb +22 -1
  185. data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
  186. data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
  187. data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
  188. data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
  189. data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
  190. data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
  191. data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
  192. data/lib/temporalio/payload_converter.rb +14 -0
  193. data/lib/{temporal → temporalio}/retry_policy.rb +4 -4
  194. data/lib/{temporal → temporalio}/retry_state.rb +1 -1
  195. data/lib/temporalio/runtime.rb +25 -0
  196. data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
  197. data/lib/temporalio/version.rb +3 -0
  198. data/lib/temporalio/worker/activity_runner.rb +92 -0
  199. data/lib/temporalio/worker/activity_worker.rb +138 -0
  200. data/lib/temporalio/worker/reactor.rb +46 -0
  201. data/lib/temporalio/worker/runner.rb +63 -0
  202. data/lib/temporalio/worker/sync_worker.rb +88 -0
  203. data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
  204. data/lib/temporalio/worker.rb +198 -0
  205. data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
  206. data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
  207. data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
  208. data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
  209. data/lib/temporalio.rb +12 -3
  210. data/temporalio.gemspec +7 -3
  211. metadata +79 -56
  212. data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
  213. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
  214. data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
  215. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
  216. data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
  217. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
  218. data/bridge/sdk-core/core/src/log_export.rs +0 -62
  219. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
  220. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
  221. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
  222. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
  223. data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
  224. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
  225. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
  226. data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -26
  227. data/lib/temporal/bridge.rb +0 -14
  228. data/lib/temporal/failure_converter.rb +0 -8
  229. data/lib/temporal/payload_converter.rb +0 -14
  230. data/lib/temporal/runtime.rb +0 -22
  231. data/lib/temporal/version.rb +0 -3
  232. data/lib/temporal.rb +0 -8
@@ -1,211 +0,0 @@
1
- use log::LevelFilter;
2
- use std::{net::SocketAddr, str::FromStr};
3
- use temporal_sdk_core::{
4
- Logger, MetricsExporter, OtelCollectorOptions, TelemetryOptionsBuilder, TraceExporter, Url,
5
- };
6
- use temporal_sdk_core_protos::coresdk::bridge;
7
-
8
- // Present for try-from only
9
- pub struct InitTelemetryRequest(pub bridge::InitTelemetryRequest);
10
-
11
- impl TryFrom<InitTelemetryRequest> for temporal_sdk_core::TelemetryOptions {
12
- type Error = String;
13
-
14
- fn try_from(InitTelemetryRequest(req): InitTelemetryRequest) -> Result<Self, Self::Error> {
15
- let mut telemetry_opts = TelemetryOptionsBuilder::default();
16
- telemetry_opts.tracing_filter(req.tracing_filter.clone());
17
- match req.logging {
18
- None => {}
19
- Some(bridge::init_telemetry_request::Logging::Console(_)) => {
20
- telemetry_opts.logging(Logger::Console);
21
- }
22
- Some(bridge::init_telemetry_request::Logging::Forward(
23
- bridge::init_telemetry_request::ForwardLoggerOptions { level },
24
- )) => {
25
- if let Some(level) = bridge::LogLevel::from_i32(level) {
26
- let level = match level {
27
- bridge::LogLevel::Unspecified => {
28
- return Err("Must specify log level".to_string())
29
- }
30
- bridge::LogLevel::Off => LevelFilter::Off,
31
- bridge::LogLevel::Error => LevelFilter::Error,
32
- bridge::LogLevel::Warn => LevelFilter::Warn,
33
- bridge::LogLevel::Info => LevelFilter::Info,
34
- bridge::LogLevel::Debug => LevelFilter::Debug,
35
- bridge::LogLevel::Trace => LevelFilter::Trace,
36
- };
37
- telemetry_opts.logging(Logger::Forward(level));
38
- } else {
39
- return Err(format!("Unknown LogLevel: {}", level));
40
- }
41
- }
42
- }
43
- match req.metrics {
44
- None => {}
45
- Some(bridge::init_telemetry_request::Metrics::Prometheus(
46
- bridge::init_telemetry_request::PrometheusOptions {
47
- export_bind_address,
48
- },
49
- )) => {
50
- telemetry_opts.metrics(MetricsExporter::Prometheus(
51
- SocketAddr::from_str(&export_bind_address)
52
- .map_err(|err| format!("invalid Prometheus address: {}", err))?,
53
- ));
54
- }
55
- Some(bridge::init_telemetry_request::Metrics::OtelMetrics(
56
- bridge::init_telemetry_request::OtelCollectorOptions { url, headers },
57
- )) => {
58
- telemetry_opts.metrics(MetricsExporter::Otel(OtelCollectorOptions {
59
- url: Url::parse(&url).map_err(|err| {
60
- format!("invalid OpenTelemetry collector URL for metrics: {}", err)
61
- })?,
62
- headers,
63
- }));
64
- }
65
- }
66
- match req.tracing {
67
- None => {}
68
- Some(bridge::init_telemetry_request::Tracing::OtelTracing(
69
- bridge::init_telemetry_request::OtelCollectorOptions { url, headers },
70
- )) => {
71
- telemetry_opts.tracing(TraceExporter::Otel(OtelCollectorOptions {
72
- url: Url::parse(&url).map_err(|err| {
73
- format!("invalid OpenTelemetry collector URL for tracing: {}", err)
74
- })?,
75
- headers,
76
- }));
77
- }
78
- }
79
-
80
- telemetry_opts
81
- .build()
82
- .map_err(|err| format!("invalid telemetry options: {}", err))
83
- }
84
- }
85
-
86
- pub struct ClientOptions(pub bridge::CreateClientRequest);
87
-
88
- impl TryFrom<ClientOptions> for temporal_sdk_core::ClientOptions {
89
- type Error = String;
90
-
91
- fn try_from(ClientOptions(req): ClientOptions) -> Result<Self, Self::Error> {
92
- let mut client_opts = temporal_sdk_core::ClientOptionsBuilder::default();
93
- if !req.target_url.is_empty() {
94
- client_opts.target_url(
95
- temporal_sdk_core::Url::parse(&req.target_url)
96
- .map_err(|err| format!("invalid target URL: {}", err))?,
97
- );
98
- }
99
- if !req.client_name.is_empty() {
100
- client_opts.client_name(req.client_name);
101
- }
102
- if !req.client_version.is_empty() {
103
- client_opts.client_version(req.client_version);
104
- }
105
- if !req.identity.is_empty() {
106
- client_opts.identity(req.identity);
107
- }
108
- if let Some(req_tls_config) = req.tls_config {
109
- let mut tls_config = temporal_sdk_core::TlsConfig::default();
110
- if !req_tls_config.server_root_ca_cert.is_empty() {
111
- tls_config.server_root_ca_cert = Some(req_tls_config.server_root_ca_cert);
112
- }
113
- if !req_tls_config.domain.is_empty() {
114
- tls_config.domain = Some(req_tls_config.domain);
115
- }
116
- if !req_tls_config.client_cert.is_empty()
117
- || !req_tls_config.client_private_key.is_empty()
118
- {
119
- tls_config.client_tls_config = Some(temporal_sdk_core::ClientTlsConfig {
120
- client_cert: req_tls_config.client_cert,
121
- client_private_key: req_tls_config.client_private_key,
122
- })
123
- }
124
- client_opts.tls_cfg(tls_config);
125
- }
126
- if let Some(req_retry_config) = req.retry_config {
127
- let mut retry_config = temporal_sdk_core::RetryConfig::default();
128
- if let Some(v) = req_retry_config.initial_interval {
129
- retry_config.initial_interval =
130
- v.try_into().map_err(|_| "invalid initial interval")?;
131
- }
132
- if let Some(v) = req_retry_config.randomization_factor {
133
- retry_config.randomization_factor = v;
134
- }
135
- if let Some(v) = req_retry_config.multiplier {
136
- retry_config.multiplier = v;
137
- }
138
- if let Some(v) = req_retry_config.max_interval {
139
- retry_config.max_interval = v.try_into().map_err(|_| "invalid max interval")?;
140
- }
141
- if let Some(v) = req_retry_config.max_elapsed_time {
142
- retry_config.max_elapsed_time =
143
- Some(v.try_into().map_err(|_| "invalid max elapsed time")?);
144
- }
145
- if let Some(v) = req_retry_config.max_retries {
146
- retry_config.max_retries = v as usize;
147
- }
148
- client_opts.retry_config(retry_config);
149
- }
150
- client_opts
151
- .build()
152
- .map_err(|err| format!("invalid client options: {}", err))
153
- }
154
- }
155
-
156
- // Present for try-from only
157
- pub struct WorkerConfig(pub bridge::CreateWorkerRequest);
158
-
159
- impl TryFrom<WorkerConfig> for temporal_sdk_core_api::worker::WorkerConfig {
160
- type Error = String;
161
-
162
- fn try_from(WorkerConfig(req): WorkerConfig) -> Result<Self, Self::Error> {
163
- let mut config = temporal_sdk_core_api::worker::WorkerConfigBuilder::default();
164
- if !req.task_queue.is_empty() {
165
- config.task_queue(req.task_queue);
166
- }
167
- if let Some(v) = req.max_cached_workflows {
168
- config.max_cached_workflows(v as usize);
169
- }
170
- if let Some(v) = req.max_outstanding_workflow_tasks {
171
- config.max_outstanding_workflow_tasks(v as usize);
172
- }
173
- if let Some(v) = req.max_outstanding_activities {
174
- config.max_outstanding_activities(v as usize);
175
- }
176
- if let Some(v) = req.max_outstanding_local_activities {
177
- config.max_outstanding_local_activities(v as usize);
178
- }
179
- if let Some(v) = req.max_concurrent_wft_polls {
180
- config.max_concurrent_wft_polls(v as usize);
181
- }
182
- if let Some(v) = req.nonsticky_to_sticky_poll_ratio {
183
- config.nonsticky_to_sticky_poll_ratio(v);
184
- }
185
- if let Some(v) = req.max_concurrent_at_polls {
186
- config.max_concurrent_at_polls(v as usize);
187
- }
188
- config.no_remote_activities(req.no_remote_activities);
189
- if let Some(v) = req.sticky_queue_schedule_to_start_timeout {
190
- let v: std::time::Duration = v
191
- .try_into()
192
- .map_err(|_| "invalid sticky queue schedule to start timeout".to_string())?;
193
- config.sticky_queue_schedule_to_start_timeout(v);
194
- }
195
- if let Some(v) = req.max_heartbeat_throttle_interval {
196
- let v: std::time::Duration = v
197
- .try_into()
198
- .map_err(|_| "invalid max heartbeat throttle interval".to_string())?;
199
- config.max_heartbeat_throttle_interval(v);
200
- }
201
- if let Some(v) = req.default_heartbeat_throttle_interval {
202
- let v: std::time::Duration = v
203
- .try_into()
204
- .map_err(|_| "invalid default heartbeat throttle interval".to_string())?;
205
- config.default_heartbeat_throttle_interval(v);
206
- }
207
- config
208
- .build()
209
- .map_err(|err| format!("invalid request: {}", err))
210
- }
211
- }
@@ -1,62 +0,0 @@
1
- use log::{LevelFilter, Log, Metadata, Record};
2
- use ringbuf::{Consumer, Producer, RingBuffer};
3
- use std::{sync::Mutex, time::SystemTime};
4
- use temporal_sdk_core_api::CoreLog;
5
-
6
- pub(crate) struct CoreExportLogger {
7
- logs_in: Mutex<Producer<CoreLog>>,
8
- logs_out: Mutex<Consumer<CoreLog>>,
9
- level_filter: LevelFilter,
10
- }
11
-
12
- impl CoreExportLogger {
13
- pub(crate) fn new(level: LevelFilter) -> Self {
14
- let (lin, lout) = RingBuffer::new(2048).split();
15
- Self {
16
- logs_in: Mutex::new(lin),
17
- logs_out: Mutex::new(lout),
18
- level_filter: level,
19
- }
20
- }
21
-
22
- pub(crate) fn drain(&self) -> Vec<CoreLog> {
23
- let mut lout = self
24
- .logs_out
25
- .lock()
26
- .expect("Logging output mutex must be acquired");
27
- let mut retme = Vec::with_capacity(lout.len());
28
- lout.pop_each(
29
- |el| {
30
- retme.push(el);
31
- true
32
- },
33
- None,
34
- );
35
- retme
36
- }
37
- }
38
-
39
- impl Log for CoreExportLogger {
40
- fn enabled(&self, metadata: &Metadata) -> bool {
41
- // Never forward logging from other crates
42
- if !metadata.target().contains("temporal_sdk_core") {
43
- return false;
44
- }
45
- metadata.level() <= self.level_filter
46
- }
47
-
48
- fn log(&self, record: &Record) {
49
- let clog = CoreLog {
50
- message: format!("[{}] {}", record.target(), record.args()),
51
- timestamp: SystemTime::now(),
52
- level: record.level(),
53
- };
54
- let _ = self
55
- .logs_in
56
- .lock()
57
- .expect("Logging mutex must be acquired")
58
- .push(clog);
59
- }
60
-
61
- fn flush(&self) {}
62
- }
@@ -1,127 +0,0 @@
1
- use rustfsm::{fsm, TransitionResult};
2
-
3
- fsm! {
4
- pub(super) name MutableSideEffectMachine; command MutableSideEffectCommand; error MutableSideEffectMachineError;
5
-
6
- Created --(CheckExecutionState, on_check_execution_state) --> Replaying;
7
- Created --(CheckExecutionState, on_check_execution_state) --> Executing;
8
-
9
- Executing --(Schedule, on_schedule) --> MarkerCommandCreated;
10
- Executing --(Schedule, on_schedule) --> Skipped;
11
-
12
- MarkerCommandCreated --(CommandRecordMarker, on_command_record_marker) --> ResultNotified;
13
-
14
- MarkerCommandCreatedReplaying --(CommandRecordMarker) --> ResultNotifiedReplaying;
15
-
16
- Replaying --(Schedule, on_schedule) --> MarkerCommandCreatedReplaying;
17
-
18
- ResultNotified --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
19
-
20
- ResultNotifiedReplaying --(NonMatchingEvent, on_non_matching_event) --> SkippedNotified;
21
- ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
22
- ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> SkippedNotified;
23
-
24
- Skipped --(CommandRecordMarker, on_command_record_marker) --> SkippedNotified;
25
- }
26
-
27
- #[derive(thiserror::Error, Debug)]
28
- pub(super) enum MutableSideEffectMachineError {}
29
-
30
- pub(super) enum MutableSideEffectCommand {}
31
-
32
- #[derive(Default, Clone)]
33
- pub(super) struct Created {}
34
-
35
- impl Created {
36
- pub(super) fn on_check_execution_state(
37
- self,
38
- ) -> MutableSideEffectMachineTransition<ReplayingOrExecuting> {
39
- unimplemented!()
40
- }
41
- }
42
-
43
- #[derive(Default, Clone)]
44
- pub(super) struct Executing {}
45
-
46
- impl Executing {
47
- pub(super) fn on_schedule(
48
- self,
49
- ) -> MutableSideEffectMachineTransition<MarkerCommandCreatedOrSkipped> {
50
- unimplemented!()
51
- }
52
- }
53
-
54
- #[derive(Default, Clone)]
55
- pub(super) struct MarkerCommandCreated {}
56
-
57
- impl MarkerCommandCreated {
58
- pub(super) fn on_command_record_marker(
59
- self,
60
- ) -> MutableSideEffectMachineTransition<ResultNotified> {
61
- unimplemented!()
62
- }
63
- }
64
-
65
- #[derive(Default, Clone)]
66
- pub(super) struct MarkerCommandCreatedReplaying {}
67
-
68
- #[derive(Default, Clone)]
69
- pub(super) struct MarkerCommandRecorded {}
70
-
71
- #[derive(Default, Clone)]
72
- pub(super) struct Replaying {}
73
-
74
- impl Replaying {
75
- pub(super) fn on_schedule(
76
- self,
77
- ) -> MutableSideEffectMachineTransition<MarkerCommandCreatedReplaying> {
78
- unimplemented!()
79
- }
80
- }
81
-
82
- #[derive(Default, Clone)]
83
- pub(super) struct ResultNotified {}
84
-
85
- impl ResultNotified {
86
- pub(super) fn on_marker_recorded(
87
- self,
88
- ) -> MutableSideEffectMachineTransition<MarkerCommandRecorded> {
89
- unimplemented!()
90
- }
91
- }
92
-
93
- #[derive(Default, Clone)]
94
- pub(super) struct ResultNotifiedReplaying {}
95
-
96
- impl ResultNotifiedReplaying {
97
- pub(super) fn on_non_matching_event(
98
- self,
99
- ) -> MutableSideEffectMachineTransition<SkippedNotified> {
100
- unimplemented!()
101
- }
102
- pub(super) fn on_marker_recorded(
103
- self,
104
- ) -> MutableSideEffectMachineTransition<MarkerCommandRecordedOrSkippedNotified> {
105
- unimplemented!()
106
- }
107
- }
108
-
109
- impl From<MarkerCommandCreatedReplaying> for ResultNotifiedReplaying {
110
- fn from(_: MarkerCommandCreatedReplaying) -> Self {
111
- Self::default()
112
- }
113
- }
114
-
115
- #[derive(Default, Clone)]
116
- pub(super) struct Skipped {}
117
-
118
- impl Skipped {
119
- pub(super) fn on_command_record_marker(
120
- self,
121
- ) -> MutableSideEffectMachineTransition<SkippedNotified> {
122
- unimplemented!()
123
- }
124
- }
125
-
126
- #[derive(Default, Clone)]
127
- pub(super) struct SkippedNotified {}
@@ -1,71 +0,0 @@
1
- use rustfsm::{fsm, TransitionResult};
2
-
3
- fsm! {
4
- pub(super) name SideEffectMachine; command SideEffectCommand; error SideEffectMachineError;
5
-
6
- Created --(Schedule, on_schedule) --> MarkerCommandCreated;
7
- Created --(Schedule, on_schedule) --> MarkerCommandCreatedReplaying;
8
-
9
- MarkerCommandCreated --(CommandRecordMarker, on_command_record_marker) --> ResultNotified;
10
-
11
- MarkerCommandCreatedReplaying --(CommandRecordMarker) --> ResultNotifiedReplaying;
12
-
13
- ResultNotified --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
14
-
15
- ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
16
- }
17
-
18
- #[derive(thiserror::Error, Debug)]
19
- pub(super) enum SideEffectMachineError {}
20
-
21
- pub(super) enum SideEffectCommand {}
22
-
23
- #[derive(Default, Clone)]
24
- pub(super) struct Created {}
25
-
26
- impl Created {
27
- pub(super) fn on_schedule(
28
- self,
29
- ) -> SideEffectMachineTransition<MarkerCommandCreatedOrMarkerCommandCreatedReplaying> {
30
- unimplemented!()
31
- }
32
- }
33
-
34
- #[derive(Default, Clone)]
35
- pub(super) struct MarkerCommandCreated {}
36
-
37
- impl MarkerCommandCreated {
38
- pub(super) fn on_command_record_marker(self) -> SideEffectMachineTransition<ResultNotified> {
39
- unimplemented!()
40
- }
41
- }
42
-
43
- #[derive(Default, Clone)]
44
- pub(super) struct MarkerCommandCreatedReplaying {}
45
-
46
- #[derive(Default, Clone)]
47
- pub(super) struct MarkerCommandRecorded {}
48
-
49
- #[derive(Default, Clone)]
50
- pub(super) struct ResultNotified {}
51
-
52
- impl ResultNotified {
53
- pub(super) fn on_marker_recorded(self) -> SideEffectMachineTransition<MarkerCommandRecorded> {
54
- unimplemented!()
55
- }
56
- }
57
-
58
- #[derive(Default, Clone)]
59
- pub(super) struct ResultNotifiedReplaying {}
60
-
61
- impl ResultNotifiedReplaying {
62
- pub(super) fn on_marker_recorded(self) -> SideEffectMachineTransition<MarkerCommandRecorded> {
63
- unimplemented!()
64
- }
65
- }
66
-
67
- impl From<MarkerCommandCreatedReplaying> for ResultNotifiedReplaying {
68
- fn from(_: MarkerCommandCreatedReplaying) -> Self {
69
- Self::default()
70
- }
71
- }
@@ -1,83 +0,0 @@
1
- // The MIT License
2
- //
3
- // Copyright (c) 2022 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.cluster.v1;
26
-
27
- option go_package = "go.temporal.io/api/cluster/v1;cluster";
28
- option java_package = "io.temporal.api.cluster.v1";
29
- option java_multiple_files = true;
30
- option java_outer_classname = "MessageProto";
31
- option ruby_package = "Temporal::Api::Cluster::V1";
32
- option csharp_namespace = "Temporal.Api.Cluster.V1";
33
-
34
- import "dependencies/gogoproto/gogo.proto";
35
- import "google/protobuf/timestamp.proto";
36
-
37
- import "temporal/api/enums/v1/cluster.proto";
38
- import "temporal/api/enums/v1/common.proto";
39
- import "temporal/api/version/v1/message.proto";
40
-
41
- // data column
42
- message ClusterMetadata {
43
- string cluster = 1;
44
- int32 history_shard_count = 2;
45
- string cluster_id = 3;
46
- temporal.api.version.v1.VersionInfo version_info = 4;
47
- map<string,IndexSearchAttributes> index_search_attributes = 5;
48
- string cluster_address = 6;
49
- int64 failover_version_increment = 7;
50
- int64 initial_failover_version = 8;
51
- bool is_global_namespace_enabled = 9;
52
- bool is_connection_enabled = 10;
53
- }
54
-
55
- message IndexSearchAttributes{
56
- map<string,temporal.api.enums.v1.IndexedValueType> custom_search_attributes = 1;
57
- }
58
-
59
- message HostInfo {
60
- string identity = 1;
61
- }
62
-
63
- message RingInfo {
64
- string role = 1;
65
- int32 member_count = 2;
66
- repeated HostInfo members = 3;
67
- }
68
-
69
- message MembershipInfo {
70
- HostInfo current_host = 1;
71
- repeated string reachable_members = 2;
72
- repeated RingInfo rings = 3;
73
- }
74
-
75
- message ClusterMember {
76
- temporal.api.enums.v1.ClusterMemberRole role = 1;
77
- string host_id = 2;
78
- string rpc_address = 3;
79
- int32 rpc_port = 4;
80
- google.protobuf.Timestamp session_start_time = 5 [(gogoproto.stdtime) = true];
81
- google.protobuf.Timestamp last_heartbit_time = 6 [(gogoproto.stdtime) = true];
82
- google.protobuf.Timestamp record_expiry_time = 7 [(gogoproto.stdtime) = true];
83
- }