Search in sources :

Example 11 with TransactionLogWriter

use of org.neo4j.kernel.impl.transaction.log.TransactionLogWriter in project neo4j by neo4j.

the class TransactionLogFile method start.

@Override
public void start() throws IOException {
    long currentLogVersion = logVersionRepository.getCurrentLogVersion();
    channel = createLogChannelForVersion(currentLogVersion, context::getLastCommittedTransactionId);
    context.getMonitors().newMonitor(LogRotationMonitor.class).started(channel.getPath(), currentLogVersion);
    // try to set position
    seekChannelPosition(currentLogVersion);
    writer = new PositionAwarePhysicalFlushableChecksumChannel(channel, new NativeScopedBuffer(calculateLogBufferSize(), memoryTracker));
    transactionLogWriter = new TransactionLogWriter(writer, new DbmsLogEntryWriterFactory(context.getKernelVersionProvider()));
}
Also used : LogRotationMonitor(org.neo4j.kernel.impl.transaction.log.rotation.monitor.LogRotationMonitor) PositionAwarePhysicalFlushableChecksumChannel(org.neo4j.kernel.impl.transaction.log.PositionAwarePhysicalFlushableChecksumChannel) DbmsLogEntryWriterFactory(org.neo4j.kernel.database.DbmsLogEntryWriterFactory) TransactionLogWriter(org.neo4j.kernel.impl.transaction.log.TransactionLogWriter) NativeScopedBuffer(org.neo4j.io.memory.NativeScopedBuffer)

Example 12 with TransactionLogWriter

use of org.neo4j.kernel.impl.transaction.log.TransactionLogWriter in project neo4j by neo4j.

the class AbstractLogTailScannerTest method logFile.

LogCreator logFile(Entry... entries) {
    return (logVersion, positions) -> {
        try {
            AtomicLong lastTxId = new AtomicLong();
            logVersionRepository.setCurrentLogVersion(logVersion, NULL);
            logVersionRepository.setCheckpointLogVersion(logVersion, NULL);
            LifeSupport logFileLife = new LifeSupport();
            logFileLife.start();
            logFileLife.add(logFiles);
            LogFile logFile = logFiles.getLogFile();
            var checkpointFile = logFiles.getCheckpointFile();
            int previousChecksum = BASE_TX_CHECKSUM;
            try {
                TransactionLogWriter logWriter = logFile.getTransactionLogWriter();
                LogEntryWriter writer = logWriter.getWriter();
                for (Entry entry : entries) {
                    LogPosition currentPosition = logWriter.getCurrentPosition();
                    positions.put(entry, currentPosition);
                    if (entry instanceof StartEntry) {
                        writer.writeStartEntry(0, 0, previousChecksum, new byte[0]);
                    } else if (entry instanceof CommitEntry) {
                        CommitEntry commitEntry = (CommitEntry) entry;
                        previousChecksum = writer.writeCommitEntry(commitEntry.txId, 0);
                        lastTxId.set(commitEntry.txId);
                    } else if (entry instanceof CheckPointEntry) {
                        CheckPointEntry checkPointEntry = (CheckPointEntry) entry;
                        Entry target = checkPointEntry.withPositionOfEntry;
                        LogPosition logPosition = target != null ? positions.get(target) : currentPosition;
                        assert logPosition != null : "No registered log position for " + target;
                        writeCheckpoint(writer, checkpointFile, logPosition);
                    } else if (entry instanceof PositionEntry) {
                    // Don't write anything, this entry is just for registering a position so that
                    // another CheckPointEntry can refer to it
                    } else {
                        throw new IllegalArgumentException("Unknown entry " + entry);
                    }
                }
            } finally {
                logFileLife.shutdown();
            }
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    };
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) LogFiles(org.neo4j.kernel.impl.transaction.log.files.LogFiles) LogAssertions.assertThat(org.neo4j.logging.LogAssertions.assertThat) HashMap(java.util.HashMap) LifeSupport(org.neo4j.kernel.lifecycle.LifeSupport) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) LogFile(org.neo4j.kernel.impl.transaction.log.files.LogFile) LogPosition(org.neo4j.kernel.impl.transaction.log.LogPosition) LogEntryWriter(org.neo4j.kernel.impl.transaction.log.entry.LogEntryWriter) Inject(org.neo4j.test.extension.Inject) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AssertableLogProvider(org.neo4j.logging.AssertableLogProvider) Monitors(org.neo4j.monitoring.Monitors) BASE_TX_CHECKSUM(org.neo4j.storageengine.api.TransactionIdStore.BASE_TX_CHECKSUM) Map(java.util.Map) LogVersionRepository(org.neo4j.storageengine.api.LogVersionRepository) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) INFO(org.neo4j.logging.AssertableLogProvider.Level.INFO) StoreId(org.neo4j.storageengine.api.StoreId) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Arguments.arguments(org.junit.jupiter.params.provider.Arguments.arguments) Path(java.nio.file.Path) MethodSource(org.junit.jupiter.params.provider.MethodSource) PageCache(org.neo4j.io.pagecache.PageCache) LogEntryReader(org.neo4j.kernel.impl.transaction.log.entry.LogEntryReader) IOException(java.io.IOException) LogEntryStart(org.neo4j.kernel.impl.transaction.log.entry.LogEntryStart) NO_TRANSACTION_ID(org.neo4j.kernel.impl.transaction.log.files.checkpoint.InlinedLogTailScanner.NO_TRANSACTION_ID) Arguments(org.junit.jupiter.params.provider.Arguments) SimpleLogVersionRepository(org.neo4j.kernel.impl.transaction.SimpleLogVersionRepository) EphemeralPageCacheExtension(org.neo4j.test.extension.pagecache.EphemeralPageCacheExtension) Test(org.junit.jupiter.api.Test) UncheckedIOException(java.io.UncheckedIOException) AtomicLong(java.util.concurrent.atomic.AtomicLong) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) EphemeralNeo4jLayoutExtension(org.neo4j.test.extension.EphemeralNeo4jLayoutExtension) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) Stream(java.util.stream.Stream) TestLogEntryReader.logEntryReader(org.neo4j.kernel.impl.transaction.log.TestLogEntryReader.logEntryReader) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) LogTailInformation(org.neo4j.kernel.impl.transaction.log.files.LogTailInformation) TransactionLogWriter(org.neo4j.kernel.impl.transaction.log.TransactionLogWriter) TransactionIdStore(org.neo4j.storageengine.api.TransactionIdStore) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) SimpleTransactionIdStore(org.neo4j.kernel.impl.transaction.SimpleTransactionIdStore) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) LogFile(org.neo4j.kernel.impl.transaction.log.files.LogFile) AtomicLong(java.util.concurrent.atomic.AtomicLong) LifeSupport(org.neo4j.kernel.lifecycle.LifeSupport) TransactionLogWriter(org.neo4j.kernel.impl.transaction.log.TransactionLogWriter) LogEntryWriter(org.neo4j.kernel.impl.transaction.log.entry.LogEntryWriter) LogPosition(org.neo4j.kernel.impl.transaction.log.LogPosition)

