Add options to chains.yaml (#185)

* Add options to chains.yaml
This commit is contained in:
KirillPamPam
2023-03-27 15:26:08 +04:00
committed by GitHub
parent 67ca1b85ea
commit eac5a4ccf8
7 changed files with 76 additions and 30 deletions

View File

@@ -8,27 +8,41 @@ data class ChainsConfig(private val chains: Map<Chain, RawChainConfig>, val curr
fun default(): ChainsConfig = ChainsConfig(emptyMap(), RawChainConfig.default())
}
data class RawChainConfig(val syncingLagSize: Int?, val laggingLagSize: Int?) {
data class RawChainConfig(
var syncingLagSize: Int? = null,
var laggingLagSize: Int? = null,
var options: UpstreamsConfig.PartialOptions? = null
) {
companion object {
@JvmStatic
fun default() = RawChainConfig(6, 1)
fun default() = RawChainConfig(
syncingLagSize = 6,
laggingLagSize = 1
)
}
}
data class ChainConfig(val syncingLagSize: Int, val laggingLagSize: Int) {
data class ChainConfig(
val syncingLagSize: Int,
val laggingLagSize: Int,
val options: UpstreamsConfig.PartialOptions
) {
companion object {
@JvmStatic
fun default() = ChainConfig(6, 1)
fun default() = ChainConfig(6, 1, UpstreamsConfig.PartialOptions())
}
}
fun resolve(chain: Chain): ChainConfig {
val default = currentDefault ?: panic()
val raw = chains[chain] ?: default
val options = default.options?.merge(raw.options) ?: raw.options ?: UpstreamsConfig.PartialOptions()
return ChainConfig(
laggingLagSize = raw.laggingLagSize ?: default.laggingLagSize ?: panic(),
syncingLagSize = raw.syncingLagSize ?: default.syncingLagSize ?: panic(),
options = options
)
}
@@ -42,7 +56,8 @@ data class ChainsConfig(private val chains: Map<Chain, RawChainConfig>, val curr
patch: RawChainConfig?
) = RawChainConfig(
syncingLagSize = patch?.syncingLagSize ?: current.syncingLagSize,
laggingLagSize = patch?.laggingLagSize ?: current.laggingLagSize
laggingLagSize = patch?.laggingLagSize ?: current.laggingLagSize,
options = patch?.options ?: current.options
)
private fun merge(

View File

@@ -5,7 +5,9 @@ import org.yaml.snakeyaml.nodes.CollectionNode
import org.yaml.snakeyaml.nodes.MappingNode
import java.io.InputStream
class ChainsConfigReader : YamlConfigReader<ChainsConfig>() {
class ChainsConfigReader(
private val upstreamsConfigReader: UpstreamsConfigReader
) : YamlConfigReader<ChainsConfig>() {
private val defaultConfig = this::class.java.getResourceAsStream("/chains.yaml")!!
@@ -41,12 +43,20 @@ class ChainsConfigReader : YamlConfigReader<ChainsConfig>() {
}
private fun readChain(node: MappingNode): ChainsConfig.RawChainConfig? {
return getMapping(node, "lags")?.let {
return ChainsConfig.RawChainConfig(
getValueAsInt(it, "syncing"),
getValueAsInt(it, "lagging")
)
val rawConfig = ChainsConfig.RawChainConfig()
getMapping(node, "lags")?.let { lagConfig ->
getValueAsInt(lagConfig, "syncing")?.let {
rawConfig.syncingLagSize = it
}
getValueAsInt(lagConfig, "lagging")?.let {
rawConfig.laggingLagSize = it
}
}
upstreamsConfigReader.tryReadOptions(node)?.let {
rawConfig.options = it
}
return rawConfig
}
private fun readChains(node: CollectionNode<MappingNode>): List<Pair<String, ChainsConfig.RawChainConfig>> {

View File

@@ -32,7 +32,7 @@ class MainConfigReader(
private val healthConfigReader = HealthConfigReader()
private val signatureConfigReader = SignatureConfigReader(fileResolver)
private val compressionConfigReader = CompressionConfigReader()
private val chainsConfigReader = ChainsConfigReader()
private val chainsConfigReader = ChainsConfigReader(upstreamsConfigReader)
override fun read(input: MappingNode?): MainConfig {
val config = MainConfig()

View File

@@ -102,7 +102,9 @@ open class ConfiguredUpstreams(
log.error("Chain is unknown: ${up.chain}")
return@forEach
}
val options = (defaultOptions[chain] ?: UpstreamsConfig.PartialOptions.getDefaults())
val chainConfig = chainsConfig.resolve(chain)
val options = chainConfig.options
.merge(defaultOptions[chain] ?: UpstreamsConfig.PartialOptions.getDefaults())
.merge(up.options ?: UpstreamsConfig.PartialOptions())
.buildOptions()
val upstream = when (BlockchainType.from(chain)) {
@@ -112,7 +114,7 @@ open class ConfiguredUpstreams(
up.cast(UpstreamsConfig.EthereumPosConnection::class.java),
chain,
options,
chainsConfig.resolve(chain)
chainConfig
)
}
BlockchainType.EVM_POW -> {
@@ -121,7 +123,7 @@ open class ConfiguredUpstreams(
up.cast(UpstreamsConfig.EthereumConnection::class.java),
chain,
options,
chainsConfig.resolve(chain)
chainConfig
)
}
BlockchainType.BITCOIN -> {
@@ -129,7 +131,7 @@ open class ConfiguredUpstreams(
up.cast(UpstreamsConfig.BitcoinConnection::class.java),
chain,
options,
chainsConfig.resolve(chain)
chainConfig
)
}
}

View File

@@ -15,18 +15,26 @@ chain-settings:
syncing: 20
lagging: 10
- id: arbitrum
options:
validate-peers: false
lags:
syncing: 20
lagging: 10
- id: arbitrum-testnet
options:
validate-peers: false
lags:
syncing: 20
lagging: 10
- id: optimism
options:
validate-peers: false
lags:
syncing: 20
lagging: 10
- id: optimism-testnet
options:
validate-peers: false
lags:
syncing: 20
lagging: 10