Skip to main content

Engine

Struct Engine 

Source
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

Source

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.

Source

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.

Source

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.

Source

pub fn with_available_cores_config(config: EngineConfig) -> Self

Creates an engine with one shard per available CPU core and the given config.

Source

pub fn shard_count(&self) -> usize

Returns the number of shards.

Source

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.

Source

pub async fn route( &self, key: &str, request: ShardRequest, ) -> Result<ShardResponse, ShardError>

Routes a request to the shard that owns key.

Source

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.

Source

pub async fn route_multi<F>( &self, keys: &[String], make_req: F, ) -> Result<Vec<ShardResponse>, ShardError>
where F: Fn(String) -> ShardRequest,

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.

Trait Implementations§

Source§

impl Clone for Engine

Source§

fn clone(&self) -> Engine

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Engine

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more