diff --git a/Cargo.lock b/Cargo.lock index aeef286bff..dc61275d08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1867,6 +1867,18 @@ dependencies = [ "universalpubsub", ] +[[package]] +name = "depot-client-embedded" +version = "2.3.0-rc.4" +dependencies = [ + "anyhow", + "async-trait", + "depot", + "depot-client", + "rivet-envoy-protocol", + "tokio", +] + [[package]] name = "depot-client-types" version = "2.3.0-rc.4" @@ -4225,6 +4237,7 @@ dependencies = [ "bytes", "depot", "depot-client", + "depot-client-embedded", "futures-util", "gasoline", "http-body 1.0.1", @@ -6017,7 +6030,6 @@ dependencies = [ "reqwest", "rivet-envoy-client", "rivet-error", - "rivet-pools", "rivetkit-actor-persist", "rivetkit-client-protocol", "rivetkit-inspector-protocol", diff --git a/Cargo.toml b/Cargo.toml index 22899cb81b..96ec109dbf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,9 @@ members = [ "engine/packages/config", "engine/packages/config-schema-gen", "engine/packages/datacenter", + "engine/packages/depot-client", + "engine/packages/depot-client-embedded", + "engine/packages/depot-client-types", "engine/packages/engine", "engine/packages/env", "engine/packages/epoxy", @@ -63,8 +66,6 @@ members = [ "rivetkit-rust/packages/actor-persist", "rivetkit-rust/packages/rivetkit-core", "rivetkit-rust/packages/shared-types", - "engine/packages/depot-client", - "engine/packages/depot-client-types", "rivetkit-typescript/packages/rivetkit-napi", "rivetkit-typescript/packages/rivetkit-wasm" ] @@ -561,6 +562,9 @@ members = [ [workspace.dependencies.depot-client] path = "engine/packages/depot-client" + [workspace.dependencies.depot-client-embedded] + path = "engine/packages/depot-client-embedded" + [workspace.dependencies.depot-client-types] path = "engine/packages/depot-client-types" diff --git a/engine/packages/depot-client-embedded/Cargo.toml b/engine/packages/depot-client-embedded/Cargo.toml new file mode 100644 index 0000000000..5fe50d156f --- /dev/null +++ b/engine/packages/depot-client-embedded/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "depot-client-embedded" +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true +workspace = "../../../" +description = "Embedded Depot transport for depot-client SQLite VFS" + +[lib] +crate-type = ["lib"] + +[dependencies] +anyhow.workspace = true +async-trait.workspace = true +depot.workspace = true +depot-client.workspace = true +rivet-envoy-protocol.workspace = true +tokio.workspace = true diff --git a/engine/packages/depot-client/src/transport.rs b/engine/packages/depot-client-embedded/src/lib.rs similarity index 69% rename from engine/packages/depot-client/src/transport.rs rename to engine/packages/depot-client-embedded/src/lib.rs index fc7e8b2ebf..9fa56460b6 100644 --- a/engine/packages/depot-client/src/transport.rs +++ b/engine/packages/depot-client-embedded/src/lib.rs @@ -1,16 +1,19 @@ -//! SQLite transport adapters. +//! Embedded Depot transport for depot-client. //! -//! `EmbeddedDepotSqliteTransport` is for deployments where the SQLite VFS runs in the -//! same process or server as the Depot backend. It calls `depot::conveyer::Db` -//! directly instead of routing page operations through an actor Envoy transport. +//! This crate is for deployments where the SQLite VFS runs in the same process +//! as the Depot backend. It keeps engine storage dependencies out of the base +//! `depot-client` crate used by NAPI. use std::sync::Arc; use anyhow::Result; use async_trait::async_trait; +use depot_client::{ + database::{NativeDatabaseHandle, open_database_from_transport}, + vfs::{SqliteTransport, SqliteVfsMetrics}, +}; use rivet_envoy_protocol as protocol; - -use crate::vfs::SqliteTransport; +use tokio::runtime::Handle; pub struct EmbeddedDepotSqliteTransport { db: Arc, @@ -22,6 +25,23 @@ impl EmbeddedDepotSqliteTransport { } } +pub async fn open_database_from_embedded_depot( + db: Arc, + actor_id: String, + generation: u64, + rt_handle: Handle, + metrics: Option>, +) -> Result { + open_database_from_transport( + Arc::new(EmbeddedDepotSqliteTransport::new(db)), + actor_id, + generation, + rt_handle, + metrics, + ) + .await +} + #[async_trait] impl SqliteTransport for EmbeddedDepotSqliteTransport { async fn get_pages( diff --git a/engine/packages/depot-client/Cargo.toml b/engine/packages/depot-client/Cargo.toml index 221a7164c1..20001d259f 100644 --- a/engine/packages/depot-client/Cargo.toml +++ b/engine/packages/depot-client/Cargo.toml @@ -20,7 +20,6 @@ tracing.workspace = true getrandom = "0.2" rivet-envoy-protocol.workspace = true depot-client-types.workspace = true -depot.workspace = true moka = { version = "0.12", default-features = false, features = ["sync"] } parking_lot.workspace = true scc.workspace = true diff --git a/engine/packages/depot-client/src/database.rs b/engine/packages/depot-client/src/database.rs index 5310583de7..dd42f9a553 100644 --- a/engine/packages/depot-client/src/database.rs +++ b/engine/packages/depot-client/src/database.rs @@ -5,7 +5,6 @@ use tokio::runtime::Handle; use crate::{ query::{BindParam, ExecResult, ExecuteResult, QueryResult}, - transport::EmbeddedDepotSqliteTransport, vfs::{ NativeVfsHandle, SqliteTransportHandle, SqliteVfs, SqliteVfsMetrics, SqliteVfsMetricsSnapshot, VfsConfig, VfsPreloadHintSnapshot, @@ -54,23 +53,6 @@ pub async fn open_database_from_transport( Ok(native_db) } -pub async fn open_database_from_embedded_depot( - db: Arc, - actor_id: String, - generation: u64, - rt_handle: Handle, - metrics: Option>, -) -> Result { - open_database_from_transport( - Arc::new(EmbeddedDepotSqliteTransport::new(db)), - actor_id, - generation, - rt_handle, - metrics, - ) - .await -} - impl NativeDatabaseHandle { pub fn new(vfs: NativeVfsHandle, file_name: String) -> Result { Self::new_with_metrics(vfs, file_name, None) diff --git a/engine/packages/depot-client/src/lib.rs b/engine/packages/depot-client/src/lib.rs index 758cd81e7f..e4222e258e 100644 --- a/engine/packages/depot-client/src/lib.rs +++ b/engine/packages/depot-client/src/lib.rs @@ -23,9 +23,6 @@ pub mod optimization_flags; /// SQLite query execution helpers. pub mod query; -/// SQLite transport adapters for same-process Depot usage. -pub mod transport; - pub use depot_client_types as types; /// Custom SQLite VFS for actor-side depot transport. diff --git a/engine/packages/pegboard-envoy/Cargo.toml b/engine/packages/pegboard-envoy/Cargo.toml index 17d8ff8932..024e957062 100644 --- a/engine/packages/pegboard-envoy/Cargo.toml +++ b/engine/packages/pegboard-envoy/Cargo.toml @@ -27,6 +27,7 @@ rivet-metrics.workspace = true rivet-pools.workspace = true rivet-envoy-protocol.workspace = true depot-client.workspace = true +depot-client-embedded.workspace = true rivet-runtime.workspace = true rivet-types.workspace = true scc.workspace = true diff --git a/engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs b/engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs index 381cf12667..45e7bb65f3 100644 --- a/engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs +++ b/engine/packages/pegboard-envoy/src/ws_to_tunnel_task.rs @@ -8,9 +8,10 @@ use depot::{ }, }; use depot_client::{ - database::{NativeDatabaseHandle, open_database_from_embedded_depot}, + database::NativeDatabaseHandle, types::{BindParam, ColumnValue, ExecuteResult, QueryResult}, }; +use depot_client_embedded::open_database_from_embedded_depot; use futures_util::{FutureExt, TryStreamExt}; use gas::prelude::Id; use gas::prelude::*; diff --git a/rivetkit-rust/packages/rivetkit-core/Cargo.toml b/rivetkit-rust/packages/rivetkit-core/Cargo.toml index 7cccabfd73..7c4fedb060 100644 --- a/rivetkit-rust/packages/rivetkit-core/Cargo.toml +++ b/rivetkit-rust/packages/rivetkit-core/Cargo.toml @@ -12,7 +12,6 @@ default = ["native-runtime"] native-runtime = [ "dep:nix", "dep:reqwest", - "dep:rivet-pools", "rivet-envoy-client/native-transport", ] wasm-runtime = ["rivet-envoy-client/wasm-transport"] @@ -32,7 +31,6 @@ parking_lot.workspace = true prometheus.workspace = true rand.workspace = true reqwest = { workspace = true, optional = true } -rivet-pools = { workspace = true, optional = true } rivet-error.workspace = true rivet-envoy-client = { workspace = true, default-features = false } rivetkit-shared-types.workspace = true diff --git a/rivetkit-rust/packages/rivetkit-core/src/engine_process.rs b/rivetkit-rust/packages/rivetkit-core/src/engine_process.rs index fc8b0b5e25..939b5127cf 100644 --- a/rivetkit-rust/packages/rivetkit-core/src/engine_process.rs +++ b/rivetkit-rust/packages/rivetkit-core/src/engine_process.rs @@ -3,7 +3,7 @@ use std::process::Stdio; use std::time::{Duration, Instant}; use anyhow::{Context, Result}; -use reqwest::Url; +use reqwest::{Client, Url}; use serde::Deserialize; use tokio::process::{Child, Command}; use tokio::task::JoinHandle; @@ -233,8 +233,8 @@ fn spawn_engine_watcher(mut child: Child, pid: u32) -> JoinHandle<()> { /// (for example a stale rivetkit) which would conflict with a fresh spawn. async fn probe_existing_engine(endpoint: &str) -> Result> { let health_url = engine_health_url(endpoint); - let client = rivet_pools::reqwest::client() - .await + let client = Client::builder() + .build() .context("build reqwest client for engine probe")?; let response = match client @@ -316,8 +316,8 @@ async fn wait_for_engine_health(health_url: &str) -> Result R return Ok(()); } - let client = rivet_pools::reqwest::client() - .await + let client = Client::builder() + .build() .context("build reqwest client for runner config")?; let datacenters = get_datacenters(&client, config).await?; let mut runner_datacenters = JsonMap::new();