From 5660f4ca099b9e8519fa3327e79249aa4ef1d2f9 Mon Sep 17 00:00:00 2001 From: Igor Artamonov Date: Fri, 9 Aug 2019 23:27:03 -0400 Subject: [PATCH] problem: service may miss available chain if initialized after --- .../io/emeraldpay/dshackle/upstream/AvailableChains.kt | 8 +++++++- .../emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt index 0b2ac871..3fcee018 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt @@ -19,12 +19,18 @@ class AvailableChains( private val callTargets = HashMap() fun add(chain: Chain) { + if (all.contains(chain)) { + return + } all.add(chain) bus.onNext(chain) } fun observe(): Flux { - return Flux.from(bus) + return Flux.merge( + Flux.fromIterable(all), + Flux.from(bus) + ) } fun supports(chain: Chain): Boolean { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt index 747d9e3c..f916aade 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt @@ -159,9 +159,9 @@ open class ConfiguredUpstreams( override fun getOrCreateUpstream(chain: Chain): ChainUpstreams { val current = chainMapping[chain] if (current == null) { + availableChains.add(chain) val created = ChainUpstreams(chain, ArrayList(), availableChains.targetFor(chain)) chainMapping[chain] = created - availableChains.add(chain) return created } return current