@Test public void testElapsedTime() { final long elapsedTime = new TransactionHolder<>(new Object(), 0) .elapsedTime(Clock.fixed(Instant.ofEpochMilli(1000), ZoneOffset.UTC)); assertThat(elapsedTime, equalTo(1000L)); }
@Override public State<TXN, CONTEXT> copy(State<TXN, CONTEXT> from) { final TransactionHolder<TXN> pendingTransaction = from.getPendingTransaction(); final TransactionHolder<TXN> copiedPendingTransaction = new TransactionHolder<>( transactionSerializer.copy(pendingTransaction.handle), pendingTransaction.transactionStartTime); final List<TransactionHolder<TXN>> copiedPendingCommitTransactions = new ArrayList<>(); for (TransactionHolder<TXN> txn : from.getPendingCommitTransactions()) { final TXN txnHandleCopy = transactionSerializer.copy(txn.handle); copiedPendingCommitTransactions.add(new TransactionHolder<>( txnHandleCopy, txn.transactionStartTime)); } final Optional<CONTEXT> copiedContext = from.getContext().map(contextSerializer::copy); return new State<>(copiedPendingTransaction, copiedPendingCommitTransactions, copiedContext); }
@Override public State<TXN, CONTEXT> deserialize(DataInputView source) throws IOException { TXN pendingTxnHandle = transactionSerializer.deserialize(source); final long pendingTxnStartTime = source.readLong(); final TransactionHolder<TXN> pendingTxn = new TransactionHolder<>( pendingTxnHandle, pendingTxnStartTime); int numPendingCommitTxns = source.readInt(); List<TransactionHolder<TXN>> pendingCommitTxns = new ArrayList<>(numPendingCommitTxns); for (int i = 0; i < numPendingCommitTxns; i++) { final TXN pendingCommitTxnHandle = transactionSerializer.deserialize(source); final long pendingCommitTxnStartTime = source.readLong(); pendingCommitTxns.add(new TransactionHolder<>( pendingCommitTxnHandle, pendingCommitTxnStartTime)); } Optional<CONTEXT> context = Optional.empty(); boolean hasContext = source.readBoolean(); if (hasContext) { context = Optional.of(contextSerializer.deserialize(source)); } return new State<>(pendingTxn, pendingCommitTxns, context); }
@Override public State<TXN, CONTEXT> deserialize(DataInputView source) throws IOException { TXN pendingTxnHandle = transactionSerializer.deserialize(source); final long pendingTxnStartTime = source.readLong(); final TransactionHolder<TXN> pendingTxn = new TransactionHolder<>( pendingTxnHandle, pendingTxnStartTime); int numPendingCommitTxns = source.readInt(); List<TransactionHolder<TXN>> pendingCommitTxns = new ArrayList<>(numPendingCommitTxns); for (int i = 0; i < numPendingCommitTxns; i++) { final TXN pendingCommitTxnHandle = transactionSerializer.deserialize(source); final long pendingCommitTxnStartTime = source.readLong(); pendingCommitTxns.add(new TransactionHolder<>( pendingCommitTxnHandle, pendingCommitTxnStartTime)); } Optional<CONTEXT> context = Optional.empty(); boolean hasContext = source.readBoolean(); if (hasContext) { context = Optional.of(contextSerializer.deserialize(source)); } return new State<>(pendingTxn, pendingCommitTxns, context); }
@Override public State<TXN, CONTEXT> deserialize(DataInputView source) throws IOException { TXN pendingTxnHandle = transactionSerializer.deserialize(source); final long pendingTxnStartTime = source.readLong(); final TransactionHolder<TXN> pendingTxn = new TransactionHolder<>( pendingTxnHandle, pendingTxnStartTime); int numPendingCommitTxns = source.readInt(); List<TransactionHolder<TXN>> pendingCommitTxns = new ArrayList<>(numPendingCommitTxns); for (int i = 0; i < numPendingCommitTxns; i++) { final TXN pendingCommitTxnHandle = transactionSerializer.deserialize(source); final long pendingCommitTxnStartTime = source.readLong(); pendingCommitTxns.add(new TransactionHolder<>( pendingCommitTxnHandle, pendingCommitTxnStartTime)); } Optional<CONTEXT> context = Optional.empty(); boolean hasContext = source.readBoolean(); if (hasContext) { context = Optional.of(contextSerializer.deserialize(source)); } return new State<>(pendingTxn, pendingCommitTxns, context); }
@Override public State<TXN, CONTEXT> copy(State<TXN, CONTEXT> from) { final TransactionHolder<TXN> pendingTransaction = from.getPendingTransaction(); final TransactionHolder<TXN> copiedPendingTransaction = new TransactionHolder<>( transactionSerializer.copy(pendingTransaction.handle), pendingTransaction.transactionStartTime); final List<TransactionHolder<TXN>> copiedPendingCommitTransactions = new ArrayList<>(); for (TransactionHolder<TXN> txn : from.getPendingCommitTransactions()) { final TXN txnHandleCopy = transactionSerializer.copy(txn.handle); copiedPendingCommitTransactions.add(new TransactionHolder<>( txnHandleCopy, txn.transactionStartTime)); } final Optional<CONTEXT> copiedContext = from.getContext().map(contextSerializer::copy); return new State<>(copiedPendingTransaction, copiedPendingCommitTransactions, copiedContext); }
@Override public State<TXN, CONTEXT> copy(State<TXN, CONTEXT> from) { final TransactionHolder<TXN> pendingTransaction = from.getPendingTransaction(); final TransactionHolder<TXN> copiedPendingTransaction = new TransactionHolder<>( transactionSerializer.copy(pendingTransaction.handle), pendingTransaction.transactionStartTime); final List<TransactionHolder<TXN>> copiedPendingCommitTransactions = new ArrayList<>(); for (TransactionHolder<TXN> txn : from.getPendingCommitTransactions()) { final TXN txnHandleCopy = transactionSerializer.copy(txn.handle); copiedPendingCommitTransactions.add(new TransactionHolder<>( txnHandleCopy, txn.transactionStartTime)); } final Optional<CONTEXT> copiedContext = from.getContext().map(contextSerializer::copy); return new State<>(copiedPendingTransaction, copiedPendingCommitTransactions, copiedContext); }
/** * This method must be the only place to call {@link #beginTransaction()} to ensure that the * {@link TransactionHolder} is created at the same time. */ private TransactionHolder<TXN> beginTransactionInternal() throws Exception { return new TransactionHolder<>(beginTransaction(), clock.millis()); }
/** * This method must be the only place to call {@link #beginTransaction()} to ensure that the * {@link TransactionHolder} is created at the same time. */ private TransactionHolder<TXN> beginTransactionInternal() throws Exception { return new TransactionHolder<>(beginTransaction(), clock.millis()); }
/** * This method must be the only place to call {@link #beginTransaction()} to ensure that the * {@link TransactionHolder} is created at the same time. */ private TransactionHolder<TXN> beginTransactionInternal() throws Exception { return new TransactionHolder<>(beginTransaction(), clock.millis()); }