summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6372f6c)
choice code
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
})
}
this.workerChoiceStrategyContext.setWorkerChoiceStrategy(
})
}
this.workerChoiceStrategyContext.setWorkerChoiceStrategy(
Worker extends IPoolWorker,
Data,
Response
Worker extends IPoolWorker,
Data,
Response
-> implements IWorkerChoiceStrategy {
+> implements IWorkerChoiceStrategy<Worker, Data, Response> {
/** {@inheritDoc} */
public readonly isDynamicPool: boolean
/** {@inheritDoc} */
/** {@inheritDoc} */
public readonly isDynamicPool: boolean
/** {@inheritDoc} */
* @param pool - The pool instance.
*/
public constructor (
* @param pool - The pool instance.
*/
public constructor (
- protected readonly pool: IPoolInternal<Worker, Data, Response>
+ public readonly pool: IPoolInternal<Worker, Data, Response>
) {
this.isDynamicPool = this.pool.type === PoolType.DYNAMIC
this.choose.bind(this)
) {
this.isDynamicPool = this.pool.type === PoolType.DYNAMIC
this.choose.bind(this)
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
- implements IWorkerChoiceStrategy {
+ implements IWorkerChoiceStrategy<Worker, Data, Response> {
/** {@inheritDoc} */
public readonly requiredStatistics: RequiredStatistics = {
runTime: true,
/** {@inheritDoc} */
public readonly requiredStatistics: RequiredStatistics = {
runTime: true,
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
- implements IWorkerChoiceStrategy {
+ implements IWorkerChoiceStrategy<Worker, Data, Response> {
/** {@inheritDoc} */
public readonly requiredStatistics: RequiredStatistics = {
runTime: true,
/** {@inheritDoc} */
public readonly requiredStatistics: RequiredStatistics = {
runTime: true,
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
- implements IWorkerChoiceStrategy {
+ implements IWorkerChoiceStrategy<Worker, Data, Response> {
/** {@inheritDoc} */
public reset (): boolean {
return true
/** {@inheritDoc} */
public reset (): boolean {
return true
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
- implements IWorkerChoiceStrategy {
+ implements IWorkerChoiceStrategy<Worker, Data, Response> {
/**
* Id of the next worker.
*/
/**
* Id of the next worker.
*/
+import type { IPoolInternal } from '../pool-internal'
+import type { IPoolWorker } from '../pool-worker'
+
/**
* Enumeration of worker choice strategies.
*/
/**
* Enumeration of worker choice strategies.
*/
/**
* Worker choice strategy interface.
*/
/**
* Worker choice strategy interface.
*/
-export interface IWorkerChoiceStrategy {
+export interface IWorkerChoiceStrategy<
+ Worker extends IPoolWorker,
+ Data = unknown,
+ Response = unknown
+> {
+ /**
+ * The pool instance.
+ * @readonly
+ */
+ readonly pool: IPoolInternal<Worker, Data, Response>
/**
* Is the pool attached to the strategy dynamic?.
/**
* Is the pool attached to the strategy dynamic?.
*/
readonly isDynamicPool: boolean
/**
* Required pool tasks usage statistics.
*/
readonly isDynamicPool: boolean
/**
* Required pool tasks usage statistics.
*/
readonly requiredStatistics: RequiredStatistics
/**
*/
readonly requiredStatistics: RequiredStatistics
/**
> (
pool: IPoolInternal<Worker, Data, Response>,
workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
> (
pool: IPoolInternal<Worker, Data, Response>,
workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
-): IWorkerChoiceStrategy {
+): IWorkerChoiceStrategy<Worker, Data, Response> {
switch (workerChoiceStrategy) {
case WorkerChoiceStrategies.ROUND_ROBIN:
return new RoundRobinWorkerChoiceStrategy<Worker, Data, Response>(pool)
switch (workerChoiceStrategy) {
case WorkerChoiceStrategies.ROUND_ROBIN:
return new RoundRobinWorkerChoiceStrategy<Worker, Data, Response>(pool)
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
Response
>
extends AbstractWorkerChoiceStrategy<Worker, Data, Response>
- implements IWorkerChoiceStrategy {
+ implements IWorkerChoiceStrategy<Worker, Data, Response> {
/** {@inheritDoc} */
public readonly requiredStatistics: RequiredStatistics = {
runTime: true,
/** {@inheritDoc} */
public readonly requiredStatistics: RequiredStatistics = {
runTime: true,
- private workerChoiceStrategy!: IWorkerChoiceStrategy
+ private workerChoiceStrategy: IWorkerChoiceStrategy<Worker, Data, Response>
/**
* Worker choice strategy context constructor.
/**
* Worker choice strategy context constructor.
* @param workerChoiceStrategy - The worker choice strategy.
*/
public constructor (
* @param workerChoiceStrategy - The worker choice strategy.
*/
public constructor (
- private readonly pool: IPoolInternal<Worker, Data, Response>,
+ pool: IPoolInternal<Worker, Data, Response>,
private readonly createWorkerCallback: () => number,
workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
) {
this.execute.bind(this)
private readonly createWorkerCallback: () => number,
workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
) {
this.execute.bind(this)
- this.setWorkerChoiceStrategy(workerChoiceStrategy)
+ this.workerChoiceStrategy = getWorkerChoiceStrategy<Worker, Data, Response>(
+ pool,
+ workerChoiceStrategy
+ )
* @param workerChoiceStrategy - The worker choice strategy to set.
*/
public setWorkerChoiceStrategy (
* @param workerChoiceStrategy - The worker choice strategy to set.
*/
public setWorkerChoiceStrategy (
+ pool: IPoolInternal<Worker, Data, Response>,
workerChoiceStrategy: WorkerChoiceStrategy
): void {
this.workerChoiceStrategy?.reset()
this.workerChoiceStrategy = getWorkerChoiceStrategy<Worker, Data, Response>(
workerChoiceStrategy: WorkerChoiceStrategy
): void {
this.workerChoiceStrategy?.reset()
this.workerChoiceStrategy = getWorkerChoiceStrategy<Worker, Data, Response>(
public execute (): number {
if (
this.workerChoiceStrategy.isDynamicPool &&
public execute (): number {
if (
this.workerChoiceStrategy.isDynamicPool &&
- !this.pool.full &&
- this.pool.findFreeWorkerKey() === -1
+ !this.workerChoiceStrategy.pool.full &&
+ this.workerChoiceStrategy.pool.findFreeWorkerKey() === -1
) {
return this.createWorkerCallback()
}
) {
return this.createWorkerCallback()
}
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.LESS_USED
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.LESS_USED
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.LESS_USED
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.LESS_USED
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.LESS_BUSY
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.LESS_BUSY
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.LESS_BUSY
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.LESS_BUSY
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.FAIR_SHARE
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.FAIR_SHARE
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.FAIR_SHARE
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.FAIR_SHARE
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
fixedPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
dynamicPool
)
workerChoiceStrategyContext.setWorkerChoiceStrategy(
WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(
WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN
)
expect(workerChoiceStrategyContext.workerChoiceStrategy).toBeInstanceOf(