//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public boolean visit(ReadableClosablePositionAwareChannel channel) throws java.io.IOException
            public override bool Visit(ReadableClosablePositionAwareChannel channel)
            {
                LogEntry      logEntry;
                LogEntryStart startEntry = null;

                while ((logEntry = LogEntryReader.readLogEntry(channel)) != null)
                {
                    switch (logEntry.Type)
                    {
                    case TX_START:
                        startEntry = logEntry.As();
                        break;

                    case TX_COMMIT:
                        LogEntryCommit commit = logEntry.As();
                        if (commit.TxId == StartTransactionId)
                        {
                            StartEntryForFoundTransaction = startEntry;
                            CommitTimestamp = commit.TimeWritten;
                            return(false);
                        }

                    default:                              // just skip commands
                        break;
                    }
                }
                return(true);
            }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldParserOnePhaseCommitEntry() throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldParserOnePhaseCommitEntry()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LogEntryCommit commit = new LogEntryCommit(version, 42, 21);
            LogEntryCommit commit = new LogEntryCommit(_version, 42, 21);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.kernel.impl.transaction.log.InMemoryClosableChannel channel = new org.neo4j.kernel.impl.transaction.log.InMemoryClosableChannel();
            InMemoryClosableChannel channel = new InMemoryClosableChannel();

            channel.PutLong(commit.TxId);
            channel.PutLong(commit.TimeWritten);

            channel.GetCurrentPosition(_marker);

            // when
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LogEntryParser parser = version.entryParser(LogEntryByteCodes.TX_COMMIT);
            LogEntryParser parser = _version.entryParser(LogEntryByteCodes.TxCommit);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LogEntry logEntry = parser.parse(version, channel, marker, commandReader);
            LogEntry logEntry = parser.parse(_version, channel, _marker, _commandReader);

            // then
            assertEquals(commit, logEntry);
            assertFalse(parser.skip());
        }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public org.neo4j.kernel.impl.transaction.log.TransactionMetadataCache.TransactionMetadata getMetadataFor(long transactionId) throws java.io.IOException
        public override TransactionMetadata GetMetadataFor(long transactionId)
        {
            if (transactionId <= BASE_TX_ID)
            {
                return(_metadataForEmptyStore);
            }

            TransactionMetadata transactionMetadata = _transactionMetadataCache.getTransactionMetadata(transactionId);

            if (transactionMetadata == null)
            {
                using (IOCursor <CommittedTransactionRepresentation> cursor = GetTransactions(transactionId))
                {
                    while (cursor.next())
                    {
                        CommittedTransactionRepresentation tx = cursor.get();
                        LogEntryCommit      commitEntry       = tx.CommitEntry;
                        long                committedTxId     = commitEntry.TxId;
                        long                timeWritten       = commitEntry.TimeWritten;
                        TransactionMetadata metadata          = _transactionMetadataCache.cacheTransactionMetadata(committedTxId, tx.StartEntry.StartPosition, tx.StartEntry.MasterId, tx.StartEntry.LocalId, LogEntryStart.checksum(tx.StartEntry), timeWritten);
                        if (committedTxId == transactionId)
                        {
                            transactionMetadata = metadata;
                        }
                    }
                }
                if (transactionMetadata == null)
                {
                    throw new NoSuchTransactionException(transactionId);
                }
            }

            return(transactionMetadata);
        }
Пример #4
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldBeAbleToSkipBadLogEntries() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldBeAbleToSkipBadLogEntries()
        {
            // GIVEN
            AcceptingInvalidLogEntryHandler invalidLogEntryHandler = new AcceptingInvalidLogEntryHandler();
            VersionAwareLogEntryReader <ReadableClosablePositionAwareChannel> reader = new VersionAwareLogEntryReader <ReadableClosablePositionAwareChannel>(new RecordStorageCommandReaderFactory(), invalidLogEntryHandler);
            InMemoryClosableChannel channel = new InMemoryClosableChannel(1_000);
            LogEntryWriter          writer  = new LogEntryWriter(channel.Writer());
            long startTime  = currentTimeMillis();
            long commitTime = startTime + 10;

            writer.WriteStartEntry(1, 2, startTime, 3, new sbyte[0]);

            // Write command ...
            int posBefore = channel.WriterPosition();

            writer.Serialize(singletonList(new Command.NodeCommand(new NodeRecord(1), (new NodeRecord(1)).initialize(true, 1, false, 2, 0))));
            int posAfter = channel.WriterPosition();

            // ... which then gets overwritten with invalid data
            channel.PositionWriter(posBefore);
            while (channel.WriterPosition() < posAfter)
            {
                channel.Put(unchecked (( sbyte )0xFF));
            }

            writer.WriteCommitEntry(4, commitTime);
            long secondStartTime = startTime + 100;

            writer.WriteStartEntry(1, 2, secondStartTime, 4, new sbyte[0]);

            // WHEN
            LogEntryStart  readStartEntry       = reader.ReadLogEntry(channel.Reader()).@as();
            LogEntryCommit readCommitEntry      = reader.ReadLogEntry(channel.Reader()).@as();
            LogEntryStart  readSecondStartEntry = reader.ReadLogEntry(channel.Reader()).@as();

            // THEN
            assertEquals(1, readStartEntry.MasterId);
            assertEquals(2, readStartEntry.LocalId);
            assertEquals(startTime, readStartEntry.TimeWritten);

            assertEquals(4, readCommitEntry.TxId);
            assertEquals(commitTime, readCommitEntry.TimeWritten);

            assertEquals(posAfter - posBefore, invalidLogEntryHandler.BytesSkippedConflict);
            assertEquals(posAfter - posBefore, invalidLogEntryHandler.InvalidEntryCalls);

            assertEquals(1, readSecondStartEntry.MasterId);
            assertEquals(2, readSecondStartEntry.LocalId);
            assertEquals(secondStartTime, readSecondStartEntry.TimeWritten);
        }
