diff --git a/packages/core-bridge/Cargo.lock b/packages/core-bridge/Cargo.lock index a3f0f9339..0fb1f9b6e 100644 --- a/packages/core-bridge/Cargo.lock +++ b/packages/core-bridge/Cargo.lock @@ -1375,23 +1375,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "opentelemetry" -version = "0.29.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e87237e2775f74896f9ad219d26a2081751187eb7c9f5c58dde20a23b95d16c" -dependencies = [ - "futures-core", - "futures-sink", - "js-sys", - "pin-project-lite", - "thiserror 2.0.14", - "tracing", -] - -[[package]] -name = "opentelemetry" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf416e4cb72756655126f7dd7bb0af49c674f4c1b9903e80c009e0c37e552e6" +checksum = "b84bcd6ae87133e903af7ef497404dda70c60d0ea14895fc8a5e6722754fc2a0" dependencies = [ "futures-core", "futures-sink", @@ -1403,25 +1389,25 @@ dependencies = [ [[package]] name = "opentelemetry-http" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f6639e842a97dbea8886e3439710ae463120091e2e064518ba8e716e6ac36d" +checksum = "d7a6d09a73194e6b66df7c8f1b680f156d916a1a942abf2de06823dd02b7855d" dependencies = [ "async-trait", "bytes", "http", - "opentelemetry 0.30.0", + "opentelemetry", "reqwest", ] [[package]] name = "opentelemetry-otlp" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b" +checksum = "7a2366db2dca4d2ad033cad11e6ee42844fd727007af5ad04a1730f4cb8163bf" dependencies = [ "http", - "opentelemetry 0.30.0", + "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", @@ -1435,29 +1421,29 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e046fd7660710fe5a05e8748e70d9058dc15c94ba914e7c4faa7c728f0e8ddc" +checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f" dependencies = [ - "opentelemetry 0.30.0", + "opentelemetry", "opentelemetry_sdk", "prost", "tonic", + "tonic-prost", ] [[package]] name = "opentelemetry_sdk" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f644aa9e5e31d11896e024305d7e3c98a88884d9f8919dbf37a9991bc47a4b" +checksum = "e14ae4f5991976fd48df6d843de219ca6d31b01daaab2dad5af2badeded372bd" dependencies = [ "futures-channel", "futures-executor", "futures-util", - "opentelemetry 0.30.0", + "opentelemetry", "percent-encoding", "rand 0.9.2", - "serde_json", "thiserror 2.0.14", "tokio", "tokio-stream", @@ -1654,9 +1640,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" dependencies = [ "bytes", "prost-derive", @@ -1664,9 +1650,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" +checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1" dependencies = [ "heck", "itertools", @@ -1677,6 +1663,8 @@ dependencies = [ "prettyplease", "prost", "prost-types", + "pulldown-cmark", + "pulldown-cmark-to-cmark", "regex", "syn", "tempfile", @@ -1684,9 +1672,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", "itertools", @@ -1697,18 +1685,18 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" dependencies = [ "prost", ] [[package]] name = "prost-wkt" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497e1e938f0c09ef9cabe1d49437b4016e03e8f82fbbe5d1c62a9b61b9decae1" +checksum = "655944d0ce015e71b3ec21279437e6a09e58433e50c7b0677901f3d5235e74f5" dependencies = [ "chrono", "inventory", @@ -1721,9 +1709,9 @@ dependencies = [ [[package]] name = "prost-wkt-build" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b8bf115b70a7aa5af1fd5d6e9418492e9ccb6e4785e858c938e28d132a884b" +checksum = "f869f1443fee474b785e935d92e1007f57443e485f51668ed41943fc01a321a2" dependencies = [ "heck", "prost", @@ -1734,9 +1722,9 @@ dependencies = [ [[package]] name = "prost-wkt-types" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8cdde6df0a98311c839392ca2f2f0bcecd545f86a62b4e3c6a49c336e970fe5" +checksum = "eeeffd6b9becd4600dd461399f3f71aeda2ff0848802a9ed526cf12e8f42902a" dependencies = [ "chrono", "prost", @@ -1770,6 +1758,26 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "pulldown-cmark" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + +[[package]] +name = "pulldown-cmark-to-cmark" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5b6a0769a491a08b31ea5c62494a8f144ee0987d86d670a8af4df1e1b7cde75" +dependencies = [ + "pulldown-cmark", +] + [[package]] name = "quanta" version = "0.12.6" @@ -2040,29 +2048,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustfsm" -version = "0.1.0" -dependencies = [ - "rustfsm_procmacro", - "rustfsm_trait", -] - -[[package]] -name = "rustfsm_procmacro" -version = "0.1.0" -dependencies = [ - "derive_more", - "proc-macro2", - "quote", - "rustfsm_trait", - "syn", -] - -[[package]] -name = "rustfsm_trait" -version = "0.1.0" - [[package]] name = "rustix" version = "1.0.8" @@ -2404,7 +2389,34 @@ dependencies = [ ] [[package]] -name = "temporal-client" +name = "temporal-sdk-typescript-bridge" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bridge-macros", + "futures", + "neon", + "opentelemetry", + "os_pipe", + "parking_lot", + "prost", + "prost-types", + "serde", + "serde_json", + "temporalio-client", + "temporalio-common", + "temporalio-sdk-core", + "thiserror 2.0.14", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "temporalio-client" version = "0.1.0" dependencies = [ "anyhow", @@ -2422,9 +2434,9 @@ dependencies = [ "hyper", "hyper-util", "parking_lot", + "rand 0.9.2", "slotmap", - "temporal-sdk-core-api", - "temporal-sdk-core-protos", + "temporalio-common", "thiserror 2.0.14", "tokio", "tonic", @@ -2435,7 +2447,43 @@ dependencies = [ ] [[package]] -name = "temporal-sdk-core" +name = "temporalio-common" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "base64", + "derive_builder", + "derive_more", + "opentelemetry", + "prost", + "prost-wkt", + "prost-wkt-types", + "rand 0.9.2", + "serde", + "serde_json", + "thiserror 2.0.14", + "tonic", + "tonic-prost", + "tonic-prost-build", + "tracing", + "tracing-core", + "url", + "uuid", +] + +[[package]] +name = "temporalio-macros" +version = "0.1.0" +dependencies = [ + "derive_more", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "temporalio-sdk-core" version = "0.1.0" dependencies = [ "anyhow", @@ -2459,7 +2507,7 @@ dependencies = [ "itertools", "lru", "mockall", - "opentelemetry 0.30.0", + "opentelemetry", "opentelemetry-otlp", "opentelemetry_sdk", "parking_lot", @@ -2471,16 +2519,15 @@ dependencies = [ "rand 0.9.2", "reqwest", "ringbuf", - "rustfsm", "serde", "serde_json", "siphasher", "slotmap", "sysinfo", "tar", - "temporal-client", - "temporal-sdk-core-api", - "temporal-sdk-core-protos", + "temporalio-client", + "temporalio-common", + "temporalio-macros", "thiserror 2.0.14", "tokio", "tokio-stream", @@ -2493,71 +2540,6 @@ dependencies = [ "zip", ] -[[package]] -name = "temporal-sdk-core-api" -version = "0.1.0" -dependencies = [ - "async-trait", - "derive_builder", - "derive_more", - "opentelemetry 0.30.0", - "prost", - "serde_json", - "temporal-sdk-core-protos", - "thiserror 2.0.14", - "tonic", - "tracing", - "tracing-core", - "url", -] - -[[package]] -name = "temporal-sdk-core-protos" -version = "0.1.0" -dependencies = [ - "anyhow", - "base64", - "derive_more", - "prost", - "prost-build", - "prost-wkt", - "prost-wkt-build", - "prost-wkt-types", - "rand 0.9.2", - "serde", - "serde_json", - "thiserror 2.0.14", - "tonic", - "tonic-build", - "uuid", -] - -[[package]] -name = "temporal-sdk-typescript-bridge" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bridge-macros", - "futures", - "neon", - "opentelemetry 0.29.1", - "os_pipe", - "parking_lot", - "prost", - "prost-types", - "serde", - "serde_json", - "temporal-client", - "temporal-sdk-core", - "thiserror 2.0.14", - "tokio", - "tokio-stream", - "tonic", - "tracing", - "tracing-subscriber", -] - [[package]] name = "termtree" version = "0.5.1" @@ -2705,9 +2687,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.13.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" +checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" dependencies = [ "async-trait", "axum", @@ -2722,9 +2704,9 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost", "rustls-native-certs", - "socket2 0.5.10", + "socket2 0.6.0", + "sync_wrapper", "tokio", "tokio-rustls", "tokio-stream", @@ -2736,9 +2718,32 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.13.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac6f67be712d12f0b41328db3137e0d0757645d8904b4cb7d51cd9c2279e847" +checksum = "4c40aaccc9f9eccf2cd82ebc111adc13030d23e887244bc9cfa5d1d636049de3" +dependencies = [ + "prettyplease", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tonic-prost" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +dependencies = [ + "bytes", + "prost", + "tonic", +] + +[[package]] +name = "tonic-prost-build" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a16cba4043dc3ff43fcb3f96b4c5c154c64cbd18ca8dce2ab2c6a451d058a2" dependencies = [ "prettyplease", "proc-macro2", @@ -2746,6 +2751,8 @@ dependencies = [ "prost-types", "quote", "syn", + "tempfile", + "tonic-build", ] [[package]] @@ -2882,6 +2889,12 @@ dependencies = [ "syn", ] +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-ident" version = "1.0.18" @@ -2925,9 +2938,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", diff --git a/packages/core-bridge/Cargo.toml b/packages/core-bridge/Cargo.toml index 1831c7b59..41be46b2b 100644 --- a/packages/core-bridge/Cargo.toml +++ b/packages/core-bridge/Cargo.toml @@ -25,28 +25,29 @@ async-trait = "0.1.83" bridge-macros = { path = "bridge-macros" } futures = { version = "0.3", features = ["executor"] } neon = { version = "1.0.0", default-features = false, features = [ - "napi-6", - "futures", + "napi-6", + "futures", ] } -opentelemetry = "0.29" +opentelemetry = "0.31" os_pipe = "1.2.1" parking_lot = "0.12" -prost = "0.13" -prost-types = "0.13" +prost = "0.14" +prost-types = "0.14" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -temporal-sdk-core = { version = "*", path = "./sdk-core/core", features = [ - "ephemeral-server", +temporalio-sdk-core = { version = "*", path = "./sdk-core/crates/sdk-core", features = [ + "ephemeral-server", ] } -temporal-client = { version = "*", path = "./sdk-core/client" } +temporalio-client = { version = "*", path = "./sdk-core/crates/client" } +temporalio-common = { version = "*", path = "./sdk-core/crates/common" } thiserror = "2" tokio = "1.13" tokio-stream = "0.1" -tonic = "0.13" +tonic = "0.14" tracing = "0.1" tracing-subscriber = { version = "0.3", default-features = false, features = [ - "parking_lot", - "env-filter", - "registry", - "ansi", + "parking_lot", + "env-filter", + "registry", + "ansi", ] } diff --git a/packages/core-bridge/sdk-core b/packages/core-bridge/sdk-core index de674173c..407043b63 160000 --- a/packages/core-bridge/sdk-core +++ b/packages/core-bridge/sdk-core @@ -1 +1 @@ -Subproject commit de674173c664d42f85d0dee1ff3b2ac47e36d545 +Subproject commit 407043b63d4c5b41558c8f1e2a0ba6a78fbf0a22 diff --git a/packages/core-bridge/src/client.rs b/packages/core-bridge/src/client.rs index 5791328cd..b624f9e80 100644 --- a/packages/core-bridge/src/client.rs +++ b/packages/core-bridge/src/client.rs @@ -5,10 +5,10 @@ use std::{collections::HashMap, sync::Arc}; use neon::prelude::*; use tonic::metadata::{BinaryMetadataValue, MetadataKey}; -use temporal_sdk_core::{ClientOptions as CoreClientOptions, CoreRuntime, RetryClient}; +use temporalio_sdk_core::{ClientOptions as CoreClientOptions, CoreRuntime, RetryClient}; use bridge_macros::{TryFromJs, js_function}; -use temporal_client::{ClientInitError, ConfiguredClient, TemporalServiceClient}; +use temporalio_client::{ClientInitError, ConfiguredClient, TemporalServiceClient}; use crate::runtime::Runtime; use crate::{helpers::*, runtime::RuntimeExt as _}; @@ -255,7 +255,7 @@ async fn client_invoke_workflow_service( mut retry_client: CoreClient, call: RpcCall, ) -> BridgeResult> { - use temporal_client::WorkflowService; + use temporalio_client::WorkflowService; match call.rpc.as_str() { "CountWorkflowExecutions" => { @@ -288,6 +288,9 @@ async fn client_invoke_workflow_service( "DescribeDeployment" => { rpc_call!(retry_client, call, describe_deployment) } + "DescribeWorker" => { + rpc_call!(retry_client, call, describe_worker) + } "DeprecateNamespace" => rpc_call!(retry_client, call, deprecate_namespace), "DescribeNamespace" => rpc_call!(retry_client, call, describe_namespace), "DescribeSchedule" => rpc_call!(retry_client, call, describe_schedule), @@ -448,6 +451,9 @@ async fn client_invoke_workflow_service( "SetWorkerDeploymentCurrentVersion" => { rpc_call!(retry_client, call, set_worker_deployment_current_version) } + "SetWorkerDeploymentManager" => { + rpc_call!(retry_client, call, set_worker_deployment_manager) + } "SetWorkerDeploymentRampingVersion" => { rpc_call!(retry_client, call, set_worker_deployment_ramping_version) } @@ -519,7 +525,7 @@ async fn client_invoke_operator_service( mut retry_client: CoreClient, call: RpcCall, ) -> BridgeResult> { - use temporal_client::OperatorService; + use temporalio_client::OperatorService; match call.rpc.as_str() { "AddOrUpdateRemoteCluster" => { @@ -557,7 +563,7 @@ async fn client_invoke_test_service( mut retry_client: CoreClient, call: RpcCall, ) -> BridgeResult> { - use temporal_client::TestService; + use temporalio_client::TestService; match call.rpc.as_str() { "GetCurrentTime" => rpc_call!(retry_client, call, get_current_time), @@ -579,7 +585,7 @@ async fn client_invoke_health_service( mut retry_client: CoreClient, call: RpcCall, ) -> BridgeResult> { - use temporal_client::HealthService; + use temporalio_client::HealthService; match call.rpc.as_str() { "Check" => rpc_call!(retry_client, call, check), @@ -649,8 +655,8 @@ mod config { use anyhow::Context as _; - use temporal_client::HttpConnectProxyOptions; - use temporal_sdk_core::{ + use temporalio_client::HttpConnectProxyOptions; + use temporalio_sdk_core::{ ClientOptions as CoreClientOptions, ClientOptionsBuilder, ClientTlsConfig as CoreClientTlsConfig, TlsConfig as CoreTlsConfig, Url, }; diff --git a/packages/core-bridge/src/helpers/try_from_js.rs b/packages/core-bridge/src/helpers/try_from_js.rs index 472ad2010..62e6aff11 100644 --- a/packages/core-bridge/src/helpers/try_from_js.rs +++ b/packages/core-bridge/src/helpers/try_from_js.rs @@ -9,7 +9,7 @@ use neon::{ Value, buffer::TypedArray, }, }; -use temporal_sdk_core::Url; +use temporalio_sdk_core::Url; use super::{AppendFieldContext, BridgeError, BridgeResult}; diff --git a/packages/core-bridge/src/logs.rs b/packages/core-bridge/src/logs.rs index 694d3c7e2..dc8ecc485 100644 --- a/packages/core-bridge/src/logs.rs +++ b/packages/core-bridge/src/logs.rs @@ -6,7 +6,7 @@ use std::{ use neon::prelude::*; use serde::{Serialize, ser::SerializeMap as _}; -use temporal_sdk_core::api::telemetry::CoreLog; +use temporalio_common::telemetry::CoreLog; use bridge_macros::js_function; diff --git a/packages/core-bridge/src/metrics.rs b/packages/core-bridge/src/metrics.rs index 95359895e..57479d7da 100644 --- a/packages/core-bridge/src/metrics.rs +++ b/packages/core-bridge/src/metrics.rs @@ -4,14 +4,14 @@ use anyhow::Context as _; use neon::prelude::*; use serde::Deserialize; -use temporal_sdk_core::api::telemetry::metrics::{ +use temporalio_common::telemetry::metrics::{ CoreMeter, Counter as CoreCounter, Gauge as CoreGauge, Histogram as CoreHistogram, MetricParametersBuilder, NewAttributes, TemporalMeter, }; -use temporal_sdk_core::api::telemetry::metrics::{ +use temporalio_common::telemetry::metrics::{ GaugeF64 as CoreGaugeF64, HistogramF64 as CoreHistogramF64, }; -use temporal_sdk_core::api::telemetry::metrics::{ +use temporalio_common::telemetry::metrics::{ MetricKeyValue as CoreMetricKeyValue, MetricValue as CoreMetricValue, }; diff --git a/packages/core-bridge/src/runtime.rs b/packages/core-bridge/src/runtime.rs index 42ad067ef..211e3bea1 100644 --- a/packages/core-bridge/src/runtime.rs +++ b/packages/core-bridge/src/runtime.rs @@ -5,12 +5,12 @@ use futures::channel::mpsc::Receiver; use neon::prelude::*; use tracing::{Instrument, warn}; -use temporal_sdk_core::{ - CoreRuntime, TokioRuntimeBuilder, - api::telemetry::{ - CoreLog, OtelCollectorOptions as CoreOtelCollectorOptions, - PrometheusExporterOptions as CorePrometheusExporterOptions, metrics::CoreMeter, - }, +use temporalio_common::telemetry::{ + CoreLog, OtelCollectorOptions as CoreOtelCollectorOptions, + PrometheusExporterOptions as CorePrometheusExporterOptions, metrics::CoreMeter, +}; +use temporalio_sdk_core::{ + CoreRuntime, RuntimeOptionsBuilder, TokioRuntimeBuilder, telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter}, }; @@ -62,7 +62,11 @@ pub fn runtime_new( let (telemetry_options, metrics_options, logging_options) = bridge_options.try_into()?; // Create core runtime which starts tokio multi-thread runtime - let mut core_runtime = CoreRuntime::new(telemetry_options, TokioRuntimeBuilder::default()) + let runtime_options = RuntimeOptionsBuilder::default() + .telemetry_options(telemetry_options) + .build() + .context("Failed to build runtime options")?; + let mut core_runtime = CoreRuntime::new(runtime_options, TokioRuntimeBuilder::default()) .context("Failed to initialize Core Runtime")?; enter_sync!(core_runtime); @@ -235,17 +239,14 @@ mod config { use anyhow::Context as _; use neon::prelude::*; - use temporal_sdk_core::{ - Url, - api::telemetry::{ - HistogramBucketOverrides, Logger as CoreTelemetryLogger, MetricTemporality, - OtelCollectorOptions as CoreOtelCollectorOptions, OtelCollectorOptionsBuilder, - OtlpProtocol, PrometheusExporterOptions as CorePrometheusExporterOptions, - PrometheusExporterOptionsBuilder, TelemetryOptions as CoreTelemetryOptions, - TelemetryOptionsBuilder, - }, - telemetry::CoreLogStreamConsumer, + use temporalio_common::telemetry::{ + HistogramBucketOverrides, Logger as CoreTelemetryLogger, MetricTemporality, + OtelCollectorOptions as CoreOtelCollectorOptions, OtelCollectorOptionsBuilder, + OtlpProtocol, PrometheusExporterOptions as CorePrometheusExporterOptions, + PrometheusExporterOptionsBuilder, TelemetryOptions as CoreTelemetryOptions, + TelemetryOptionsBuilder, }; + use temporalio_sdk_core::{Url, telemetry::CoreLogStreamConsumer}; use bridge_macros::TryFromJs; diff --git a/packages/core-bridge/src/testing.rs b/packages/core-bridge/src/testing.rs index 6be02eebf..c7c02049e 100644 --- a/packages/core-bridge/src/testing.rs +++ b/packages/core-bridge/src/testing.rs @@ -4,13 +4,13 @@ use std::{process::Stdio, sync::Arc}; use anyhow::Context as _; use neon::prelude::*; -use temporal_sdk_core::ephemeral_server::{ +use temporalio_sdk_core::ephemeral_server::{ EphemeralServer as CoreEphemeralServer, TemporalDevServerConfig as CoreTemporalDevServerConfig, TestServerConfig as CoreTestServerConfig, }; use bridge_macros::js_function; -use temporal_sdk_core::CoreRuntime; +use temporalio_sdk_core::CoreRuntime; use crate::helpers::*; use crate::runtime::{Runtime, RuntimeExt as _}; @@ -191,7 +191,7 @@ mod config { use anyhow::Context as _; - use temporal_sdk_core::ephemeral_server::{ + use temporalio_sdk_core::ephemeral_server::{ EphemeralExe, EphemeralExeVersion, TemporalDevServerConfig as CoreTemporalDevServerConfig, TemporalDevServerConfigBuilder, TestServerConfig as CoreTestServerConfig, TestServerConfigBuilder, diff --git a/packages/core-bridge/src/worker.rs b/packages/core-bridge/src/worker.rs index ca6131f92..236d37847 100644 --- a/packages/core-bridge/src/worker.rs +++ b/packages/core-bridge/src/worker.rs @@ -6,20 +6,19 @@ use prost::Message; use tokio::sync::mpsc::{Sender, channel}; use tokio_stream::wrappers::ReceiverStream; -use temporal_sdk_core::{ - CoreRuntime, - api::{ - Worker as CoreWorkerTrait, - errors::{CompleteActivityError, CompleteNexusError, CompleteWfError, PollError}, - }, - init_replay_worker, init_worker, - protos::{ - coresdk::{ - ActivityHeartbeat, ActivityTaskCompletion, nexus::NexusTaskCompletion, - workflow_completion::WorkflowActivationCompletion, - }, - temporal::api::history::v1::History, +use temporalio_common::Worker as CoreWorkerTrait; +use temporalio_common::errors::{ + CompleteActivityError, CompleteNexusError, CompleteWfError, PollError, +}; +use temporalio_common::protos::{ + coresdk::{ + ActivityHeartbeat, ActivityTaskCompletion, nexus::NexusTaskCompletion, + workflow_completion::WorkflowActivationCompletion, }, + temporal::api::history::v1::History, +}; +use temporalio_sdk_core::{ + CoreRuntime, init_replay_worker, init_worker, replay::{HistoryForReplay, ReplayWorkerInput}, }; @@ -70,7 +69,7 @@ pub struct Worker { core_runtime: Arc, // Arc so that we can send reference into async closures - core_worker: Arc, + core_worker: Arc, } /// Create a new worker. @@ -400,9 +399,10 @@ pub fn replay_worker_new( OpaqueOutboundHandle, OpaqueOutboundHandle, )> { - let config = config + let mut config = config .into_core_config() .context("Failed to convert WorkerOptions to CoreWorkerConfig")?; + config.skip_client_worker_set_check = true; let runtime = runtime.borrow()?.core_runtime.clone(); enter_sync!(runtime); @@ -466,16 +466,16 @@ impl MutableFinalize for HistoryForReplayTunnelHandle {} mod config { use std::{sync::Arc, time::Duration}; - use temporal_sdk_core::{ + use temporalio_common::protos::temporal::api::enums::v1::VersioningBehavior as CoreVersioningBehavior; + use temporalio_common::worker::{ + ActivitySlotKind, LocalActivitySlotKind, NexusSlotKind, + PollerBehavior as CorePollerBehavior, SlotKind, WorkerConfig, WorkerConfigBuilder, + WorkerConfigBuilderError, WorkerDeploymentOptions as CoreWorkerDeploymentOptions, + WorkerDeploymentVersion as CoreWorkerDeploymentVersion, WorkflowSlotKind, + }; + use temporalio_sdk_core::{ ResourceBasedSlotsOptions, ResourceBasedSlotsOptionsBuilder, ResourceSlotOptions, SlotSupplierOptions as CoreSlotSupplierOptions, TunerHolder, TunerHolderOptionsBuilder, - api::worker::{ - ActivitySlotKind, LocalActivitySlotKind, NexusSlotKind, - PollerBehavior as CorePollerBehavior, SlotKind, WorkerConfig, WorkerConfigBuilder, - WorkerConfigBuilderError, WorkerDeploymentOptions as CoreWorkerDeploymentOptions, - WorkerDeploymentVersion as CoreWorkerDeploymentVersion, WorkflowSlotKind, - }, - protos::temporal::api::enums::v1::VersioningBehavior as CoreVersioningBehavior, }; use super::custom_slot_supplier::CustomSlotSupplierOptions; @@ -485,7 +485,7 @@ mod config { use neon::object::Object; use neon::prelude::JsResult; use neon::types::JsObject; - use temporal_sdk_core::api::worker::WorkerVersioningStrategy; + use temporalio_common::worker::WorkerVersioningStrategy; #[derive(TryFromJs)] pub struct BridgeWorkerOptions { @@ -749,16 +749,14 @@ mod custom_slot_supplier { use neon::{context::Context, handle::Handle, prelude::*}; - use temporal_sdk_core::{ - SlotSupplierOptions as CoreSlotSupplierOptions, - api::worker::{ - SlotInfo as CoreSlotInfo, SlotInfoTrait as _, SlotKind, - SlotKindType as CoreSlotKindType, SlotMarkUsedContext as CoreSlotMarkUsedContext, - SlotReleaseContext as CoreSlotReleaseContext, - SlotReservationContext as CoreSlotReservationContext, SlotSupplier as CoreSlotSupplier, - SlotSupplierPermit as CoreSlotSupplierPermit, - }, + use temporalio_common::worker::{ + SlotInfo as CoreSlotInfo, SlotInfoTrait as _, SlotKind, SlotKindType as CoreSlotKindType, + SlotMarkUsedContext as CoreSlotMarkUsedContext, + SlotReleaseContext as CoreSlotReleaseContext, + SlotReservationContext as CoreSlotReservationContext, SlotSupplier as CoreSlotSupplier, + SlotSupplierPermit as CoreSlotSupplierPermit, }; + use temporalio_sdk_core::SlotSupplierOptions as CoreSlotSupplierOptions; use bridge_macros::{TryFromJs, TryIntoJs}; use tracing::warn; diff --git a/packages/proto/scripts/compile-proto.js b/packages/proto/scripts/compile-proto.js index 5c11a70ae..ea86ef355 100644 --- a/packages/proto/scripts/compile-proto.js +++ b/packages/proto/scripts/compile-proto.js @@ -10,7 +10,7 @@ const outputDir = resolve(__dirname, '../protos'); const jsOutputFile = resolve(outputDir, 'json-module.js'); const tempFile = resolve(outputDir, 'temp.js'); -const protoBaseDir = resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos'); +const protoBaseDir = resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos'); function mtime(path) { try { diff --git a/packages/test/src/helpers-integration.ts b/packages/test/src/helpers-integration.ts index 3e73562c1..ff6a26c81 100644 --- a/packages/test/src/helpers-integration.ts +++ b/packages/test/src/helpers-integration.ts @@ -17,6 +17,8 @@ import { DefaultLogger, LogEntry, LogLevel, + NativeConnection, + NativeConnectionOptions, ReplayWorkerOptions, Runtime, RuntimeOptions, @@ -184,6 +186,7 @@ export async function createTestWorkflowEnvironment( export interface Helpers { taskQueue: string; createWorker(opts?: Partial): Promise; + createNativeConnection(opts?: Partial): Promise; runReplayHistory(opts: Partial, history: temporal.api.history.v1.IHistory): Promise; executeWorkflow Promise>(workflowType: T): Promise>; executeWorkflow( @@ -218,6 +221,9 @@ export function configurableHelpers( ...opts, }); }, + async createNativeConnection(opts?: Partial): Promise { + return await NativeConnection.connect({ address: testEnv.address, ...opts }); + }, async runReplayHistory( opts: Partial, history: temporal.api.history.v1.IHistory diff --git a/packages/test/src/test-client-connection.ts b/packages/test/src/test-client-connection.ts index 7545c916a..62ab08700 100644 --- a/packages/test/src/test-client-connection.ts +++ b/packages/test/src/test-client-connection.ts @@ -22,14 +22,14 @@ import { temporal, grpc as grpcProto } from '@temporalio/proto'; const workflowServicePackageDefinition = protoLoader.loadSync( path.resolve( __dirname, - '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' + '../../core-bridge/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' ), - { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream')] } + { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/api_upstream')] } ); const workflowServiceProtoDescriptor = grpc.loadPackageDefinition(workflowServicePackageDefinition) as any; const healthServicePackageDefinition = protoLoader.loadSync( - path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/grpc/health/v1/health.proto') + path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/grpc/health/v1/health.proto') ); const healthServicePackageDescriptor = grpc.loadPackageDefinition(healthServicePackageDefinition) as any; diff --git a/packages/test/src/test-integration-workflows.ts b/packages/test/src/test-integration-workflows.ts index 56722cfd7..00036b6fe 100644 --- a/packages/test/src/test-integration-workflows.ts +++ b/packages/test/src/test-integration-workflows.ts @@ -445,7 +445,7 @@ export async function executeEagerActivity(): Promise { } test('Worker requests Eager Activity Dispatch if possible', async (t) => { - const { createWorker, startWorkflow } = helpers(t); + const { createWorker, startWorkflow, createNativeConnection } = helpers(t); // If eager activity dispatch is working, then the task will always be dispatched to the workflow // worker. Otherwise, chances are 50%-50% for either workers. The test workflow schedule the @@ -459,7 +459,12 @@ test('Worker requests Eager Activity Dispatch if possible', async (t) => { // Override the default workflow bundle, to make this an activity-only worker workflowBundle: undefined, }); + const workflowWorkerConnection = await createNativeConnection(); + t.teardown(() => { + workflowWorkerConnection.close(); + }); const workflowWorker = await createWorker({ + connection: workflowWorkerConnection, activities: { testActivity: () => 'workflow-and-activity-worker', }, @@ -482,7 +487,7 @@ export async function dontExecuteEagerActivity(): Promise { } test("Worker doesn't request Eager Activity Dispatch if no activities are registered", async (t) => { - const { createWorker, startWorkflow } = helpers(t); + const { createNativeConnection, createWorker, startWorkflow } = helpers(t); // If the activity was eagerly dispatched to the Workflow worker even though it is a Workflow-only // worker, then the activity execution will timeout (because tasks are not being polled) or @@ -497,7 +502,10 @@ test("Worker doesn't request Eager Activity Dispatch if no activities are regist // Override the default workflow bundle, to make this an activity-only worker workflowBundle: undefined, }); + const workflowWorkerConnection = await createNativeConnection(); + t.teardown(() => workflowWorkerConnection.close()); const workflowWorker = await createWorker({ + connection: workflowWorkerConnection, activities: {}, }); const handle = await startWorkflow(dontExecuteEagerActivity); diff --git a/packages/test/src/test-native-connection-headers.ts b/packages/test/src/test-native-connection-headers.ts index db466930d..5f4f739f8 100644 --- a/packages/test/src/test-native-connection-headers.ts +++ b/packages/test/src/test-native-connection-headers.ts @@ -12,9 +12,9 @@ import { Worker } from './helpers'; const workflowServicePackageDefinition = protoLoader.loadSync( path.resolve( __dirname, - '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' + '../../core-bridge/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' ), - { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream')] } + { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/api_upstream')] } ); const workflowServiceProtoDescriptor = grpc.loadPackageDefinition(workflowServicePackageDefinition) as any; @@ -26,9 +26,9 @@ test('NativeConnection passes headers provided in options', async (t) => { const packageDefinition = protoLoader.loadSync( path.resolve( __dirname, - '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' + '../../core-bridge/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' ), - { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream')] } + { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/api_upstream')] } ); const protoDescriptor = grpc.loadPackageDefinition(packageDefinition) as any; diff --git a/packages/test/src/test-native-connection.ts b/packages/test/src/test-native-connection.ts index 4eabf99ed..8d8e5d1ff 100644 --- a/packages/test/src/test-native-connection.ts +++ b/packages/test/src/test-native-connection.ts @@ -15,23 +15,23 @@ import { RUN_INTEGRATION_TESTS, Worker } from './helpers'; const workflowServicePackageDefinition = protoLoader.loadSync( path.resolve( __dirname, - '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' + '../../core-bridge/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto' ), - { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream')] } + { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/api_upstream')] } ); const workflowServiceProtoDescriptor = grpc.loadPackageDefinition(workflowServicePackageDefinition) as any; const operatorServicePackageDefinition = protoLoader.loadSync( path.resolve( __dirname, - '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/operatorservice/v1/service.proto' + '../../core-bridge/sdk-core/crates/common/protos/api_upstream/temporal/api/operatorservice/v1/service.proto' ), - { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/api_upstream')] } + { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/api_upstream')] } ); const operatorServiceProtoDescriptor = grpc.loadPackageDefinition(operatorServicePackageDefinition) as any; const healthServicePackageDefinition = protoLoader.loadSync( - path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/grpc/health/v1/health.proto'), + path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/grpc/health/v1/health.proto'), { includeDirs: [] } ); const healthServiceProtoDescriptor = grpc.loadPackageDefinition(healthServicePackageDefinition) as any; @@ -39,9 +39,9 @@ const healthServiceProtoDescriptor = grpc.loadPackageDefinition(healthServicePac const testServicePackageDefinition = protoLoader.loadSync( path.resolve( __dirname, - '../../core-bridge/sdk-core/sdk-core-protos/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto' + '../../core-bridge/sdk-core/crates/common/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto' ), - { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/sdk-core-protos/protos/testsrv_upstream')] } + { includeDirs: [path.resolve(__dirname, '../../core-bridge/sdk-core/crates/common/protos/testsrv_upstream')] } ); const testServiceProtoDescriptor = grpc.loadPackageDefinition(testServicePackageDefinition) as any; diff --git a/packages/test/src/test-worker-deployment-versioning.ts b/packages/test/src/test-worker-deployment-versioning.ts index fdac331cc..28b4d15a2 100644 --- a/packages/test/src/test-worker-deployment-versioning.ts +++ b/packages/test/src/test-worker-deployment-versioning.ts @@ -11,7 +11,7 @@ import { Client } from '@temporalio/client'; import { toCanonicalString, WorkerDeploymentVersion } from '@temporalio/common'; import { temporal } from '@temporalio/proto'; import { Worker } from './helpers'; -import { Context, makeTestFunction } from './helpers-integration'; +import { Context, helpers, makeTestFunction } from './helpers-integration'; import { unblockSignal, versionQuery } from './workflows'; const test = makeTestFunction({ workflowsPath: __filename }); @@ -20,6 +20,7 @@ test('Worker deployment based versioning', async (t) => { const taskQueue = 'worker-deployment-based-versioning-' + randomUUID(); const deploymentName = 'deployment-' + randomUUID(); const { client, nativeConnection } = t.context.env; + const { createNativeConnection } = helpers(t); const w1DeploymentVersion = { buildId: '1.0', @@ -49,6 +50,8 @@ test('Worker deployment based versioning', async (t) => { t.fail('Worker 1.0 run error: ' + err); }); + const worker2Connection = await createNativeConnection(); + t.teardown(() => worker2Connection.close()); const worker2 = await Worker.create({ workflowsPath: require.resolve('./deployment-versioning-v2'), taskQueue, @@ -57,13 +60,15 @@ test('Worker deployment based versioning', async (t) => { version: w2DeploymentVersion, defaultVersioningBehavior: 'PINNED', }, - connection: nativeConnection, + connection: worker2Connection, }); const worker2Promise = worker2.run(); worker2Promise.catch((err) => { t.fail('Worker 2.0 run error: ' + err); }); + const worker3Connection = await createNativeConnection(); + t.teardown(() => worker3Connection.close()); const worker3 = await Worker.create({ workflowsPath: require.resolve('./deployment-versioning-v3'), taskQueue, @@ -72,7 +77,7 @@ test('Worker deployment based versioning', async (t) => { version: w3DeploymentVersion, defaultVersioningBehavior: 'PINNED', }, - connection: nativeConnection, + connection: worker3Connection, }); const worker3Promise = worker3.run(); worker3Promise.catch((err) => { @@ -141,6 +146,7 @@ test('Worker deployment based versioning with ramping', async (t) => { const taskQueue = 'worker-deployment-based-ramping-' + randomUUID(); const deploymentName = 'deployment-ramping-' + randomUUID(); const { client, nativeConnection } = t.context.env; + const { createNativeConnection } = helpers(t); const v1 = { buildId: '1.0', @@ -166,6 +172,8 @@ test('Worker deployment based versioning with ramping', async (t) => { t.fail('Worker 1.0 run error: ' + err); }); + const worker2Connection = await createNativeConnection(); + t.teardown(() => worker2Connection.close()); const worker2 = await Worker.create({ workflowsPath: require.resolve('./deployment-versioning-v2'), taskQueue, @@ -174,7 +182,7 @@ test('Worker deployment based versioning with ramping', async (t) => { version: v2, defaultVersioningBehavior: 'PINNED', }, - connection: nativeConnection, + connection: worker2Connection, }); const worker2Promise = worker2.run(); worker2Promise.catch((err) => { diff --git a/packages/test/src/test-worker-poller-autoscale.ts b/packages/test/src/test-worker-poller-autoscale.ts index edd96c8b9..669255066 100644 --- a/packages/test/src/test-worker-poller-autoscale.ts +++ b/packages/test/src/test-worker-poller-autoscale.ts @@ -48,7 +48,7 @@ test.serial('Can run autoscaling polling worker', async (t) => { const activity_pollers = matches.filter((l) => l.includes('activity_task')); t.is(activity_pollers.length, 1, 'Should have exactly one activity poller metric'); t.true(activity_pollers[0].endsWith('2'), 'Activity poller count should be 2'); - const workflow_pollers = matches.filter((l) => l.includes('workflow_task')); + const workflow_pollers = matches.filter((l) => l.includes('workflow_task') && l.includes(taskQueue)); t.is(workflow_pollers.length, 2, 'Should have exactly two workflow poller metrics (sticky and non-sticky)'); // There's sticky & non-sticky pollers, and they may have a count of 1 or 2 depending on diff --git a/packages/testing/src/testing-workflow-environment.ts b/packages/testing/src/testing-workflow-environment.ts index 5187f996f..ab3cd82b7 100644 --- a/packages/testing/src/testing-workflow-environment.ts +++ b/packages/testing/src/testing-workflow-environment.ts @@ -90,7 +90,8 @@ export class TestWorkflowEnvironment { protected readonly server: native.EphemeralServer | 'existing', connection: Connection, nativeConnection: NativeConnection, - namespace: string | undefined + namespace: string | undefined, + public readonly address: string ) { this.connection = connection; this.nativeConnection = nativeConnection; @@ -238,7 +239,16 @@ export class TestWorkflowEnvironment { [InternalConnectionOptionsSymbol]: { supportsTestService: supportsTimeSkipping }, }); - return new this(runtime, optsWithDefaults, supportsTimeSkipping, server, connection, nativeConnection, namespace); + return new this( + runtime, + optsWithDefaults, + supportsTimeSkipping, + server, + connection, + nativeConnection, + namespace, + address + ); } /** diff --git a/packages/worker/src/runtime-options.ts b/packages/worker/src/runtime-options.ts index b92ad017e..d38db5a87 100644 --- a/packages/worker/src/runtime-options.ts +++ b/packages/worker/src/runtime-options.ts @@ -468,7 +468,7 @@ export type MakeTelemetryFilterStringOptions = CoreLogFilterOptions; */ export function makeTelemetryFilterString(options: CoreLogFilterOptions): string { const { core, other } = options; - return `${other ?? 'ERROR'},temporal_sdk_core=${core},temporal_client=${core},temporal_sdk=${core}`; + return `${other ?? 'ERROR'},temporalio_sdk_core=${core},temporalio_client=${core},temporalio_common=${core}`; } function isOtelCollectorExporter(metrics: MetricsExporterConfig): metrics is OtelCollectorExporter {