Adjustments in availability determination:

- now isAvailable return true in case upstreams are OK or LAGGING
- All upstreams in Filtered API now sorted by status
This commit is contained in:
a10zn8
2023-02-13 18:48:01 +04:00
parent 1b83e99cff
commit 6d78b4927d
3 changed files with 38 additions and 4 deletions

View File

@@ -227,6 +227,7 @@ class FilteredApisSpec extends Specification {
Mock(Upstream) {
_ * getRole() >> UpstreamsConfig.UpstreamRole.FALLBACK
_ * isAvailable() >> true
_ * getStatus() >> UpstreamAvailability.OK
}
]
when:
@@ -259,12 +260,14 @@ class FilteredApisSpec extends Specification {
Mock([name: "fallback"], Upstream) {
_ * getRole() >> UpstreamsConfig.UpstreamRole.FALLBACK
_ * isAvailable() >> true
_ * getStatus() >> UpstreamAvailability.OK
}
]
List<Upstream> secondary = [
Mock([name: "secondary"], Upstream) {
_ * getRole() >> UpstreamsConfig.UpstreamRole.SECONDARY
_ * isAvailable() >> true
_ * getStatus() >> UpstreamAvailability.OK
}
]
when:
@@ -287,4 +290,35 @@ class FilteredApisSpec extends Specification {
.expectComplete()
.verify(Duration.ofSeconds(1))
}
def "Use LAGGING after OK"() {
setup:
List<Upstream> lagging = [
Mock([name: "lagging"], Upstream) {
_ * getRole() >> UpstreamsConfig.UpstreamRole.PRIMARY
_ * isAvailable() >> true
_ * getStatus() >> UpstreamAvailability.LAGGING
}
]
List<Upstream> ok = [
Mock([name: "ok"], Upstream) {
_ * getRole() >> UpstreamsConfig.UpstreamRole.PRIMARY
_ * isAvailable() >> true
_ * getStatus() >> UpstreamAvailability.OK
}
]
when:
def act = new FilteredApis(Chain.ETHEREUM,
[] + lagging + ok,
Selector.empty, 0, 2, 0)
act.request(4)
then:
StepVerifier.create(act)
.expectNext(ok[0]).as("Initial requests with ok")
.expectNext(lagging[0]).as("Initial requests with lagging")
.expectNext(ok[0]).as("retry requests with ok")
.expectNext(lagging[0]).as("retry requests with lagging")
.expectComplete()
.verify(Duration.ofSeconds(1))
}
}