From de9ac6a84546b72b2c0f6d7ba63704ff28fe12cc Mon Sep 17 00:00:00 2001 From: a10zn8 Date: Sun, 19 Mar 2023 16:33:08 +0300 Subject: [PATCH] In case empty selector in SubscribeNative we should use default dynamic merged head - also valid for anyLabelSelector (#173) --- .../kotlin/io/emeraldpay/dshackle/upstream/Selector.kt | 9 ++++++--- .../upstream/ethereum_pos/EthereumPosMultiStream.kt | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt index 6c105505..a61e94e2 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt @@ -28,10 +28,13 @@ class Selector { @JvmStatic val empty = EmptyMatcher() + @JvmStatic + val anyLabel = AnyLabelMatcher() + @JvmStatic fun convertToMatcher(req: BlockchainOuterClass.Selector?): LabelSelectorMatcher { return when { - req == null -> AnyLabelMatcher() + req == null -> anyLabel req.hasLabelSelector() -> req.labelSelector.let { selector -> if (StringUtils.isNotEmpty(selector.name)) { val values = selector.valueList @@ -43,7 +46,7 @@ class Selector { LabelMatcher(selector.name, selector.valueList) } } else { - AnyLabelMatcher() + anyLabel } } req.hasAndSelector() -> AndMatcher( @@ -66,7 +69,7 @@ class Selector { ) req.hasNotSelector() -> NotMatcher(convertToMatcher(req.notSelector.selector)) req.hasExistsSelector() -> ExistsMatcher(req.existsSelector.name) - else -> AnyLabelMatcher() + else -> anyLabel } } diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum_pos/EthereumPosMultiStream.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum_pos/EthereumPosMultiStream.kt index e1dedfc3..9ca23f1b 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum_pos/EthereumPosMultiStream.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum_pos/EthereumPosMultiStream.kt @@ -158,7 +158,7 @@ open class EthereumPosMultiStream( } override fun getHead(mather: Selector.Matcher): Head = - if (mather == Selector.empty) { + if (mather == Selector.empty || mather == Selector.anyLabel) { head } else { filteredHeads.computeIfAbsent(mather.describeInternal().intern()) { _ ->