- let minWorkerVirtualTaskEndTimestamp = Infinity
- let chosenWorkerNodeKey: number | undefined
- for (const [workerNodeKey] of this.pool.workerNodes.entries()) {
- if (!this.isWorkerNodeEligible(workerNodeKey)) {
- continue
- }
- if (this.workersVirtualTaskEndTimestamp[workerNodeKey] == null) {
- this.computeWorkerVirtualTaskEndTimestamp(workerNodeKey)
- }
- const workerVirtualTaskEndTimestamp =
- this.workersVirtualTaskEndTimestamp[workerNodeKey]
- if (workerVirtualTaskEndTimestamp < minWorkerVirtualTaskEndTimestamp) {
- minWorkerVirtualTaskEndTimestamp = workerVirtualTaskEndTimestamp
- chosenWorkerNodeKey = workerNodeKey
- }
- }
- return chosenWorkerNodeKey
+ return this.pool.workerNodes.reduce(
+ (minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
+ if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
+ workerNode.strategyData = {
+ virtualTaskEndTimestamp:
+ this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey)
+ }
+ }
+ return (workerNode.strategyData.virtualTaskEndTimestamp as number) <
+ ((workerNodes[minWorkerNodeKey].strategyData as StrategyData)
+ .virtualTaskEndTimestamp as number)
+ ? workerNodeKey
+ : minWorkerNodeKey
+ },
+ 0
+ )