use only chain map

This commit is contained in:
a10zn8
2022-11-17 13:52:36 +04:00
parent d997d148c4
commit b450cc9a94
2 changed files with 9 additions and 16 deletions

View File

@@ -19,31 +19,23 @@ package io.emeraldpay.dshackle.upstream
import io.emeraldpay.grpc.Chain
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
import reactor.core.publisher.Sinks
import java.util.*
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.locks.ReentrantLock
import javax.annotation.PreDestroy
import kotlin.concurrent.withLock
@Component
open class CurrentMultistreamHolder(
private val multistreams: List<Multistream>
multistreams: List<Multistream>
) : MultistreamHolder {
private val log = LoggerFactory.getLogger(CurrentMultistreamHolder::class.java)
private val chainMapping = ConcurrentHashMap<Chain, Multistream>().apply {
multistreams.forEach { this[it.chain] = it }
}
private val updateLock = ReentrantLock()
private val chainMapping = multistreams.associateBy { it.chain }
override fun getUpstream(chain: Chain): Multistream? {
return chainMapping[chain]
}
override fun getAvailable(): List<Chain> {
return multistreams.asSequence()
return chainMapping.values.asSequence()
.filter { it.isAvailable() }
.map { it.chain }
.toList()
@@ -56,11 +48,8 @@ open class CurrentMultistreamHolder(
@PreDestroy
fun shutdown() {
log.info("Closing upstream connections...")
updateLock.withLock {
chainMapping.values.forEach {
it.stop()
}
chainMapping.clear()
chainMapping.values.forEach {
it.stop()
}
}
}

View File

@@ -324,6 +324,10 @@ abstract class Multistream(
log.info("State of ${chain.chainCode}: height=${height ?: '?'}, status=[$statuses], lag=[$lag], weak=[$weak]")
}
fun test(event: UpstreamChangeEvent): Boolean {
return event.chain == this.chain
}
@EventListener
@Order(Ordered.HIGHEST_PRECEDENCE)
fun onUpstreamChange(event: UpstreamChangeEvent) {