X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Fweighted-round-robin-worker-choice-strategy.ts;h=6ce55c9a2554c0e951d67b503642f800205b9805;hb=63af54001cdb7be2f14d51be593a7f96c8c480b6;hp=434b1f86f0ff6f1f8ace1ce722a2ee983bd4f6b3;hpb=153179f2d97a4fc3b9afb31ad8875d416414e484;p=poolifier.git 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 434b1f86..6ce55c9a 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 @@ -1,6 +1,6 @@ -import type { IWorker } from '../worker.js' import type { IPool } from '../pool.js' -import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } from '../../utils.js' +import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } from '../utils.js' +import type { IWorker } from '../worker.js' import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy.js' import type { IWorkerChoiceStrategy, @@ -30,14 +30,18 @@ export class WeightedRoundRobinWorkerChoiceStrategy< average: true, median: false }, - waitTime: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS, + waitTime: { + aggregate: true, + average: true, + median: false + }, elu: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } /** - * Worker node virtual task runtime. + * Worker node virtual execution time. */ - private workerNodeVirtualTaskRunTime = 0 + private workerNodeVirtualTaskExecutionTime = 0 /** @inheritDoc */ public constructor ( @@ -51,7 +55,7 @@ export class WeightedRoundRobinWorkerChoiceStrategy< /** @inheritDoc */ public reset (): boolean { this.resetWorkerNodeKeyProperties() - this.workerNodeVirtualTaskRunTime = 0 + this.workerNodeVirtualTaskExecutionTime = 0 return true } @@ -75,7 +79,7 @@ export class WeightedRoundRobinWorkerChoiceStrategy< return true } if (this.nextWorkerNodeKey === workerNodeKey) { - this.workerNodeVirtualTaskRunTime = 0 + this.workerNodeVirtualTaskExecutionTime = 0 if (this.nextWorkerNodeKey > this.pool.workerNodes.length - 1) { this.nextWorkerNodeKey = this.pool.workerNodes.length - 1 } @@ -92,10 +96,12 @@ export class WeightedRoundRobinWorkerChoiceStrategy< private weightedRoundRobinNextWorkerNodeKey (): number | undefined { const workerWeight = // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.opts!.weights![this.nextWorkerNodeKey ?? this.previousWorkerNodeKey]! - if (this.workerNodeVirtualTaskRunTime < workerWeight) { - this.workerNodeVirtualTaskRunTime = - this.workerNodeVirtualTaskRunTime + + this.opts!.weights![this.nextWorkerNodeKey ?? this.previousWorkerNodeKey] + if (this.workerNodeVirtualTaskExecutionTime < workerWeight) { + this.workerNodeVirtualTaskExecutionTime += + this.getWorkerNodeTaskWaitTime( + this.nextWorkerNodeKey ?? this.previousWorkerNodeKey + ) + this.getWorkerNodeTaskRunTime( this.nextWorkerNodeKey ?? this.previousWorkerNodeKey ) @@ -104,7 +110,7 @@ export class WeightedRoundRobinWorkerChoiceStrategy< this.nextWorkerNodeKey === this.pool.workerNodes.length - 1 ? 0 : (this.nextWorkerNodeKey ?? this.previousWorkerNodeKey) + 1 - this.workerNodeVirtualTaskRunTime = 0 + this.workerNodeVirtualTaskExecutionTime = 0 } return this.nextWorkerNodeKey }