use of org.neo4j.kernel.impl.transaction.log.files.LogFiles in project neo4j by neo4j.
the class CheckpointLogFileTest method setUp.
@BeforeEach
void setUp() throws IOException {
LogFiles logFiles = buildLogFiles();
life.add(logFiles);
life.start();
checkpointFile = logFiles.getCheckpointFile();
}
use of org.neo4j.kernel.impl.transaction.log.files.LogFiles in project neo4j by neo4j.
the class PhysicalLogicalTransactionStoreTest method shouldThrowNoSuchTransactionExceptionIfLogFileIsMissing.
@Test
void shouldThrowNoSuchTransactionExceptionIfLogFileIsMissing() throws Exception {
// GIVEN
LogFile logFile = mock(LogFile.class);
LogFiles logFiles = mock(LogFiles.class);
// a missing file
when(logFiles.getLogFile()).thenReturn(logFile);
when(logFile.getReader(any(LogPosition.class))).thenThrow(new NoSuchFileException("mock"));
// Which is nevertheless in the metadata cache
TransactionMetadataCache cache = new TransactionMetadataCache();
cache.cacheTransactionMetadata(10, new LogPosition(2, 130));
LifeSupport life = new LifeSupport();
final LogicalTransactionStore txStore = new PhysicalLogicalTransactionStore(logFiles, cache, logEntryReader(), monitors, true);
try {
life.start();
// WHEN
// we ask for that transaction and forward
assertThrows(NoSuchTransactionException.class, () -> txStore.getTransactions(10));
} finally {
life.shutdown();
}
}
use of org.neo4j.kernel.impl.transaction.log.files.LogFiles in project neo4j by neo4j.
the class PhysicalLogicalTransactionStoreTest method shouldExtractMetadataFromExistingTransaction.
@Test
void shouldExtractMetadataFromExistingTransaction() throws Exception {
// GIVEN
TransactionIdStore transactionIdStore = new SimpleTransactionIdStore();
TransactionMetadataCache positionCache = new TransactionMetadataCache();
final byte[] additionalHeader = new byte[] { 1, 2, 5 };
final long timeStarted = 12345;
long latestCommittedTxWhenStarted = 4545;
long timeCommitted = timeStarted + 10;
LifeSupport life = new LifeSupport();
final LogFiles logFiles = buildLogFiles(transactionIdStore);
life.start();
life.add(logFiles);
try {
addATransactionAndRewind(life, logFiles, positionCache, transactionIdStore, additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted);
} finally {
life.shutdown();
}
life = new LifeSupport();
life.add(logFiles);
final LogicalTransactionStore store = new PhysicalLogicalTransactionStore(logFiles, positionCache, logEntryReader(), monitors, true);
// WHEN
life.start();
try {
verifyTransaction(positionCache, additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted, store);
} finally {
life.shutdown();
}
}
use of org.neo4j.kernel.impl.transaction.log.files.LogFiles in project neo4j by neo4j.
the class PhysicalLogicalTransactionStoreTest method extractTransactionFromLogFilesSkippingLastLogFileWithoutHeader.
@Test
void extractTransactionFromLogFilesSkippingLastLogFileWithoutHeader() throws IOException {
TransactionIdStore transactionIdStore = new SimpleTransactionIdStore();
TransactionMetadataCache positionCache = new TransactionMetadataCache();
final byte[] additionalHeader = new byte[] { 1, 2, 5 };
final long timeStarted = 12345;
long latestCommittedTxWhenStarted = 4545;
long timeCommitted = timeStarted + 10;
LifeSupport life = new LifeSupport();
final LogFiles logFiles = buildLogFiles(transactionIdStore);
life.add(logFiles);
life.start();
try {
addATransactionAndRewind(life, logFiles, positionCache, transactionIdStore, additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted);
} finally {
life.shutdown();
}
// create empty transaction log file and clear transaction cache to force re-read
LogFile logFile = logFiles.getLogFile();
fileSystem.write(logFile.getLogFileForVersion(logFile.getHighestLogVersion() + 1)).close();
positionCache.clear();
final LogicalTransactionStore store = new PhysicalLogicalTransactionStore(logFiles, positionCache, logEntryReader(), monitors, true);
verifyTransaction(positionCache, additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted, store);
}
use of org.neo4j.kernel.impl.transaction.log.files.LogFiles in project neo4j by neo4j.
the class PhysicalLogicalTransactionStoreTest method shouldOpenAndRecoverExistingData.
@Test
void shouldOpenAndRecoverExistingData() throws Exception {
// GIVEN
TransactionIdStore transactionIdStore = new SimpleTransactionIdStore();
TransactionMetadataCache positionCache = new TransactionMetadataCache();
final byte[] additionalHeader = new byte[] { 1, 2, 5 };
final long timeStarted = 12345;
long latestCommittedTxWhenStarted = 4545;
long timeCommitted = timeStarted + 10;
LifeSupport life = new LifeSupport();
final LogFiles logFiles = buildLogFiles(transactionIdStore);
life.start();
life.add(logFiles);
try {
addATransactionAndRewind(life, logFiles, positionCache, transactionIdStore, additionalHeader, timeStarted, latestCommittedTxWhenStarted, timeCommitted);
} finally {
life.shutdown();
}
life = new LifeSupport();
life.add(logFiles);
final AtomicBoolean recoveryPerformed = new AtomicBoolean();
FakeRecoveryVisitor visitor = new FakeRecoveryVisitor(additionalHeader, timeStarted, timeCommitted, latestCommittedTxWhenStarted);
LogicalTransactionStore txStore = new PhysicalLogicalTransactionStore(logFiles, positionCache, logEntryReader(), monitors, true);
life.add(new BatchingTransactionAppender(logFiles, NO_ROTATION, positionCache, transactionIdStore, DATABASE_HEALTH));
CorruptedLogsTruncator logPruner = new CorruptedLogsTruncator(databaseDirectory, logFiles, fileSystem, INSTANCE);
life.add(new TransactionLogsRecovery(new TestRecoveryService(visitor, logFiles, txStore, recoveryPerformed), logPruner, new LifecycleAdapter(), mock(RecoveryMonitor.class), ProgressReporter.SILENT, false, EMPTY_CHECKER, PageCacheTracer.NULL));
// WHEN
try {
life.start();
} finally {
life.shutdown();
}
// THEN
assertEquals(1, visitor.getVisitedTransactions());
assertTrue(recoveryPerformed.get());
}
Aggregations