problem: grpc upstream can change set of provided upstreams

solution: periodically recheck and update current list
This commit is contained in:
Igor Artamonov
2019-08-31 21:01:38 -04:00
parent 26f1229f36
commit 8b7888eb8c
19 changed files with 453 additions and 142 deletions

View File

@@ -35,12 +35,19 @@ open class ChainUpstreams (
private val log = LoggerFactory.getLogger(ChainUpstreams::class.java)
private var seq = 0
private var head: EthereumHead?
private var head: EthereumHead? = null
private var lagObserver: HeadLagObserver? = null
private var subscription: Disposable? = null
init {
head = updateHead()
if (upstreams.size > 0) {
head = updateHead()
onUpstreamsUpdated()
}
}
override fun getId(): String {
return "!all:${chain.chainCode}"
}
override fun isRunning(): Boolean {
@@ -99,7 +106,14 @@ open class ChainUpstreams (
override fun addUpstream(upstream: Upstream) {
upstreams.add(upstream)
head = updateHead()
reconfigure()
onUpstreamsUpdated()
}
fun removeUpstream(id: String) {
if (upstreams.removeIf { it.getId() == id }) {
head = updateHead()
onUpstreamsUpdated()
}
}
override fun getApis(matcher: Selector.Matcher): Iterator<DirectEthereumApi> {