pub struct OptimisticParallelWritePolicy;Expand description
Optimistic parallel write policy: Write to both simultaneously, succeed if ≥1 succeeds.
This strategy provides:
- Maximum availability (succeeds unless both fail)
- Fast writes (parallel execution)
- Weak consistency (layers may diverge)
§Behavior
- Start both
write_l1(key)andwrite_l2(key)in parallel - Wait for both to complete
- Aggregate results:
- Both succeed: Return Ok (best case)
- One succeeds: Return Ok with warning (partial success)
- Both fail: Return Err
§Consistency Guarantee
If this operation returns Ok(()), at least one of L1 or L2 has been updated.
This could mean:
- Both updated (strong consistency)
- Only L1 updated (L2 failed)
- Only L2 updated (L1 failed)
§Tradeoffs
- Pros: Highest availability, fast writes, tolerates partial failures
- Cons: Layers may diverge, need monitoring for partial failures
§Use Cases
- High availability requirements
- Non-critical data where eventual consistency is acceptable
- Systems with background reconciliation
- Degraded mode operation
Implementations§
Trait Implementations§
Source§impl Clone for OptimisticParallelWritePolicy
impl Clone for OptimisticParallelWritePolicy
Source§fn clone(&self) -> OptimisticParallelWritePolicy
fn clone(&self) -> OptimisticParallelWritePolicy
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl CompositionWritePolicy for OptimisticParallelWritePolicy
impl CompositionWritePolicy for OptimisticParallelWritePolicy
Source§fn execute_with<'life0, 'life1, 'async_trait, F1, F2, Fut1, Fut2, O>(
&'life0 self,
key: CacheKey,
write_l1: F1,
write_l2: F2,
_offload: &'life1 O,
) -> Pin<Box<dyn Future<Output = Result<(), BackendError>> + Send + 'async_trait>>where
F1: FnOnce(CacheKey) -> Fut1 + Send + 'async_trait,
F2: FnOnce(CacheKey) -> Fut2 + Send + 'async_trait,
Fut1: Future<Output = Result<(), BackendError>> + Send + 'static + 'async_trait,
Fut2: Future<Output = Result<(), BackendError>> + Send + 'static + 'async_trait,
O: Offload<'static> + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute_with<'life0, 'life1, 'async_trait, F1, F2, Fut1, Fut2, O>(
&'life0 self,
key: CacheKey,
write_l1: F1,
write_l2: F2,
_offload: &'life1 O,
) -> Pin<Box<dyn Future<Output = Result<(), BackendError>> + Send + 'async_trait>>where
F1: FnOnce(CacheKey) -> Fut1 + Send + 'async_trait,
F2: FnOnce(CacheKey) -> Fut2 + Send + 'async_trait,
Fut1: Future<Output = Result<(), BackendError>> + Send + 'static + 'async_trait,
Fut2: Future<Output = Result<(), BackendError>> + Send + 'static + 'async_trait,
O: Offload<'static> + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Execute a write operation with custom write closures for each layer. Read more
Source§impl Default for OptimisticParallelWritePolicy
impl Default for OptimisticParallelWritePolicy
Source§fn default() -> OptimisticParallelWritePolicy
fn default() -> OptimisticParallelWritePolicy
Returns the “default value” for a type. Read more
impl Copy for OptimisticParallelWritePolicy
Auto Trait Implementations§
impl Freeze for OptimisticParallelWritePolicy
impl RefUnwindSafe for OptimisticParallelWritePolicy
impl Send for OptimisticParallelWritePolicy
impl Sync for OptimisticParallelWritePolicy
impl Unpin for OptimisticParallelWritePolicy
impl UnwindSafe for OptimisticParallelWritePolicy
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.