Skip to content

Commit 2714f6a

Browse files
committed
Allow null last bookmark in session
So it is possible to "break" causal consistency within a session by calling `#beginTransaction(null)`.
1 parent fd1a1ad commit 2714f6a

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public synchronized void reset()
125125
if ( currentTransaction != null )
126126
{
127127
currentTransaction.markToClose();
128-
setLastBookmark( currentTransaction.bookmark() );
128+
updateLastBookmarkFrom( currentTransaction );
129129
currentTransaction = null;
130130
}
131131
if ( currentConnection != null )
@@ -177,7 +177,7 @@ public synchronized Transaction beginTransaction()
177177
@Override
178178
public synchronized Transaction beginTransaction( String bookmark )
179179
{
180-
setLastBookmark( bookmark );
180+
lastBookmark = bookmark;
181181
return beginTransaction();
182182
}
183183

@@ -195,10 +195,7 @@ public <T> T writeTransaction( Function<Transaction,T> work )
195195

196196
void setLastBookmark( String bookmark )
197197
{
198-
if ( bookmark != null )
199-
{
200-
lastBookmark = bookmark;
201-
}
198+
lastBookmark = bookmark;
202199
}
203200

204201
@Override
@@ -225,7 +222,7 @@ public synchronized void onTransactionClosed( ExplicitTransaction tx )
225222
if ( currentTransaction != null && currentTransaction == tx )
226223
{
227224
closeCurrentConnection();
228-
setLastBookmark( currentTransaction.bookmark() );
225+
updateLastBookmarkFrom( currentTransaction );
229226
currentTransaction = null;
230227
}
231228
}
@@ -376,6 +373,14 @@ private void closeCurrentConnection( boolean sync )
376373
}
377374
}
378375

376+
private void updateLastBookmarkFrom( ExplicitTransaction tx )
377+
{
378+
if ( tx.bookmark() != null )
379+
{
380+
lastBookmark = tx.bookmark();
381+
}
382+
}
383+
379384
private static List<Throwable> recordError( Throwable error, List<Throwable> errors )
380385
{
381386
if ( errors == null )

driver/src/test/java/org/neo4j/driver/internal/NetworkSessionTest.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -601,14 +601,28 @@ public void setLastBookmark()
601601
}
602602

603603
@Test
604-
public void notPossibleToOverwriteBookmarkWithNull()
604+
public void possibleToOverwriteBookmarkWithNull()
605605
{
606606
NetworkSession session = newSession( mock( ConnectionProvider.class ), WRITE );
607607
session.setLastBookmark( "TheBookmark" );
608608

609609
session.setLastBookmark( null );
610610

611-
assertEquals( "TheBookmark", session.lastBookmark() );
611+
assertNull( session.lastBookmark() );
612+
}
613+
614+
@Test
615+
public void allowsToStartTransactionWithNullBookmark()
616+
{
617+
ConnectionProvider connectionProvider = mock( ConnectionProvider.class );
618+
PooledConnection connection = openConnectionMock();
619+
when( connectionProvider.acquireConnection( READ ) ).thenReturn( connection );
620+
NetworkSession session = newSession( connectionProvider, READ );
621+
session.setLastBookmark( "SomeUndesiredBookmark" );
622+
623+
session.beginTransaction( null );
624+
625+
assertNull( session.lastBookmark() );
612626
}
613627

614628
@Test

0 commit comments

Comments
 (0)