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
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
}
}

View File

@@ -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()) { _ ->