private long getImmutableTimestampInternal(long ts) { Long minLocked = lockService.getMinLockedInVersionId(immutableTsLockClient.getClientId()); return minLocked == null ? ts : minLocked; }
private void mockMinLockedInVersionIdResponse(Long immutableTs) { when(lockService.getMinLockedInVersionId(LOCK_CLIENT.getClientId())).thenReturn(immutableTs); }
@Test public void shouldNotMakeRemoteCallsInAReadonlyTransactionIfNoWorkIsDone() { TimestampService mockTimestampService = mock(TimestampService.class); TimestampManagementService mockTimestampManagementService = mock(TimestampManagementService.class); LockService mockLockService = mock(LockService.class); TransactionManager txnManagerWithMocks = SerializableTransactionManager.createForTest( metricsManager, getKeyValueService(), mockTimestampService, mockTimestampManagementService, LockClient.of("foo"), mockLockService, transactionService, () -> AtlasDbConstraintCheckingMode.FULL_CONSTRAINT_CHECKING_THROWS_EXCEPTIONS, conflictDetectionManager, sweepStrategyManager, NoOpCleaner.INSTANCE, AbstractTransactionTest.GET_RANGES_THREAD_POOL_SIZE, AbstractTransactionTest.DEFAULT_GET_RANGES_CONCURRENCY, MultiTableSweepQueueWriter.NO_OP); // fetch an immutable timestamp once so it's cached when(mockTimestampService.getFreshTimestamp()).thenReturn(1L); when(mockLockService.getMinLockedInVersionId("foo")).thenReturn(1L); txnManagerWithMocks.getImmutableTimestamp(); verify(mockTimestampService).getFreshTimestamp(); verify(mockLockService).getMinLockedInVersionId("foo"); // now execute a read transaction txnManagerWithMocks.runTaskReadOnly(txn -> null); verifyNoMoreInteractions(mockLockService); verifyNoMoreInteractions(mockTimestampService); verifyNoMoreInteractions(mockTimestampManagementService); }
@Test public void getImmutableTimestampDelegatesInProperOrder() throws InterruptedException { long immutableTs = 3L; InOrder inOrder = Mockito.inOrder(timestampService, lockService); mockMinLockedInVersionIdResponse(immutableTs); assertEquals(immutableTs, timelock.getImmutableTimestamp()); inOrder.verify(timestampService).getFreshTimestamp(); inOrder.verify(lockService).getMinLockedInVersionId(LOCK_CLIENT.getClientId()); }
/** Tests that RemoteLockService api (that internal forwards to LockService api) passes a sanity check. */ @Test public void testRemoteLockServiceApi() throws InterruptedException { LockRequest request = LockRequest.builder(ImmutableSortedMap.of( lock1, LockMode.READ, lock2, LockMode.WRITE)) .withLockedInVersionId(10).doNotBlock().build(); Assert.assertNull(server.getMinLockedInVersionId(LockClient.ANONYMOUS.getClientId())); LockRefreshToken token = server.lock(LockClient.ANONYMOUS.getClientId(), request); Assert.assertEquals(10, (long) server.getMinLockedInVersionId(LockClient.ANONYMOUS.getClientId())); Assert.assertNull(server.lock(LockClient.ANONYMOUS.getClientId(), request)); server.unlock(token); Assert.assertNull(server.getMinLockedInVersionId(LockClient.ANONYMOUS.getClientId())); HeldLocksToken heldToken = server.lockAndGetHeldLocks(LockClient.ANONYMOUS.getClientId(), request); Assert.assertEquals(10, (long) server.getMinLockedInVersionId(LockClient.ANONYMOUS.getClientId())); Assert.assertNull(server.lockAndGetHeldLocks(LockClient.ANONYMOUS.getClientId(), request)); server.unlock(heldToken.getLockRefreshToken()); }
Assert.assertEquals(5, server.getMinLockedInVersionId(client).longValue()); Assert.assertNull(server.getMinLockedInVersionId(LockClient.ANONYMOUS)); Assert.assertEquals(10, server.getMinLockedInVersionId(client).longValue()); Assert.assertNull(server.getMinLockedInVersionId(LockClient.ANONYMOUS)); Assert.assertNull(server.getMinLockedInVersionId(client)); Assert.assertNull(server.getMinLockedInVersionId(client));
@Override public int execute(AtlasDbServices services) { // test a method on each of the services if (flag1 != null) { services.getKeyValueService().getAllTableNames(); services.getTimestampService().getFreshTimestamp(); services.getLockService().getMinLockedInVersionId("test-client"); services.getTransactionManager().getImmutableTimestamp(); } // test kvs create table if (flag2 != null) { TableReference table = TableReference.createUnsafe(flag2); services.getKeyValueService().createTable(table, AtlasDbConstants.GENERIC_TABLE_METADATA); Preconditions.checkArgument(services.getKeyValueService().getAllTableNames().contains(table), "kvs contains tables %s, but not table %s", services.getKeyValueService().getAllTableNames(), table.getQualifiedName()); services.getKeyValueService().dropTable(table); } return 0; }
Assert.assertEquals(5, server.getMinLockedInVersionId(client).longValue()); Assert.assertEquals(10, server.getMinLockedInVersionId(client).longValue()); Assert.assertNull(server.getMinLockedInVersionId(client)); Assert.assertNull(server.getMinLockedInVersionId(client));
Assert.assertEquals(5, server.getMinLockedInVersionId(client).longValue()); Assert.assertNull(server.getMinLockedInVersionId(LockClient.ANONYMOUS)); Assert.assertEquals(10, server.getMinLockedInVersionId(client).longValue()); Assert.assertNull(server.getMinLockedInVersionId(LockClient.ANONYMOUS)); Assert.assertNull(server.getMinLockedInVersionId(client)); Assert.assertNull(server.getMinLockedInVersionId(client));