Skip to content

Commit

Permalink
Adding more useful toString to Cursors
Browse files Browse the repository at this point in the history
Also properly closed LabelCursor in NodeCursor
  • Loading branch information
SaschaPeukert committed Dec 14, 2017
1 parent 0910053 commit 3aa3d4c
Show file tree
Hide file tree
Showing 13 changed files with 227 additions and 8 deletions.
Expand Up @@ -22,7 +22,11 @@
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

import java.io.IOException;

Expand All @@ -44,6 +48,27 @@
@SuppressWarnings( "WeakerAccess" )
public abstract class KernelAPIReadTestBase<ReadSupport extends KernelAPIReadTestSupport>
{
public class ConditionalTeardown implements TestRule
{
public Statement apply( Statement base, Description description )
{
return statement( base, description );
}

private Statement statement( final Statement base, final Description description )
{
return new Statement()
{
@Override
public void evaluate() throws Throwable
{
base.evaluate();
checkCursors(); // only done if test succeeds
}
};
}
}

protected static final TemporaryFolder folder = new TemporaryFolder();
protected static KernelAPIReadTestSupport testSupport;
private Session session;
Expand Down Expand Up @@ -86,12 +111,19 @@ public void setupGraph() throws IOException, KernelException
schemaRead = tx.schemaRead();
}

@Rule
public ConditionalTeardown conditionalTeardown = new ConditionalTeardown();

@After
public void closeTransaction() throws Exception
{
tx.success();
tx.close();
session.close();
}

public void checkCursors()
{
cursors.assertAllClosedAndReset();
}

Expand Down
Expand Up @@ -22,7 +22,11 @@
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

import java.io.IOException;

Expand All @@ -43,12 +47,36 @@
@SuppressWarnings( "WeakerAccess" )
public abstract class KernelAPIWriteTestBase<WriteSupport extends KernelAPIWriteTestSupport>
{
public class ConditionalTeardown implements TestRule
{
public Statement apply( Statement base, Description description )
{
return statement( base, description );
}

private Statement statement( final Statement base, final Description description )
{
return new Statement()
{
@Override
public void evaluate() throws Throwable
{
base.evaluate();
checkCursors(); // only done if test succeeds
}
};
}
}

protected static final TemporaryFolder folder = new TemporaryFolder();
protected static KernelAPIWriteTestSupport testSupport;
protected Session session;
protected ManagedTestCursors cursors;
protected static GraphDatabaseService graphDb;

@Rule
public ConditionalTeardown conditionalTeardown = new ConditionalTeardown();

/**
* Creates a new instance of WriteSupport, which will be used to execute the concrete test
*/
Expand All @@ -74,6 +102,10 @@ public void setupGraph() throws IOException
public void closeSession()
{
session.close();
}

public void checkCursors()
{
cursors.assertAllClosedAndReset();
}

Expand Down
Expand Up @@ -41,7 +41,7 @@ void assertAllClosedAndReset()
{
if ( !n.isClosed() )
{
fail( "The Cursor " + n.toString() + " was not closed properly" );
fail( "The Cursor " + n.toString() + " was not closed properly." );
}
}

Expand Down
Expand Up @@ -20,9 +20,10 @@
package org.neo4j.kernel.impl.newapi;

import java.util.Collection;

import java.util.Arrays;
import org.neo4j.collection.primitive.PrimitiveIntIterator;
import org.neo4j.collection.primitive.PrimitiveIntSet;

import org.neo4j.internal.kernel.api.LabelSet;

class Labels implements LabelSet
Expand Down Expand Up @@ -86,4 +87,10 @@ public boolean contains( int labelToken )
}
return false;
}

@Override
public String toString()
{
return "Labels" + Arrays.toString( labels );
}
}
Expand Up @@ -287,6 +287,7 @@ public void close()
pageCursor = null;
}
read = null;

