Skip to content

Commit

Permalink
Fix transaction handling for PERIODIC COMMIT in Bolt server
Browse files Browse the repository at this point in the history
  • Loading branch information
boggle authored and davidegrohmann committed Apr 20, 2016
1 parent 4ed2502 commit 7cf7891
Show file tree
Hide file tree
Showing 5 changed files with 223 additions and 187 deletions.
Expand Up @@ -23,6 +23,7 @@

import org.neo4j.bolt.v1.runtime.spi.RecordStream;
import org.neo4j.bolt.v1.runtime.spi.StatementRunner;
import org.neo4j.graphdb.Result;
import org.neo4j.kernel.api.exceptions.KernelException;
import org.neo4j.kernel.impl.coreapi.PropertyContainerLocker;
import org.neo4j.kernel.impl.query.QueryExecutionEngine;
Expand Down Expand Up @@ -60,13 +61,23 @@ else if ( statement.equalsIgnoreCase( "rollback" ) )
}
else
{
if ( !ctx.hasTransaction() )
boolean hasTx = ctx.hasTransaction();
boolean isPeriodicCommit = queryExecutionEngine.isPeriodicCommit( statement );

if ( !hasTx && !isPeriodicCommit )
{
ctx.beginImplicitTransaction();
}

QuerySession session = ctx.createSession( queryExecutionEngine.queryService(), locker );
return new CypherAdapterStream( queryExecutionEngine.executeQuery( statement, params, session ) );
Result result = queryExecutionEngine.executeQuery( statement, params, session );

if ( isPeriodicCommit )
{
ctx.beginImplicitTransaction();
}

return new CypherAdapterStream( result );
}
}
}
Expand Up @@ -764,8 +764,7 @@ public boolean hasTransaction()
@Override
public QuerySession createSession( GraphDatabaseQueryService service, PropertyContainerLocker locker )
{
InternalTransaction transaction =
service.beginTransaction( currentTransaction.transactionType(), currentTransaction.mode() );
InternalTransaction transaction = service.beginTransaction( implicit, accessMode );
Neo4jTransactionalContext transactionalContext =
new Neo4jTransactionalContext( service, transaction, spi.currentStatement(), locker );
return new BoltQuerySession( transactionalContext, querySource() );
Expand Down

0 comments on commit 7cf7891

Please sign in to comment.