Merge pull request #104 from p2p-org/pasthrough-mode
passthrough mode - ignore call specific selectors
This commit is contained in:
@@ -19,6 +19,7 @@ class MainConfig {
|
|||||||
var host = "127.0.0.1"
|
var host = "127.0.0.1"
|
||||||
var port = 2449
|
var port = 2449
|
||||||
var tls: AuthConfig.ServerTlsAuth? = null
|
var tls: AuthConfig.ServerTlsAuth? = null
|
||||||
|
var passthrough: Boolean = false
|
||||||
var cache: CacheConfig? = null
|
var cache: CacheConfig? = null
|
||||||
var proxy: ProxyConfig? = null
|
var proxy: ProxyConfig? = null
|
||||||
var upstreams: UpstreamsConfig? = null
|
var upstreams: UpstreamsConfig? = null
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ class MainConfigReader(
|
|||||||
config.port = it
|
config.port = it
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getValueAsBool(input, "passthrough")?.let {
|
||||||
|
config.passthrough = it
|
||||||
|
}
|
||||||
|
|
||||||
authConfigReader.readServerTls(input)?.let {
|
authConfigReader.readServerTls(input)?.let {
|
||||||
config.tls = it
|
config.tls = it
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import io.emeraldpay.dshackle.BlockchainType
|
|||||||
import io.emeraldpay.dshackle.Chain
|
import io.emeraldpay.dshackle.Chain
|
||||||
import io.emeraldpay.dshackle.Global
|
import io.emeraldpay.dshackle.Global
|
||||||
import io.emeraldpay.dshackle.SilentException
|
import io.emeraldpay.dshackle.SilentException
|
||||||
import io.emeraldpay.dshackle.config.CacheConfig
|
import io.emeraldpay.dshackle.config.MainConfig
|
||||||
import io.emeraldpay.dshackle.quorum.CallQuorum
|
import io.emeraldpay.dshackle.quorum.CallQuorum
|
||||||
import io.emeraldpay.dshackle.quorum.NotLaggingQuorum
|
import io.emeraldpay.dshackle.quorum.NotLaggingQuorum
|
||||||
import io.emeraldpay.dshackle.quorum.QuorumReaderFactory
|
import io.emeraldpay.dshackle.quorum.QuorumReaderFactory
|
||||||
@@ -57,7 +57,7 @@ import java.util.concurrent.atomic.AtomicInteger
|
|||||||
open class NativeCall(
|
open class NativeCall(
|
||||||
private val multistreamHolder: MultistreamHolder,
|
private val multistreamHolder: MultistreamHolder,
|
||||||
private val signer: ResponseSigner,
|
private val signer: ResponseSigner,
|
||||||
cacheConfig: CacheConfig
|
config: MainConfig
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val log = LoggerFactory.getLogger(NativeCall::class.java)
|
private val log = LoggerFactory.getLogger(NativeCall::class.java)
|
||||||
@@ -65,7 +65,8 @@ open class NativeCall(
|
|||||||
|
|
||||||
private val nullValue: ByteArray = "null".toByteArray()
|
private val nullValue: ByteArray = "null".toByteArray()
|
||||||
|
|
||||||
private val localRouterEnabled = cacheConfig.requestsCacheEnabled
|
private val localRouterEnabled = config.cache?.requestsCacheEnabled ?: true
|
||||||
|
private val passthrough = config.passthrough
|
||||||
|
|
||||||
var quorumReaderFactory: QuorumReaderFactory = QuorumReaderFactory.default()
|
var quorumReaderFactory: QuorumReaderFactory = QuorumReaderFactory.default()
|
||||||
private val ethereumCallSelectors = EnumMap<Chain, EthereumCallSelector>(Chain::class.java)
|
private val ethereumCallSelectors = EnumMap<Chain, EthereumCallSelector>(Chain::class.java)
|
||||||
@@ -79,10 +80,12 @@ open class NativeCall(
|
|||||||
|
|
||||||
@EventListener
|
@EventListener
|
||||||
fun onUpstreamChangeEvent(event: UpstreamChangeEvent) {
|
fun onUpstreamChangeEvent(event: UpstreamChangeEvent) {
|
||||||
casting[BlockchainType.from(event.chain)]?.let { cast ->
|
if (!passthrough) {
|
||||||
multistreamHolder.getUpstream(event.chain).let { up ->
|
casting[BlockchainType.from(event.chain)]?.let { cast ->
|
||||||
val reader = up.cast(cast).getReader()
|
multistreamHolder.getUpstream(event.chain).let { up ->
|
||||||
ethereumCallSelectors.putIfAbsent(event.chain, EthereumCallSelector(reader.heightByHash()))
|
val reader = up.cast(cast).getReader()
|
||||||
|
ethereumCallSelectors.putIfAbsent(event.chain, EthereumCallSelector(reader.heightByHash()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import io.emeraldpay.api.proto.BlockchainOuterClass
|
|||||||
import io.emeraldpay.api.proto.Common
|
import io.emeraldpay.api.proto.Common
|
||||||
import io.emeraldpay.dshackle.Global
|
import io.emeraldpay.dshackle.Global
|
||||||
import io.emeraldpay.dshackle.config.CacheConfig
|
import io.emeraldpay.dshackle.config.CacheConfig
|
||||||
|
import io.emeraldpay.dshackle.config.MainConfig
|
||||||
import io.emeraldpay.dshackle.quorum.QuorumReaderFactory
|
import io.emeraldpay.dshackle.quorum.QuorumReaderFactory
|
||||||
import io.emeraldpay.dshackle.quorum.QuorumRpcReader
|
import io.emeraldpay.dshackle.quorum.QuorumRpcReader
|
||||||
import io.emeraldpay.dshackle.reader.Reader
|
import io.emeraldpay.dshackle.reader.Reader
|
||||||
@@ -55,7 +56,7 @@ class NativeCallSpec extends Specification {
|
|||||||
|
|
||||||
ObjectMapper objectMapper = Global.objectMapper
|
ObjectMapper objectMapper = Global.objectMapper
|
||||||
|
|
||||||
def nativeCall(MultistreamHolder upstreams = null, ResponseSigner signer = null, Boolean enableCache = true) {
|
def nativeCall(MultistreamHolder upstreams = null, ResponseSigner signer = null, Boolean enableCache = true, Boolean passthrough = false) {
|
||||||
|
|
||||||
if (upstreams == null) {
|
if (upstreams == null) {
|
||||||
upstreams = Stub(MultistreamHolder)
|
upstreams = Stub(MultistreamHolder)
|
||||||
@@ -64,8 +65,11 @@ class NativeCallSpec extends Specification {
|
|||||||
signer = Stub(ResponseSigner)
|
signer = Stub(ResponseSigner)
|
||||||
}
|
}
|
||||||
|
|
||||||
def config = new CacheConfig()
|
def config = new MainConfig()
|
||||||
config.requestsCacheEnabled = enableCache
|
def cacheConfig = new CacheConfig()
|
||||||
|
cacheConfig.requestsCacheEnabled = enableCache
|
||||||
|
config.cache = cacheConfig
|
||||||
|
config.passthrough = passthrough
|
||||||
|
|
||||||
new NativeCall(upstreams, signer, config)
|
new NativeCall(upstreams, signer, config)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user