In case empty selector in SubscribeNative we should use default dynamic merged head - also valid for anyLabelSelector (#173)

This commit is contained in:
a10zn8
2023-03-19 16:33:08 +03:00
committed by GitHub
parent a47607d03d
commit de9ac6a845
2 changed files with 7 additions and 4 deletions

View File

@@ -28,10 +28,13 @@ class Selector {
@JvmStatic @JvmStatic
val empty = EmptyMatcher() val empty = EmptyMatcher()
@JvmStatic
val anyLabel = AnyLabelMatcher()
@JvmStatic @JvmStatic
fun convertToMatcher(req: BlockchainOuterClass.Selector?): LabelSelectorMatcher { fun convertToMatcher(req: BlockchainOuterClass.Selector?): LabelSelectorMatcher {
return when { return when {
req == null -> AnyLabelMatcher() req == null -> anyLabel
req.hasLabelSelector() -> req.labelSelector.let { selector -> req.hasLabelSelector() -> req.labelSelector.let { selector ->
if (StringUtils.isNotEmpty(selector.name)) { if (StringUtils.isNotEmpty(selector.name)) {
val values = selector.valueList val values = selector.valueList
@@ -43,7 +46,7 @@ class Selector {
LabelMatcher(selector.name, selector.valueList) LabelMatcher(selector.name, selector.valueList)
} }
} else { } else {
AnyLabelMatcher() anyLabel
} }
} }
req.hasAndSelector() -> AndMatcher( req.hasAndSelector() -> AndMatcher(
@@ -66,7 +69,7 @@ class Selector {
) )
req.hasNotSelector() -> NotMatcher(convertToMatcher(req.notSelector.selector)) req.hasNotSelector() -> NotMatcher(convertToMatcher(req.notSelector.selector))
req.hasExistsSelector() -> ExistsMatcher(req.existsSelector.name) req.hasExistsSelector() -> ExistsMatcher(req.existsSelector.name)
else -> AnyLabelMatcher() else -> anyLabel
} }
} }

View File

@@ -158,7 +158,7 @@ open class EthereumPosMultiStream(
} }
override fun getHead(mather: Selector.Matcher): Head = override fun getHead(mather: Selector.Matcher): Head =
if (mather == Selector.empty) { if (mather == Selector.empty || mather == Selector.anyLabel) {
head head
} else { } else {
filteredHeads.computeIfAbsent(mather.describeInternal().intern()) { _ -> filteredHeads.computeIfAbsent(mather.describeInternal().intern()) { _ ->