- private fairShareNextWorkerNodeKey (): void {
- let minWorkerVirtualTaskEndTimestamp = Infinity
- for (const [workerNodeKey] of this.pool.workerNodes.entries()) {
- if (this.workersVirtualTaskEndTimestamp[workerNodeKey] == null) {
- this.computeWorkerVirtualTaskEndTimestamp(workerNodeKey)
- }
- const workerVirtualTaskEndTimestamp =
- this.workersVirtualTaskEndTimestamp[workerNodeKey]
- if (
- this.isWorkerNodeReady(workerNodeKey) &&
- workerVirtualTaskEndTimestamp < minWorkerVirtualTaskEndTimestamp
- ) {
- minWorkerVirtualTaskEndTimestamp = workerVirtualTaskEndTimestamp
- this.nextWorkerNodeKey = workerNodeKey
- }
- }
+ private fairShareNextWorkerNodeKey (): number | undefined {
+ return this.pool.workerNodes.reduce(
+ (minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
+ if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
+ workerNode.strategyData = {
+ virtualTaskEndTimestamp:
+ this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey),
+ }
+ }
+ return this.isWorkerNodeReady(workerNodeKey) &&
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ workerNode.strategyData.virtualTaskEndTimestamp! <
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ workerNodes[minWorkerNodeKey].strategyData!.virtualTaskEndTimestamp!
+ ? workerNodeKey
+ : minWorkerNodeKey
+ },
+ 0
+ )