From 5294a0b1dd6e1a990023dd01aa06c1dd289fcb97 Mon Sep 17 00:00:00 2001 From: Pontus Melke Date: Tue, 5 Dec 2017 18:16:48 +0100 Subject: [PATCH] Refactor so that Read is monomorphic This is probably not a bottleneck but it makes sense from code style perspective as well so why not. --- .../api/KernelTransactionImplementation.java | 8 +- .../org/neo4j/kernel/impl/core/NodeProxy.java | 2 +- .../impl/factory/GraphDatabaseFacade.java | 2 +- .../kernel/impl/newapi/AllStoreHolder.java | 1 + .../neo4j/kernel/impl/newapi/Operations.java | 318 ++---------------- .../org/neo4j/kernel/impl/newapi/Read.java | 36 +- 6 files changed, 79 insertions(+), 288 deletions(-) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/KernelTransactionImplementation.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/KernelTransactionImplementation.java index 1637efc6c8a2..f48e2ebb3a91 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/api/KernelTransactionImplementation.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/api/KernelTransactionImplementation.java @@ -478,7 +478,7 @@ private void assertTransactionOpen() } } - private void assertOpen() + public void assertOpen() { Optional terminationReason = getReasonIfTerminated(); if ( terminationReason.isPresent() ) @@ -724,7 +724,7 @@ public void visitCreatedRelationship( long id, int type, long startNode, long en public Read dataRead() { currentStatement.assertAllows( AccessMode::allowsReads, "Read" ); - return operations; + return operations.dataRead(); } @Override @@ -754,7 +754,7 @@ public TokenRead tokenRead() @Override public ExplicitIndexRead indexRead() { - return operations; + return operations.indexRead(); } @Override @@ -766,7 +766,7 @@ public ExplicitIndexWrite indexWrite() @Override public SchemaRead schemaRead() { - return operations; + return operations.schemaRead(); } @Override diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java index 5bc6a484bc3f..a1b6416c1a53 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/core/NodeProxy.java @@ -505,7 +505,7 @@ public Object getProperty( String key ) throws NotFoundException } NodeCursor nodes = transaction.nodeCursor(); PropertyCursor properties = transaction.propertyCursor(); - try ( Statement ignore = actions.statement()) + try ( Statement ignore = actions.statement() ) { transaction.dataRead().singleNode( nodeId, nodes ); if ( !nodes.next() ) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java index 690769c09497..9b980c766ba2 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/factory/GraphDatabaseFacade.java @@ -332,7 +332,7 @@ public Node getNodeById( long id ) } KernelTransaction ktx = spi.currentTransaction(); - try ( Statement ignore = spi.currentStatement()) + try ( Statement ignore = spi.currentStatement() ) { if ( !ktx.dataRead().nodeExists( id ) ) { 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 92ea9a19c627..3628b0441a12 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 @@ -152,6 +152,7 @@ ExplicitIndex explicitRelationshipIndex( String indexName ) throws ExplicitIndex @Override public CapableIndexReference index( int label, int... properties ) { + assertOpen.assertOpen(); IndexDescriptor indexDescriptor = storeReadLayer.indexGetForSchema( new LabelSchemaDescriptor( label, properties ) ); if ( indexDescriptor == null ) { diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java index 2898b68ea1ad..88e950e57b68 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/newapi/Operations.java @@ -21,32 +21,16 @@ import java.util.Map; -import org.neo4j.graphdb.TransactionTerminatedException; -import org.neo4j.internal.kernel.api.CapableIndexReference; import org.neo4j.internal.kernel.api.CursorFactory; import org.neo4j.internal.kernel.api.ExplicitIndexRead; import org.neo4j.internal.kernel.api.ExplicitIndexWrite; -import org.neo4j.internal.kernel.api.IndexOrder; -import org.neo4j.internal.kernel.api.IndexQuery; -import org.neo4j.internal.kernel.api.IndexReference; -import org.neo4j.internal.kernel.api.NodeCursor; -import org.neo4j.internal.kernel.api.NodeExplicitIndexCursor; -import org.neo4j.internal.kernel.api.NodeLabelIndexCursor; -import org.neo4j.internal.kernel.api.NodeValueIndexCursor; import org.neo4j.internal.kernel.api.Read; -import org.neo4j.internal.kernel.api.RelationshipExplicitIndexCursor; -import org.neo4j.internal.kernel.api.RelationshipGroupCursor; -import org.neo4j.internal.kernel.api.RelationshipScanCursor; -import org.neo4j.internal.kernel.api.RelationshipTraversalCursor; -import org.neo4j.internal.kernel.api.Scan; import org.neo4j.internal.kernel.api.SchemaRead; import org.neo4j.internal.kernel.api.Token; import org.neo4j.internal.kernel.api.Write; -import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.internal.kernel.api.exceptions.explicitindex.AutoIndexingKernelException; import org.neo4j.internal.kernel.api.exceptions.explicitindex.ExplicitIndexNotFoundKernelException; import org.neo4j.kernel.api.exceptions.EntityNotFoundException; -import org.neo4j.kernel.api.exceptions.Status; import org.neo4j.kernel.api.explicitindex.AutoIndexing; import org.neo4j.kernel.impl.api.KernelTransactionImplementation; import org.neo4j.kernel.impl.index.IndexEntityType; @@ -62,7 +46,7 @@ /** * Collects all Kernel API operations and guards them from being used outside of transaction. */ -public class Operations implements Read, ExplicitIndexRead, SchemaRead, Write, ExplicitIndexWrite +public class Operations implements Write, ExplicitIndexWrite { private final KernelTransactionImplementation ktx; private final AllStoreHolder allStoreHolder; @@ -94,253 +78,10 @@ public void initialize() this.propertyCursor = cursors.allocatePropertyCursor(); } - // READ - - @Override - public void nodeIndexSeek( IndexReference index, NodeValueIndexCursor cursor, - IndexOrder order, IndexQuery... query ) - throws KernelException - { - assertOpen(); - allStoreHolder.nodeIndexSeek( index, cursor, order, query ); - } - - @Override - public void nodeIndexScan( IndexReference index, NodeValueIndexCursor cursor, IndexOrder order ) - throws KernelException - { - assertOpen(); - allStoreHolder.nodeIndexScan( index, cursor, order ); - } - - @Override - public void nodeLabelScan( int label, NodeLabelIndexCursor cursor ) - { - assertOpen(); - allStoreHolder.nodeLabelScan( label, cursor ); - } - - @Override - public void nodeLabelUnionScan( NodeLabelIndexCursor cursor, int... labels ) - { - assertOpen(); - allStoreHolder.nodeLabelUnionScan( cursor, labels ); - } - - @Override - public void nodeLabelIntersectionScan( NodeLabelIndexCursor cursor, int... labels ) - { - assertOpen(); - allStoreHolder.nodeLabelIntersectionScan( cursor, labels ); - } - - @Override - public Scan nodeLabelScan( int label ) - { - assertOpen(); - return allStoreHolder.nodeLabelScan( label ); - } - - @Override - public void allNodesScan( NodeCursor cursor ) - { - assertOpen(); - allStoreHolder.allNodesScan( cursor ); - } - - @Override - public Scan allNodesScan() - { - assertOpen(); - return allStoreHolder.allNodesScan(); - } - - @Override - public void singleNode( long reference, NodeCursor cursor ) - { - assertOpen(); - allStoreHolder.singleNode( reference, cursor ); - } - - @Override - public boolean nodeExists( long id ) - { - assertOpen(); - return allStoreHolder.nodeExists( id ); - } - - @Override - public void singleRelationship( long reference, RelationshipScanCursor cursor ) - { - assertOpen(); - allStoreHolder.singleRelationship( reference, cursor ); - } - - @Override - public void allRelationshipsScan( RelationshipScanCursor cursor ) - { - assertOpen(); - allStoreHolder.allRelationshipsScan( cursor ); - } - - @Override - public Scan allRelationshipsScan() - { - assertOpen(); - return allStoreHolder.allRelationshipsScan(); - } - - @Override - public void relationshipLabelScan( int label, RelationshipScanCursor cursor ) - { - assertOpen(); - allStoreHolder.relationshipLabelScan( label, cursor ); - } - - @Override - public Scan relationshipLabelScan( int label ) - { - assertOpen(); - return allStoreHolder.relationshipLabelScan( label ); - } - - @Override - public void relationshipGroups( long nodeReference, long reference, RelationshipGroupCursor cursor ) - { - assertOpen(); - allStoreHolder.relationshipGroups( nodeReference, reference, cursor ); - } - - @Override - public void relationships( long nodeReference, long reference, RelationshipTraversalCursor cursor ) - { - assertOpen(); - allStoreHolder.relationships( nodeReference, reference, cursor ); - } - - @Override - public void nodeProperties( long reference, org.neo4j.internal.kernel.api.PropertyCursor cursor ) - { - assertOpen(); - allStoreHolder.nodeProperties( reference, cursor ); - } - - @Override - public void relationshipProperties( long reference, org.neo4j.internal.kernel.api.PropertyCursor cursor ) - { - assertOpen(); - allStoreHolder.relationshipProperties( reference, cursor ); - } - - @Override - public void graphProperties( org.neo4j.internal.kernel.api.PropertyCursor cursor ) - { - assertOpen(); - allStoreHolder.graphProperties( cursor ); - } - - @Override - public void futureNodeReferenceRead( long reference ) - { - assertOpen(); - allStoreHolder.futureNodeReferenceRead( reference ); - } - - @Override - public void futureRelationshipsReferenceRead( long reference ) - { - assertOpen(); - allStoreHolder.futureRelationshipsReferenceRead( reference ); - } - - @Override - public void futureNodePropertyReferenceRead( long reference ) - { - assertOpen(); - allStoreHolder.futureNodePropertyReferenceRead( reference ); - } - - @Override - public void futureRelationshipPropertyReferenceRead( long reference ) - { - assertOpen(); - allStoreHolder.futureRelationshipPropertyReferenceRead( reference ); - } - - // EXPLICIT INDEX READ - - @Override - public void nodeExplicitIndexLookup( NodeExplicitIndexCursor cursor, String index, String key, Value value ) - throws KernelException - { - assertOpen(); - allStoreHolder.nodeExplicitIndexLookup( cursor, index, key, value ); - } - - @Override - public void nodeExplicitIndexQuery( NodeExplicitIndexCursor cursor, String index, Object query ) - throws KernelException - { - assertOpen(); - allStoreHolder.nodeExplicitIndexQuery( cursor, index, query ); - } - - @Override - public void nodeExplicitIndexQuery( NodeExplicitIndexCursor cursor, String index, String key, Object query ) - throws KernelException - { - assertOpen(); - allStoreHolder.nodeExplicitIndexQuery( cursor, index, key, query ); - } - - @Override - public void relationshipExplicitIndexGet( RelationshipExplicitIndexCursor cursor, String index, String key, - Value value, long source, long target ) throws KernelException - { - assertOpen(); - allStoreHolder.relationshipExplicitIndexGet( cursor, index, key, value, source, target ); - } - - @Override - public void relationshipExplicitIndexQuery( RelationshipExplicitIndexCursor cursor, String index, Object query, - long source, long target ) throws KernelException - { - assertOpen(); - allStoreHolder.relationshipExplicitIndexQuery( cursor, index, query, source, target ); - } - - @Override - public void relationshipExplicitIndexQuery( RelationshipExplicitIndexCursor cursor, String index, String key, - Object query, long source, long target ) throws KernelException - { - assertOpen(); - allStoreHolder.relationshipExplicitIndexQuery( cursor, index, key, query, source, target ); - } - - // SCHEMA READ - - @Override - public CapableIndexReference index( int label, int... properties ) - { - assertOpen(); - return allStoreHolder.index( label, properties ); - } - - private void assertOpen() - { - if ( ktx.isTerminated() ) - { - Status terminationReason = ktx.getReasonIfTerminated().orElse( Status.Transaction.Terminated ); - throw new TransactionTerminatedException( terminationReason ); - } - } - - // WRITE - @Override public long nodeCreate() { - assertOpen(); + ktx.assertOpen(); long nodeId = statement.reserveNode(); ktx.txState().nodeDoCreate( nodeId ); return nodeId; @@ -349,7 +90,7 @@ public long nodeCreate() @Override public boolean nodeDelete( long node ) throws AutoIndexingKernelException { - assertOpen(); + ktx.assertOpen(); if ( ktx.hasTxStateWithChanges() ) { @@ -381,14 +122,14 @@ public boolean nodeDelete( long node ) throws AutoIndexingKernelException @Override public long relationshipCreate( long sourceNode, int relationshipLabel, long targetNode ) { - assertOpen(); + ktx.assertOpen(); throw new UnsupportedOperationException(); } @Override public void relationshipDelete( long relationship ) { - assertOpen(); + ktx.assertOpen(); throw new UnsupportedOperationException(); } @@ -398,7 +139,7 @@ public boolean nodeAddLabel( long node, int nodeLabel ) throws EntityNotFoundExc acquireSharedLabelLock( nodeLabel ); acquireExclusiveNodeLock( node ); - assertOpen(); + ktx.assertOpen(); allStoreHolder.singleNode( node, nodeCursor ); if ( !nodeCursor.next() ) { @@ -421,7 +162,7 @@ public boolean nodeAddLabel( long node, int nodeLabel ) throws EntityNotFoundExc public boolean nodeRemoveLabel( long node, int nodeLabel ) throws EntityNotFoundException { acquireExclusiveNodeLock( node ); - assertOpen(); + ktx.assertOpen(); allStoreHolder.singleNode( node, nodeCursor ); if ( !nodeCursor.next() ) @@ -445,7 +186,7 @@ public Value nodeSetProperty( long node, int propertyKey, Value value ) throws EntityNotFoundException, AutoIndexingKernelException { acquireExclusiveNodeLock( node ); - assertOpen(); + ktx.assertOpen(); Value existingValue = readNodeProperty( node, propertyKey ); @@ -475,7 +216,7 @@ public Value nodeRemoveProperty( long node, int propertyKey ) throws EntityNotFoundException, AutoIndexingKernelException { acquireExclusiveNodeLock( node ); - assertOpen(); + ktx.assertOpen(); Value existingValue = readNodeProperty( node, propertyKey ); if ( existingValue != NO_VALUE ) @@ -492,28 +233,28 @@ public Value nodeRemoveProperty( long node, int propertyKey ) @Override public Value relationshipSetProperty( long relationship, int propertyKey, Value value ) { - assertOpen(); + ktx.assertOpen(); throw new UnsupportedOperationException(); } @Override public Value relationshipRemoveProperty( long node, int propertyKey ) { - assertOpen(); + ktx.assertOpen(); throw new UnsupportedOperationException(); } @Override public Value graphSetProperty( int propertyKey, Value value ) { - assertOpen(); + ktx.assertOpen(); throw new UnsupportedOperationException(); } @Override public Value graphRemoveProperty( int propertyKey ) { - assertOpen(); + ktx.assertOpen(); throw new UnsupportedOperationException(); } @@ -521,14 +262,14 @@ public Value graphRemoveProperty( int propertyKey ) public void nodeAddToExplicitIndex( String indexName, long node, String key, Object value ) throws EntityNotFoundException, ExplicitIndexNotFoundKernelException { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().nodeChanges( indexName ).addNode( node, key, value ); } @Override public void nodeRemoveFromExplicitIndex( String indexName, long node ) throws ExplicitIndexNotFoundKernelException { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().nodeChanges( indexName ).remove( node ); } @@ -536,7 +277,7 @@ public void nodeRemoveFromExplicitIndex( String indexName, long node ) throws Ex public void nodeRemoveFromExplicitIndex( String indexName, long node, String key, Object value ) throws ExplicitIndexNotFoundKernelException { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().nodeChanges( indexName ).remove( node, key, value ); } @@ -544,21 +285,21 @@ public void nodeRemoveFromExplicitIndex( String indexName, long node, String key public void nodeRemoveFromExplicitIndex( String indexName, long node, String key ) throws ExplicitIndexNotFoundKernelException { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().nodeChanges( indexName ).remove( node, key ); } @Override public void nodeExplicitIndexCreate( String indexName, Map customConfig ) { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().createIndex( IndexEntityType.Node, indexName, customConfig ); } @Override public void nodeExplicitIndexCreateLazily( String indexName, Map customConfig ) { - assertOpen(); + ktx.assertOpen(); allStoreHolder.getOrCreateNodeIndexConfig( indexName, customConfig ); } @@ -573,7 +314,7 @@ public void relationshipAddToExplicitIndex( String indexName, long relationship, public void relationshipRemoveFromExplicitIndex( String indexName, long relationship, String key, Object value ) throws ExplicitIndexNotFoundKernelException, EntityNotFoundException { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().relationshipChanges( indexName ).remove( relationship, key, value ); } @@ -595,14 +336,14 @@ public void relationshipRemoveFromExplicitIndex( String indexName, long relation @Override public void relationshipExplicitIndexCreate( String indexName, Map customConfig ) { - assertOpen(); + ktx.assertOpen(); ktx.explicitIndexTxState().createIndex( IndexEntityType.Relationship, indexName, customConfig ); } @Override public void relationshipExplicitIndexCreateLazily( String indexName, Map customConfig ) { - assertOpen(); + ktx.assertOpen(); allStoreHolder.getOrCreateRelationshipIndexConfig( indexName, customConfig ); } @@ -675,4 +416,19 @@ public PropertyCursor propertyCursor() { return propertyCursor; } + + public ExplicitIndexRead indexRead() + { + return allStoreHolder; + } + + public SchemaRead schemaRead() + { + return allStoreHolder; + } + + public Read dataRead() + { + return allStoreHolder; + } } 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 35f1f9c46512..d4a95ac77051 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 @@ -61,7 +61,7 @@ abstract class Read implements TxStateHolder, { private final Cursors cursors; private final TxStateHolder txStateHolder; - private final AssertOpen assertOpen; + protected final AssertOpen assertOpen; Read( Cursors cursors, TxStateHolder txStateHolder, AssertOpen assertOpen ) { @@ -77,6 +77,8 @@ public final void nodeIndexSeek( IndexOrder indexOrder, IndexQuery... query ) throws KernelException { + assertOpen.assertOpen(); + ((NodeValueIndexCursor) cursor).setRead( this ); IndexProgressor.NodeValueClient target = (NodeValueIndexCursor) cursor; IndexReader reader = indexReader( index ); @@ -123,6 +125,8 @@ public final void nodeIndexScan( org.neo4j.internal.kernel.api.NodeValueIndexCursor cursor, IndexOrder indexOrder ) throws KernelException { + assertOpen.assertOpen(); + // for a scan, we simply query for existence of the first property, which covers all entries in an index int firstProperty = index.properties()[0]; ((NodeValueIndexCursor) cursor).setRead( this ); @@ -132,6 +136,8 @@ public final void nodeIndexScan( @Override public final void nodeLabelScan( int label, org.neo4j.internal.kernel.api.NodeLabelIndexCursor cursor ) { + assertOpen.assertOpen(); + ((NodeLabelIndexCursor) cursor).setRead( this ); labelScan( (NodeLabelIndexCursor) cursor, labelScanReader().nodesWithLabel( label ) ); } @@ -139,6 +145,8 @@ public final void nodeLabelScan( int label, org.neo4j.internal.kernel.api.NodeLa @Override public void nodeLabelUnionScan( org.neo4j.internal.kernel.api.NodeLabelIndexCursor cursor, int... labels ) { + assertOpen.assertOpen(); + ((NodeLabelIndexCursor) cursor).setRead( this ); labelScan( (NodeLabelIndexCursor) cursor, labelScanReader().nodesWithAnyOfLabels( labels ) ); } @@ -146,6 +154,8 @@ public void nodeLabelUnionScan( org.neo4j.internal.kernel.api.NodeLabelIndexCurs @Override public void nodeLabelIntersectionScan( org.neo4j.internal.kernel.api.NodeLabelIndexCursor cursor, int... labels ) { + assertOpen.assertOpen(); + ((NodeLabelIndexCursor) cursor).setRead( this ); labelScan( (NodeLabelIndexCursor) cursor, labelScanReader().nodesWithAllLabels( labels ) ); } @@ -158,54 +168,63 @@ private void labelScan( IndexProgressor.NodeLabelClient client, PrimitiveLongRes @Override public final Scan nodeLabelScan( int label ) { + assertOpen.assertOpen(); throw new UnsupportedOperationException( "not implemented" ); } @Override public final void allNodesScan( org.neo4j.internal.kernel.api.NodeCursor cursor ) { + assertOpen.assertOpen(); ((NodeCursor) cursor).scan( this ); } @Override public final Scan allNodesScan() { + assertOpen.assertOpen(); throw new UnsupportedOperationException( "not implemented" ); } @Override public final void singleNode( long reference, org.neo4j.internal.kernel.api.NodeCursor cursor ) { + assertOpen.assertOpen(); ((NodeCursor) cursor).single( reference, this ); } @Override public final void singleRelationship( long reference, org.neo4j.internal.kernel.api.RelationshipScanCursor cursor ) { + assertOpen.assertOpen(); ((RelationshipScanCursor) cursor).single( reference, this ); } @Override public final void allRelationshipsScan( org.neo4j.internal.kernel.api.RelationshipScanCursor cursor ) { + assertOpen.assertOpen(); ((RelationshipScanCursor) cursor).scan( -1/*include all labels*/, this ); } @Override public final Scan allRelationshipsScan() { + assertOpen.assertOpen(); throw new UnsupportedOperationException( "not implemented" ); } @Override public final void relationshipLabelScan( int label, org.neo4j.internal.kernel.api.RelationshipScanCursor cursor ) { + assertOpen.assertOpen(); ((RelationshipScanCursor) cursor).scan( label, this ); } @Override public final Scan relationshipLabelScan( int label ) { + assertOpen.assertOpen(); throw new UnsupportedOperationException( "not implemented" ); } @@ -213,6 +232,7 @@ public final Scan relation public final void relationshipGroups( long nodeReference, long reference, org.neo4j.internal.kernel.api.RelationshipGroupCursor cursor ) { + assertOpen.assertOpen(); if ( reference == NO_ID ) // there are no relationships for this node { cursor.close(); @@ -258,6 +278,7 @@ public final void relationships( * * This means that we need reference encodings (flags) for cases: 1, 3, 4, 5 */ + assertOpen.assertOpen(); if ( reference == NO_ID ) // there are no relationships for this node { cursor.close(); @@ -279,18 +300,21 @@ else if ( hasFilterFlag( reference ) ) // this relationship chain need to be fil @Override public final void nodeProperties( long reference, org.neo4j.internal.kernel.api.PropertyCursor cursor ) { + assertOpen.assertOpen(); ((PropertyCursor) cursor).init( reference, this, assertOpen ); } @Override public final void relationshipProperties( long reference, org.neo4j.internal.kernel.api.PropertyCursor cursor ) { + assertOpen.assertOpen(); ((PropertyCursor) cursor).init( reference, this, assertOpen ); } @Override public final void graphProperties( org.neo4j.internal.kernel.api.PropertyCursor cursor ) { + assertOpen.assertOpen(); ((PropertyCursor) cursor).init( graphPropertiesReference(), this, assertOpen ); } @@ -300,6 +324,7 @@ public final void graphProperties( org.neo4j.internal.kernel.api.PropertyCursor public final void nodeExplicitIndexLookup( org.neo4j.internal.kernel.api.NodeExplicitIndexCursor cursor, String index, String key, Value value ) throws KernelException { + assertOpen.assertOpen(); ((NodeExplicitIndexCursor) cursor).setRead( this ); explicitIndex( (org.neo4j.kernel.impl.newapi.NodeExplicitIndexCursor) cursor, explicitNodeIndex( index ).get( key, value.asObject() ) ); } @@ -308,6 +333,7 @@ public final void nodeExplicitIndexLookup( public final void nodeExplicitIndexQuery( org.neo4j.internal.kernel.api.NodeExplicitIndexCursor cursor, String index, Object query ) throws KernelException { + assertOpen.assertOpen(); ((NodeExplicitIndexCursor) cursor).setRead( this ); explicitIndex( (org.neo4j.kernel.impl.newapi.NodeExplicitIndexCursor) cursor, explicitNodeIndex( index ).query( query instanceof Value ? ((Value) query).asObject() : query ) ); @@ -317,6 +343,7 @@ public final void nodeExplicitIndexQuery( public final void nodeExplicitIndexQuery( org.neo4j.internal.kernel.api.NodeExplicitIndexCursor cursor, String index, String key, Object query ) throws KernelException { + assertOpen.assertOpen(); ((NodeExplicitIndexCursor) cursor).setRead( this ); explicitIndex( (NodeExplicitIndexCursor) cursor, explicitNodeIndex( index ).query( key, query instanceof Value ? ((Value) query).asObject() : query ) ); @@ -331,6 +358,7 @@ public void relationshipExplicitIndexGet( long source, long target ) throws KernelException { + assertOpen.assertOpen(); ((RelationshipExplicitIndexCursor) cursor).setRead( this ); explicitIndex( (RelationshipExplicitIndexCursor) cursor, @@ -345,6 +373,7 @@ public void relationshipExplicitIndexQuery( long source, long target ) throws KernelException { + assertOpen.assertOpen(); ((RelationshipExplicitIndexCursor) cursor).setRead( this ); explicitIndex( (RelationshipExplicitIndexCursor) cursor, @@ -361,6 +390,7 @@ public void relationshipExplicitIndexQuery( long source, long target ) throws KernelException { + assertOpen.assertOpen(); ((RelationshipExplicitIndexCursor) cursor).setRead( this ); explicitIndex( (RelationshipExplicitIndexCursor) cursor, @@ -376,21 +406,25 @@ private static void explicitIndex( IndexProgressor.ExplicitClient client, Explic @Override public final void futureNodeReferenceRead( long reference ) { + assertOpen.assertOpen(); } @Override public final void futureRelationshipsReferenceRead( long reference ) { + assertOpen.assertOpen(); } @Override public final void futureNodePropertyReferenceRead( long reference ) { + assertOpen.assertOpen(); } @Override public final void futureRelationshipPropertyReferenceRead( long reference ) { + assertOpen.assertOpen(); } abstract IndexReader indexReader( org.neo4j.internal.kernel.api.IndexReference index );