From 62c72437feb2ba72000d3546fd657e8eedceffca Mon Sep 17 00:00:00 2001 From: blockjoe <69400937+blockjoe@users.noreply.github.com> Date: Thu, 21 Jul 2022 13:13:32 -0400 Subject: [PATCH 1/2] Implemented suggested changes from discord user msa6867#1823 --- src/services/cherry-picker.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/services/cherry-picker.ts b/src/services/cherry-picker.ts index 955eb4b1..67ea4968 100644 --- a/src/services/cherry-picker.ts +++ b/src/services/cherry-picker.ts @@ -24,6 +24,11 @@ const EXPECTED_SUCCESS_LATENCY = 0.15 // This multiplier is tested to produce a curve that adequately punishes slow nodes const WEIGHT_MULTIPLIER = 35 +// This weight controls how much weight is given to the p90 service quality result. +// 1 - this value determines the median service quality weight +// This weights the nodes better than a simple average +const P90_WEIGHT = 0.3 + export class CherryPicker { checkDebug: boolean redis: Redis @@ -258,8 +263,8 @@ export class CherryPicker { // Don't use weighting until there have been at least 20 requests if (totalResults > 20) { serviceQuality.weightedSuccessLatency = ( - bucketedServiceQuality.median + - 0.3 * bucketedServiceQuality.p90 + (1 - P90_WEIGHT) * bucketedServiceQuality.median + + P90_WEIGHT * bucketedServiceQuality.p90 ).toFixed(5) } serviceQuality.metadata = { @@ -398,7 +403,7 @@ export class CherryPicker { let benchmark = previousNodeLatency // Only count the latency difference if this node is slower than the expected success latency - if (previousNodeLatency > 0 && sortedLog.medianSuccessLatency > EXPECTED_SUCCESS_LATENCY) { + if (previousNodeLatency > 0 && sortedLog.weightedSuccessLatency > EXPECTED_SUCCESS_LATENCY) { // If previous node latency is faster than expected success, use the expected as the benchmark if (previousNodeLatency < EXPECTED_SUCCESS_LATENCY) { benchmark = EXPECTED_SUCCESS_LATENCY From 61b35a52811b5c59cdeb92bfcd1ae324e9cdcd49 Mon Sep 17 00:00:00 2001 From: crisog Date: Fri, 22 Jul 2022 15:44:46 -0400 Subject: [PATCH 2/2] tests: update weighted latency result --- tests/unit/cherry-picker.unit.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/cherry-picker.unit.ts b/tests/unit/cherry-picker.unit.ts index 5f7aad01..27cedeb1 100644 --- a/tests/unit/cherry-picker.unit.ts +++ b/tests/unit/cherry-picker.unit.ts @@ -275,7 +275,7 @@ describe('Cherry picker service (unit)', () => { const session = await new PocketMock().object().getNewSession(undefined) const expectedLogs = JSON.stringify({ medianSuccessLatency: '0.25000', - weightedSuccessLatency: '0.32860', // average after calculation from fn + weightedSuccessLatency: '0.25360', // average after calculation from fn results: { '200': 25, '500': 2,