temporalio 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +175 -4
- data/bridge/Cargo.lock +44 -21
- data/bridge/Cargo.toml +1 -0
- data/bridge/sdk-core/Cargo.toml +1 -1
- data/bridge/sdk-core/README.md +1 -4
- data/bridge/sdk-core/client/Cargo.toml +1 -1
- data/bridge/sdk-core/client/src/lib.rs +12 -20
- data/bridge/sdk-core/client/src/raw.rs +9 -8
- data/bridge/sdk-core/client/src/retry.rs +100 -23
- data/bridge/sdk-core/core/Cargo.toml +7 -7
- data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
- data/bridge/sdk-core/core/src/abstractions.rs +22 -22
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +146 -43
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +419 -9
- data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -89
- data/bridge/sdk-core/core/src/core_tests/workers.rs +2 -2
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +47 -27
- data/bridge/sdk-core/core/src/lib.rs +139 -32
- data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
- data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +184 -139
- data/bridge/sdk-core/core/src/telemetry/mod.rs +310 -315
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +4 -3
- data/bridge/sdk-core/core/src/test_help/mod.rs +23 -9
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +12 -6
- data/bridge/sdk-core/core/src/worker/activities.rs +40 -23
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +1 -1
- data/bridge/sdk-core/core/src/worker/client.rs +30 -4
- data/bridge/sdk-core/core/src/worker/mod.rs +23 -19
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +10 -19
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +99 -25
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +3 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +2 -6
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +24 -22
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +12 -38
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +178 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +8 -2
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +1 -1
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +233 -217
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +1 -6
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +4 -4
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +13 -5
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +86 -29
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +2 -2
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +56 -11
- data/bridge/sdk-core/core-api/Cargo.toml +4 -3
- data/bridge/sdk-core/core-api/src/lib.rs +1 -43
- data/bridge/sdk-core/core-api/src/telemetry.rs +147 -0
- data/bridge/sdk-core/core-api/src/worker.rs +13 -0
- data/bridge/sdk-core/etc/deps.svg +115 -140
- data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
- data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
- data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
- data/bridge/sdk-core/protos/api_upstream/{temporal/api/update/v1/message.proto → build/tools.go} +6 -23
- data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +20 -19
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -4
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +5 -3
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +23 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/{cluster.proto → interaction_type.proto} +10 -11
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +2 -13
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +26 -19
- data/bridge/sdk-core/protos/api_upstream/temporal/api/interaction/v1/message.proto +87 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +21 -61
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +60 -16
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +17 -3
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +2 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +8 -1
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
- data/bridge/sdk-core/sdk/Cargo.toml +2 -2
- data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
- data/bridge/sdk-core/sdk/src/lib.rs +7 -5
- data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
- data/bridge/sdk-core/sdk/src/workflow_future.rs +3 -7
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +1 -1
- data/bridge/sdk-core/sdk-core-protos/build.rs +0 -1
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +65 -18
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +22 -22
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +104 -44
- data/bridge/sdk-core/test-utils/Cargo.toml +2 -1
- data/bridge/sdk-core/test-utils/src/lib.rs +81 -29
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +5 -2
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +37 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -13
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +167 -13
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +53 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +106 -20
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +18 -8
- data/bridge/sdk-core/tests/main.rs +6 -4
- data/bridge/src/connection.rs +81 -62
- data/bridge/src/lib.rs +92 -33
- data/bridge/src/runtime.rs +9 -2
- data/bridge/src/worker.rs +53 -2
- data/lib/bridge.so +0 -0
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
- data/lib/gen/temporal/api/command/v1/message_pb.rb +17 -9
- data/lib/gen/temporal/api/common/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -1
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +3 -2
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +7 -1
- data/lib/gen/temporal/api/enums/v1/interaction_type_pb.rb +25 -0
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +1 -6
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/history/v1/message_pb.rb +19 -18
- data/lib/gen/temporal/api/interaction/v1/message_pb.rb +49 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +11 -51
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
- data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +27 -10
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +1 -0
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +5 -1
- data/lib/temporalio/activity/context.rb +97 -0
- data/lib/temporalio/activity/info.rb +67 -0
- data/lib/temporalio/activity.rb +85 -0
- data/lib/temporalio/bridge/error.rb +8 -0
- data/lib/temporalio/bridge.rb +14 -0
- data/lib/{temporal → temporalio}/client/implementation.rb +49 -48
- data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
- data/lib/{temporal → temporalio}/client.rb +19 -32
- data/lib/{temporal → temporalio}/connection.rb +238 -223
- data/lib/{temporal → temporalio}/data_converter.rb +76 -35
- data/lib/{temporal → temporalio}/error/failure.rb +6 -6
- data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
- data/lib/{temporal → temporalio}/errors.rb +19 -1
- data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
- data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
- data/lib/temporalio/failure_converter.rb +7 -0
- data/lib/{temporal → temporalio}/interceptor/chain.rb +2 -1
- data/lib/{temporal → temporalio}/interceptor/client.rb +22 -1
- data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
- data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
- data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
- data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
- data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
- data/lib/temporalio/payload_converter.rb +14 -0
- data/lib/{temporal → temporalio}/retry_policy.rb +4 -4
- data/lib/{temporal → temporalio}/retry_state.rb +1 -1
- data/lib/temporalio/runtime.rb +25 -0
- data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
- data/lib/temporalio/version.rb +3 -0
- data/lib/temporalio/worker/activity_runner.rb +92 -0
- data/lib/temporalio/worker/activity_worker.rb +138 -0
- data/lib/temporalio/worker/reactor.rb +46 -0
- data/lib/temporalio/worker/runner.rb +63 -0
- data/lib/temporalio/worker/sync_worker.rb +88 -0
- data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
- data/lib/temporalio/worker.rb +198 -0
- data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
- data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
- data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
- data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
- data/lib/temporalio.rb +12 -3
- data/temporalio.gemspec +7 -3
- metadata +79 -56
- data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
- data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
- data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
- data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
- data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
- data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
- data/bridge/sdk-core/core/src/log_export.rs +0 -62
- data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
- data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
- data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
- data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
- data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
- data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
- data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
- data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -26
- data/lib/temporal/bridge.rb +0 -14
- data/lib/temporal/failure_converter.rb +0 -8
- data/lib/temporal/payload_converter.rb +0 -14
- data/lib/temporal/runtime.rb +0 -22
- data/lib/temporal/version.rb +0 -3
- 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
|
-
}
|