X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Ffair-share-worker-choice-strategy.ts;h=aff4e73dd3a6e5a641a626e153f39bd796b32108;hb=26ce26ca8861318068427cc86697103e7a3ddbf4;hp=af3fcfa00ce06fdb369f7372e8154016a504efce;hpb=f3a91bac2d5c34013f6394ebbe3576569b0cfcc0;p=poolifier.git diff --git a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts index af3fcfa0..aff4e73d 100644 --- a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts @@ -1,15 +1,12 @@ -import { - DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS, - DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS -} from '../../utils' +import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } from '../../utils' import type { IPool } from '../pool' import type { IWorker, StrategyData } from '../worker' import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy' import { type IWorkerChoiceStrategy, + type InternalWorkerChoiceStrategyOptions, Measurements, - type TaskStatisticsRequirements, - type WorkerChoiceStrategyOptions + type TaskStatisticsRequirements } from './selection-strategies-types' /** @@ -45,7 +42,7 @@ export class FairShareWorkerChoiceStrategy< /** @inheritDoc */ public constructor ( pool: IPool, - opts: WorkerChoiceStrategyOptions = DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS + opts: InternalWorkerChoiceStrategyOptions ) { super(pool, opts) this.setTaskStatisticsRequirements(this.opts) @@ -89,9 +86,10 @@ export class FairShareWorkerChoiceStrategy< this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey) } } - return (workerNode.strategyData.virtualTaskEndTimestamp as number) < - ((workerNodes[minWorkerNodeKey].strategyData as StrategyData) - .virtualTaskEndTimestamp as number) + return this.isWorkerNodeReady(workerNodeKey) && + (workerNode.strategyData.virtualTaskEndTimestamp as number) < + ((workerNodes[minWorkerNodeKey].strategyData as StrategyData) + .virtualTaskEndTimestamp as number) ? workerNodeKey : minWorkerNodeKey }, @@ -128,12 +126,12 @@ export class FairShareWorkerChoiceStrategy< private getWorkerNodeVirtualTaskStartTimestamp ( workerNodeKey: number ): number { + const virtualTaskEndTimestamp = + this.pool.workerNodes[workerNodeKey]?.strategyData + ?.virtualTaskEndTimestamp const now = performance.now() - return now < - (this.pool.workerNodes[workerNodeKey]?.strategyData - ?.virtualTaskEndTimestamp ?? -Infinity) - ? (this.pool.workerNodes[workerNodeKey]?.strategyData - ?.virtualTaskEndTimestamp as number) + return now < (virtualTaskEndTimestamp ?? -Infinity) + ? (virtualTaskEndTimestamp as number) : now } }