pub struct Engine { /* private fields */ }Expand description
The sharded engine. Owns handles to all shard tasks and routes requests by key hash.
Clone is cheap — it just clones the Vec<ShardHandle> (which are
mpsc senders under the hood).
Implementations§
Source§impl Engine
impl Engine
Sourcepub fn new(shard_count: usize) -> Self
pub fn new(shard_count: usize) -> Self
Creates an engine with shard_count shards using default config.
Each shard is spawned as a tokio task immediately.
Panics if shard_count is zero.
Sourcepub fn with_config(shard_count: usize, config: EngineConfig) -> Self
pub fn with_config(shard_count: usize, config: EngineConfig) -> Self
Creates an engine with shard_count shards and the given config.
Panics if shard_count is zero.
Sourcepub fn with_available_cores() -> Self
pub fn with_available_cores() -> Self
Creates an engine with one shard per available CPU core.
Falls back to a single shard if the core count can’t be determined.
Sourcepub fn with_available_cores_config(config: EngineConfig) -> Self
pub fn with_available_cores_config(config: EngineConfig) -> Self
Creates an engine with one shard per available CPU core and the given config.
Sourcepub fn shard_count(&self) -> usize
pub fn shard_count(&self) -> usize
Returns the number of shards.
Sourcepub async fn send_to_shard(
&self,
shard_idx: usize,
request: ShardRequest,
) -> Result<ShardResponse, ShardError>
pub async fn send_to_shard( &self, shard_idx: usize, request: ShardRequest, ) -> Result<ShardResponse, ShardError>
Sends a request to a specific shard by index.
Used by SCAN to iterate through shards sequentially.
Sourcepub async fn route(
&self,
key: &str,
request: ShardRequest,
) -> Result<ShardResponse, ShardError>
pub async fn route( &self, key: &str, request: ShardRequest, ) -> Result<ShardResponse, ShardError>
Routes a request to the shard that owns key.
Sourcepub async fn broadcast<F>(
&self,
make_req: F,
) -> Result<Vec<ShardResponse>, ShardError>where
F: Fn() -> ShardRequest,
pub async fn broadcast<F>(
&self,
make_req: F,
) -> Result<Vec<ShardResponse>, ShardError>where
F: Fn() -> ShardRequest,
Sends a request to every shard and collects all responses.
Dispatches to all shards first (so they start processing in parallel), then collects the replies. Used for commands like DBSIZE and INFO that need data from all shards.
Sourcepub async fn route_multi<F>(
&self,
keys: &[String],
make_req: F,
) -> Result<Vec<ShardResponse>, ShardError>
pub async fn route_multi<F>( &self, keys: &[String], make_req: F, ) -> Result<Vec<ShardResponse>, ShardError>
Routes requests for multiple keys concurrently.
Dispatches all requests without waiting, then collects responses. The response order matches the key order. Used for multi-key commands like DEL and EXISTS.