From 7182d14c59c50eebb49b8211499f76fe664ad597 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 26 Jun 2026 20:33:15 +0200 Subject: [PATCH 1/2] feat: made aquila grpc timeout configurable --- .env-example | 2 ++ crates/taurus/src/app/mod.rs | 6 ++++++ crates/taurus/src/client/runtime_execution.rs | 11 +++++++++-- crates/taurus/src/client/runtime_status.rs | 7 +++++-- crates/taurus/src/config/mod.rs | 14 ++++++++++++++ docs/dev.md | 2 ++ docs/installation.mdx | 2 ++ 7 files changed, 40 insertions(+), 4 deletions(-) diff --git a/.env-example b/.env-example index 6ee67d5..43b36aa 100644 --- a/.env-example +++ b/.env-example @@ -11,3 +11,5 @@ GRPC_PORT=50051 DEFINITIONS='./definitions' RUNTIME_STATUS_UPDATE_INTERVAL_SECONDS=30 +AQUILA_GRPC_CONNECT_TIMEOUT_SECS=2 +AQUILA_GRPC_REQUEST_TIMEOUT_SECS=10 diff --git a/crates/taurus/src/app/mod.rs b/crates/taurus/src/app/mod.rs index ed2d126..1c8b175 100644 --- a/crates/taurus/src/app/mod.rs +++ b/crates/taurus/src/app/mod.rs @@ -118,6 +118,8 @@ async fn setup_dynamic_services_if_needed( TaurusRuntimeExecutionService::from_url( config.aquila_url.clone(), config.aquila_token.clone(), + Duration::from_secs(config.aquila_grpc_connect_timeout_secs), + Duration::from_secs(config.aquila_grpc_request_timeout_secs), ) .await, ); @@ -127,6 +129,8 @@ async fn setup_dynamic_services_if_needed( config.aquila_url.clone(), config.aquila_token.clone(), read_module_status_identifiers(config.definitions.as_str()), + Duration::from_secs(config.aquila_grpc_connect_timeout_secs), + Duration::from_secs(config.aquila_grpc_request_timeout_secs), ) .await, )); @@ -199,6 +203,8 @@ async fn push_definitions_until_success(config: &Config) { config.aquila_url.clone(), config.definitions.as_str(), config.aquila_token.clone(), + Duration::from_secs(config.aquila_grpc_connect_timeout_secs), + Duration::from_secs(config.aquila_grpc_request_timeout_secs), ) .await .with_definition_source(String::from("taurus")); diff --git a/crates/taurus/src/client/runtime_execution.rs b/crates/taurus/src/client/runtime_execution.rs index 0bd6291..fded0af 100644 --- a/crates/taurus/src/client/runtime_execution.rs +++ b/crates/taurus/src/client/runtime_execution.rs @@ -1,6 +1,7 @@ use code0_flow::flow_service::{ auth::get_authorization_metadata, retry::create_channel_with_retry, }; +use std::time::Duration; use tonic::{Extensions, Request, transport::Channel}; use tucana::{ aquila::{ExecutionRequest, execution_service_client::ExecutionServiceClient}, @@ -16,8 +17,14 @@ pub struct TaurusRuntimeExecutionService { } impl TaurusRuntimeExecutionService { - pub async fn from_url(aquila_url: String, aquila_token: String) -> Self { - let channel = create_channel_with_retry("Aquila", aquila_url).await; + pub async fn from_url( + aquila_url: String, + aquila_token: String, + connect_timeout: Duration, + request_timeout: Duration, + ) -> Self { + let channel = + create_channel_with_retry("Aquila", aquila_url, connect_timeout, request_timeout).await; let client = ExecutionServiceClient::new(channel); TaurusRuntimeExecutionService { diff --git a/crates/taurus/src/client/runtime_status.rs b/crates/taurus/src/client/runtime_status.rs index 6c5391f..71777b2 100644 --- a/crates/taurus/src/client/runtime_status.rs +++ b/crates/taurus/src/client/runtime_status.rs @@ -1,4 +1,4 @@ -use std::time::{SystemTime, UNIX_EPOCH}; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; use code0_flow::flow_service::{ auth::get_authorization_metadata, retry::create_channel_with_retry, @@ -22,8 +22,11 @@ impl TaurusRuntimeStatusService { aquila_url: String, aquila_token: String, identifiers: Vec, + connect_timeout: Duration, + request_timeout: Duration, ) -> Self { - let channel = create_channel_with_retry("Aquila", aquila_url).await; + let channel = + create_channel_with_retry("Aquila", aquila_url, connect_timeout, request_timeout).await; Self::new(channel, aquila_token, identifiers) } diff --git a/crates/taurus/src/config/mod.rs b/crates/taurus/src/config/mod.rs index d0e83a7..1f6a94c 100644 --- a/crates/taurus/src/config/mod.rs +++ b/crates/taurus/src/config/mod.rs @@ -30,6 +30,12 @@ pub struct Config { /// Runtime status heartbeat interval in seconds while Taurus is running. /// Set to 0 to disable periodic heartbeat updates. pub runtime_status_update_interval_seconds: u64, + + /// Timeout in seconds for establishing Aquila gRPC channels. + pub aquila_grpc_connect_timeout_secs: u64, + + /// Timeout in seconds for Aquila gRPC requests. + pub aquila_grpc_request_timeout_secs: u64, } /// Implementation for all relevant `Taurus` startup configurations @@ -52,6 +58,14 @@ impl Config { "RUNTIME_STATUS_UPDATE_INTERVAL_SECONDS", 30_u64, ), + aquila_grpc_connect_timeout_secs: env_with_default( + "AQUILA_GRPC_CONNECT_TIMEOUT_SECS", + 2_u64, + ), + aquila_grpc_request_timeout_secs: env_with_default( + "AQUILA_GRPC_REQUEST_TIMEOUT_SECS", + 10_u64, + ), } } } diff --git a/docs/dev.md b/docs/dev.md index 24dfa82..710fd10 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -100,6 +100,8 @@ Defaults are defined in `crates/taurus/src/config/mod.rs`. | `GRPC_PORT` | Health server port | `50051` | | `DEFINITIONS` | Path sent to `FlowUpdateService` for definition sync | `./definitions` | | `RUNTIME_STATUS_UPDATE_INTERVAL_SECONDS` | Heartbeat interval in dynamic mode (`0` disables heartbeat) | `30` | +| `AQUILA_GRPC_CONNECT_TIMEOUT_SECS` | Timeout in seconds for establishing Aquila gRPC channels | `2` | +| `AQUILA_GRPC_REQUEST_TIMEOUT_SECS` | Timeout in seconds for Aquila gRPC requests | `10` | ## Local Development diff --git a/docs/installation.mdx b/docs/installation.mdx index d6d4bef..957f599 100644 --- a/docs/installation.mdx +++ b/docs/installation.mdx @@ -101,3 +101,5 @@ Set `MODE=dynamic` when the IDE is required/needed. | `AQUILA_TOKEN` | Token used by Taurus to authenticate with Aquila. | `token` | | `DEFINITIONS` | Path to the runtime definition modules. | `./definitions` | | `RUNTIME_STATUS_UPDATE_INTERVAL_SECONDS` | Interval (in seconds) of updating the current runtime status. | `30s` | +| `AQUILA_GRPC_CONNECT_TIMEOUT_SECS` | Timeout in seconds for establishing Aquila gRPC channels. | `2s` | +| `AQUILA_GRPC_REQUEST_TIMEOUT_SECS` | Timeout in seconds for Aquila gRPC requests. | `10s` | From 6d3cf2f43bea538f23ba4c95cf807bd69eea432e Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 26 Jun 2026 20:33:22 +0200 Subject: [PATCH 2/2] deps: updated code0-flow --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 673a654..6bff3a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -295,9 +295,9 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "code0-flow" -version = "0.0.37" +version = "0.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15072d95451694ffcdb7fcd85cb44453e86fab6b9c2c23487c7699d2662918c9" +checksum = "708985c5041a712c44a26f15b5658946469ff79dc092e5ffb37e8861029f6bd9" dependencies = [ "async-nats", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index f1b4777..50443fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2024" [workspace.dependencies] async-trait = "0.1.89" -code0-flow = { version = "0.0.37" } +code0-flow = { version = "0.0.38" } tucana = { version = "0.0.75" } tokio = { version = "1.44.1", features = ["rt-multi-thread", "signal"] } log = "0.4.27"