use of org.neo4j.kernel.impl.api.TransactionToApply in project neo4j by neo4j.
the class BatchingTransactionAppenderTest method shouldAppendSingleTransaction.
@Test
void shouldAppendSingleTransaction() throws Exception {
// GIVEN
when(logFile.getTransactionLogWriter()).thenReturn(new TransactionLogWriter(channel, new DbmsLogEntryWriterFactory(() -> LATEST)));
long txId = 15;
when(transactionIdStore.nextCommittingTransactionId()).thenReturn(txId);
when(transactionIdStore.getLastCommittedTransaction()).thenReturn(new TransactionId(txId, BASE_TX_CHECKSUM, BASE_TX_COMMIT_TIMESTAMP));
TransactionAppender appender = life.add(createTransactionAppender());
// WHEN
TransactionRepresentation transaction = transaction(singleTestCommand(), new byte[] { 1, 2, 5 }, 12345, 4545, 12345 + 10);
appender.append(new TransactionToApply(transaction, NULL), logAppendEvent);
// THEN
final LogEntryReader logEntryReader = logEntryReader();
try (PhysicalTransactionCursor reader = new PhysicalTransactionCursor(channel, logEntryReader)) {
reader.next();
TransactionRepresentation tx = reader.get().getTransactionRepresentation();
assertArrayEquals(transaction.additionalHeader(), tx.additionalHeader());
assertEquals(transaction.getTimeStarted(), tx.getTimeStarted());
assertEquals(transaction.getTimeCommitted(), tx.getTimeCommitted());
assertEquals(transaction.getLatestCommittedTxWhenStarted(), tx.getLatestCommittedTxWhenStarted());
}
}
use of org.neo4j.kernel.impl.api.TransactionToApply in project neo4j by neo4j.
the class BatchingTransactionAppenderTest method shouldAppendCommittedTransactions.
@Test
void shouldAppendCommittedTransactions() throws Exception {
// GIVEN
when(logFile.getTransactionLogWriter()).thenReturn(new TransactionLogWriter(channel, new DbmsLogEntryWriterFactory(() -> LATEST)));
long nextTxId = 15;
when(transactionIdStore.nextCommittingTransactionId()).thenReturn(nextTxId);
when(transactionIdStore.getLastCommittedTransaction()).thenReturn(new TransactionId(nextTxId, BASE_TX_CHECKSUM, BASE_TX_COMMIT_TIMESTAMP));
TransactionAppender appender = life.add(new BatchingTransactionAppender(logFiles, NO_ROTATION, positionCache, transactionIdStore, databaseHealth));
// WHEN
final byte[] additionalHeader = new byte[] { 1, 2, 5 };
final long timeStarted = 12345;
long latestCommittedTxWhenStarted = nextTxId - 5;
long timeCommitted = timeStarted + 10;
PhysicalTransactionRepresentation transactionRepresentation = new PhysicalTransactionRepresentation(singleTestCommand());
transactionRepresentation.setHeader(additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted, -1, ANONYMOUS);
LogEntryStart start = new LogEntryStart(0L, latestCommittedTxWhenStarted, 0, null, LogPosition.UNSPECIFIED);
LogEntryCommit commit = new LogEntryCommit(nextTxId, 0L, BASE_TX_CHECKSUM);
CommittedTransactionRepresentation transaction = new CommittedTransactionRepresentation(start, transactionRepresentation, commit);
appender.append(new TransactionToApply(transactionRepresentation, transaction.getCommitEntry().getTxId(), NULL), logAppendEvent);
// THEN
LogEntryReader logEntryReader = logEntryReader();
try (PhysicalTransactionCursor reader = new PhysicalTransactionCursor(channel, logEntryReader)) {
reader.next();
TransactionRepresentation result = reader.get().getTransactionRepresentation();
assertArrayEquals(additionalHeader, result.additionalHeader());
assertEquals(timeStarted, result.getTimeStarted());
assertEquals(timeCommitted, result.getTimeCommitted());
assertEquals(latestCommittedTxWhenStarted, result.getLatestCommittedTxWhenStarted());
}
}
use of org.neo4j.kernel.impl.api.TransactionToApply in project neo4j by neo4j.
the class BatchingTransactionAppenderTest method shouldAppendBatchOfTransactions.
@Test
void shouldAppendBatchOfTransactions() throws Exception {
// GIVEN
when(logFile.getTransactionLogWriter()).thenReturn(new TransactionLogWriter(channel, new DbmsLogEntryWriterFactory(() -> LATEST)));
TransactionAppender appender = life.add(createTransactionAppender());
when(transactionIdStore.nextCommittingTransactionId()).thenReturn(2L, 3L, 4L);
TransactionToApply batch = batchOf(transaction(singleTestCommand(), new byte[0], 0, 1, 0), transaction(singleTestCommand(), new byte[0], 0, 1, 0), transaction(singleTestCommand(), new byte[0], 0, 1, 0));
// WHEN
appender.append(batch, logAppendEvent);
// THEN
TransactionToApply tx = batch;
assertEquals(2L, tx.transactionId());
tx = tx.next();
assertEquals(3L, tx.transactionId());
tx = tx.next();
assertEquals(4L, tx.transactionId());
assertNull(tx.next());
}
use of org.neo4j.kernel.impl.api.TransactionToApply in project neo4j by neo4j.
the class PhysicalLogicalTransactionStoreTest method addATransactionAndRewind.
private static void addATransactionAndRewind(LifeSupport life, LogFiles logFiles, TransactionMetadataCache positionCache, TransactionIdStore transactionIdStore, byte[] additionalHeader, long timeStarted, long latestCommittedTxWhenStarted, long timeCommitted) throws IOException {
TransactionAppender appender = life.add(new BatchingTransactionAppender(logFiles, NO_ROTATION, positionCache, transactionIdStore, DATABASE_HEALTH));
PhysicalTransactionRepresentation transaction = new PhysicalTransactionRepresentation(singleTestCommand());
transaction.setHeader(additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted, -1, ANONYMOUS);
appender.append(new TransactionToApply(transaction, NULL), LogAppendEvent.NULL);
}
use of org.neo4j.kernel.impl.api.TransactionToApply in project neo4j by neo4j.
the class LabelAndIndexUpdateBatchingIT method toApply.
private static TransactionToApply toApply(Collection<TransactionRepresentation> transactions) {
TransactionToApply first = null;
TransactionToApply last = null;
for (TransactionRepresentation transactionRepresentation : transactions) {
TransactionToApply transaction = new TransactionToApply(transactionRepresentation, CursorContext.NULL);
if (first == null) {
first = last = transaction;
} else {
last.next(transaction);
last = transaction;
}
}
return first;
}
Aggregations