Interface ReactiveSherlock


  • public interface ReactiveSherlock
    Manages distributed locks using reactive api.
    • Method Detail

      • initialize

        java.util.concurrent.Flow.Publisher<InitializationResult> initialize()
        Initializes underlying infrastructure. If this method is not invoked explicitly then it can be invoked implicitly when acquiring or releasing a lock for the first time.

        Most often initialization is related with creating indexes and tables.

        Returns:
        InitializationResult.SUCCESS if initialization was successful, otherwise InitializationResult.FAILURE is returned
      • createLock

        com.coditory.sherlock.DistributedLockBuilder<ReactiveDistributedLock> createLock()
        Creates a distributed lock. Created lock may be acquired only once by the same owner:
        
         assert lock.acquire() == true
         assert lock.acquire() == false
         
        Returns:
        the lock builder
      • createLock

        default ReactiveDistributedLock createLock​(java.lang.String lockId)
        Creates a lock with default configuration.
        Parameters:
        lockId - lock identifier
        Returns:
        the lock
        See Also:
        createLock()
      • createReentrantLock

        com.coditory.sherlock.DistributedLockBuilder<ReactiveDistributedLock> createReentrantLock()
        Creates a distributed reentrant lock. Reentrant lock may be acquired multiple times by the same owner:
        
         assert reentrantLock.acquire() == true
         assert reentrantLock.acquire() == true
         
        Returns:
        the reentrant lock builder
      • createReentrantLock

        default ReactiveDistributedLock createReentrantLock​(java.lang.String lockId)
        Creates a reentrant lock with default configuration.
        Parameters:
        lockId - lock identifier
        Returns:
        the reentrant lock
        See Also:
        createReentrantLock()
      • createOverridingLock

        com.coditory.sherlock.DistributedLockBuilder<ReactiveDistributedLock> createOverridingLock()
        Create a distributed overriding lock. Returned lock may acquire or release any other lock without checking its state:
        
         assert someLock.acquire() == true
         assert overridingLock.acquire() == true
         

        It could be used for administrative actions.

        Returns:
        the overriding lock builder
      • createOverridingLock

        default ReactiveDistributedLock createOverridingLock​(java.lang.String lockId)
        Creates an overriding lock with default configuration.
        Parameters:
        lockId - lock identifier
        Returns:
        the overriding lock
        See Also:
        createOverridingLock()
      • forceReleaseLock

        default java.util.concurrent.Flow.Publisher<ReleaseResult> forceReleaseLock​(java.lang.String lockId)
        Force releases a lock.

        It could be used for administrative actions.

        Parameters:
        lockId - lock identifier
        Returns:
        ReleaseResult.SUCCESS if lock was released, otherwise ReleaseResult.FAILURE is returned