diff --git a/Cargo.lock b/Cargo.lock index 7373052478..2cd5161510 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -742,7 +742,7 @@ dependencies = [ [[package]] name = "clickhouse-inserter" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-channel", @@ -766,7 +766,7 @@ dependencies = [ [[package]] name = "clickhouse-user-query" -version = "25.7.3" +version = "25.8.0" dependencies = [ "clickhouse", "serde", @@ -1369,7 +1369,7 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "epoxy" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -1408,7 +1408,7 @@ dependencies = [ [[package]] name = "epoxy-protocol" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "rivet-util", @@ -1666,7 +1666,7 @@ dependencies = [ [[package]] name = "gasoline" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-stream", @@ -1713,7 +1713,7 @@ dependencies = [ [[package]] name = "gasoline-macros" -version = "25.7.3" +version = "25.8.0" dependencies = [ "proc-macro2", "quote", @@ -2361,7 +2361,7 @@ dependencies = [ [[package]] name = "internal" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "gasoline", @@ -2759,7 +2759,7 @@ dependencies = [ [[package]] name = "namespace" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "epoxy", @@ -3231,7 +3231,7 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pegboard" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -3260,7 +3260,7 @@ dependencies = [ [[package]] name = "pegboard-actor-kv" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "futures-util", @@ -3279,7 +3279,7 @@ dependencies = [ [[package]] name = "pegboard-gateway" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-trait", @@ -3306,7 +3306,7 @@ dependencies = [ [[package]] name = "pegboard-runner" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-trait", @@ -3339,7 +3339,7 @@ dependencies = [ [[package]] name = "pegboard-serverless" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -4038,7 +4038,7 @@ dependencies = [ [[package]] name = "rivet-api-builder" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -4082,7 +4082,7 @@ dependencies = [ [[package]] name = "rivet-api-peer" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -4111,7 +4111,7 @@ dependencies = [ [[package]] name = "rivet-api-public" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -4143,7 +4143,7 @@ dependencies = [ [[package]] name = "rivet-api-types" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "gasoline", @@ -4158,7 +4158,7 @@ dependencies = [ [[package]] name = "rivet-api-util" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -4178,7 +4178,7 @@ dependencies = [ [[package]] name = "rivet-bootstrap" -version = "25.7.3" +version = "25.8.0" dependencies = [ "epoxy", "gasoline", @@ -4194,7 +4194,7 @@ dependencies = [ [[package]] name = "rivet-cache" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "futures-util", @@ -4235,14 +4235,14 @@ dependencies = [ [[package]] name = "rivet-cache-result" -version = "25.7.3" +version = "25.8.0" dependencies = [ "rivet-util", ] [[package]] name = "rivet-config" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "config", @@ -4260,7 +4260,7 @@ dependencies = [ [[package]] name = "rivet-data" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "gasoline", @@ -4274,7 +4274,7 @@ dependencies = [ [[package]] name = "rivet-dump-openapi" -version = "25.7.3" +version = "25.8.0" dependencies = [ "rivet-api-public", "serde_json", @@ -4283,7 +4283,7 @@ dependencies = [ [[package]] name = "rivet-engine" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -4343,7 +4343,7 @@ dependencies = [ [[package]] name = "rivet-env" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "lazy_static", @@ -4353,7 +4353,7 @@ dependencies = [ [[package]] name = "rivet-error" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "indoc", @@ -4365,7 +4365,7 @@ dependencies = [ [[package]] name = "rivet-error-macros" -version = "25.7.3" +version = "25.8.0" dependencies = [ "indoc", "proc-macro2", @@ -4376,7 +4376,7 @@ dependencies = [ [[package]] name = "rivet-guard" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "axum 0.8.4", @@ -4419,7 +4419,7 @@ dependencies = [ [[package]] name = "rivet-guard-core" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-trait", @@ -4464,7 +4464,7 @@ dependencies = [ [[package]] name = "rivet-logs" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "chrono", @@ -4478,7 +4478,7 @@ dependencies = [ [[package]] name = "rivet-metrics" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "console-subscriber", @@ -4496,7 +4496,7 @@ dependencies = [ [[package]] name = "rivet-pools" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-nats", @@ -4529,7 +4529,7 @@ dependencies = [ [[package]] name = "rivet-runner-protocol" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -4544,7 +4544,7 @@ dependencies = [ [[package]] name = "rivet-runtime" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "console-subscriber", @@ -4570,7 +4570,7 @@ dependencies = [ [[package]] name = "rivet-service-manager" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "chrono", @@ -4585,7 +4585,7 @@ dependencies = [ [[package]] name = "rivet-telemetry" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "rivet-config", @@ -4609,7 +4609,7 @@ dependencies = [ [[package]] name = "rivet-test-deps" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "futures-util", @@ -4627,7 +4627,7 @@ dependencies = [ [[package]] name = "rivet-test-deps-docker" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "portpicker", @@ -4658,7 +4658,7 @@ dependencies = [ [[package]] name = "rivet-types" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "gasoline", @@ -4675,7 +4675,7 @@ dependencies = [ [[package]] name = "rivet-ups-protocol" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -4688,7 +4688,7 @@ dependencies = [ [[package]] name = "rivet-util" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-trait", @@ -4717,7 +4717,7 @@ dependencies = [ [[package]] name = "rivet-util-id" -version = "25.7.3" +version = "25.8.0" dependencies = [ "serde", "thiserror 1.0.69", @@ -4728,7 +4728,7 @@ dependencies = [ [[package]] name = "rivet-workflow-worker" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "epoxy", @@ -6345,7 +6345,7 @@ checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "universaldb" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-trait", @@ -6372,7 +6372,7 @@ dependencies = [ [[package]] name = "universalpubsub" -version = "25.7.3" +version = "25.8.0" dependencies = [ "anyhow", "async-nats", diff --git a/out/errors/guard.service_unavailable.json b/out/errors/guard.service_unavailable.json new file mode 100644 index 0000000000..a81e6312c6 --- /dev/null +++ b/out/errors/guard.service_unavailable.json @@ -0,0 +1,5 @@ +{ + "code": "service_unavailable", + "group": "guard", + "message": "Service unavailable." +} \ No newline at end of file diff --git a/out/openapi.json b/out/openapi.json index 1d07f8e712..904e986439 100644 --- a/out/openapi.json +++ b/out/openapi.json @@ -11,7 +11,7 @@ "name": "Apache-2.0", "identifier": "Apache-2.0" }, - "version": "25.7.3" + "version": "25.8.0" }, "paths": { "/actors": { diff --git a/packages/core/api-peer/src/internal.rs b/packages/core/api-peer/src/internal.rs index fa68dfd257..24482af7c6 100644 --- a/packages/core/api-peer/src/internal.rs +++ b/packages/core/api-peer/src/internal.rs @@ -97,9 +97,13 @@ pub async fn epoxy_replica_reconfigure( _query: (), _body: ReplicaReconfigureRequest, ) -> Result { - ctx.signal(epoxy::workflows::coordinator::ReplicaReconfigure {}) - .send() - .await?; + if ctx.config().is_leader() { + ctx.signal(epoxy::workflows::coordinator::ReplicaReconfigure {}) + .to_workflow::() + .tag("replica", ctx.config().epoxy_replica_id()) + .send() + .await?; + } Ok(ReplicaReconfigureResponse {}) } diff --git a/packages/core/api-public/src/metadata.rs b/packages/core/api-public/src/metadata.rs index 253e12b2ac..694143b042 100644 --- a/packages/core/api-public/src/metadata.rs +++ b/packages/core/api-public/src/metadata.rs @@ -1,10 +1,15 @@ use axum::Json; use axum::response::IntoResponse; +use rivet_api_builder::{ApiError, extract::Extension}; use serde_json::json; +use crate::ctx::ApiCtx; + /// Returns metadata about the API including runtime and version #[tracing::instrument(skip_all)] -pub async fn get_metadata() -> impl IntoResponse { +pub async fn get_metadata(Extension(ctx): Extension) -> impl IntoResponse { + ctx.skip_auth(); + Json(json!({ "runtime": "engine", "version": env!("CARGO_PKG_VERSION") diff --git a/packages/core/guard/core/src/errors.rs b/packages/core/guard/core/src/errors.rs index d3e905b222..f45b47c0ce 100644 --- a/packages/core/guard/core/src/errors.rs +++ b/packages/core/guard/core/src/errors.rs @@ -69,6 +69,10 @@ pub struct ConnectionError { pub remote_addr: String, } +#[derive(RivetError, Serialize, Deserialize)] +#[error("guard", "service_unavailable", "Service unavailable.")] +pub struct ServiceUnavailable; + #[derive(RivetError, Serialize, Deserialize)] #[error( "guard", diff --git a/packages/core/pegboard-gateway/src/lib.rs b/packages/core/pegboard-gateway/src/lib.rs index 2aeca93822..d39416a96a 100644 --- a/packages/core/pegboard-gateway/src/lib.rs +++ b/packages/core/pegboard-gateway/src/lib.rs @@ -6,8 +6,11 @@ use gas::prelude::*; use http_body_util::{BodyExt, Full}; use hyper::{Request, Response, StatusCode, header::HeaderName}; use rivet_guard_core::{ - WebSocketHandle, custom_serve::CustomServeTrait, errors::WebSocketServiceUnavailable, - proxy_service::ResponseBody, request_context::RequestContext, + WebSocketHandle, + custom_serve::CustomServeTrait, + errors::{ServiceUnavailable, WebSocketServiceUnavailable}, + proxy_service::ResponseBody, + request_context::RequestContext, }; use rivet_runner_protocol as protocol; use rivet_util::serde::HashableMap; @@ -122,20 +125,20 @@ impl CustomServeTrait for PegboardGateway { }, TunnelMessageData::Timeout => { tracing::warn!("tunnel message timeout"); - return Err(WebSocketServiceUnavailable.build()); + return Err(ServiceUnavailable.build()); } } } tracing::warn!("received no message response"); - Err(WebSocketServiceUnavailable.build()) + Err(ServiceUnavailable.build()) }; let response_start = tokio::time::timeout(TUNNEL_ACK_TIMEOUT, fut) .await .map_err(|_| { tracing::warn!("timed out waiting for tunnel ack"); - WebSocketServiceUnavailable.build() + ServiceUnavailable.build() })??; tracing::debug!("response handler task ended"); diff --git a/packages/services/epoxy/src/workflows/replica/setup.rs b/packages/services/epoxy/src/workflows/replica/setup.rs index c036cef4b9..911be58f67 100644 --- a/packages/services/epoxy/src/workflows/replica/setup.rs +++ b/packages/services/epoxy/src/workflows/replica/setup.rs @@ -16,7 +16,7 @@ use crate::types; #[tracing::instrument(skip_all)] pub async fn setup_replica(ctx: &mut WorkflowCtx, _input: &super::Input) -> Result<()> { - // Wait for cooridinator to send begin learning signal + // Wait for coordinator to send begin learning signal let begin_learning = ctx.listen::().await?; // TODO: Paralellize replicas diff --git a/packages/services/pegboard/src/ops/runner/find_dc_with_runner.rs b/packages/services/pegboard/src/ops/runner/find_dc_with_runner.rs index 63223531e3..bb8f3a2efc 100644 --- a/packages/services/pegboard/src/ops/runner/find_dc_with_runner.rs +++ b/packages/services/pegboard/src/ops/runner/find_dc_with_runner.rs @@ -5,7 +5,7 @@ use futures_util::{FutureExt, StreamExt, TryFutureExt, stream::FuturesUnordered} use gas::prelude::*; use rivet_api_types::{runner_configs::list as runner_configs_list, runners::list as runners_list}; use rivet_api_util::{Method, request_remote_datacenter}; -use rivet_types::runner_configs::{RunnerConfig, RunnerConfigKind}; +use rivet_types::runner_configs::RunnerConfigKind; use serde::de::DeserializeOwned; #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/packages/services/pegboard/src/workflows/actor/runtime.rs b/packages/services/pegboard/src/workflows/actor/runtime.rs index 198000928c..e98eb5146a 100644 --- a/packages/services/pegboard/src/workflows/actor/runtime.rs +++ b/packages/services/pegboard/src/workflows/actor/runtime.rs @@ -6,9 +6,8 @@ use gas::prelude::*; use rivet_metrics::KeyValue; use rivet_runner_protocol as protocol; use rivet_types::{ - actors::CrashPolicy, - keys::namespace::runner_config::RunnerConfigVariant, - runner_configs::{RunnerConfig, RunnerConfigKind}, + actors::CrashPolicy, keys::namespace::runner_config::RunnerConfigVariant, + runner_configs::RunnerConfigKind, }; use std::time::Instant; use universaldb::options::{ConflictRangeType, MutationType, StreamingMode};