From f6090a40ac45986e9d35916123f5db7dae08b4b2 Mon Sep 17 00:00:00 2001 From: KirillPamPam Date: Mon, 20 May 2024 15:19:17 +0400 Subject: [PATCH] Lower matcher (#478) --- emerald-grpc | 2 +- .../io/emeraldpay/dshackle/upstream/Selector.kt | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/emerald-grpc b/emerald-grpc index ab138083..b95b1429 160000 --- a/emerald-grpc +++ b/emerald-grpc @@ -1 +1 @@ -Subproject commit ab1380831c74c3cced94b87db1b90d0856755c8e +Subproject commit b95b142993aec346dc9392bdce03cd6edfc3b9f6 diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt index f681e41a..cb81ad91 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/Selector.kt @@ -65,10 +65,18 @@ class Selector { }.run { MultiMatcher(this) } - val sort = selectors.firstOrNull { it.hasHeightSelector() && it.heightSelector.height == -1L } - ?.let { Sort(compareByDescending { it.getHead().getCurrentHeight() }) } - ?: Sort.default - return UpstreamFilter(sort, matcher) + return UpstreamFilter(getSort(selectors), matcher) + } + + private fun getSort(selectors: List): Sort { + selectors.forEach { selector -> + if (selector.hasHeightSelector() && selector.heightSelector.height == -1L) { + return Sort(compareByDescending { it.getHead().getCurrentHeight() }) + } else if (selector.hasLowerHeightSelector() && selector.lowerHeightSelector.height == 0L) { + return Sort(compareBy(nullsLast()) { it.getHead().getCurrentHeight() }) + } + } + return Sort.default } @JvmStatic