@Override List<ActiveLock> waitingOnLocks() { List<ActiveLock> locks = new ArrayList<>(); switch ( mode ) { case ActiveLock.EXCLUSIVE_MODE: for ( long resourceId : resourceIds ) { locks.add( ActiveLock.exclusiveLock( resourceType, resourceId ) ); } break; case ActiveLock.SHARED_MODE: for ( long resourceId : resourceIds ) { locks.add( ActiveLock.sharedLock( resourceType, resourceId ) ); } break; default: throw new IllegalArgumentException( "Unsupported type of lock mode: " + mode ); } return locks; } }
@Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( !(o instanceof ActiveLock) ) { return false; } ActiveLock that = (ActiveLock) o; return resourceId == that.resourceId() && Objects.equals( mode(), that.mode() ) && Objects.equals( resourceType, that.resourceType() ); }
private static boolean haveAnyLocking( List<ActiveLock> locks, ResourceType resourceType, long resourceId ) { return locks.stream().anyMatch( lock -> lock.resourceId() == resourceId && lock.resourceType() == resourceType ); }
private static boolean haveExclusiveLocking( List<ActiveLock> locks, ResourceType resourceType, long resourceId ) { return locks.stream().anyMatch( lock -> ActiveLock.EXCLUSIVE_MODE.equals( lock.mode() ) && lock.resourceId() == resourceId && lock.resourceType() == resourceType ); }
@Test public void shouldListLocksHeldByTheCurrentClient() { // given clientA.acquireExclusive( LockTracer.NONE, NODE, 1, 2, 3 ); clientA.acquireShared( LockTracer.NONE, NODE, 3, 4, 5 ); // when Stream<? extends ActiveLock> locks = clientA.activeLocks(); // then assertEquals( new HashSet<>( asList( exclusiveLock( NODE, 1 ), exclusiveLock( NODE, 2 ), exclusiveLock( NODE, 3 ), sharedLock( NODE, 3 ), sharedLock( NODE, 4 ), sharedLock( NODE, 5 ) ) ), locks.collect( toSet() ) ); }
public ActiveLocksResult( ActiveLock lock ) { this.mode = lock.mode(); this.resourceType = lock.resourceType().name(); this.resourceId = lock.resourceId(); } }
@Override List<ActiveLock> waitingOnLocks() { List<ActiveLock> locks = new ArrayList<>(); switch ( mode ) { case ActiveLock.EXCLUSIVE_MODE: for ( long resourceId : resourceIds ) { locks.add( ActiveLock.exclusiveLock( resourceType, resourceId ) ); } break; case ActiveLock.SHARED_MODE: for ( long resourceId : resourceIds ) { locks.add( ActiveLock.sharedLock( resourceType, resourceId ) ); } break; default: throw new IllegalArgumentException( "Unsupported type of lock mode: " + mode ); } return locks; } }
private boolean isBlocked( ActiveLock activeLock, List<ActiveLock> activeLocks ) { return ActiveLock.EXCLUSIVE_MODE.equals( activeLock.mode() ) ? haveAnyLocking( activeLocks, activeLock.resourceType(), activeLock.resourceId() ) : haveExclusiveLocking( activeLocks, activeLock.resourceType(), activeLock.resourceId() ); }
@Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( !(o instanceof ActiveLock) ) { return false; } ActiveLock that = (ActiveLock) o; return resourceId == that.resourceId() && Objects.equals( mode(), that.mode() ) && Objects.equals( resourceType, that.resourceType() ); }