Skip to main content

ExecutorReadyBuilder

Struct ExecutorReadyBuilder 

Source
pub struct ExecutorReadyBuilder<L, T> { /* private fields */ }
Expand description

Builder state after the required condition tester has been configured.

This state can configure prepare lifecycle callbacks and build the final DoubleCheckedLockExecutor.

§Type Parameters

  • L - The lock type implementing Lock<T>.
  • T - The data type protected by the lock.

Implementations§

Source§

impl<L, T> ExecutorReadyBuilder<L, T>
where L: Lock<T>,

Source

pub fn log_unmet_condition( self, level: Level, message: impl Into<String>, ) -> Self

Configures logging when the double-checked condition is not met.

§Parameters
  • level - Log level used for unmet-condition messages.
  • message - Full log message emitted when the condition is not met.
§Returns

This builder with unmet-condition logging configured.

Source

pub fn disable_unmet_condition_logging(self) -> Self

Disables logging when the double-checked condition is not met.

§Returns

This builder with unmet-condition logging disabled.

Source

pub fn log_prepare_failure( self, level: Level, message_prefix: impl Into<String>, ) -> Self

Configures logging when the prepare action fails.

§Parameters
  • level - Log level used for prepare failure messages.
  • message_prefix - Prefix placed before the prepare failure text.
§Returns

This builder with prepare failure logging configured.

Source

pub fn disable_prepare_failure_logging(self) -> Self

Disables logging when the prepare action fails.

§Returns

This builder with prepare failure logging disabled.

Source

pub fn log_prepare_commit_failure( self, level: Level, message_prefix: impl Into<String>, ) -> Self

Configures logging when the prepare commit action fails.

§Parameters
  • level - Log level used for prepare-commit failure messages.
  • message_prefix - Prefix placed before the prepare-commit failure text.
§Returns

This builder with prepare-commit failure logging configured.

Source

pub fn disable_prepare_commit_failure_logging(self) -> Self

Disables logging when the prepare commit action fails.

§Returns

This builder with prepare-commit failure logging disabled.

Source

pub fn log_prepare_rollback_failure( self, level: Level, message_prefix: impl Into<String>, ) -> Self

Configures logging when the prepare rollback action fails.

§Parameters
  • level - Log level used for prepare-rollback failure messages.
  • message_prefix - Prefix placed before the prepare-rollback failure text.
§Returns

This builder with prepare-rollback failure logging configured.

Source

pub fn disable_prepare_rollback_failure_logging(self) -> Self

Disables logging when the prepare rollback action fails.

§Returns

This builder with prepare-rollback failure logging disabled.

Source

pub fn prepare<Rn, E>(self, prepare_action: Rn) -> Self
where Rn: Runnable<E> + Send + 'static, E: Display,

Sets the prepare action.

The action runs after the first condition check succeeds and before the lock is acquired. If it succeeds, the executor will later run either rollback or commit according to the final task result.

Errors returned by this action are converted to String and reported by execution methods as super::ExecutionResult::Failed.

§Parameters
  • prepare_action - The fallible action to run before locking.
§Returns

This builder with prepare configured.

§Errors

This builder method does not return errors. If prepare_action later returns an error during execution, the execution result becomes super::ExecutionResult::Failed with super::ExecutorError::PrepareFailed.

Source

pub fn rollback_prepare<Rn, E>(self, rollback_prepare_action: Rn) -> Self
where Rn: Runnable<E> + Send + 'static, E: Display,

Sets the rollback action for a successfully completed prepare action.

Errors returned by this action are converted to String and replace the original execution result with a prepare-rollback failure.

§Parameters
  • rollback_prepare_action - The action to run if the second condition check or task execution fails after prepare succeeds.
§Returns

This builder with prepare rollback configured.

§Errors

This builder method does not return errors. If rollback_prepare_action later returns an error during execution, the execution result becomes super::ExecutionResult::Failed with super::ExecutorError::PrepareRollbackFailed.

Source

pub fn commit_prepare<Rn, E>(self, commit_prepare_action: Rn) -> Self
where Rn: Runnable<E> + Send + 'static, E: Display,

Sets the commit action for a successfully completed prepare action.

Errors returned by this action are converted to String and replace an otherwise successful execution result with a prepare-commit failure.

§Parameters
  • commit_prepare_action - The action to run if the task succeeds after prepare succeeds.
