Skip to content

Commit d44eadc

Browse files
committed
Updating RX API stress test
This update aims to fix the instability in the RX API stress test by ensuring that the transactions are always finalized.
1 parent 140e938 commit d44eadc

File tree

2 files changed

+46
-18
lines changed

2 files changed

+46
-18
lines changed

driver/src/test/java/org/neo4j/driver/stress/RxWriteQueryInTx.java

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,20 @@
1818
*/
1919
package org.neo4j.driver.stress;
2020

21+
import org.reactivestreams.Publisher;
2122
import reactor.core.publisher.Flux;
23+
import reactor.core.publisher.Mono;
2224

2325
import java.util.concurrent.CompletableFuture;
2426
import java.util.concurrent.CompletionStage;
27+
import java.util.concurrent.atomic.AtomicInteger;
28+
import java.util.function.Function;
2529

26-
import org.neo4j.driver.AccessMode;
2730
import org.neo4j.driver.Driver;
2831
import org.neo4j.driver.internal.util.Futures;
2932
import org.neo4j.driver.reactive.RxSession;
3033
import org.neo4j.driver.reactive.RxTransaction;
34+
import org.neo4j.driver.summary.ResultSummary;
3135

3236
import static org.junit.jupiter.api.Assertions.assertEquals;
3337

@@ -45,17 +49,32 @@ public RxWriteQueryInTx( AbstractStressTestBase<C> stressTest, Driver driver, bo
4549
public CompletionStage<Void> execute( C context )
4650
{
4751
CompletableFuture<Void> queryFinished = new CompletableFuture<>();
48-
RxSession session = newSession( AccessMode.WRITE, context );
49-
Flux.usingWhen( session.beginTransaction(), tx -> tx.run( "CREATE ()" ).consume(),
50-
RxTransaction::commit, ( tx, error ) -> tx.rollback(), null ).subscribe(
51-
summary -> {
52-
context.setBookmark( session.lastBookmark() );
53-
assertEquals( 1, summary.counters().nodesCreated() );
52+
53+
Function<RxSession,Publisher<ResultSummary>> sessionToResultSummaryPublisher = ( RxSession session ) -> Flux.usingWhen(
54+
Mono.from( session.beginTransaction() ),
55+
tx -> tx.run( "CREATE ()" ).consume(),
56+
RxTransaction::commit,
57+
( tx, error ) -> tx.rollback(),
58+
RxTransaction::rollback
59+
);
60+
61+
AtomicInteger createdNodesNum = new AtomicInteger();
62+
Flux.usingWhen(
63+
Mono.fromSupplier( driver::rxSession ),
64+
sessionToResultSummaryPublisher,
65+
session -> Mono.empty(),
66+
( session, error ) -> session.close(),
67+
RxSession::close
68+
).subscribe(
69+
resultSummary -> createdNodesNum.addAndGet( resultSummary.counters().nodesCreated() ),
70+
error -> handleError( Futures.completionExceptionCause( error ), context, queryFinished ),
71+
() ->
72+
{
73+
assertEquals( 1, createdNodesNum.get() );
5474
context.nodeCreated();
5575
queryFinished.complete( null );
56-
}, error -> {
57-
handleError( Futures.completionExceptionCause( error ), context, queryFinished );
58-
} );
76+
}
77+
);
5978

6079
return queryFinished;
6180
}

driver/src/test/java/org/neo4j/driver/stress/RxWriteQueryWithRetries.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,13 @@
2323

2424
import java.util.concurrent.CompletableFuture;
2525
import java.util.concurrent.CompletionStage;
26+
import java.util.concurrent.atomic.AtomicInteger;
2627

27-
import org.neo4j.driver.AccessMode;
2828
import org.neo4j.driver.Driver;
2929
import org.neo4j.driver.internal.util.Futures;
3030
import org.neo4j.driver.reactive.RxSession;
3131

3232
import static org.junit.jupiter.api.Assertions.assertEquals;
33-
import static org.junit.jupiter.api.Assertions.assertFalse;
34-
import static org.junit.jupiter.api.Assertions.assertTrue;
3533

3634
public class RxWriteQueryWithRetries<C extends AbstractContext> extends AbstractRxQuery<C>
3735
{
@@ -47,13 +45,24 @@ public RxWriteQueryWithRetries( AbstractStressTestBase<C> stressTest, Driver dri
4745
public CompletionStage<Void> execute( C context )
4846
{
4947
CompletableFuture<Void> queryFinished = new CompletableFuture<>();
50-
Flux.usingWhen( Mono.fromSupplier( () -> newSession( AccessMode.WRITE, context ) ),
51-
session -> session.writeTransaction( tx -> tx.run( "CREATE ()" ).consume() ), RxSession::close )
52-
.subscribe( summary -> {
53-
assertEquals( 1, summary.counters().nodesCreated() );
48+
49+
AtomicInteger createdNodesNum = new AtomicInteger();
50+
Flux.usingWhen(
51+
Mono.fromSupplier( driver::rxSession ),
52+
session -> session.writeTransaction( tx -> tx.run( "CREATE ()" ).consume() ),
53+
session -> Mono.empty(),
54+
( session, error ) -> session.close(),
55+
RxSession::close
56+
).subscribe(
57+
resultSummary -> createdNodesNum.addAndGet( resultSummary.counters().nodesCreated() ),
58+
error -> handleError( Futures.completionExceptionCause( error ), context, queryFinished ),
59+
() ->
60+
{
61+
assertEquals( 1, createdNodesNum.get() );
5462
context.nodeCreated();
5563
queryFinished.complete( null );
56-
}, error -> handleError( Futures.completionExceptionCause( error ), context, queryFinished ) );
64+
}
65+
);
5766

5867
return queryFinished;
5968
}

0 commit comments

Comments
 (0)