private Task < String > acquire ( long deadline ) { final String uuid = UUID . randomUUID ( ) . toString ( ) ; return /* Step 1: create znode with a pathname of "_locknode_/guid-lock-" * and the sequence and ephemeral flags set. */ safeCreateLockNode ( uuid , deadline , false ) . onFailure ( e -> _zkClient . deleteNodeHasUUID ( _lockPath , uuid ) ) . flatMap ( lockNode -> tryAcquire ( lockNode , deadline ) . withTimeout ( deadline - System . currentTimeMillis ( ) , TimeUnit . MILLISECONDS ) . onFailure ( e -> _zkClient . deleteNode ( lockNode ) ) ) ; }
Try to acquire the lock within the given deadline .