Aggregations

TransactionLogWriter (org.neo4j.kernel.impl.transaction.log.TransactionLogWriter)12 LogEntryWriter (org.neo4j.kernel.impl.transaction.log.entry.LogEntryWriter)6 LogPosition (org.neo4j.kernel.impl.transaction.log.LogPosition)5 File (java.io.File)3 StoreChannel (org.neo4j.io.fs.StoreChannel)3 SimpleTransactionIdStore (org.neo4j.kernel.impl.transaction.SimpleTransactionIdStore)3 PhysicalTransactionRepresentation (org.neo4j.kernel.impl.transaction.log.PhysicalTransactionRepresentation)3 LogFile (org.neo4j.kernel.impl.transaction.log.files.LogFile)3 LogFiles (org.neo4j.kernel.impl.transaction.log.files.LogFiles)3 Lifespan (org.neo4j.kernel.lifecycle.Lifespan)3 IOException (java.io.IOException)2 AtomicLong (java.util.concurrent.atomic.AtomicLong)2 Test (org.junit.jupiter.api.Test)2 FileSystemAbstraction (org.neo4j.io.fs.FileSystemAbstraction)2 SimpleLogVersionRepository (org.neo4j.kernel.impl.transaction.SimpleLogVersionRepository)2 FlushableChannel (org.neo4j.kernel.impl.transaction.log.FlushableChannel)2 FlushablePositionAwareChecksumChannel (org.neo4j.kernel.impl.transaction.log.FlushablePositionAwareChecksumChannel)2 LogHeaderCache (org.neo4j.kernel.impl.transaction.log.LogHeaderCache)2 PhysicalLogFile (org.neo4j.kernel.impl.transaction.log.PhysicalLogFile)2 PhysicalLogFiles (org.neo4j.kernel.impl.transaction.log.PhysicalLogFiles)2