pub struct ResourceLockManager { /* private fields */ }Expand description
Manages resource locks (build/test/git) across multiple agents
Uses liveness-based validation instead of fixed timeouts:
- Integrates with OperationTracker for heartbeat monitoring
- Locks are valid as long as the holder is alive
- Supports wait queue for coordinated access
Implementations§
Source§impl ResourceLockManager
impl ResourceLockManager
Sourcepub fn with_operation_tracker(operation_tracker: Arc<OperationTracker>) -> Self
pub fn with_operation_tracker(operation_tracker: Arc<OperationTracker>) -> Self
Create a resource lock manager with operation tracker integration
Sourcepub fn with_full_integration(
operation_tracker: Arc<OperationTracker>,
wait_queue: Arc<WaitQueue>,
) -> Self
pub fn with_full_integration( operation_tracker: Arc<OperationTracker>, wait_queue: Arc<WaitQueue>, ) -> Self
Create a fully integrated resource lock manager
Sourcepub fn subscribe(&self) -> Receiver<LockNotification>
pub fn subscribe(&self) -> Receiver<LockNotification>
Subscribe to lock notifications
Sourcepub fn operation_tracker(&self) -> Option<&Arc<OperationTracker>>
pub fn operation_tracker(&self) -> Option<&Arc<OperationTracker>>
Get the operation tracker if configured
Sourcepub fn wait_queue(&self) -> Option<&Arc<WaitQueue>>
pub fn wait_queue(&self) -> Option<&Arc<WaitQueue>>
Get the wait queue if configured
Sourcepub async fn acquire_resource(
self: &Arc<Self>,
agent_id: &str,
resource_type: ResourceType,
scope: ResourceScope,
description: &str,
) -> Result<ResourceLockGuard>
pub async fn acquire_resource( self: &Arc<Self>, agent_id: &str, resource_type: ResourceType, scope: ResourceScope, description: &str, ) -> Result<ResourceLockGuard>
Acquire a resource lock
Returns a ResourceLockGuard that automatically releases the lock when dropped.
Sourcepub async fn acquire_with_operation(
self: &Arc<Self>,
agent_id: &str,
resource_type: ResourceType,
scope: ResourceScope,
description: &str,
) -> Result<(ResourceLockGuard, Option<OperationHandle>)>
pub async fn acquire_with_operation( self: &Arc<Self>, agent_id: &str, resource_type: ResourceType, scope: ResourceScope, description: &str, ) -> Result<(ResourceLockGuard, Option<OperationHandle>)>
Acquire a resource lock with operation tracking
This method creates an OperationHandle that:
- Automatically sends heartbeats
- Can have a process attached for liveness monitoring
- Signals completion when dropped
Sourcepub async fn release_resource(
&self,
agent_id: &str,
resource_type: ResourceType,
scope: &ResourceScope,
) -> Result<()>
pub async fn release_resource( &self, agent_id: &str, resource_type: ResourceType, scope: &ResourceScope, ) -> Result<()>
Release a specific resource lock
Sourcepub async fn release_all_for_agent(&self, agent_id: &str) -> usize
pub async fn release_all_for_agent(&self, agent_id: &str) -> usize
Release all locks held by an agent
Sourcepub async fn can_acquire(
&self,
agent_id: &str,
resource_type: ResourceType,
scope: &ResourceScope,
) -> bool
pub async fn can_acquire( &self, agent_id: &str, resource_type: ResourceType, scope: &ResourceScope, ) -> bool
Check if a resource can be acquired by an agent
Sourcepub async fn get_blocking_locks(
&self,
agent_id: &str,
resource_type: ResourceType,
scope: &ResourceScope,
) -> Vec<ResourceLockInfo>
pub async fn get_blocking_locks( &self, agent_id: &str, resource_type: ResourceType, scope: &ResourceScope, ) -> Vec<ResourceLockInfo>
Get detailed information about what’s blocking acquisition
Sourcepub async fn query_lock_status(
&self,
resource_type: ResourceType,
scope: &ResourceScope,
) -> Option<LockStatus>
pub async fn query_lock_status( &self, resource_type: ResourceType, scope: &ResourceScope, ) -> Option<LockStatus>
Query the detailed status of a lock
Sourcepub async fn check_lock(
&self,
resource_type: ResourceType,
scope: &ResourceScope,
) -> Option<ResourceLockInfo>
pub async fn check_lock( &self, resource_type: ResourceType, scope: &ResourceScope, ) -> Option<ResourceLockInfo>
Check if a resource is currently locked
Sourcepub async fn force_release(
&self,
resource_type: ResourceType,
scope: &ResourceScope,
) -> Result<()>
pub async fn force_release( &self, resource_type: ResourceType, scope: &ResourceScope, ) -> Result<()>
Force release a lock (admin operation)
Sourcepub async fn list_locks(&self) -> Vec<ResourceLockInfo>
pub async fn list_locks(&self) -> Vec<ResourceLockInfo>
Get all currently held locks
Sourcepub async fn locks_for_agent(&self, agent_id: &str) -> Vec<ResourceLockInfo>
pub async fn locks_for_agent(&self, agent_id: &str) -> Vec<ResourceLockInfo>
Get locks held by a specific agent
Sourcepub async fn cleanup_stale(&self) -> usize
pub async fn cleanup_stale(&self) -> usize
Clean up stale locks (public version)
Sourcepub async fn stats(&self) -> ResourceLockStats
pub async fn stats(&self) -> ResourceLockStats
Get statistics about current locks
Sourcepub async fn update_lock_status(
&self,
agent_id: &str,
resource_type: ResourceType,
scope: &ResourceScope,
status: &str,
) -> Result<()>
pub async fn update_lock_status( &self, agent_id: &str, resource_type: ResourceType, scope: &ResourceScope, status: &str, ) -> Result<()>
Update the status of a held lock