Skip to main content

Singleflight

Struct Singleflight 

Source
pub struct Singleflight { /* private fields */ }
Expand description

Singleflight coalescing layer.

Tracks in-flight queries by key. Concurrent identical queries share results.

Implementations§

Source§

impl Singleflight

Source

pub fn new() -> Self

Create a new singleflight coalescing layer.

Source

pub fn try_join(&self, key: u64) -> FlightResult

Try to join an in-flight query group, or become the leader.

key should be a hash of (sql_hash, parameter bytes).

Source

pub fn wait_for_result( state: &FlightState, ) -> Option<Arc<Result<Arc<OwnedResultSnapshot>, BsqlError>>>

Wait for a flight result as a follower.

Blocks until the leader calls complete(), is dropped, or the 30-second timeout expires. Returns None if the leader was dropped without completing (e.g., panic) or if the wait timed out.

Source

pub fn compute_key(sql_hash: u64, params: &[&(dyn Encode + Sync)]) -> u64

Compute a singleflight key from sql_hash and parameter data.

Uses rapidhash to combine the sql_hash with a hash of all parameter bytes (including actual encoded values). Two queries with the same SQL and same parameter values produce the same key.

Trait Implementations§

Source§

impl Default for Singleflight

Source§

fn default() -> Self

Returns the “default value” for a type. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
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.