Skip to content

Commit 56e6159

Browse files
Update depedencies (#1070) (#1075)
* Update reactor-bom to 2020.0.8 (#947) * Update reactor-bom to 2020.0.8 * Polishing. * Revert list kind change Co-authored-by: Michael Simons <[email protected]> * Update depedencies Co-authored-by: Michael Simons <[email protected]> Co-authored-by: Michael Simons <[email protected]>
1 parent 24e40c6 commit 56e6159

File tree

2 files changed

+44
-47
lines changed

2 files changed

+44
-47
lines changed

driver/src/main/java/org/neo4j/driver/internal/retry/ExponentialBackoffRetryLogic.java

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import reactor.core.publisher.Mono;
2626
import reactor.core.scheduler.Schedulers;
2727
import reactor.util.context.Context;
28-
import reactor.util.function.Tuples;
28+
import reactor.util.retry.Retry;
2929

3030
import java.time.Duration;
3131
import java.util.ArrayList;
@@ -34,7 +34,6 @@
3434
import java.util.concurrent.CompletionStage;
3535
import java.util.concurrent.ThreadLocalRandom;
3636
import java.util.concurrent.TimeUnit;
37-
import java.util.function.Function;
3837
import java.util.function.Supplier;
3938

4039
import org.neo4j.driver.Logger;
@@ -143,7 +142,7 @@ public <T> CompletionStage<T> retryAsync( Supplier<CompletionStage<T>> work )
143142
@Override
144143
public <T> Publisher<T> retryRx( Publisher<T> work )
145144
{
146-
return Flux.from( work ).retryWhen( retryRxCondition() );
145+
return Flux.from( work ).retryWhen( exponentialBackoffRetryRx() );
147146
}
148147

149148
protected boolean canRetryOn( Throwable error )
@@ -168,48 +167,46 @@ private static Throwable extractPossibleTerminationCause( Throwable error )
168167
return error;
169168
}
170169

171-
private Function<Flux<Throwable>,Publisher<Context>> retryRxCondition()
170+
private Retry exponentialBackoffRetryRx()
172171
{
173-
return errorCurrentAttempt -> errorCurrentAttempt.flatMap( e -> Mono.subscriberContext().map( ctx -> Tuples.of( e, ctx ) ) ).flatMap( t2 ->
174-
{
175-
176-
Throwable throwable = t2.getT1();
177-
Throwable error = extractPossibleTerminationCause( throwable );
178-
179-
Context ctx = t2.getT2();
180-
181-
List<Throwable> errors = ctx.getOrDefault( "errors", null );
182-
183-
long startTime = ctx.getOrDefault( "startTime", -1L );
184-
long nextDelayMs = ctx.getOrDefault( "nextDelayMs", initialRetryDelayMs );
185-
186-
if ( canRetryOn( error ) )
187-
{
188-
long currentTime = clock.millis();
189-
if ( startTime == -1 )
172+
return Retry.from( retrySignals -> retrySignals.flatMap( retrySignal -> Mono.deferContextual(
173+
contextView ->
190174
{
191-
startTime = currentTime;
192-
}
175+
Throwable throwable = retrySignal.failure();
176+
Throwable error = extractPossibleTerminationCause( throwable );
193177

194-
long elapsedTime = currentTime - startTime;
195-
if ( elapsedTime < maxRetryTimeMs )
196-
{
197-
long delayWithJitterMs = computeDelayWithJitter( nextDelayMs );
198-
log.warn( "Reactive transaction failed and is scheduled to retry in " + delayWithJitterMs + "ms", error );
199-
200-
nextDelayMs = (long) (nextDelayMs * multiplier);
201-
errors = recordError( error, errors );
178+
List<Throwable> errors = contextView.getOrDefault( "errors", null );
202179

203-
// retry on netty event loop thread
204-
EventExecutor eventExecutor = eventExecutorGroup.next();
205-
return Mono.just( ctx.put( "errors", errors ).put( "startTime", startTime ).put( "nextDelayMs", nextDelayMs ) ).delayElement(
206-
Duration.ofMillis( delayWithJitterMs ), Schedulers.fromExecutorService( eventExecutor ) );
207-
}
208-
}
209-
addSuppressed( throwable, errors );
180+
if ( canRetryOn( error ) )
181+
{
182+
long currentTime = clock.millis();
183+
184+
long startTime = contextView.getOrDefault( "startTime", currentTime );
185+
long nextDelayMs = contextView.getOrDefault( "nextDelayMs", initialRetryDelayMs );
186+
187+
long elapsedTime = currentTime - startTime;
188+
if ( elapsedTime < maxRetryTimeMs )
189+
{
190+
long delayWithJitterMs = computeDelayWithJitter( nextDelayMs );
191+
log.warn( "Reactive transaction failed and is scheduled to retry in " + delayWithJitterMs + "ms", error );
192+
193+
nextDelayMs = (long) (nextDelayMs * multiplier);
194+
errors = recordError( error, errors );
195+
196+
// retry on netty event loop thread
197+
EventExecutor eventExecutor = eventExecutorGroup.next();
198+
Context context = Context.of(
199+
"errors", errors,
200+
"startTime", startTime,
201+
"nextDelayMs", nextDelayMs
202+
);
203+
return Mono.just( context ).delayElement( Duration.ofMillis( delayWithJitterMs ), Schedulers.fromExecutorService( eventExecutor ) );
204+
}
205+
}
206+
addSuppressed( throwable, errors );
210207

211-
return Mono.error( throwable );
212-
} );
208+
return Mono.error( throwable );
209+
} ) ) );
213210
}
214211

215212
private <T> void executeWorkInEventLoop( CompletableFuture<T> resultFuture, Supplier<CompletionStage<T>> work )

pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,20 @@
2828
<!-- Please note that when updating this dependency -->
2929
<!-- (i.e. due to a security vulnerability or bug) that the -->
3030
<!-- corresponding server dependency also needs updating.-->
31-
<netty-handler.version>4.1.65.Final</netty-handler.version>
31+
<netty-handler.version>4.1.70.Final</netty-handler.version>
3232
<!-- Please note that when updating this dependency -->
3333
<!-- (i.e. due to a security vulnerability or bug) that the -->
3434
<!-- corresponding server dependency also needs updating.-->
35-
<reactor-bom.version>Dysprosium-SR21</reactor-bom.version>
35+
<reactor-bom.version>2020.0.13</reactor-bom.version>
3636
<rxjava.version>2.2.21</rxjava.version>
37-
<slf4j-api.version>1.7.31</slf4j-api.version>
37+
<slf4j-api.version>1.7.32</slf4j-api.version>
3838
<hamcrest-junit.version>2.0.0.0</hamcrest-junit.version>
3939
<mockito-core.version>2.28.2</mockito-core.version>
40-
<junit.version>5.7.2</junit.version>
41-
<jarchivelib.version>1.1.0</jarchivelib.version>
40+
<junit.version>5.8.1</junit.version>
41+
<jarchivelib.version>1.2.0</jarchivelib.version>
4242
<bouncycastle-jdk15on.version>1.69</bouncycastle-jdk15on.version>
43-
<logback-classic.version>1.2.3</logback-classic.version>
44-
<svm.version>20.3.2</svm.version>
43+
<logback-classic.version>1.2.6</logback-classic.version>
44+
<svm.version>20.3.4</svm.version>
4545
</properties>
4646

4747
<modules>

0 commit comments

Comments
 (0)