diff --git a/tools/src/main/java/org/neo4j/tools/dump/DumpLogicalLog.java b/tools/src/main/java/org/neo4j/tools/dump/DumpLogicalLog.java
index 479f575571414..664225b9c7fa3 100644
--- a/tools/src/main/java/org/neo4j/tools/dump/DumpLogicalLog.java
+++ b/tools/src/main/java/org/neo4j/tools/dump/DumpLogicalLog.java
@@ -49,7 +49,6 @@
import org.neo4j.kernel.impl.transaction.log.ReadAheadLogChannel;
import org.neo4j.kernel.impl.transaction.log.ReadableClosablePositionAwareChannel;
import org.neo4j.kernel.impl.transaction.log.ReaderLogVersionBridge;
-import org.neo4j.kernel.impl.transaction.log.TransactionLogEntryCursor;
import org.neo4j.kernel.impl.transaction.log.entry.InvalidLogEntryHandler;
import org.neo4j.kernel.impl.transaction.log.entry.LogEntry;
import org.neo4j.kernel.impl.transaction.log.entry.LogEntryCommand;
@@ -58,6 +57,7 @@
import org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader;
import org.neo4j.storageengine.api.StorageCommand;
import org.neo4j.tools.dump.inconsistency.ReportInconsistencies;
+import org.neo4j.tools.dump.log.TransactionLogEntryCursor;
import static java.util.TimeZone.getTimeZone;
import static org.neo4j.helpers.Format.DEFAULT_TIME_ZONE;
diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionLogEntryCursor.java b/tools/src/main/java/org/neo4j/tools/dump/log/TransactionLogEntryCursor.java
similarity index 79%
rename from community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionLogEntryCursor.java
rename to tools/src/main/java/org/neo4j/tools/dump/log/TransactionLogEntryCursor.java
index 96fdd4fc39829..79ac2546ec79e 100644
--- a/community/kernel/src/main/java/org/neo4j/kernel/impl/transaction/log/TransactionLogEntryCursor.java
+++ b/tools/src/main/java/org/neo4j/tools/dump/log/TransactionLogEntryCursor.java
@@ -5,19 +5,19 @@
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
*/
-package org.neo4j.kernel.impl.transaction.log;
+package org.neo4j.tools.dump.log;
import java.io.IOException;
import java.util.ArrayList;
@@ -60,7 +60,7 @@ public boolean next() throws IOException
return true;
}
}
- return false;
+ return !transaction.isEmpty();
}
private boolean isBreakPoint( LogEntry entry )
diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/TransactionLogEntryCursorTest.java b/tools/src/test/java/org/neo4j/tools/dump/log/TransactionLogEntryCursorTest.java
similarity index 59%
rename from community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/TransactionLogEntryCursorTest.java
rename to tools/src/test/java/org/neo4j/tools/dump/log/TransactionLogEntryCursorTest.java
index 181d1341a63f6..18b0ab2d00056 100644
--- a/community/kernel/src/test/java/org/neo4j/kernel/impl/transaction/log/TransactionLogEntryCursorTest.java
+++ b/tools/src/test/java/org/neo4j/tools/dump/log/TransactionLogEntryCursorTest.java
@@ -5,33 +5,39 @@
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
*/
-package org.neo4j.kernel.impl.transaction.log;
+package org.neo4j.tools.dump.log;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
+import java.util.stream.Stream;
+import org.neo4j.kernel.impl.transaction.log.ArrayIOCursor;
import org.neo4j.kernel.impl.transaction.log.entry.LogEntry;
import static junit.framework.TestCase.assertFalse;
+import static org.hamcrest.Matchers.arrayWithSize;
import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import static org.neo4j.kernel.impl.transaction.log.entry.LogEntryByteCodes.CHECK_POINT;
import static org.neo4j.kernel.impl.transaction.log.entry.LogEntryByteCodes.COMMAND;
import static org.neo4j.kernel.impl.transaction.log.entry.LogEntryByteCodes.TX_1P_COMMIT;
import static org.neo4j.kernel.impl.transaction.log.entry.LogEntryByteCodes.TX_START;
@@ -51,8 +57,7 @@ public void shouldDeliverIntactTransactions() throws IOException
// All transactions
// The cursor
- TransactionLogEntryCursor transactionCursor = new TransactionLogEntryCursor( new ArrayIOCursor(
- transactionsAsArray( tx1, tx2 ) ) );
+ TransactionLogEntryCursor transactionCursor = getTransactionLogEntryCursor( tx1, tx2 );
// THEN
// tx1
@@ -68,7 +73,7 @@ public void shouldDeliverIntactTransactions() throws IOException
}
@Test
- public void shouldNotDeliverTransactionsWithoutEnd() throws IOException
+ public void deliverTransactionsWithoutEnd() throws IOException
{
// GIVEN
// tx 1
@@ -77,24 +82,34 @@ public void shouldNotDeliverTransactionsWithoutEnd() throws IOException
// tx 2
List tx2 = makeTransaction( TX_START, COMMAND, COMMAND );
- TransactionLogEntryCursor transactionCursor = new TransactionLogEntryCursor( new ArrayIOCursor(
- transactionsAsArray( tx1, tx2 ) ) );
+ TransactionLogEntryCursor transactionCursor = getTransactionLogEntryCursor( tx1, tx2 );
// THEN
assertTrue( transactionCursor.next() );
assertTx( tx1, transactionCursor.get() );
- assertFalse( transactionCursor.next() );
+ assertTrue( transactionCursor.next() );
+ }
+
+ @Test
+ public void readNonTransactionalEntries() throws IOException
+ {
+ List recordSet1 = makeTransaction( CHECK_POINT, CHECK_POINT, CHECK_POINT );
+ List recordSet2 = makeTransaction( CHECK_POINT );
+ TransactionLogEntryCursor transactionCursor = getTransactionLogEntryCursor( recordSet1, recordSet2 );
+
+ assertTrue( transactionCursor.next() );
+ assertThat( "All 4 checkpoints should be provided.", transactionCursor.get(), arrayWithSize( 4 ) );
+ }
+
+ private TransactionLogEntryCursor getTransactionLogEntryCursor( List...txEntries )
+ {
+ return new TransactionLogEntryCursor( new ArrayIOCursor( transactionsAsArray( txEntries ) ) );
}
private LogEntry[] transactionsAsArray( List... transactions )
{
- List allTransactions = new ArrayList<>();
- for ( List tx : transactions )
- {
- allTransactions.addAll( tx );
- }
- return allTransactions.toArray( new LogEntry[allTransactions.size()] );
+ return Stream.of( transactions ).flatMap( Collection::stream ).toArray( LogEntry[]::new );
}
private void assertTx( List expected, LogEntry[] actual )
@@ -112,7 +127,7 @@ private List makeTransaction( byte... types )
return transaction;
}
- private LogEntry mockedLogEntry( byte type )
+ private static LogEntry mockedLogEntry( byte type )
{
LogEntry logEntry = mock( LogEntry.class );
when( logEntry.getType() ).thenReturn( type );