docs: refine worker choice strategies documentation
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 25 Aug 2023 17:28:18 +0000 (19:28 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 25 Aug 2023 17:28:18 +0000 (19:28 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
docs/worker-choice-strategies.md
src/pools/selection-strategies/selection-strategies-types.ts
src/utils.ts
tests/utils.test.js

index e79bd20c107aacbe70c61764ef7fb891cb21846f..b26819a48b63ebf8a2e712e2d3fca284003097e3 100644 (file)
@@ -25,7 +25,7 @@ The worker weights are maximum tasks execution time, once the worker has reached
 ### Interleaved weighted round robin
 
 The worker weights are maximum tasks execution time. The rounds are the deduplicated worker weights.  
-During a round, if worker weight is inferior to the current round weight, the next task is assigned to the next worker. Once all workers have been assigned a task, the next round starts.  
+During a round, if the worker weight is superior or equal to the current round weight, the task is assigned to the worker. Once all workers weight have been tested, the next round starts.  
 The default worker weights is the same for each and computed given the CPU cores speed and theirs numbers. So the default 'rounds' consists of a unique worker weight.
 
 ## Statistics
index 5f2edb25b010f9961fcf870c6e661d98abaf0663..855c7ad1eec89e0238d164ef01af68aa85f4567c 100644 (file)
@@ -97,7 +97,7 @@ export interface WorkerChoiceStrategyOptions {
   readonly elu?: MeasurementOptions
   /**
    * Worker weights to use for weighted round robin worker selection strategies.
-   * A weight is the tasks maximum execution in milliseconds for each worker node.
+   * A weight is the tasks maximum execution time in milliseconds for each worker node.
    *
    * @defaultValue Weights computed automatically given the CPU performance.
    */
index f1c0d923f2d3b15ed12ff06422996b0d5c13de19..6178d8f116988475eca3e3fc8ac96a9260c563b7 100644 (file)
@@ -1,4 +1,5 @@
 import * as os from 'node:os'
+import { getRandomValues } from 'node:crypto'
 import type {
   MeasurementStatisticsRequirements,
   WorkerChoiceStrategyOptions
@@ -252,6 +253,6 @@ export const once = (
  *
  * @returns A number in the [0,1[ range
  */
-const secureRandom = (): number => {
-  return crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000
+export const secureRandom = (): number => {
+  return getRandomValues(new Uint32Array(1))[0] / 0x100000000
 }
index 97b5e8a985bd9569efe405c813740b4551c4c607..76abf04645ef4fa6e70b7e88e97ea25a611dde89 100644 (file)
@@ -11,6 +11,7 @@ const {
   isPlainObject,
   median,
   round,
+  secureRandom,
   updateMeasurementStatistics
 } = require('../lib/utils')
 const { KillBehaviors } = require('../lib/worker/worker-options')
@@ -196,4 +197,11 @@ describe('Utils test suite', () => {
       history: new CircularArray(DEFAULT_CIRCULAR_ARRAY_SIZE, 0.001, 0.003)
     })
   })
+
+  it('Verify secureRandom() behavior', () => {
+    const randomNumber = secureRandom()
+    expect(typeof randomNumber === 'number').toBe(true)
+    expect(randomNumber).toBeGreaterThanOrEqual(0)
+    expect(randomNumber).toBeLessThan(1)
+  })
 })