Пример #5
0
        public override bool Equals(object o)
        {
            if (this == o)
            {
                return(true);
            }
            if (o == null || this.GetType() != o.GetType())
            {
                return(false);
            }

            LogEntryCommit commit = ( LogEntryCommit )o;

            return(_timeWritten == commit._timeWritten && _txId == commit._txId && Name.Equals(commit.Name));
        }
Пример #6
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldBeAbleToSkipBadVersionAndTypeBytesInBetweenLogEntries() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldBeAbleToSkipBadVersionAndTypeBytesInBetweenLogEntries()
        {
            // GIVEN
            AcceptingInvalidLogEntryHandler invalidLogEntryHandler = new AcceptingInvalidLogEntryHandler();
            VersionAwareLogEntryReader <ReadableClosablePositionAwareChannel> reader = new VersionAwareLogEntryReader <ReadableClosablePositionAwareChannel>(new RecordStorageCommandReaderFactory(), invalidLogEntryHandler);
            InMemoryClosableChannel channel = new InMemoryClosableChannel(1_000);
            LogEntryWriter          writer  = new LogEntryWriter(channel.Writer());
            long startTime  = currentTimeMillis();
            long commitTime = startTime + 10;

            writer.WriteStartEntry(1, 2, startTime, 3, new sbyte[0]);
            writer.WriteCommitEntry(4, commitTime);
            channel.Put(( sbyte )127);
            channel.Put(( sbyte )126);
            channel.Put(( sbyte )125);
            long secondStartTime = startTime + 100;

            writer.WriteStartEntry(1, 2, secondStartTime, 4, new sbyte[0]);

            // WHEN
            LogEntryStart  readStartEntry       = reader.ReadLogEntry(channel.Reader()).@as();
            LogEntryCommit readCommitEntry      = reader.ReadLogEntry(channel.Reader()).@as();
            LogEntryStart  readSecondStartEntry = reader.ReadLogEntry(channel.Reader()).@as();

            // THEN
            assertEquals(1, readStartEntry.MasterId);
            assertEquals(2, readStartEntry.LocalId);
            assertEquals(startTime, readStartEntry.TimeWritten);

            assertEquals(4, readCommitEntry.TxId);
            assertEquals(commitTime, readCommitEntry.TimeWritten);

            assertEquals(3, invalidLogEntryHandler.BytesSkippedConflict);
            assertEquals(3, invalidLogEntryHandler.InvalidEntryCalls);

            assertEquals(1, readSecondStartEntry.MasterId);
            assertEquals(2, readSecondStartEntry.LocalId);
            assertEquals(secondStartTime, readSecondStartEntry.TimeWritten);
        }
Пример #7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReadACommitLogEntry() throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldReadACommitLogEntry()
        {
            // given
            LogEntryVersion version = LogEntryVersion.CURRENT;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LogEntryCommit commit = new LogEntryCommit(version, 42, 21);
            LogEntryCommit commit = new LogEntryCommit(version, 42, 21);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.kernel.impl.transaction.log.InMemoryClosableChannel channel = new org.neo4j.kernel.impl.transaction.log.InMemoryClosableChannel();
            InMemoryClosableChannel channel = new InMemoryClosableChannel();

            channel.Put(version.byteCode());
            channel.Put(LogEntryByteCodes.TxCommit);
            channel.PutLong(commit.TxId);
            channel.PutLong(commit.TimeWritten);

            // when
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LogEntry logEntry = logEntryReader.readLogEntry(channel);
            LogEntry logEntry = _logEntryReader.readLogEntry(channel);

            // then
            assertEquals(commit, logEntry);
        }
Пример #8
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public void writeCommitEntry(LogEntryCommit entry) throws java.io.IOException
        public virtual void WriteCommitEntry(LogEntryCommit entry)
        {
            WriteCommitEntry(entry.TxId, entry.TimeWritten);
        }
Пример #9
0
 private void InitializeInstanceFields()
 {
     _start  = new LogEntryStart(0, 0, 0, 0, null, _startPosition);
     _commit = new LogEntryCommit(_txId, DateTimeHelper.CurrentUnixTimeMillis());
 }