Skip to main content

SessionLifecycleManager

Struct SessionLifecycleManager 

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

Manages session lifecycles with automatic cleanup and recovery.

Tracks active sessions and enforces limits on duration, message count, and inactivity. Integrates with lock and affinity management to ensure proper resource cleanup when sessions are forcibly closed.

§Thread Safety

All operations are async and use Arc<RwLock<>> for thread-safe access.

§Examples

use queue_runtime::{SessionLifecycleManager, SessionId, SessionLifecycleConfig};
use std::time::Duration;

let config = SessionLifecycleConfig::default();
let manager = SessionLifecycleManager::new(config);

let session_id = SessionId::new("order-456".to_string())?;

// Start tracking a session
manager.start_session(session_id.clone(), "worker-1".to_string()).await?;

// Record activity
manager.record_message(&session_id).await?;

// Check if session should be closed
let should_close = manager.should_close_session(&session_id).await;

Implementations§

Source§

impl SessionLifecycleManager

Source

pub fn new(config: SessionLifecycleConfig) -> Self

Create a new session lifecycle manager with the given configuration.

Source

pub async fn start_session( &self, session_id: SessionId, consumer_id: String, ) -> Result<(), QueueError>

Start tracking a new session.

§Errors

Returns QueueError::ValidationError if session is already being tracked.

Source

pub async fn stop_session( &self, session_id: &SessionId, ) -> Result<(), QueueError>

Stop tracking a session.

§Errors

Returns QueueError::SessionNotFound if session is not being tracked.

Source

pub async fn record_message( &self, session_id: &SessionId, ) -> Result<(), QueueError>

Record message processing activity for a session.

Increments message count and updates last activity timestamp.

§Errors

Returns QueueError::SessionNotFound if session is not being tracked.

Source

pub async fn touch_session( &self, session_id: &SessionId, ) -> Result<(), QueueError>

Update last activity timestamp without incrementing message count.

§Errors

Returns QueueError::SessionNotFound if session is not being tracked.

Source

pub async fn get_session_info( &self, session_id: &SessionId, ) -> Option<SessionInfo>

Get information about a session.

Returns None if session is not being tracked.

Source

pub async fn should_close_session(&self, session_id: &SessionId) -> bool

Check if a session should be closed based on configured limits.

A session should be closed if:

  • It has exceeded the maximum duration
  • It has processed more than the maximum message count
  • It has been idle longer than the timeout

Returns false if session is not being tracked.

Source

pub async fn get_sessions_to_close(&self) -> Vec<SessionId>

Get all sessions that should be closed based on configured limits.

Returns a list of session IDs that have exceeded limits.

Source

pub async fn cleanup_expired_sessions(&self) -> Vec<SessionId>

Clean up sessions that have exceeded limits.

§Returns

Vector of session IDs that were cleaned up

Source

pub async fn session_count(&self) -> usize

Get the total number of active sessions.

Source

pub async fn get_active_sessions(&self) -> Vec<SessionId>

Get all active session IDs.

Source

pub async fn get_consumer_sessions(&self, consumer_id: &str) -> Vec<SessionId>

Get all sessions for a specific consumer.

Trait Implementations§

Source§

impl Clone for SessionLifecycleManager

Source§

fn clone(&self) -> SessionLifecycleManager

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 SessionLifecycleManager

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

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