Skip to content

Commit 6bdecd7

Browse files
author
Zhen
committed
Added session#kill to stop running more statements and reset the session to a clean state
1 parent e410dae commit 6bdecd7

File tree

7 files changed

+49
-1
lines changed

7 files changed

+49
-1
lines changed

driver/src/main/java/org/neo4j/driver/internal/InternalSession.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ public StatementResult run( Statement statement )
9898
return cursor;
9999
}
100100

101+
public void kill()
102+
{
103+
ensureNoUnrecoverableError();
104+
ensureConnectionIsOpen();
105+
106+
connection.resetAndFlushAsync();
107+
}
108+
101109
@Override
102110
public boolean isOpen()
103111
{

driver/src/main/java/org/neo4j/driver/internal/net/ConcurrencyGuardingConnection.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ public boolean hasUnrecoverableErrors()
201201
return delegate.hasUnrecoverableErrors();
202202
}
203203

204+
@Override
205+
public void resetAndFlushAsync()
206+
{
207+
delegate.resetAndFlushAsync();
208+
}
209+
204210
private void markAsAvailable()
205211
{
206212
inUse.set( false );

driver/src/main/java/org/neo4j/driver/internal/net/SocketConnection.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,11 @@ public boolean hasUnrecoverableErrors()
206206
{
207207
throw new UnsupportedOperationException( "Unrecoverable error detection is not supported on SocketConnection." );
208208
}
209+
210+
@Override
211+
public void resetAndFlushAsync()
212+
{
213+
reset();
214+
flush();
215+
}
209216
}

driver/src/main/java/org/neo4j/driver/internal/net/pooling/PooledConnection.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,19 @@ public boolean hasUnrecoverableErrors()
211211
return unrecoverableErrorsOccurred;
212212
}
213213

214+
@Override
215+
public void resetAndFlushAsync()
216+
{
217+
try
218+
{
219+
delegate.resetAndFlushAsync();
220+
}
221+
catch( RuntimeException e )
222+
{
223+
onDelegateException( e );
224+
}
225+
}
226+
214227
public void dispose()
215228
{
216229
delegate.close();

driver/src/main/java/org/neo4j/driver/internal/spi/Connection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,9 @@ public interface Connection extends AutoCloseable
106106

107107

108108
boolean hasUnrecoverableErrors();
109+
110+
/**
111+
* Asynchronously sending reset and flush to the socket output channel.
112+
*/
113+
void resetAndFlushAsync();
109114
}

driver/src/main/java/org/neo4j/driver/v1/Session.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ public interface Session extends Resource, StatementRunner
5858
*/
5959
Transaction beginTransaction();
6060

61-
61+
/**
62+
* Stop running more statements in this session and rest the session to a clean state.
63+
*/
64+
void kill();
6265
/**
6366
* Signal that you are done using this session. In the default driver usage, closing
6467
* and accessing sessions is very low cost, because sessions are pooled by {@link Driver}.

driver/src/test/java/org/neo4j/driver/v1/util/TestNeo4jSession.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,12 @@ public Transaction beginTransaction()
100100
return realSession.beginTransaction();
101101
}
102102

103+
@Override
104+
public void kill()
105+
{
106+
realSession.kill();
107+
}
108+
103109
@Override
104110
public StatementResult run( String statementText, Map<String,Object> statementParameters )
105111
{

0 commit comments

Comments
 (0)