From: Jérôme Benoit Date: Thu, 9 Jan 2025 15:20:10 +0000 (+0100) Subject: refactor: factor out worker info initialization X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=559c196a07a9871e740aed49947454a386be33d0;p=poolifier.git refactor: factor out worker info initialization Signed-off-by: Jérôme Benoit --- diff --git a/src/pools/utils.ts b/src/pools/utils.ts index c8257eaf..baa4e448 100644 --- a/src/pools/utils.ts +++ b/src/pools/utils.ts @@ -21,6 +21,7 @@ import { type IWorker, type IWorkerNode, type MeasurementStatistics, + type WorkerInfo, type WorkerNodeOptions, type WorkerType, WorkerTypes, @@ -410,7 +411,7 @@ export const createWorker = ( * @returns The worker type of the given worker. * @internal */ -export const getWorkerType = (worker: IWorker): undefined | WorkerType => { +const getWorkerType = (worker: IWorker): undefined | WorkerType => { if (worker instanceof ThreadWorker) { return WorkerTypes.thread } else if (worker instanceof ClusterWorker) { @@ -424,7 +425,7 @@ export const getWorkerType = (worker: IWorker): undefined | WorkerType => { * @returns The worker id of the given worker. * @internal */ -export const getWorkerId = (worker: IWorker): number | undefined => { +const getWorkerId = (worker: IWorker): number | undefined => { if (worker instanceof ThreadWorker) { return worker.threadId } else if (worker instanceof ClusterWorker) { @@ -432,6 +433,21 @@ export const getWorkerId = (worker: IWorker): number | undefined => { } } +export const initWorkerInfo = (worker: IWorker): WorkerInfo => { + return { + backPressure: false, + backPressureStealing: false, + continuousStealing: false, + dynamic: false, + id: getWorkerId(worker), + ready: false, + stealing: false, + stolen: false, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + type: getWorkerType(worker)!, + } +} + export const waitWorkerNodeEvents = async < Worker extends IWorker, Data = unknown diff --git a/src/pools/worker-node.ts b/src/pools/worker-node.ts index 93ecb073..6c7235b8 100644 --- a/src/pools/worker-node.ts +++ b/src/pools/worker-node.ts @@ -9,8 +9,7 @@ import { DEFAULT_TASK_NAME } from '../utils.js' import { checkWorkerNodeArguments, createWorker, - getWorkerId, - getWorkerType, + initWorkerInfo, } from './utils.js' import { type EventHandler, @@ -62,7 +61,7 @@ export class WorkerNode env: opts.env, workerOptions: opts.workerOptions, }) - this.info = this.initWorkerInfo(this.worker) + this.info = initWorkerInfo(this.worker) this.usage = this.initWorkerUsage() if (this.info.type === WorkerTypes.thread) { this.messageChannel = new MessageChannel() @@ -259,21 +258,6 @@ export class WorkerNode } } - private initWorkerInfo (worker: Worker): WorkerInfo { - return { - backPressure: false, - backPressureStealing: false, - continuousStealing: false, - dynamic: false, - id: getWorkerId(worker), - ready: false, - stealing: false, - stolen: false, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - type: getWorkerType(worker)!, - } - } - private initWorkerUsage (): WorkerUsage { const getTasksQueueSize = (): number => { return this.tasksQueue.size diff --git a/tests/pools/utils.test.mjs b/tests/pools/utils.test.mjs index ef6dd318..18e26c9c 100644 --- a/tests/pools/utils.test.mjs +++ b/tests/pools/utils.test.mjs @@ -1,5 +1,5 @@ import { expect } from '@std/expect' -import cluster, { Worker as ClusterWorker } from 'node:cluster' +import { Worker as ClusterWorker } from 'node:cluster' import { Worker as ThreadWorker } from 'node:worker_threads' import { CircularBuffer } from '../../lib/circular-buffer.cjs' @@ -8,8 +8,7 @@ import { createWorker, DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS, getDefaultTasksQueueOptions, - getWorkerId, - getWorkerType, + initWorkerInfo, updateMeasurementStatistics, } from '../../lib/pools/utils.cjs' import { MeasurementHistorySize } from '../../lib/pools/worker.cjs' @@ -122,21 +121,40 @@ describe('Pool utils test suite', () => { ).toBeInstanceOf(ClusterWorker) }) - it('Verify getWorkerType() behavior', () => { - expect( - getWorkerType( - new ThreadWorker('./tests/worker-files/thread/testWorker.mjs') - ) - ).toBe(WorkerTypes.thread) - expect(getWorkerType(cluster.fork())).toBe(WorkerTypes.cluster) - }) - - it('Verify getWorkerId() behavior', () => { - const threadWorker = new ThreadWorker( - './tests/worker-files/thread/testWorker.mjs' + it('Verify initWorkerInfo() behavior', () => { + const threadWorker = createWorker( + WorkerTypes.thread, + './tests/worker-files/thread/testWorker.mjs', + {} ) - const clusterWorker = cluster.fork() - expect(getWorkerId(threadWorker)).toBe(threadWorker.threadId) - expect(getWorkerId(clusterWorker)).toBe(clusterWorker.id) + const threadWorkerInfo = initWorkerInfo(threadWorker) + expect(threadWorkerInfo).toStrictEqual({ + backPressure: false, + backPressureStealing: false, + continuousStealing: false, + dynamic: false, + id: threadWorker.threadId, + ready: false, + stealing: false, + stolen: false, + type: WorkerTypes.thread, + }) + const clusterWorker = createWorker( + WorkerTypes.cluster, + './tests/worker-files/cluster/testWorker.mjs', + {} + ) + const clusterWorkerInfo = initWorkerInfo(clusterWorker) + expect(clusterWorkerInfo).toMatchObject({ + backPressure: false, + backPressureStealing: false, + continuousStealing: false, + dynamic: false, + id: clusterWorker.id, + ready: false, + stealing: false, + stolen: false, + type: WorkerTypes.cluster, + }) }) })