From 66237dca0b888e57df57934ff72197ca3adbcb75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Finn=C3=A9?= Date: Wed, 23 May 2018 08:15:10 +0200 Subject: [PATCH] Extract interface to StoreNodeCursor and moves some physical node reading details into it --- .../TransactionBoundQueryContextTest.scala | 6 +- .../org/neo4j/kernel/NeoStoreDataSource.java | 2 +- .../kernel/impl/newapi/AllStoreHolder.java | 35 --------- .../kernel/impl/newapi/DefaultCursors.java | 16 +++- .../kernel/impl/newapi/DefaultNodeCursor.java | 11 +-- .../org/neo4j/kernel/impl/newapi/Read.java | 13 ---- .../kernel/impl/newapi/StoreNodeCursor.java | 69 +++++++++++++---- .../recordstorage/RecordStorageReader.java | 16 ++-- .../neo4j/kernel/impl/store/NodeStore.java | 4 +- .../storageengine/api/StorageNodeCursor.java | 38 +++++++++ .../storageengine/api/StorageReader.java | 15 +--- .../kernel/api/KernelTransactionFactory.java | 2 +- .../impl/api/KernelTransactionTestBase.java | 2 +- .../impl/api/KernelTransactionsTest.java | 4 +- .../neo4j/kernel/impl/newapi/MockStore.java | 77 ------------------- .../newapi/NodeValueClientFilterTest.java | 5 +- 16 files changed, 134 insertions(+), 181 deletions(-) create mode 100644 community/kernel/src/main/java/org/neo4j/storageengine/api/StorageNodeCursor.java diff --git a/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala b/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala index 73b8457597c28..0e400c9a6bd2f 100644 --- a/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala +++ b/community/cypher/interpreted-runtime/src/test/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContextTest.scala @@ -89,7 +89,7 @@ class TransactionBoundQueryContextTest extends CypherFunSuite { val bridge = mock[ThreadToStatementContextBridge] val transaction = mock[KernelTransaction] - when(transaction.cursors()).thenReturn(new DefaultCursors()) + when(transaction.cursors()).thenReturn(new DefaultCursors(null)) when(bridge.getKernelTransactionBoundToThisThread(true)).thenReturn(transaction) val tc = new Neo4jTransactionalContext(graph, bridge, locker, outerTx, statement,null, null) val transactionalContext = TransactionalContextWrapper(tc) @@ -113,7 +113,7 @@ class TransactionBoundQueryContextTest extends CypherFunSuite { val bridge = mock[ThreadToStatementContextBridge] val transaction = mock[KernelTransaction] when(transaction.acquireStatement()).thenReturn(statement) - when(transaction.cursors()).thenReturn(new DefaultCursors()) + when(transaction.cursors()).thenReturn(new DefaultCursors(null)) when(bridge.getKernelTransactionBoundToThisThread(true)).thenReturn(transaction) val tc = new Neo4jTransactionalContext(graph, bridge, locker, outerTx, statement,null, null) val transactionalContext = TransactionalContextWrapper(tc) @@ -216,7 +216,7 @@ class TransactionBoundQueryContextTest extends CypherFunSuite { val bridge = mock[ThreadToStatementContextBridge] val transaction = mock[KernelTransaction] when(transaction.acquireStatement()).thenReturn(statement) - when(transaction.cursors()).thenReturn(new DefaultCursors()) + when(transaction.cursors()).thenReturn(new DefaultCursors(null)) when(bridge.getKernelTransactionBoundToThisThread(true)).thenReturn(transaction) val tc = new Neo4jTransactionalContext(graph, bridge, locker, outerTx, statement, null, null) val transactionalContext = TransactionalContextWrapper(tc) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java index bc4c3f0a80201..7a659aba55648 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/NeoStoreDataSource.java @@ -673,7 +673,7 @@ private NeoStoreKernelModule buildKernel( LogFiles logFiles, TransactionAppender constraintIndexCreator, statementOperationParts, schemaWriteGuard, transactionHeaderInformationFactory, transactionCommitProcess, indexConfigStore, explicitIndexProviderLookup, hooks, transactionMonitor, availabilityGuard, tracers, storageEngine, procedures, transactionIdStore, clock, - cpuClockRef, heapAllocationRef, accessCapability, DefaultCursors::new, autoIndexing, + cpuClockRef, heapAllocationRef, accessCapability, DefaultCursors.supplier( storageEngine ), autoIndexing, explicitIndexStore, versionContextSupplier, collectionsFactorySupplier, constraintSemantics, databaseSchemaState, indexingService, propertyKeyTokenHolder ) ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java index 40a1cd84c1e10..cf9f4b4465ae1 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/AllStoreHolder.java @@ -73,9 +73,6 @@ import org.neo4j.kernel.impl.locking.ResourceTypes; import org.neo4j.kernel.impl.proc.Procedures; import org.neo4j.kernel.impl.store.PropertyStore; -import org.neo4j.kernel.impl.store.RecordCursor; -import org.neo4j.kernel.impl.store.record.DynamicRecord; -import org.neo4j.kernel.impl.store.record.NodeRecord; import org.neo4j.kernel.impl.store.record.PropertyRecord; import org.neo4j.kernel.impl.store.record.RecordLoad; import org.neo4j.kernel.impl.store.record.RelationshipGroupRecord; @@ -104,7 +101,6 @@ public class AllStoreHolder extends Read { - private final StorageReader.Nodes nodes; private final StorageReader.Groups groups; private final StorageReader.Properties properties; private final StorageReader.Relationships relationships; @@ -123,7 +119,6 @@ public AllStoreHolder( { super( cursors, ktx ); this.storageReader = storageReader; - this.nodes = storageReader.nodes(); this.relationships = storageReader.relationships(); this.groups = storageReader.groups(); this.properties = storageReader.properties(); @@ -672,12 +667,6 @@ public Iterator constraintsGetForRelationshipType( int typ return constraints; } - @Override - PageCursor nodePage( long reference ) - { - return nodes.openPageCursorForReading( reference ); - } - @Override PageCursor relationshipPage( long reference ) { @@ -708,24 +697,6 @@ PageCursor arrayPage( long reference ) return properties.openArrayPageCursor( reference ); } - @Override - RecordCursor labelCursor() - { - return nodes.newLabelCursor(); - } - - @Override - void node( NodeRecord record, long reference, PageCursor pageCursor ) - { - nodes.getRecordByCursor( reference, record, RecordLoad.CHECK, pageCursor ); - } - - @Override - void nodeAdvance( NodeRecord record, PageCursor pageCursor ) - { - nodes.nextRecordByCursor( record, RecordLoad.CHECK, pageCursor ); - } - @Override void relationship( RelationshipRecord record, long reference, PageCursor pageCursor ) { @@ -769,12 +740,6 @@ void group( RelationshipGroupRecord record, long reference, PageCursor page ) groups.getRecordByCursor( reference, record, RecordLoad.FORCE, page ); } - @Override - long nodeHighMark() - { - return nodes.getHighestPossibleIdInUse(); - } - @Override long relationshipHighMark() { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultCursors.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultCursors.java index 569b8f5fe5bdf..d15ef360d0184 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultCursors.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultCursors.java @@ -24,15 +24,19 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.function.Supplier; import org.neo4j.internal.kernel.api.AutoCloseablePlus; import org.neo4j.internal.kernel.api.CursorFactory; +import org.neo4j.storageengine.api.StorageEngine; +import org.neo4j.storageengine.api.StorageReader; import static java.lang.String.format; import static org.neo4j.util.FeatureToggles.flag; public class DefaultCursors implements CursorFactory { + private final StorageReader storageReader; private DefaultNodeCursor nodeCursor; private DefaultRelationshipScanCursor relationshipScanCursor; private DefaultRelationshipTraversalCursor relationshipTraversalCursor; @@ -46,12 +50,22 @@ public class DefaultCursors implements CursorFactory private static final boolean DEBUG_CLOSING = flag( DefaultCursors.class, "trackCursors", false ); private List closeables = new ArrayList<>(); + public DefaultCursors( StorageReader storageReader ) + { + this.storageReader = storageReader; + } + + public static Supplier supplier( StorageEngine storageEngine ) + { + return () -> new DefaultCursors( storageEngine.newReader() ); + } + @Override public DefaultNodeCursor allocateNodeCursor() { if ( nodeCursor == null ) { - return trace( new DefaultNodeCursor( this ) ); + return trace( new DefaultNodeCursor( this, storageReader.allocateNodeCursor() ) ); } try diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultNodeCursor.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultNodeCursor.java index e77048c74b91e..f2caccf98f1dd 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultNodeCursor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/DefaultNodeCursor.java @@ -33,6 +33,7 @@ import org.neo4j.internal.kernel.api.RelationshipGroupCursor; import org.neo4j.internal.kernel.api.RelationshipTraversalCursor; import org.neo4j.kernel.api.txstate.TransactionState; +import org.neo4j.storageengine.api.StorageNodeCursor; import org.neo4j.storageengine.api.txstate.LongDiffSets; import org.neo4j.storageengine.api.txstate.NodeState; @@ -43,20 +44,20 @@ class DefaultNodeCursor implements NodeCursor private Read read; private HasChanges hasChanges = HasChanges.MAYBE; private LongIterator addedNodes; - private StoreNodeCursor storeCursor; + private StorageNodeCursor storeCursor; private long single; private final DefaultCursors pool; - DefaultNodeCursor( DefaultCursors pool ) + DefaultNodeCursor( DefaultCursors pool, StorageNodeCursor storeCursor ) { this.pool = pool; - this.storeCursor = new StoreNodeCursor(); + this.storeCursor = storeCursor; } void scan( Read read ) { - storeCursor.scan( read ); + storeCursor.scan(); this.read = read; this.single = NO_ID; this.hasChanges = HasChanges.MAYBE; @@ -65,7 +66,7 @@ void scan( Read read ) void single( long reference, Read read ) { - storeCursor.single( reference, read ); + storeCursor.single( reference ); this.read = read; this.single = reference; this.hasChanges = HasChanges.MAYBE; diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Read.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Read.java index 8b3eddb8a5d43..a930390ca7cb4 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Read.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Read.java @@ -50,9 +50,6 @@ import org.neo4j.kernel.impl.locking.LockTracer; import org.neo4j.kernel.impl.locking.Locks; import org.neo4j.kernel.impl.locking.ResourceTypes; -import org.neo4j.kernel.impl.store.RecordCursor; -import org.neo4j.kernel.impl.store.record.DynamicRecord; -import org.neo4j.kernel.impl.store.record.NodeRecord; import org.neo4j.kernel.impl.store.record.PropertyRecord; import org.neo4j.kernel.impl.store.record.RelationshipGroupRecord; import org.neo4j.kernel.impl.store.record.RelationshipRecord; @@ -571,8 +568,6 @@ public final void futureRelationshipPropertyReferenceRead( long reference ) @Override public abstract IndexReference index( int label, int... properties ); - abstract PageCursor nodePage( long reference ); - abstract PageCursor relationshipPage( long reference ); abstract PageCursor groupPage( long reference ); @@ -583,12 +578,6 @@ public final void futureRelationshipPropertyReferenceRead( long reference ) abstract PageCursor arrayPage( long reference ); - abstract RecordCursor labelCursor(); - - abstract void node( NodeRecord record, long reference, PageCursor pageCursor ); - - abstract void nodeAdvance( NodeRecord record, PageCursor pageCursor ); - abstract void relationship( RelationshipRecord record, long reference, PageCursor pageCursor ); abstract void relationshipAdvance( RelationshipRecord record, PageCursor pageCursor ); @@ -599,8 +588,6 @@ public final void futureRelationshipPropertyReferenceRead( long reference ) abstract void group( RelationshipGroupRecord record, long reference, PageCursor page ); - abstract long nodeHighMark(); - abstract long relationshipHighMark(); abstract TextValue string( StorePropertyCursor cursor, long reference, PageCursor page ); diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/StoreNodeCursor.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/StoreNodeCursor.java index ff7201249731a..743ae42eea0eb 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/StoreNodeCursor.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/StoreNodeCursor.java @@ -23,25 +23,30 @@ import org.neo4j.io.pagecache.PageCursor; import org.neo4j.kernel.impl.store.NodeLabelsField; +import org.neo4j.kernel.impl.store.NodeStore; import org.neo4j.kernel.impl.store.RecordCursor; import org.neo4j.kernel.impl.store.record.DynamicRecord; import org.neo4j.kernel.impl.store.record.NodeRecord; +import org.neo4j.kernel.impl.store.record.RecordLoad; +import org.neo4j.storageengine.api.StorageNodeCursor; -class StoreNodeCursor extends NodeRecord +public class StoreNodeCursor extends NodeRecord implements StorageNodeCursor { - private Read read; + private NodeStore read; private RecordCursor labelCursor; private PageCursor pageCursor; private long next; private long highMark; private long nextStoreReference; - StoreNodeCursor() + public StoreNodeCursor( NodeStore read ) { super( NO_ID ); + this.read = read; } - void scan( Read read ) + @Override + public void scan() { if ( getId() != NO_ID ) { @@ -49,15 +54,15 @@ void scan( Read read ) } if ( pageCursor == null ) { - pageCursor = read.nodePage( 0 ); + pageCursor = nodePage( 0 ); } this.next = 0; - this.highMark = read.nodeHighMark(); + this.highMark = nodeHighMark(); this.nextStoreReference = NO_ID; - this.read = read; } - void single( long reference, Read read ) + @Override + public void single( long reference ) { if ( getId() != NO_ID ) { @@ -65,25 +70,27 @@ void single( long reference, Read read ) } if ( pageCursor == null ) { - pageCursor = read.nodePage( reference ); + pageCursor = nodePage( reference ); } this.next = reference; //This marks the cursor as a "single cursor" this.highMark = NO_ID; this.nextStoreReference = NO_ID; - this.read = read; } + @Override public long nodeReference() { return getId(); } + @Override public long[] labels() { return NodeLabelsField.get( this, labelCursor() ); } + @Override public boolean hasLabel( int label ) { //Get labels from store and put in intSet, unfortunately we get longs back @@ -99,26 +106,31 @@ public boolean hasLabel( int label ) return false; } + @Override public boolean hasProperties() { return nextProp != NO_ID; } + @Override public long relationshipGroupReference() { return isDense() ? getNextRel() : GroupReferenceEncoding.encodeRelationship( getNextRel() ); } + @Override public long allRelationshipsReference() { return isDense() ? RelationshipReferenceEncoding.encodeGroup( getNextRel() ) : getNextRel(); } + @Override public long propertiesReference() { return getNextProp(); } + @Override public boolean next( LongPredicate filter ) { if ( next == NO_ID ) @@ -136,13 +148,13 @@ public boolean next( LongPredicate filter ) } else if ( nextStoreReference == next ) { - read.nodeAdvance( this, pageCursor ); + nodeAdvance( this, pageCursor ); next++; nextStoreReference++; } else { - read.node( this, next++, pageCursor ); + node( this, next++, pageCursor ); nextStoreReference = next; } @@ -158,7 +170,7 @@ else if ( nextStoreReference == next ) { //we are a "scan cursor" //Check if there is a new high mark - highMark = read.nodeHighMark(); + highMark = nodeHighMark(); if ( next > highMark ) { next = NO_ID; @@ -171,12 +183,14 @@ else if ( nextStoreReference == next ) return true; } + @Override public void setCurrent( long nodeReference ) { setId( nodeReference ); setInUse( true ); } + @Override public void close() { if ( !isClosed() ) @@ -186,12 +200,14 @@ public void close() } } + @Override public boolean isClosed() { return read == null; } - void reset() + @Override + public void reset() { next = NO_ID; setId( NO_ID ); @@ -202,7 +218,7 @@ private RecordCursor labelCursor() { if ( labelCursor == null ) { - labelCursor = read.labelCursor(); + labelCursor = read.newLabelCursor(); } return labelCursor; } @@ -228,7 +244,8 @@ public String toString() } } - void release() + @Override + public void release() { if ( labelCursor != null ) { @@ -242,4 +259,24 @@ void release() pageCursor = null; } } + + private PageCursor nodePage( long reference ) + { + return read.openPageCursorForReading( reference ); + } + + private long nodeHighMark() + { + return read.getHighestPossibleIdInUse(); + } + + private void node( NodeRecord record, long reference, PageCursor pageCursor ) + { + read.getRecordByCursor( reference, record, RecordLoad.CHECK, pageCursor ); + } + + private void nodeAdvance( NodeRecord record, PageCursor pageCursor ) + { + read.nextRecordByCursor( record, RecordLoad.CHECK, pageCursor ); + } } diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java index 2078548e66dae..aa5ff00e31f49 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/storageengine/impl/recordstorage/RecordStorageReader.java @@ -64,6 +64,7 @@ import org.neo4j.kernel.impl.core.TokenNotFoundException; import org.neo4j.kernel.impl.locking.Lock; import org.neo4j.kernel.impl.locking.LockService; +import org.neo4j.kernel.impl.newapi.StoreNodeCursor; import org.neo4j.kernel.impl.store.InvalidRecordException; import org.neo4j.kernel.impl.store.NeoStores; import org.neo4j.kernel.impl.store.NodeStore; @@ -87,6 +88,7 @@ import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.RelationshipItem; +import org.neo4j.storageengine.api.StorageNodeCursor; import org.neo4j.storageengine.api.StorageProperty; import org.neo4j.storageengine.api.StorageReader; import org.neo4j.storageengine.api.Token; @@ -107,7 +109,7 @@ /** * Default implementation of StorageReader. Delegates to NeoStores and indexes. */ -class RecordStorageReader implements StorageReader +public class RecordStorageReader implements StorageReader { // These token holders should perhaps move to the cache layer.. not really any reason to have them here? private final PropertyKeyTokenHolder propertyKeyTokenHolder; @@ -730,12 +732,6 @@ public T getOrCreateSchemaDependantState( Class type, Function implements StorageReader.Nodes +public class NodeStore extends CommonAbstractStore { public static Long readOwnerFromDynamicLabelsRecord( DynamicRecord record ) { @@ -58,7 +57,6 @@ public static Long readOwnerFromDynamicLabelsRecord( DynamicRecord record ) return bits.getLong( requiredBits ); } - @Override public RecordCursor newLabelCursor() { return dynamicLabelStore.newRecordCursor( dynamicLabelStore.newRecord() ).acquire( getNumberOfReservedLowIds(), diff --git a/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageNodeCursor.java b/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageNodeCursor.java new file mode 100644 index 0000000000000..c437898ac2c33 --- /dev/null +++ b/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageNodeCursor.java @@ -0,0 +1,38 @@ +package org.neo4j.storageengine.api; + +import java.util.function.LongPredicate; + +public interface StorageNodeCursor +{ + void scan(); + + void single( long reference ); + + long nodeReference(); + + long[] labels(); + + boolean hasLabel( int label ); + + boolean hasProperties(); + + long relationshipGroupReference(); + + long allRelationshipsReference(); + + long propertiesReference(); + + boolean next( LongPredicate filter ); + + void setCurrent( long nodeReference ); + + void close(); + + boolean isClosed(); + + boolean isDense(); + + void reset(); + + void release(); +} diff --git a/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java b/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java index 28970e7c383e0..9435293222cbf 100644 --- a/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java +++ b/community/kernel/src/main/java/org/neo4j/storageengine/api/StorageReader.java @@ -51,12 +51,9 @@ import org.neo4j.kernel.impl.api.store.RelationshipIterator; import org.neo4j.kernel.impl.locking.Lock; import org.neo4j.kernel.impl.store.InvalidRecordException; -import org.neo4j.kernel.impl.store.RecordCursor; import org.neo4j.kernel.impl.store.RecordCursors; import org.neo4j.kernel.impl.store.RecordStore; import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; -import org.neo4j.kernel.impl.store.record.DynamicRecord; -import org.neo4j.kernel.impl.store.record.NodeRecord; import org.neo4j.kernel.impl.store.record.PropertyRecord; import org.neo4j.kernel.impl.store.record.RecordLoad; import org.neo4j.kernel.impl.store.record.RelationshipGroupRecord; @@ -567,14 +564,14 @@ DoubleLongRegister indexSample( SchemaDescriptor descriptor, DoubleLongRegister T getOrCreateSchemaDependantState( Class type, Function factory ); - Nodes nodes(); - Relationships relationships(); Groups groups(); Properties properties(); + StorageNodeCursor allocateNodeCursor(); + interface RecordReads { /** @@ -621,14 +618,6 @@ void nextRecordByCursor( RECORD record, RecordLoad mode, PageCursor cursor ) long getHighestPossibleIdInUse(); } - interface Nodes extends RecordReads - { - /** - * @return a new Record cursor for accessing DynamicRecords containing labels. This comes acquired. - */ - RecordCursor newLabelCursor(); - } - interface Relationships extends RecordReads { } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/api/KernelTransactionFactory.java b/community/kernel/src/test/java/org/neo4j/kernel/api/KernelTransactionFactory.java index 862bdc67265a2..8fa0eda402271 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/api/KernelTransactionFactory.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/api/KernelTransactionFactory.java @@ -100,7 +100,7 @@ static Instances kernelTransactionWithInternals( LoginContext loginContext ) Clocks.systemClock(), new AtomicReference<>( CpuClock.NOT_AVAILABLE ), new AtomicReference<>( HeapAllocation.NOT_AVAILABLE ), NULL, LockTracer.NONE, PageCursorTracerSupplier.NULL, - storageEngine, new CanWrite(), new DefaultCursors(), AutoIndexing.UNSUPPORTED, + storageEngine, new CanWrite(), new DefaultCursors( storageReader ), AutoIndexing.UNSUPPORTED, mock( ExplicitIndexStore.class ), EmptyVersionContextSupplier.EMPTY, ON_HEAP, new StandardConstraintSemantics(), mock( SchemaState.class), mock( IndexingService.class ) ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java index 6ccf597f9ec50..41876928b8bb1 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionTestBase.java @@ -163,7 +163,7 @@ public KernelTransactionImplementation newNotInitializedTransaction() return new KernelTransactionImplementation( statementOperations, schemaWriteGuard, hooks, null, null, headerInformationFactory, commitProcess, transactionMonitor, explicitIndexStateSupplier, txPool, clock, new AtomicReference<>( CpuClock.NOT_AVAILABLE ), new AtomicReference<>( HeapAllocation.NOT_AVAILABLE ), TransactionTracer.NULL, LockTracer.NONE, PageCursorTracerSupplier.NULL, storageEngine, - new CanWrite(), new DefaultCursors(), AutoIndexing.UNSUPPORTED, + new CanWrite(), new DefaultCursors( storageEngine.newReader() ), AutoIndexing.UNSUPPORTED, mock( ExplicitIndexStore.class ), EmptyVersionContextSupplier.EMPTY, () -> collectionsFactory, new StandardConstraintSemantics(), mock( SchemaState.class), mock( IndexingService.class) ); diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java index c43078310ecb4..2737986b2ba87 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/api/KernelTransactionsTest.java @@ -609,7 +609,7 @@ null, DEFAULT, commitProcess, null, null, new TransactionHooks(), mock( TransactionMonitor.class ), availabilityGuard, tracers, storageEngine, new Procedures(), transactionIdStore, clock, new AtomicReference<>( CpuClock.NOT_AVAILABLE ), new AtomicReference<>( HeapAllocation.NOT_AVAILABLE ), new CanWrite(), - DefaultCursors::new, AutoIndexing.UNSUPPORTED, + DefaultCursors.supplier( storageEngine ), AutoIndexing.UNSUPPORTED, mock( ExplicitIndexStore.class ), EmptyVersionContextSupplier.EMPTY, ON_HEAP, mock( ConstraintSemantics.class ), mock( SchemaState.class ), mock( IndexingProvidersService.class), mock( PropertyKeyTokenHolder.class ) ); @@ -624,7 +624,7 @@ private static TestKernelTransactions createTestTransactions( StorageEngine stor null, DEFAULT, commitProcess, null, null, new TransactionHooks(), mock( TransactionMonitor.class ), availabilityGuard, tracers, storageEngine, new Procedures(), transactionIdStore, clock, - new CanWrite(), DefaultCursors::new, + new CanWrite(), DefaultCursors.supplier( storageEngine ), AutoIndexing.UNSUPPORTED, EmptyVersionContextSupplier.EMPTY, mock( PropertyKeyTokenHolder.class ) ); } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/MockStore.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/MockStore.java index fd9af8cf3eae8..c69203c4d2b98 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/MockStore.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/MockStore.java @@ -36,7 +36,6 @@ import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.internal.kernel.api.exceptions.ProcedureException; -import org.neo4j.internal.kernel.api.exceptions.explicitindex.ExplicitIndexNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.schema.SchemaKernelException; import org.neo4j.internal.kernel.api.procs.ProcedureHandle; import org.neo4j.internal.kernel.api.procs.ProcedureSignature; @@ -51,13 +50,11 @@ import org.neo4j.kernel.impl.api.KernelTransactionImplementation; import org.neo4j.kernel.impl.store.DynamicRecordAllocator; import org.neo4j.kernel.impl.store.PropertyStore; -import org.neo4j.kernel.impl.store.RecordCursor; import org.neo4j.kernel.impl.store.record.AbstractBaseRecord; import org.neo4j.kernel.impl.store.record.DynamicRecord; import org.neo4j.kernel.impl.store.record.NodeRecord; import org.neo4j.kernel.impl.store.record.PropertyBlock; import org.neo4j.kernel.impl.store.record.PropertyRecord; -import org.neo4j.kernel.impl.store.record.RecordLoad; import org.neo4j.kernel.impl.store.record.RelationshipGroupRecord; import org.neo4j.kernel.impl.store.record.RelationshipRecord; import org.neo4j.register.Register; @@ -124,12 +121,6 @@ ExplicitIndex explicitRelationshipIndex( String indexName ) throw new UnsupportedOperationException( "not implemented" ); } - @Override - PageCursor nodePage( long reference ) - { - return null; - } - @Override PageCursor relationshipPage( long reference ) { @@ -160,55 +151,6 @@ PageCursor arrayPage( long reference ) return null; } - @Override - RecordCursor labelCursor() - { - return new RecordCursor() - { - @Override - public RecordCursor acquire( long id, RecordLoad mode ) - { - placeAt( id, mode ); - return this; - } - - @Override - public void placeAt( long id, RecordLoad mode ) - { - throw new UnsupportedOperationException( "not implemented" ); - } - - @Override - public boolean next() - { - throw new UnsupportedOperationException( "not implemented" ); - } - - @Override - public boolean next( long id ) - { - throw new UnsupportedOperationException( "not implemented" ); - } - - @Override - public boolean next( long id, DynamicRecord record, RecordLoad mode ) - { - throw new UnsupportedOperationException( "not implemented" ); - } - - @Override - public void close() - { - } - - @Override - public DynamicRecord get() - { - throw new UnsupportedOperationException( "not implemented" ); - } - }; - } - @Override public boolean nodeExists( long id ) { @@ -568,19 +510,6 @@ public static PropertyBlock block( int key, Value value ) return block; } - @Override - void node( NodeRecord record, long reference, PageCursor pageCursor ) - { - initialize( record, reference, nodes ); - } - - @Override - void nodeAdvance( NodeRecord record, PageCursor pageCursor ) - { - initialize( record, record.getId() + 1, nodes ); - } - - @Override void relationship( RelationshipRecord record, long reference, PageCursor pageCursor ) { throw new UnsupportedOperationException( "not implemented" ); @@ -610,12 +539,6 @@ void group( RelationshipGroupRecord record, long reference, PageCursor page ) throw new UnsupportedOperationException( "not implemented" ); } - @Override - long nodeHighMark() - { - throw new UnsupportedOperationException( "not implemented" ); - } - @Override long relationshipHighMark() { diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/NodeValueClientFilterTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/NodeValueClientFilterTest.java index 8198232f26256..c60131200711f 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/NodeValueClientFilterTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/newapi/NodeValueClientFilterTest.java @@ -27,7 +27,6 @@ import java.util.List; import org.neo4j.internal.kernel.api.IndexQuery; - import org.neo4j.internal.kernel.api.security.SecurityContext; import org.neo4j.kernel.api.schema.index.IndexDescriptor; import org.neo4j.kernel.api.schema.index.TestIndexDescriptorFactory; @@ -46,9 +45,9 @@ public class NodeValueClientFilterTest implements IndexProgressor, NodeValueClient { @Rule - public final MockStore store = new MockStore( new DefaultCursors() ); + public final MockStore store = new MockStore( new DefaultCursors( null ) ); + private final DefaultCursors cursors = new DefaultCursors( null ); private final List events = new ArrayList<>(); - private final DefaultCursors cursors = new DefaultCursors(); @Test public void shouldAcceptAllNodesOnNoFilters()