]> Piment Noir Git Repositories - poolifier.git/commitdiff
refactor: factor out worker info initialization
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 9 Jan 2025 15:20:10 +0000 (16:20 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 9 Jan 2025 15:20:10 +0000 (16:20 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/pools/utils.ts
src/pools/worker-node.ts
tests/pools/utils.test.mjs

index c8257eaf95e582f6dae6baec574b3093a5570b27..baa4e4480e8fe989240b920986b8f9ac42b9443a 100644 (file)
@@ -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 = <Worker extends IWorker>(
  * @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
index 93ecb0730c39077b83a3b4ad22a375e1d92c846b..6c7235b8c0c90da462205fba3bcdde6b906e1f5a 100644 (file)
@@ -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<Worker extends IWorker, Data = unknown>
       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<Worker extends IWorker, Data = unknown>
     }
   }
 
-  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
index ef6dd31832ad110339339557548c81e1d268b9da..18e26c9cfa4e4b1714029662e1505b6f60164b12 100644 (file)
@@ -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,
+    })
   })
 })