@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() ); }
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 ); } }
@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() ); }
public HighestTransactionId( long initialTransactionId, long initialChecksum, long commitTimestamp ) { set( initialTransactionId, initialChecksum, commitTimestamp ); }
@Override public TransactionId getLastCommittedTransaction() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get(); }
@Test public void shouldOnlyKeepTheHighestOffered() { // GIVEN HighestTransactionId highest = new HighestTransactionId( -1, -1, -1 ); // WHEN/THEN assertAccepted( highest, 2 ); assertAccepted( highest, 5 ); assertRejected( highest, 3 ); assertRejected( highest, 4 ); assertAccepted( highest, 10 ); }
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 ); } }
@Override public void setLastCommittedAndClosedTransactionId( long transactionId, long checksum, long commitTimestamp, long byteOffset, long logVersion ) { assertNotClosed(); setRecord( Position.LAST_TRANSACTION_ID, transactionId ); setRecord( Position.LAST_TRANSACTION_CHECKSUM, checksum ); setRecord( Position.LAST_CLOSED_TRANSACTION_LOG_VERSION, logVersion ); setRecord( Position.LAST_CLOSED_TRANSACTION_LOG_BYTE_OFFSET, byteOffset ); setRecord( Position.LAST_TRANSACTION_COMMIT_TIMESTAMP, commitTimestamp ); checkInitialized( lastCommittingTxField.get() ); lastCommittingTxField.set( transactionId ); lastClosedTx.set( transactionId, new long[]{logVersion, byteOffset} ); highestCommittedTransaction.set( transactionId, checksum, commitTimestamp ); } /**
@Override public long getLastCommittedTransactionId() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get().transactionId(); }
lastClosedTx.set( lastCommittedTxId, new long[]{lastClosedTransactionLogVersion, lastClosedTransactionLogByteOffset} ); highestCommittedTransaction.set( lastCommittedTxId, getRecordValue( cursor, Position.LAST_TRANSACTION_CHECKSUM ), getRecordValue( cursor, Position.LAST_TRANSACTION_COMMIT_TIMESTAMP, UNKNOWN_TX_COMMIT_TIMESTAMP
@Override public TransactionId getLastCommittedTransaction() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get(); }
public HighestTransactionId( long initialTransactionId, long initialChecksum, long commitTimestamp ) { set( initialTransactionId, initialChecksum, commitTimestamp ); }
@Override public long getLastCommittedTransactionId() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return highestCommittedTransaction.get().transactionId(); }
@Override public void setLastCommittedAndClosedTransactionId( long transactionId, long checksum, long commitTimestamp, long byteOffset, long logVersion ) { assertNotClosed(); setRecord( Position.LAST_TRANSACTION_ID, transactionId ); setRecord( Position.LAST_TRANSACTION_CHECKSUM, checksum ); setRecord( Position.LAST_CLOSED_TRANSACTION_LOG_VERSION, logVersion ); setRecord( Position.LAST_CLOSED_TRANSACTION_LOG_BYTE_OFFSET, byteOffset ); setRecord( Position.LAST_TRANSACTION_COMMIT_TIMESTAMP, commitTimestamp ); checkInitialized( lastCommittingTxField.get() ); lastCommittingTxField.set( transactionId ); lastClosedTx.set( transactionId, new long[]{logVersion, byteOffset} ); highestCommittedTransaction.set( transactionId, checksum, commitTimestamp ); } /**
lastClosedTx.set( lastCommittedTxId, new long[]{lastClosedTransactionLogVersion, lastClosedTransactionLogByteOffset} ); highestCommittedTransaction.set( lastCommittedTxId, getRecordValue( cursor, Position.LAST_TRANSACTION_CHECKSUM ), getRecordValue( cursor, Position.LAST_TRANSACTION_COMMIT_TIMESTAMP, UNKNOWN_TX_COMMIT_TIMESTAMP