if ( labelCursor != null )
{
labelCursor.close();
Expand Down Expand Up @@ -352,4 +353,17 @@ private boolean isSingle()
{
return highMark == NO_ID;
}

@Override
public String toString()
{
if ( isClosed() )
{
return "NodeCursor[closed state]";
}
else
{
return "NodeCursor[id=" + getId() + ", open state with: highMark=" + highMark + ", next=" + next + ", underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -97,4 +97,18 @@ public boolean isClosed()
{
return super.isClosed();
}

@Override
public String toString()
{
if ( isClosed() )
{
return "NodeExplicitIndexCursor[closed state]";
}
else
{
return "NodeExplicitIndexCursor[node=" + node + ", expectedSize=" + expectedSize + ", score=" + score +
" ,underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -89,4 +89,18 @@ public boolean isClosed()
{
return super.isClosed();
}

@Override
public String toString()
{
if ( isClosed() )
{
return "NodeLabelIndexCursor[closed state]";
}
else
{
return "NodeLabelIndexCursor[node=" + node + ", labels= " + labels +
", underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -19,6 +19,8 @@
*/
package org.neo4j.kernel.impl.newapi;

import java.util.Arrays;

import org.neo4j.internal.kernel.api.NodeCursor;
import org.neo4j.storageengine.api.schema.IndexProgressor;
import org.neo4j.storageengine.api.schema.IndexProgressor.NodeValueClient;
Expand Down Expand Up @@ -110,4 +112,18 @@ public boolean isClosed()
{
return super.isClosed();
}

@Override
public String toString()
{
if ( isClosed() )
{
return "NodeValueIndexCursor[closed state]";
}
else
{
return "NodeValueIndexCursor[node=" + node + ", open state with: keys=" + Arrays.toString( keys ) + ", values=" + Arrays.toString( values ) +
", underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -495,4 +495,17 @@ public boolean isClosed()
{
return page == null;
}

@Override
public String toString()
{
if ( isClosed() )
{
return "PropertyCursor[closed state]";
}
else
{
return "PropertyCursor[id=" + getId() + ", open state with: block=" + block + ", next=" + next + ", underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -123,4 +123,18 @@ public boolean isClosed()
{
return super.isClosed();
}

@Override
public String toString()
{
if ( isClosed() )
{
return "RelationshipExplicitIndexCursor[closed state]";
}
else
{
return "RelationshipExplicitIndexCursor[relationship=" + relationship + ", expectedSize=" + expectedSize + ", score=" + score +
" ,underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -28,16 +28,15 @@

import static org.neo4j.kernel.impl.newapi.References.setFilterFlag;

class RelationshipGroupCursor extends RelationshipGroupRecord
implements org.neo4j.internal.kernel.api.RelationshipGroupCursor
class RelationshipGroupCursor extends RelationshipGroupRecord implements org.neo4j.internal.kernel.api.RelationshipGroupCursor
{
private Read read;
private final RelationshipRecord edge = new RelationshipRecord( NO_ID );
private BufferedGroup bufferedGroup;
private PageCursor page;
private PageCursor edgePage;

RelationshipGroupCursor( )
RelationshipGroupCursor()
{
super( NO_ID );
}
Expand Down Expand Up @@ -281,7 +280,29 @@ public long loopsReference()
@Override
public boolean isClosed()
{
return page == null;
return page == null && bufferedGroup == null;
}

@Override
public String toString()
{
if ( isClosed() )
{
return "RelationshipGroupCursor[closed state]";
}
else
{
String mode = "mode=";
if ( isBuffered() )
{
mode = mode + "group";
}
else
{
mode = mode + "direct";
}
return "RelationshipGroupCursor[id=" + getId() + ", open state with: " + mode + ", underlying record=" + super.toString() + " ]";
}
}

private boolean isBuffered()
Expand Down Expand Up @@ -353,6 +374,5 @@ long loops()
{
return setFilterFlag( firstLoop );
}

}
}
Expand Up @@ -125,4 +125,18 @@ public boolean isClosed()
{
return pageCursor == null;
}

@Override
public String toString()
{
if ( isClosed() )
{
return "RelationshipScanCursor[closed state]";
}
else
{
return "RelationshipScanCursor[id=" + getId() + ", open state with: highMark=" + highMark + ", next=" + next + ", label=" + label +
", underlying record=" + super.toString() + " ]";
}
}
}
Expand Up @@ -441,7 +441,36 @@ private void reset()
@Override
public boolean isClosed()
{
return pageCursor == null;
return pageCursor == null && !hasBufferedData();
}

@Override
public String toString()
{
if ( isClosed() )
{
return "RelationshipTraversalCursor[closed state]";
}
else
{
String dense = "denseNode=" + traversingDenseNode();
String mode = "mode=";

if ( hasBufferedData() )
{
mode = mode + "bufferedData";
}
else if ( filteringTraversal() )
{
mode = mode + "filteringTraversal";
}
else
{
mode = mode + "regular";
}
return "RelationshipTraversalCursor[id=" + getId() + ", open state with: " + dense + ", next=" + next + ", " + mode + ", underlying record=" +
super.toString() + " ]";
}
}

private boolean hasBufferedData()
Expand Down

0 comments on commit 3aa3d4c

Please sign in to comment.