@temporalio/core-bridge 1.14.2-canary-release-testing.0 → 1.16.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.
- package/Cargo.lock +794 -650
- package/bridge-macros/src/derive_tryintojs.rs +40 -0
- package/lib/native.d.ts +24 -3
- package/package.json +4 -4
- package/releases/aarch64-apple-darwin/index.node +0 -0
- package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
- package/releases/x86_64-apple-darwin/index.node +0 -0
- package/releases/x86_64-pc-windows-msvc/index.node +0 -0
- package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
- package/sdk-core/.github/workflows/per-pr.yml +6 -6
- package/sdk-core/AGENTS.md +42 -31
- package/sdk-core/Cargo.toml +4 -1
- package/sdk-core/README.md +19 -13
- package/sdk-core/crates/client/Cargo.toml +4 -0
- package/sdk-core/crates/client/README.md +139 -0
- package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
- package/sdk-core/crates/client/src/callback_based.rs +7 -0
- package/sdk-core/crates/client/src/errors.rs +294 -0
- package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +370 -159
- package/sdk-core/crates/client/src/lib.rs +920 -1326
- package/sdk-core/crates/client/src/metrics.rs +24 -33
- package/sdk-core/crates/client/src/options_structs.rs +457 -0
- package/sdk-core/crates/client/src/replaceable.rs +5 -4
- package/sdk-core/crates/client/src/request_extensions.rs +8 -9
- package/sdk-core/crates/client/src/retry.rs +99 -54
- package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +104 -29
- package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
- package/sdk-core/crates/common/Cargo.toml +62 -3
- package/sdk-core/crates/common/build.rs +742 -12
- package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
- package/sdk-core/crates/common/protos/api_upstream/.github/workflows/create-release.yml +0 -5
- package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
- package/sdk-core/crates/common/protos/api_upstream/README.md +8 -0
- package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
- package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +3329 -2647
- package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +2734 -708
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/activity/v1/message.proto +155 -3
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/command/v1/message.proto +26 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/common/v1/message.proto +8 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +27 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/activity.proto +81 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/event_type.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +15 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +63 -15
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/errordetails/v1/message.proto +8 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +111 -17
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +21 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +20 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/schedule/v1/message.proto +2 -2
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/worker/v1/message.proto +4 -7
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflow/v1/message.proto +80 -22
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +347 -23
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +242 -43
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/core_interface.proto +15 -0
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +9 -2
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +8 -0
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +22 -5
- package/sdk-core/crates/common/src/activity_definition.rs +20 -0
- package/sdk-core/crates/common/src/data_converters.rs +770 -0
- package/sdk-core/crates/common/src/envconfig.rs +5 -0
- package/sdk-core/crates/common/src/lib.rs +15 -211
- package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
- package/sdk-core/crates/common/src/priority.rs +110 -0
- package/sdk-core/crates/common/src/protos/canned_histories.rs +19 -0
- package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
- package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
- package/sdk-core/crates/common/src/protos/mod.rs +134 -27
- package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
- package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +11 -16
- package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
- package/sdk-core/crates/common/src/telemetry/metrics.rs +272 -225
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
- package/sdk-core/crates/common/src/telemetry.rs +278 -19
- package/sdk-core/crates/common/src/worker.rs +68 -636
- package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
- package/sdk-core/crates/macros/Cargo.toml +5 -1
- package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
- package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
- package/sdk-core/crates/macros/src/lib.rs +138 -512
- package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
- package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
- package/sdk-core/crates/sdk/Cargo.toml +19 -6
- package/sdk-core/crates/sdk/README.md +415 -0
- package/sdk-core/crates/sdk/src/activities.rs +417 -0
- package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
- package/sdk-core/crates/sdk/src/lib.rs +759 -442
- package/sdk-core/crates/sdk/src/workflow_context/options.rs +64 -35
- package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
- package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
- package/sdk-core/crates/sdk/src/workflows.rs +711 -0
- package/sdk-core/crates/sdk-core/Cargo.toml +59 -65
- package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +45 -54
- package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
- package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
- package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
- package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +22 -21
- package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
- package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
- package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
- package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +647 -27
- package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +46 -41
- package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +13 -16
- package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
- package/sdk-core/crates/sdk-core/src/lib.rs +60 -123
- package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
- package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +411 -32
- package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
- package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
- package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +183 -198
- package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -281
- package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +35 -16
- package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
- package/sdk-core/crates/sdk-core/src/worker/activities/activity_heartbeat_manager.rs +1 -0
- package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
- package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
- package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +11 -5
- package/sdk-core/crates/sdk-core/src/worker/client.rs +104 -86
- package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +10 -14
- package/sdk-core/crates/sdk-core/src/worker/mod.rs +1175 -241
- package/sdk-core/crates/sdk-core/src/worker/nexus.rs +150 -23
- package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
- package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
- package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +25 -27
- package/sdk-core/crates/sdk-core/src/worker/tuner.rs +64 -44
- package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
- package/sdk-core/crates/sdk-core/src/worker/workflow/machines/patch_state_machine.rs +5 -8
- package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
- package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +28 -4
- package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +20 -41
- package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +50 -9
- package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
- package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
- package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
- package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
- package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
- package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
- package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
- package/sdk-core/crates/sdk-core/tests/common/mod.rs +281 -236
- package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
- package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +9 -14
- package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -66
- package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +306 -268
- package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
- package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +37 -38
- package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +49 -40
- package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +447 -300
- package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
- package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +157 -157
- package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
- package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -463
- package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +389 -265
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +250 -185
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -49
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +437 -327
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -58
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -30
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -251
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +110 -46
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -149
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -32
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1040
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -43
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +402 -245
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +343 -207
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +155 -140
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -113
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -44
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -48
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -56
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +365 -242
- package/sdk-core/crates/sdk-core/tests/main.rs +22 -16
- package/sdk-core/crates/sdk-core/tests/manual_tests.rs +233 -187
- package/sdk-core/crates/sdk-core/tests/runner.rs +4 -6
- package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +73 -27
- package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
- package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +8 -1
- package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +37 -26
- package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +180 -87
- package/sdk-core/crates/sdk-core-c-bridge/src/lib.rs +89 -5
- package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +10 -16
- package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +59 -67
- package/sdk-core/crates/sdk-core-c-bridge/src/testing.rs +10 -10
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +57 -22
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +108 -12
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +9 -52
- package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +74 -91
- package/sdk-core/rustfmt.toml +2 -1
- package/src/client.rs +206 -289
- package/src/helpers/try_into_js.rs +88 -2
- package/src/metrics.rs +277 -35
- package/src/runtime.rs +94 -45
- package/src/testing.rs +9 -16
- package/src/worker.rs +86 -68
- package/ts/native.ts +39 -3
- package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
- package/sdk-core/crates/common/src/errors.rs +0 -85
- package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
- package/sdk-core/crates/macros/LICENSE.txt +0 -21
- package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
- package/sdk-core/crates/sdk/src/app_data.rs +0 -37
- package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
package/src/runtime.rs
CHANGED
|
@@ -9,10 +9,8 @@ use temporalio_common::telemetry::{
|
|
|
9
9
|
CoreLog, OtelCollectorOptions as CoreOtelCollectorOptions,
|
|
10
10
|
PrometheusExporterOptions as CorePrometheusExporterOptions, metrics::CoreMeter,
|
|
11
11
|
};
|
|
12
|
-
use
|
|
13
|
-
|
|
14
|
-
telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter},
|
|
15
|
-
};
|
|
12
|
+
use temporalio_common::telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter};
|
|
13
|
+
use temporalio_sdk_core::{CoreRuntime, TokioRuntimeBuilder};
|
|
16
14
|
|
|
17
15
|
use bridge_macros::js_function;
|
|
18
16
|
use tokio_stream::StreamExt as _;
|
|
@@ -20,6 +18,7 @@ use tokio_stream::StreamExt as _;
|
|
|
20
18
|
use crate::{
|
|
21
19
|
helpers::{handles::MutableFinalize, *},
|
|
22
20
|
logs::LogEntry,
|
|
21
|
+
metrics::{BufferedMetricUpdate, MetricsCallBuffer},
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
#[macro_export]
|
|
@@ -36,6 +35,10 @@ macro_rules! enter_sync {
|
|
|
36
35
|
pub fn init(cx: &mut neon::prelude::ModuleContext) -> neon::prelude::NeonResult<()> {
|
|
37
36
|
cx.export_function("newRuntime", runtime_new)?;
|
|
38
37
|
cx.export_function("runtimeShutdown", runtime_shutdown)?;
|
|
38
|
+
cx.export_function(
|
|
39
|
+
"runtimeRetrieveBufferedMetrics",
|
|
40
|
+
runtime_retrieve_buffered_metrics,
|
|
41
|
+
)?;
|
|
39
42
|
|
|
40
43
|
Ok(())
|
|
41
44
|
}
|
|
@@ -51,6 +54,9 @@ pub struct Runtime {
|
|
|
51
54
|
// For some unknown reason, the otel metrics exporter will go crazy on shutdown in some
|
|
52
55
|
// scenarios if we don't hold on to the `CoreOtelMeter` till the `Runtime` finally gets dropped.
|
|
53
56
|
_otel_metrics_exporter: Option<Arc<dyn CoreMeter + 'static>>,
|
|
57
|
+
|
|
58
|
+
// Buffered metrics call buffer, if buffered metrics are enabled
|
|
59
|
+
pub(crate) metrics_call_buffer: Option<MetricsCallBuffer>,
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
/// Initialize Core global telemetry and create the tokio runtime required to run Core.
|
|
@@ -63,41 +69,58 @@ pub fn runtime_new(
|
|
|
63
69
|
bridge_options.try_into()?;
|
|
64
70
|
|
|
65
71
|
// Create core runtime which starts tokio multi-thread runtime
|
|
66
|
-
let runtime_options =
|
|
72
|
+
let runtime_options = temporalio_sdk_core::RuntimeOptions::builder()
|
|
67
73
|
.telemetry_options(telemetry_options)
|
|
68
74
|
.heartbeat_interval(worker_heartbeat_interval_millis.map(Duration::from_millis))
|
|
69
75
|
.build()
|
|
70
|
-
.
|
|
76
|
+
.map_err(|err| BridgeError::TypeError {
|
|
77
|
+
message: format!("Failed to build runtime options: {err}"),
|
|
78
|
+
field: None,
|
|
79
|
+
})?;
|
|
71
80
|
let mut core_runtime = CoreRuntime::new(runtime_options, TokioRuntimeBuilder::default())
|
|
72
81
|
.context("Failed to initialize Core Runtime")?;
|
|
73
82
|
|
|
74
83
|
enter_sync!(core_runtime);
|
|
75
84
|
|
|
76
85
|
// Run the metrics exporter task, if needed. Created after Runtime since it needs Tokio handle
|
|
77
|
-
let (prom_metrics_exporter_task, otel_metrics_exporter) =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
86
|
+
let (prom_metrics_exporter_task, otel_metrics_exporter, metrics_call_buffer) =
|
|
87
|
+
match metrics_options {
|
|
88
|
+
Some(BridgeMetricsExporter::Prometheus(prom_opts)) => {
|
|
89
|
+
let exporter = start_prometheus_metric_exporter(prom_opts)
|
|
90
|
+
.context("Failed to start prometheus metrics exporter")?;
|
|
81
91
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
core_runtime
|
|
93
|
+
.telemetry_mut()
|
|
94
|
+
.attach_late_init_metrics(exporter.meter);
|
|
85
95
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
(Some(exporter.abort_handle), None, None)
|
|
97
|
+
}
|
|
98
|
+
Some(BridgeMetricsExporter::Otel(otel_opts)) => {
|
|
99
|
+
let exporter = build_otlp_metric_exporter(otel_opts)
|
|
100
|
+
.context("Failed to start OTel metrics exporter")?;
|
|
91
101
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
let exporter: Arc<dyn CoreMeter + 'static> = Arc::new(exporter);
|
|
103
|
+
core_runtime
|
|
104
|
+
.telemetry_mut()
|
|
105
|
+
.attach_late_init_metrics(exporter.clone());
|
|
96
106
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
107
|
+
(None, Some(exporter), None)
|
|
108
|
+
}
|
|
109
|
+
Some(BridgeMetricsExporter::Buffer {
|
|
110
|
+
max_buffer_size,
|
|
111
|
+
use_seconds_for_durations,
|
|
112
|
+
}) => {
|
|
113
|
+
let metrics_call_buffer =
|
|
114
|
+
MetricsCallBuffer::new(max_buffer_size, use_seconds_for_durations);
|
|
115
|
+
|
|
116
|
+
core_runtime
|
|
117
|
+
.telemetry_mut()
|
|
118
|
+
.attach_late_init_metrics(metrics_call_buffer.core_buffer.clone());
|
|
119
|
+
|
|
120
|
+
(None, None, Some(metrics_call_buffer))
|
|
121
|
+
}
|
|
122
|
+
None => (None, None, None),
|
|
123
|
+
};
|
|
101
124
|
|
|
102
125
|
// Run the log exporter task, if needed. Created after Runtime since it needs Tokio handle.
|
|
103
126
|
let log_exporter_task = if let BridgeLogExporter::Push { stream, receiver } = logging_options {
|
|
@@ -127,6 +150,7 @@ pub fn runtime_new(
|
|
|
127
150
|
log_exporter_task,
|
|
128
151
|
metrics_exporter_task: prom_metrics_exporter_task.map(Arc::new),
|
|
129
152
|
_otel_metrics_exporter: otel_metrics_exporter,
|
|
153
|
+
metrics_call_buffer,
|
|
130
154
|
}))
|
|
131
155
|
}
|
|
132
156
|
|
|
@@ -140,6 +164,24 @@ pub fn runtime_shutdown(runtime: OpaqueInboundHandle<Runtime>) -> BridgeResult<(
|
|
|
140
164
|
Ok(())
|
|
141
165
|
}
|
|
142
166
|
|
|
167
|
+
/// Retrieve buffered metrics from the runtime.
|
|
168
|
+
///
|
|
169
|
+
/// This function drains the metrics buffer and returns all metric updates that have been
|
|
170
|
+
/// accumulated since the last call to this function.
|
|
171
|
+
#[js_function]
|
|
172
|
+
pub fn runtime_retrieve_buffered_metrics(
|
|
173
|
+
runtime: OpaqueInboundHandle<Runtime>,
|
|
174
|
+
) -> BridgeResult<Vec<BufferedMetricUpdate>> {
|
|
175
|
+
let runtime = runtime.borrow()?;
|
|
176
|
+
let buffer = runtime.metrics_call_buffer.as_ref().ok_or_else(|| {
|
|
177
|
+
BridgeError::UnexpectedError(
|
|
178
|
+
"Attempting to retrieve buffered metrics of a runtime without buffer".into(),
|
|
179
|
+
)
|
|
180
|
+
})?;
|
|
181
|
+
|
|
182
|
+
Ok(buffer.retrieve())
|
|
183
|
+
}
|
|
184
|
+
|
|
143
185
|
/// Drop will handle the cleanup
|
|
144
186
|
impl MutableFinalize for Runtime {}
|
|
145
187
|
|
|
@@ -223,6 +265,10 @@ impl RuntimeExt for Arc<CoreRuntime> {
|
|
|
223
265
|
pub enum BridgeMetricsExporter {
|
|
224
266
|
Prometheus(CorePrometheusExporterOptions),
|
|
225
267
|
Otel(CoreOtelCollectorOptions),
|
|
268
|
+
Buffer {
|
|
269
|
+
max_buffer_size: usize,
|
|
270
|
+
use_seconds_for_durations: bool,
|
|
271
|
+
},
|
|
226
272
|
}
|
|
227
273
|
|
|
228
274
|
pub enum BridgeLogExporter {
|
|
@@ -238,17 +284,15 @@ pub enum BridgeLogExporter {
|
|
|
238
284
|
mod config {
|
|
239
285
|
use std::{collections::HashMap, net::SocketAddr, sync::Arc, time::Duration};
|
|
240
286
|
|
|
241
|
-
use anyhow::Context as _;
|
|
242
|
-
|
|
243
287
|
use neon::prelude::*;
|
|
288
|
+
use temporalio_common::telemetry::CoreLogStreamConsumer;
|
|
244
289
|
use temporalio_common::telemetry::{
|
|
245
290
|
HistogramBucketOverrides, Logger as CoreTelemetryLogger, MetricTemporality,
|
|
246
|
-
OtelCollectorOptions as CoreOtelCollectorOptions,
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
TelemetryOptionsBuilder,
|
|
291
|
+
OtelCollectorOptions as CoreOtelCollectorOptions, OtlpProtocol,
|
|
292
|
+
PrometheusExporterOptions as CorePrometheusExporterOptions,
|
|
293
|
+
TelemetryOptions as CoreTelemetryOptions,
|
|
250
294
|
};
|
|
251
|
-
use temporalio_sdk_core::
|
|
295
|
+
use temporalio_sdk_core::Url;
|
|
252
296
|
|
|
253
297
|
use bridge_macros::TryFromJs;
|
|
254
298
|
|
|
@@ -291,6 +335,7 @@ mod config {
|
|
|
291
335
|
pub(super) enum MetricsExporterOptions {
|
|
292
336
|
Prometheus(PrometheusMetricsExporterConfig),
|
|
293
337
|
Otel(OtelMetricsExporterConfig),
|
|
338
|
+
Buffer(BufferedMetricsExporterConfig),
|
|
294
339
|
}
|
|
295
340
|
|
|
296
341
|
#[derive(Debug, Clone, TryFromJs)]
|
|
@@ -315,6 +360,12 @@ mod config {
|
|
|
315
360
|
protocol: StringEncoded<OtlpProtocol>,
|
|
316
361
|
}
|
|
317
362
|
|
|
363
|
+
#[derive(Debug, Clone, TryFromJs)]
|
|
364
|
+
pub(super) struct BufferedMetricsExporterConfig {
|
|
365
|
+
max_buffer_size: usize,
|
|
366
|
+
use_seconds_for_durations: bool,
|
|
367
|
+
}
|
|
368
|
+
|
|
318
369
|
/// A private newtype so that we can implement `TryFromJs` on simple externally defined enums
|
|
319
370
|
#[derive(Debug, Clone)]
|
|
320
371
|
struct StringEncoded<T>(T);
|
|
@@ -360,13 +411,11 @@ mod config {
|
|
|
360
411
|
}
|
|
361
412
|
};
|
|
362
413
|
|
|
363
|
-
let
|
|
364
|
-
let telemetry_options = telemetry_options
|
|
414
|
+
let telemetry_options = CoreTelemetryOptions::builder()
|
|
365
415
|
.logging(telemetry_logger)
|
|
366
416
|
.metric_prefix(telemetry.metric_prefix)
|
|
367
417
|
.attach_service_name(telemetry.attach_service_name)
|
|
368
|
-
.build()
|
|
369
|
-
.context("Failed to build telemetry options")?;
|
|
418
|
+
.build();
|
|
370
419
|
|
|
371
420
|
let metrics_exporter = metrics_exporter
|
|
372
421
|
.map(std::convert::TryInto::try_into)
|
|
@@ -389,6 +438,10 @@ mod config {
|
|
|
389
438
|
Ok(super::BridgeMetricsExporter::Prometheus(prom.try_into()?))
|
|
390
439
|
}
|
|
391
440
|
Self::Otel(otel) => Ok(super::BridgeMetricsExporter::Otel(otel.try_into()?)),
|
|
441
|
+
Self::Buffer(buffered) => Ok(super::BridgeMetricsExporter::Buffer {
|
|
442
|
+
max_buffer_size: buffered.max_buffer_size,
|
|
443
|
+
use_seconds_for_durations: buffered.use_seconds_for_durations,
|
|
444
|
+
}),
|
|
392
445
|
}
|
|
393
446
|
}
|
|
394
447
|
}
|
|
@@ -397,8 +450,7 @@ mod config {
|
|
|
397
450
|
type Error = BridgeError;
|
|
398
451
|
|
|
399
452
|
fn try_into(self) -> BridgeResult<CorePrometheusExporterOptions> {
|
|
400
|
-
let
|
|
401
|
-
let options = options
|
|
453
|
+
let options = CorePrometheusExporterOptions::builder()
|
|
402
454
|
.socket_addr(self.socket_addr)
|
|
403
455
|
.counters_total_suffix(self.counters_total_suffix)
|
|
404
456
|
.unit_suffix(self.unit_suffix)
|
|
@@ -407,8 +459,7 @@ mod config {
|
|
|
407
459
|
overrides: self.histogram_bucket_overrides,
|
|
408
460
|
})
|
|
409
461
|
.global_tags(self.global_tags)
|
|
410
|
-
.build()
|
|
411
|
-
.context("Failed to build prometheus exporter options")?;
|
|
462
|
+
.build();
|
|
412
463
|
|
|
413
464
|
Ok(options)
|
|
414
465
|
}
|
|
@@ -418,8 +469,7 @@ mod config {
|
|
|
418
469
|
type Error = BridgeError;
|
|
419
470
|
|
|
420
471
|
fn try_into(self) -> BridgeResult<CoreOtelCollectorOptions> {
|
|
421
|
-
let
|
|
422
|
-
let options = options
|
|
472
|
+
let options = CoreOtelCollectorOptions::builder()
|
|
423
473
|
.url(self.url)
|
|
424
474
|
.protocol(*self.protocol)
|
|
425
475
|
.headers(self.headers)
|
|
@@ -430,8 +480,7 @@ mod config {
|
|
|
430
480
|
overrides: self.histogram_bucket_overrides,
|
|
431
481
|
})
|
|
432
482
|
.global_tags(self.global_tags)
|
|
433
|
-
.build()
|
|
434
|
-
.context("Failed to build otel exporter options")?;
|
|
483
|
+
.build();
|
|
435
484
|
|
|
436
485
|
Ok(options)
|
|
437
486
|
}
|
package/src/testing.rs
CHANGED
|
@@ -189,12 +189,9 @@ impl CoreEphemeralServerConfig {
|
|
|
189
189
|
mod config {
|
|
190
190
|
use std::time::Duration;
|
|
191
191
|
|
|
192
|
-
use anyhow::Context as _;
|
|
193
|
-
|
|
194
192
|
use temporalio_sdk_core::ephemeral_server::{
|
|
195
193
|
EphemeralExe, EphemeralExeVersion, TemporalDevServerConfig as CoreTemporalDevServerConfig,
|
|
196
|
-
|
|
197
|
-
TestServerConfigBuilder,
|
|
194
|
+
TestServerConfig as CoreTestServerConfig,
|
|
198
195
|
};
|
|
199
196
|
|
|
200
197
|
use bridge_macros::TryFromJs;
|
|
@@ -271,13 +268,11 @@ mod config {
|
|
|
271
268
|
type Error = BridgeError;
|
|
272
269
|
|
|
273
270
|
fn try_into(self) -> Result<CoreTestServerConfig, Self::Error> {
|
|
274
|
-
let
|
|
275
|
-
let config = config
|
|
271
|
+
let config = CoreTestServerConfig::builder()
|
|
276
272
|
.exe(self.exe.into())
|
|
277
|
-
.
|
|
273
|
+
.maybe_port(self.port)
|
|
278
274
|
.extra_args(self.extra_args)
|
|
279
|
-
.build()
|
|
280
|
-
.context("Invalid Test Server config")?;
|
|
275
|
+
.build();
|
|
281
276
|
|
|
282
277
|
Ok(config)
|
|
283
278
|
}
|
|
@@ -287,19 +282,17 @@ mod config {
|
|
|
287
282
|
type Error = BridgeError;
|
|
288
283
|
|
|
289
284
|
fn try_into(self) -> Result<CoreTemporalDevServerConfig, Self::Error> {
|
|
290
|
-
let
|
|
291
|
-
let config = config
|
|
285
|
+
let config = CoreTemporalDevServerConfig::builder()
|
|
292
286
|
.exe(self.exe.into())
|
|
293
287
|
.namespace(self.namespace)
|
|
294
288
|
.ip(self.ip)
|
|
295
|
-
.
|
|
296
|
-
.
|
|
297
|
-
.
|
|
289
|
+
.maybe_port(self.port)
|
|
290
|
+
.maybe_ui_port(self.ui_port)
|
|
291
|
+
.maybe_db_filename(self.db_filename)
|
|
298
292
|
.ui(self.ui)
|
|
299
293
|
.log((self.log.format, self.log.level))
|
|
300
294
|
.extra_args(self.extra_args)
|
|
301
|
-
.build()
|
|
302
|
-
.context("Invalid Dev Server config")?;
|
|
295
|
+
.build();
|
|
303
296
|
|
|
304
297
|
Ok(config)
|
|
305
298
|
}
|
package/src/worker.rs
CHANGED
|
@@ -6,10 +6,6 @@ use prost::Message;
|
|
|
6
6
|
use tokio::sync::mpsc::{Sender, channel};
|
|
7
7
|
use tokio_stream::wrappers::ReceiverStream;
|
|
8
8
|
|
|
9
|
-
use temporalio_common::Worker as CoreWorkerTrait;
|
|
10
|
-
use temporalio_common::errors::{
|
|
11
|
-
CompleteActivityError, CompleteNexusError, CompleteWfError, PollError,
|
|
12
|
-
};
|
|
13
9
|
use temporalio_common::protos::{
|
|
14
10
|
coresdk::{
|
|
15
11
|
ActivityHeartbeat, ActivityTaskCompletion, nexus::NexusTaskCompletion,
|
|
@@ -17,6 +13,7 @@ use temporalio_common::protos::{
|
|
|
17
13
|
},
|
|
18
14
|
temporal::api::history::v1::History,
|
|
19
15
|
};
|
|
16
|
+
use temporalio_sdk_core::{CompleteActivityError, CompleteNexusError, CompleteWfError, PollError};
|
|
20
17
|
use temporalio_sdk_core::{
|
|
21
18
|
CoreRuntime, init_replay_worker, init_worker,
|
|
22
19
|
replay::{HistoryForReplay, ReplayWorkerInput},
|
|
@@ -34,6 +31,7 @@ use crate::{
|
|
|
34
31
|
pub fn init(cx: &mut ModuleContext) -> NeonResult<()> {
|
|
35
32
|
cx.export_function("newWorker", worker_new)?;
|
|
36
33
|
cx.export_function("workerValidate", worker_validate)?;
|
|
34
|
+
cx.export_function("workerReplaceClient", worker_replace_client)?;
|
|
37
35
|
|
|
38
36
|
cx.export_function(
|
|
39
37
|
"workerPollWorkflowActivation",
|
|
@@ -78,16 +76,15 @@ pub fn worker_new(
|
|
|
78
76
|
client: OpaqueInboundHandle<Client>,
|
|
79
77
|
worker_options: config::BridgeWorkerOptions,
|
|
80
78
|
) -> BridgeResult<OpaqueOutboundHandle<Worker>> {
|
|
81
|
-
let config = worker_options
|
|
82
|
-
.into_core_config()
|
|
83
|
-
.context("Failed to convert WorkerOptions to CoreWorkerConfig")?;
|
|
79
|
+
let config = worker_options.into_core_config()?;
|
|
84
80
|
|
|
85
81
|
let client_ref = client.borrow()?;
|
|
86
|
-
let
|
|
82
|
+
let connection = client_ref.core_connection.clone();
|
|
87
83
|
let runtime = client_ref.core_runtime.clone();
|
|
88
84
|
|
|
89
85
|
enter_sync!(runtime);
|
|
90
|
-
let worker =
|
|
86
|
+
let worker =
|
|
87
|
+
init_worker(&runtime, config, connection).context("Failed to initialize worker")?;
|
|
91
88
|
|
|
92
89
|
Ok(OpaqueOutboundHandle::new(Worker {
|
|
93
90
|
core_runtime: runtime,
|
|
@@ -97,19 +94,42 @@ pub fn worker_new(
|
|
|
97
94
|
|
|
98
95
|
/// Validate a worker.
|
|
99
96
|
#[js_function]
|
|
100
|
-
pub fn worker_validate(worker: OpaqueInboundHandle<Worker>) -> BridgeResult<BridgeFuture<
|
|
97
|
+
pub fn worker_validate(worker: OpaqueInboundHandle<Worker>) -> BridgeResult<BridgeFuture<Vec<u8>>> {
|
|
101
98
|
let worker_ref = worker.borrow()?;
|
|
102
99
|
let worker = worker_ref.core_worker.clone();
|
|
103
100
|
let runtime = worker_ref.core_runtime.clone();
|
|
104
101
|
|
|
105
102
|
runtime.future_to_promise(async move {
|
|
106
|
-
worker
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
let result = worker.validate().await;
|
|
104
|
+
|
|
105
|
+
match result {
|
|
106
|
+
Ok(task) => Ok(task.encode_to_vec()),
|
|
107
|
+
Err(err) => Err(BridgeError::TransportError(err.to_string())),
|
|
108
|
+
}
|
|
110
109
|
})
|
|
111
110
|
}
|
|
112
111
|
|
|
112
|
+
/// Replace the client used by the worker.
|
|
113
|
+
/// This allows the worker to update client configuration without restarting the worker.
|
|
114
|
+
#[js_function]
|
|
115
|
+
pub fn worker_replace_client(
|
|
116
|
+
worker: OpaqueInboundHandle<Worker>,
|
|
117
|
+
client: OpaqueInboundHandle<Client>,
|
|
118
|
+
) -> BridgeResult<()> {
|
|
119
|
+
let worker_ref = worker.borrow()?;
|
|
120
|
+
let client_ref = client.borrow()?;
|
|
121
|
+
let new_connection = client_ref.core_connection.clone();
|
|
122
|
+
let runtime = worker_ref.core_runtime.clone();
|
|
123
|
+
|
|
124
|
+
enter_sync!(runtime);
|
|
125
|
+
worker_ref
|
|
126
|
+
.core_worker
|
|
127
|
+
.replace_client(new_connection)
|
|
128
|
+
.map_err(|err| BridgeError::UnexpectedError(err.to_string()))?;
|
|
129
|
+
|
|
130
|
+
Ok(())
|
|
131
|
+
}
|
|
132
|
+
|
|
113
133
|
/// Initiate a single workflow activation poll request.
|
|
114
134
|
/// There should be only one concurrent poll request for this type.
|
|
115
135
|
#[js_function]
|
|
@@ -405,9 +425,7 @@ pub fn replay_worker_new(
|
|
|
405
425
|
OpaqueOutboundHandle<Worker>,
|
|
406
426
|
OpaqueOutboundHandle<HistoryForReplayTunnelHandle>,
|
|
407
427
|
)> {
|
|
408
|
-
let config = config
|
|
409
|
-
.into_core_config()
|
|
410
|
-
.context("Failed to convert WorkerOptions to CoreWorkerConfig")?;
|
|
428
|
+
let config = config.into_core_config()?;
|
|
411
429
|
|
|
412
430
|
let runtime = runtime.borrow()?.core_runtime.clone();
|
|
413
431
|
enter_sync!(runtime);
|
|
@@ -474,24 +492,23 @@ mod config {
|
|
|
474
492
|
use temporalio_common::protos::temporal::api::enums::v1::VersioningBehavior as CoreVersioningBehavior;
|
|
475
493
|
use temporalio_common::protos::temporal::api::worker::v1::PluginInfo;
|
|
476
494
|
use temporalio_common::worker::{
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
WorkerConfigBuilderError, WorkerDeploymentOptions as CoreWorkerDeploymentOptions,
|
|
480
|
-
WorkerDeploymentVersion as CoreWorkerDeploymentVersion, WorkflowSlotKind,
|
|
495
|
+
WorkerDeploymentOptions as CoreWorkerDeploymentOptions,
|
|
496
|
+
WorkerDeploymentVersion as CoreWorkerDeploymentVersion,
|
|
481
497
|
};
|
|
482
498
|
use temporalio_sdk_core::{
|
|
483
|
-
|
|
484
|
-
|
|
499
|
+
ActivitySlotKind, LocalActivitySlotKind, NexusSlotKind,
|
|
500
|
+
PollerBehavior as CorePollerBehavior, ResourceBasedSlotsOptions, ResourceSlotOptions,
|
|
501
|
+
SlotKind, SlotSupplierOptions as CoreSlotSupplierOptions, TunerHolder, TunerHolderOptions,
|
|
502
|
+
WorkerConfig, WorkerVersioningStrategy, WorkflowSlotKind,
|
|
485
503
|
};
|
|
486
504
|
|
|
487
505
|
use super::custom_slot_supplier::CustomSlotSupplierOptions;
|
|
488
|
-
use crate::helpers::TryIntoJs;
|
|
506
|
+
use crate::helpers::{BridgeError, TryIntoJs};
|
|
489
507
|
use bridge_macros::TryFromJs;
|
|
490
508
|
use neon::context::Context;
|
|
491
509
|
use neon::object::Object;
|
|
492
510
|
use neon::prelude::JsResult;
|
|
493
511
|
use neon::types::JsObject;
|
|
494
|
-
use temporalio_common::worker::WorkerVersioningStrategy;
|
|
495
512
|
|
|
496
513
|
#[derive(TryFromJs)]
|
|
497
514
|
pub struct BridgeWorkerOptions {
|
|
@@ -533,7 +550,7 @@ mod config {
|
|
|
533
550
|
pub struct WorkerDeploymentOptions {
|
|
534
551
|
version: WorkerDeploymentVersion,
|
|
535
552
|
use_worker_versioning: bool,
|
|
536
|
-
default_versioning_behavior: VersioningBehavior
|
|
553
|
+
default_versioning_behavior: Option<VersioningBehavior>,
|
|
537
554
|
}
|
|
538
555
|
|
|
539
556
|
#[derive(TryFromJs)]
|
|
@@ -557,8 +574,8 @@ mod config {
|
|
|
557
574
|
enable_nexus: bool,
|
|
558
575
|
}
|
|
559
576
|
|
|
560
|
-
impl From
|
|
561
|
-
fn from(t:
|
|
577
|
+
impl From<WorkerTaskTypes> for temporalio_common::worker::WorkerTaskTypes {
|
|
578
|
+
fn from(t: WorkerTaskTypes) -> Self {
|
|
562
579
|
Self {
|
|
563
580
|
enable_workflows: t.enable_workflows,
|
|
564
581
|
enable_local_activities: t.enable_local_activities,
|
|
@@ -569,11 +586,10 @@ mod config {
|
|
|
569
586
|
}
|
|
570
587
|
|
|
571
588
|
impl BridgeWorkerOptions {
|
|
572
|
-
pub(crate) fn into_core_config(self) -> Result<WorkerConfig,
|
|
589
|
+
pub(crate) fn into_core_config(self) -> Result<WorkerConfig, BridgeError> {
|
|
573
590
|
// Set all other options
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
.client_identity_override(Some(self.identity))
|
|
591
|
+
WorkerConfig::builder()
|
|
592
|
+
.maybe_client_identity_override(Some(self.identity))
|
|
577
593
|
.versioning_strategy({
|
|
578
594
|
if let Some(dopts) = self.worker_deployment_options {
|
|
579
595
|
WorkerVersioningStrategy::WorkerDeploymentBased(dopts.into())
|
|
@@ -591,17 +607,19 @@ mod config {
|
|
|
591
607
|
.namespace(self.namespace)
|
|
592
608
|
.tuner(self.tuner.into_core_config()?)
|
|
593
609
|
.nonsticky_to_sticky_poll_ratio(self.non_sticky_to_sticky_poll_ratio)
|
|
594
|
-
.workflow_task_poller_behavior(self.workflow_task_poller_behavior)
|
|
595
|
-
.activity_task_poller_behavior(self.activity_task_poller_behavior)
|
|
596
|
-
.nexus_task_poller_behavior(self.nexus_task_poller_behavior)
|
|
597
|
-
.task_types(
|
|
610
|
+
.workflow_task_poller_behavior(self.workflow_task_poller_behavior.into())
|
|
611
|
+
.activity_task_poller_behavior(self.activity_task_poller_behavior.into())
|
|
612
|
+
.nexus_task_poller_behavior(self.nexus_task_poller_behavior.into())
|
|
613
|
+
.task_types(self.task_types.into())
|
|
598
614
|
.sticky_queue_schedule_to_start_timeout(self.sticky_queue_schedule_to_start_timeout)
|
|
599
615
|
.max_cached_workflows(self.max_cached_workflows)
|
|
600
616
|
.max_heartbeat_throttle_interval(self.max_heartbeat_throttle_interval)
|
|
601
617
|
.default_heartbeat_throttle_interval(self.default_heartbeat_throttle_interval)
|
|
602
|
-
.
|
|
603
|
-
|
|
604
|
-
|
|
618
|
+
.maybe_max_task_queue_activities_per_second(
|
|
619
|
+
self.max_task_queue_activities_per_second,
|
|
620
|
+
)
|
|
621
|
+
.maybe_max_worker_activities_per_second(self.max_activities_per_second)
|
|
622
|
+
.maybe_graceful_shutdown_period(self.shutdown_grace_time)
|
|
605
623
|
.plugins(
|
|
606
624
|
self.plugins
|
|
607
625
|
.into_iter()
|
|
@@ -612,6 +630,10 @@ mod config {
|
|
|
612
630
|
.collect::<HashSet<_>>(),
|
|
613
631
|
)
|
|
614
632
|
.build()
|
|
633
|
+
.map_err(|err| BridgeError::TypeError {
|
|
634
|
+
message: format!("Failed to convert WorkerOptions to CoreWorkerConfig: {err}"),
|
|
635
|
+
field: None,
|
|
636
|
+
})
|
|
615
637
|
}
|
|
616
638
|
}
|
|
617
639
|
|
|
@@ -637,7 +659,7 @@ mod config {
|
|
|
637
659
|
Self {
|
|
638
660
|
version: val.version.into(),
|
|
639
661
|
use_worker_versioning: val.use_worker_versioning,
|
|
640
|
-
default_versioning_behavior:
|
|
662
|
+
default_versioning_behavior: val.default_versioning_behavior.map(Into::into),
|
|
641
663
|
}
|
|
642
664
|
}
|
|
643
665
|
}
|
|
@@ -692,32 +714,29 @@ mod config {
|
|
|
692
714
|
}
|
|
693
715
|
|
|
694
716
|
impl WorkerTuner {
|
|
695
|
-
fn into_core_config(self) -> Result<Arc<TunerHolder>,
|
|
696
|
-
let mut tuner_holder = TunerHolderOptionsBuilder::default();
|
|
717
|
+
fn into_core_config(self) -> Result<Arc<TunerHolder>, BridgeError> {
|
|
697
718
|
let mut rbo = None;
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
.
|
|
713
|
-
if let Some(rbo) = rbo {
|
|
714
|
-
tuner_holder.resource_based_options(rbo);
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
tuner_holder
|
|
719
|
+
TunerHolderOptions::builder()
|
|
720
|
+
.workflow_slot_options(
|
|
721
|
+
self.workflow_task_slot_supplier
|
|
722
|
+
.into_slot_supplier(&mut rbo),
|
|
723
|
+
)
|
|
724
|
+
.activity_slot_options(
|
|
725
|
+
self.activity_task_slot_supplier
|
|
726
|
+
.into_slot_supplier(&mut rbo),
|
|
727
|
+
)
|
|
728
|
+
.local_activity_slot_options(
|
|
729
|
+
self.local_activity_task_slot_supplier
|
|
730
|
+
.into_slot_supplier(&mut rbo),
|
|
731
|
+
)
|
|
732
|
+
.nexus_slot_options(self.nexus_task_slot_supplier.into_slot_supplier(&mut rbo))
|
|
733
|
+
.maybe_resource_based_options(rbo)
|
|
718
734
|
.build_tuner_holder()
|
|
719
735
|
.map(Arc::new)
|
|
720
|
-
.map_err(|
|
|
736
|
+
.map_err(|err| BridgeError::TypeError {
|
|
737
|
+
message: format!("Invalid tuner options: {err}"),
|
|
738
|
+
field: None,
|
|
739
|
+
})
|
|
721
740
|
}
|
|
722
741
|
}
|
|
723
742
|
|
|
@@ -758,11 +777,10 @@ mod config {
|
|
|
758
777
|
},
|
|
759
778
|
Self::ResourceBased(opts) => {
|
|
760
779
|
*rbo = Some(
|
|
761
|
-
|
|
780
|
+
ResourceBasedSlotsOptions::builder()
|
|
762
781
|
.target_cpu_usage(opts.tuner_options.target_cpu_usage)
|
|
763
782
|
.target_mem_usage(opts.tuner_options.target_memory_usage)
|
|
764
|
-
.build()
|
|
765
|
-
.expect("Building ResourceBasedSlotsOptions can't fail"),
|
|
783
|
+
.build(),
|
|
766
784
|
);
|
|
767
785
|
CoreSlotSupplierOptions::ResourceBased(ResourceSlotOptions::new(
|
|
768
786
|
opts.minimum_slots,
|
|
@@ -785,14 +803,14 @@ mod custom_slot_supplier {
|
|
|
785
803
|
|
|
786
804
|
use neon::{context::Context, handle::Handle, prelude::*};
|
|
787
805
|
|
|
788
|
-
use
|
|
806
|
+
use temporalio_sdk_core::{
|
|
789
807
|
SlotInfo as CoreSlotInfo, SlotInfoTrait as _, SlotKind, SlotKindType as CoreSlotKindType,
|
|
790
808
|
SlotMarkUsedContext as CoreSlotMarkUsedContext,
|
|
791
809
|
SlotReleaseContext as CoreSlotReleaseContext,
|
|
792
810
|
SlotReservationContext as CoreSlotReservationContext, SlotSupplier as CoreSlotSupplier,
|
|
811
|
+
SlotSupplierOptions as CoreSlotSupplierOptions,
|
|
793
812
|
SlotSupplierPermit as CoreSlotSupplierPermit,
|
|
794
813
|
};
|
|
795
|
-
use temporalio_sdk_core::SlotSupplierOptions as CoreSlotSupplierOptions;
|
|
796
814
|
|
|
797
815
|
use bridge_macros::{TryFromJs, TryIntoJs};
|
|
798
816
|
use tracing::warn;
|