fix: ensure worker removal impact is propated to worker choice strategy
[poolifier.git] / src / pools / selection-strategies / selection-strategies-types.ts
1 /**
2 * Enumeration of worker choice strategies.
3 */
4 export const WorkerChoiceStrategies = Object.freeze({
5 /**
6 * Round robin worker selection strategy.
7 */
8 ROUND_ROBIN: 'ROUND_ROBIN',
9 /**
10 * Less used worker selection strategy.
11 */
12 LESS_USED: 'LESS_USED',
13 /**
14 * Less busy worker selection strategy.
15 */
16 LESS_BUSY: 'LESS_BUSY',
17 /**
18 * Fair share worker selection strategy.
19 */
20 FAIR_SHARE: 'FAIR_SHARE',
21 /**
22 * Weighted round robin worker selection strategy.
23 */
24 WEIGHTED_ROUND_ROBIN: 'WEIGHTED_ROUND_ROBIN'
25 } as const)
26
27 /**
28 * Worker choice strategy.
29 */
30 export type WorkerChoiceStrategy = keyof typeof WorkerChoiceStrategies
31
32 /**
33 * Pool tasks usage statistics requirements.
34 */
35 export interface RequiredStatistics {
36 runTime: boolean
37 }
38
39 /**
40 * Worker choice strategy interface.
41 */
42 export interface IWorkerChoiceStrategy {
43 /**
44 * Is the pool attached to the strategy dynamic?.
45 */
46 readonly isDynamicPool: boolean
47 /**
48 * Required pool tasks usage statistics.
49 */
50 readonly requiredStatistics: RequiredStatistics
51 /**
52 * Resets strategy internals (counters, statistics, etc.).
53 */
54 reset: () => boolean
55 /**
56 * Chooses a worker in the pool and returns its key.
57 */
58 choose: () => number
59 /**
60 * Removes a worker reference from strategy internals.
61 *
62 * @param workerKey - The worker key.
63 */
64 remove: (workerKey: number) => boolean
65 }