emeraldpay / emeraldpay/dshackle
Disable upstream if retries exhausted
- Dominant language
- Rust
- Stars
- 350
- Forks
- 57
- PR merge metrics
- No merged PRs in 30d
Description
If Dshackle reaches the limit for Infura calls it responds with `HTTP 502` error, and Dshackle should _not_ continue using this upstream for a some period.
Right not it retries and produces an error to the log (none of this should happen):
```
2021-20-09 21:40:21.018 | WARN | CompoundReader | Failed to read from io.emeraldpay.dshackle.upstream.ethereum.EthereumDirectReader$4@6bca7b88
reactor.core.Exceptions$RetryExhaustedException: Retries exhausted: 3/3
at reactor.core.Exceptions.retryExhausted(Exceptions.java:290) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.util.retry.RetryBackoffSpec.lambda$static$0(RetryBackoffSpec.java:67) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.util.retry.RetryBackoffSpec.lambda$generateCompanion$4(RetryBackoffSpec.java:557) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:374) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerComplete(FluxConcatMap.java:295) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:884) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:249) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:284) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:187) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:232) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:284) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:187) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:119) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) [reactor-core-3.4.5.jar:3.4.5]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:830) [?:?]
Caused by: io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcException: HTTP Code: 502
at io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcError.asException(JsonRpcError.kt:34) ~[classes/:?]
at io.emeraldpay.dshackle.quorum.QuorumRpcReader$read$defaultResult$1.apply(QuorumRpcReader.kt:61) ~[classes/:?]
at io.emeraldpay.dshackle.quorum.QuorumRpcReader$read$defaultResult$1.apply(QuorumRpcReader.kt:32) ~[classes/:?]
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:152) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.Mono.subscribe(Mono.java:4135) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:81) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxFilter$FilterSubscriber.onComplete(FluxFilter.java:166) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onComplete(FluxPeekFuseable.java:940) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2057) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.MonoReduceSeed$ReduceSeedSubscriber.onComplete(MonoReduceSeed.java:165) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.SerializedSubscriber.onComplete(SerializedSubscriber.java:146) [reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onComplete(FluxRetryWhen.java:199) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:608) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:588) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:465) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxTakeUntil$TakeUntilPredicateSubscriber.onComplete(FluxTakeUntil.java:120) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxZip$ZipCoordinator.drain(FluxZip.java:705) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxZip$ZipInner.onComplete(FluxZip.java:936) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.EmitterProcessor.subscribe(EmitterProcessor.java:217) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.Flux.subscribe(Flux.java:8227) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxZip$ZipCoordinator.subscribe(FluxZip.java:595) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxZip.handleBoth(FluxZip.java:332) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxZip.handleArrayMode(FluxZip.java:273) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.FluxZip.subscribe(FluxZip.java:137) ~[reactor-core-3.4.5.jar:3.4.5]
at reactor.core.publisher.Flux.subscribe(Flux.java:8227) ~[reactor-core-3.4.5.jar:3.4.5]
at io.emeraldpay.dshackle.upstream.FilteredApis.subscribe(FilteredApis.kt:166) ~[classes/:?]
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.