@Override public long[] getLastClosedTransaction() { return closedTransactionId.get(); }
@Override public long[] getLastClosedTransaction() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return lastClosedTx.get(); }
private void assertGet( OutOfOrderSequence sequence, long number, long[] meta ) { long[] data = sequence.get(); long[] expected = new long[meta.length + 1]; expected[0] = number; System.arraycopy( meta, 0, expected, 1, meta.length ); assertArrayEquals( expected, data ); }
@Override public void transactionClosed( long transactionId, long logVersion, long byteOffset ) { if ( lastClosedTx.offer( transactionId, new long[]{logVersion, byteOffset} ) ) { long pageId = pageIdForRecord( Position.LAST_CLOSED_TRANSACTION_LOG_VERSION.id ); assert pageId == pageIdForRecord( Position.LAST_CLOSED_TRANSACTION_LOG_BYTE_OFFSET.id ); synchronized ( transactionClosedLock ) { try ( PageCursor cursor = pagedFile.io( pageId, PF_SHARED_WRITE_LOCK ) ) { if ( cursor.next() ) { long[] lastClosedTransactionData = lastClosedTx.get(); setRecord( cursor, Position.LAST_CLOSED_TRANSACTION_LOG_VERSION, lastClosedTransactionData[1] ); setRecord( cursor, Position.LAST_CLOSED_TRANSACTION_LOG_BYTE_OFFSET, lastClosedTransactionData[2] ); } } catch ( IOException e ) { throw new UnderlyingStorageException( e ); } } } }
@Override public long[] getLastClosedTransaction() { assertNotClosed(); checkInitialized( lastCommittingTxField.get() ); return lastClosedTx.get(); }
@Override public void transactionClosed( long transactionId, long logVersion, long byteOffset ) { if ( lastClosedTx.offer( transactionId, new long[]{logVersion, byteOffset} ) ) { long pageId = pageIdForRecord( Position.LAST_CLOSED_TRANSACTION_LOG_VERSION.id ); assert pageId == pageIdForRecord( Position.LAST_CLOSED_TRANSACTION_LOG_BYTE_OFFSET.id ); synchronized ( transactionClosedLock ) { try ( PageCursor cursor = pagedFile.io( pageId, PF_SHARED_WRITE_LOCK ) ) { if ( cursor.next() ) { long[] lastClosedTransactionData = lastClosedTx.get(); setRecord( cursor, Position.LAST_CLOSED_TRANSACTION_LOG_VERSION, lastClosedTransactionData[1] ); setRecord( cursor, Position.LAST_CLOSED_TRANSACTION_LOG_BYTE_OFFSET, lastClosedTransactionData[2] ); } } catch ( IOException e ) { throw new UnderlyingStorageException( e ); } } } }