From 226b02a3e2b3619cbe967634ccd6ac7b5d450147 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 1 Sep 2023 01:16:57 +0200 Subject: [PATCH] fix: avoid out of bound at worker node removal MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- ...hted-round-robin-worker-choice-strategy.ts | 26 ++++++++++--------- .../round-robin-worker-choice-strategy.ts | 20 +++++++++----- ...hted-round-robin-worker-choice-strategy.ts | 14 ++++++---- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.ts b/src/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.ts index 0b32bd45..7fba0f1b 100644 --- a/src/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/interleaved-weighted-round-robin-worker-choice-strategy.ts @@ -137,18 +137,20 @@ export class InterleavedWeightedRoundRobinWorkerChoiceStrategy< /** @inheritDoc */ public remove (workerNodeKey: number): boolean { - if (this.nextWorkerNodeKey === workerNodeKey) { - if (this.pool.workerNodes.length === 0) { - this.roundId = 0 - this.workerNodeId = 0 - this.nextWorkerNodeKey = 0 - } else if (this.nextWorkerNodeKey > this.pool.workerNodes.length - 1) { - if (this.workerNodeId === this.nextWorkerNodeKey) { - this.workerNodeId = this.pool.workerNodes.length - 1 - } - this.nextWorkerNodeKey = this.pool.workerNodes.length - 1 - } - this.workerVirtualTaskRunTime = 0 + if (this.pool.workerNodes.length === 0) { + this.reset() + } + if ( + this.workerNodeId === workerNodeKey && + this.workerNodeId > this.pool.workerNodes.length - 1 + ) { + this.workerNodeId = this.pool.workerNodes.length - 1 + } + if ( + this.previousWorkerNodeKey === workerNodeKey && + this.previousWorkerNodeKey > this.pool.workerNodes.length - 1 + ) { + this.previousWorkerNodeKey = this.pool.workerNodes.length - 1 } return true } diff --git a/src/pools/selection-strategies/round-robin-worker-choice-strategy.ts b/src/pools/selection-strategies/round-robin-worker-choice-strategy.ts index 6884a5d2..aa3ee108 100644 --- a/src/pools/selection-strategies/round-robin-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/round-robin-worker-choice-strategy.ts @@ -51,12 +51,20 @@ export class RoundRobinWorkerChoiceStrategy< /** @inheritDoc */ public remove (workerNodeKey: number): boolean { - if (this.nextWorkerNodeKey === workerNodeKey) { - if (this.pool.workerNodes.length === 0) { - this.nextWorkerNodeKey = 0 - } else if (this.nextWorkerNodeKey > this.pool.workerNodes.length - 1) { - this.nextWorkerNodeKey = this.pool.workerNodes.length - 1 - } + if (this.pool.workerNodes.length === 0) { + this.reset() + } + if ( + this.nextWorkerNodeKey === workerNodeKey && + this.nextWorkerNodeKey > this.pool.workerNodes.length - 1 + ) { + this.nextWorkerNodeKey = this.pool.workerNodes.length - 1 + } + if ( + this.previousWorkerNodeKey === workerNodeKey && + this.previousWorkerNodeKey > this.pool.workerNodes.length - 1 + ) { + this.previousWorkerNodeKey = this.pool.workerNodes.length - 1 } return true } diff --git a/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts b/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts index 42952fa2..c87081a6 100644 --- a/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts @@ -76,14 +76,18 @@ export class WeightedRoundRobinWorkerChoiceStrategy< /** @inheritDoc */ public remove (workerNodeKey: number): boolean { + if (this.pool.workerNodes.length === 0) { + this.reset() + } if (this.nextWorkerNodeKey === workerNodeKey) { - if (this.pool.workerNodes.length === 0) { - this.nextWorkerNodeKey = 0 - } else if (this.nextWorkerNodeKey > this.pool.workerNodes.length - 1) { - this.nextWorkerNodeKey = this.pool.workerNodes.length - 1 - } this.workerVirtualTaskRunTime = 0 } + if ( + this.previousWorkerNodeKey === workerNodeKey && + this.previousWorkerNodeKey > this.pool.workerNodes.length - 1 + ) { + this.previousWorkerNodeKey = this.pool.workerNodes.length - 1 + } return true } -- 2.34.1