@Override public TransactionId getLastCommittedTransaction() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get(); }
@Override public long getLastCommittedTransactionId() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get().transactionId(); }
public void setLastTransactionCommitTimestamp( long timestamp ) { // Preventing race with transactionCommitted() and assure record is consistent with highestCommittedTransaction synchronized ( transactionCommittedLock ) { setRecord( Position.LAST_TRANSACTION_COMMIT_TIMESTAMP, timestamp ); TransactionId transactionId = highestCommittedTransaction.get(); highestCommittedTransaction.set( transactionId.transactionId(), transactionId.checksum(), timestamp ); } }
private void assertAccepted( HighestTransactionId highest, long txId ) { TransactionId current = highest.get(); assertTrue( highest.offer( txId, -1, -1 ) ); assertTrue( txId > current.transactionId() ); }
@Test public void shouldKeepHighestDuringConcurrentOfferings() throws Throwable { // GIVEN final HighestTransactionId highest = new HighestTransactionId( -1, -1, -1 ); Race race = new Race(); int updaters = max( 2, getRuntime().availableProcessors() ); final AtomicInteger accepted = new AtomicInteger(); for ( int i = 0; i < updaters; i++ ) { final long id = i + 1; race.addContestant( () -> { if ( highest.offer( id, id, id ) ) { accepted.incrementAndGet(); } } ); } // WHEN race.go(); // THEN assertTrue( accepted.get() > 0 ); assertEquals( updaters, highest.get().transactionId() ); }
@Test public void shouldHardSetHighest() { // GIVEN HighestTransactionId highest = new HighestTransactionId( 10, 10, 10 ); // WHEN highest.set( 8, 1299128, 42 ); // THEN assertEquals( new TransactionId( 8, 1299128, 42 ), highest.get() ); }
if ( highestCommittedTransaction.get().transactionId() == transactionId )
@Override public TransactionId getLastCommittedTransaction() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get(); }
@Override public long getLastCommittedTransactionId() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get().transactionId(); }
public void setLastTransactionCommitTimestamp( long timestamp ) { // Preventing race with transactionCommitted() and assure record is consistent with highestCommittedTransaction synchronized ( transactionCommittedLock ) { setRecord( Position.LAST_TRANSACTION_COMMIT_TIMESTAMP, timestamp ); TransactionId transactionId = highestCommittedTransaction.get(); highestCommittedTransaction.set( transactionId.transactionId(), transactionId.checksum(), timestamp ); } }
if ( highestCommittedTransaction.get().transactionId() == transactionId )