§Returns

This builder with prepare commit configured.

§Errors

This builder method does not return errors. If commit_prepare_action later returns an error during execution, the execution result becomes super::ExecutionResult::Failed with super::ExecutorError::PrepareCommitFailed.

Source

pub fn catch_panics(self) -> Self

Enables panic capture for tester, prepare callbacks, and task execution.

When enabled, panic payloads are converted to super::executor_error::ExecutorError::Panic and surfaced through super::ExecutionResult.

§Returns

This builder with panic capture enabled.

Source

pub fn with_panic_capture(self, catch_panics: bool) -> Self

Derives a builder with panic capture enabled or disabled for tester, prepare callbacks, and task execution.

§Parameters
  • catch_panics - true to capture panics as execution errors, or false to let panics unwind.
§Returns

A reconfigured builder with the updated panic-capture setting.

Source

pub fn disable_catch_panics(self) -> Self

Disables panic capture for tester, prepare callbacks, and task execution.

§Returns

This builder with panic capture disabled.

Source

pub fn build(self) -> DoubleCheckedLockExecutor<L, T>

Builds the reusable executor.

§Returns

A DoubleCheckedLockExecutor containing the configured lock, tester, execution logger, and prepare lifecycle callbacks.

Examples found in repository?
examples/double_checked_lock_executor_demo.rs (line 43)
29fn main() -> Result<(), Box<dyn std::error::Error>> {
30    // Create shared state
31    let running = Arc::new(AtomicBool::new(false));
32    let data = ArcMutex::new(42);
33
34    println!("Initial state: running = {}", running.load(Ordering::Acquire));
35    println!("Initial data: {}", data.read(|d| *d));
36
37    let executor = DoubleCheckedLockExecutor::builder()
38        .on(data.clone())
39        .when({
40            let running = running.clone();
41            move || running.load(Ordering::Acquire)
42        })
43        .build();
44
45    // Try to execute when service is not running (should fail)
46    let result = executor
47        .call_with(|value: &mut i32| {
48            *value += 1;
49            Ok::<_, std::io::Error>(*value)
50        })
51        .get_result();
52
53    if result.is_success() {
54        println!("Unexpected success: {}", result.unwrap());
55    } else {
56        println!("Expected failure: Condition not met.");
57    }
58
59    // Start the service
60    running.store(true, Ordering::Release);
61    println!("Service started: running = {}", running.load(Ordering::Acquire));
62
63    // Now execute should succeed
64    let result = executor
65        .call_with(|value: &mut i32| {
66            *value += 1;
67            Ok::<_, std::io::Error>(*value)
68        })
69        .get_result();
70
71    if result.is_success() {
72        println!("Success: new value = {}", result.unwrap());
73    } else {
74        println!("Unexpected failure: {:?}", result);
75    }
76
77    // Verify the data was updated
78    println!("Final data: {}", data.read(|d| *d));
79
80    // Stop the service
81    running.store(false, Ordering::Release);
82    println!("Service stopped: running = {}", running.load(Ordering::Acquire));
83
84    // Try to execute when service is stopped (should fail)
85    let result = executor
86        .call_with(|value: &mut i32| {
87            *value += 1;
88            Ok::<_, std::io::Error>(*value)
89        })
90        .get_result();
91
92    if result.is_success() {
93        println!("Unexpected success: {}", result.unwrap());
94    } else {
95        println!("Expected failure: Condition not met.");
96    }
97
98    Ok(())
99}

Trait Implementations§

Source§

impl<L: Clone, T: Clone> Clone for ExecutorReadyBuilder<L, T>

Source§

fn clone(&self) -> ExecutorReadyBuilder<L, T>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<L, T> Freeze for ExecutorReadyBuilder<L, T>
where L: Freeze,

§

impl<L, T> !RefUnwindSafe for ExecutorReadyBuilder<L, T>

§

impl<L, T> Send for ExecutorReadyBuilder<L, T>
where L: Send,

§

impl<L, T> Sync for ExecutorReadyBuilder<L, T>
where L: Sync,

§

impl<L, T> Unpin for ExecutorReadyBuilder<L, T>
where L: Unpin,

§

impl<L, T> UnsafeUnpin for ExecutorReadyBuilder<L, T>
where L: UnsafeUnpin,

§

impl<L, T> !UnwindSafe for ExecutorReadyBuilder<L, T>

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, 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.