dynamic-throttled-queue 2.2.0-rc.9016c9c → 2.2.0-rc.97123f3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -5
- package/dist/dynamic-throttled-queue.d.ts +12 -0
- package/dist/dynamic-throttled-queue.js +18 -0
- package/dist/dynamic-throttled-queue.js.map +1 -1
- package/dist/retry-backoff.d.ts +2 -0
- package/dist/retry-backoff.js +31 -0
- package/dist/retry-backoff.js.map +1 -0
- package/dist/scheduler.js +142 -8
- package/dist/scheduler.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,13 +50,23 @@ Set `concurrency` to bound callbacks that are still awaiting asynchronous comple
|
|
|
50
50
|
| `errors_per_interval` | `number` | `5` | Positive integer error threshold per interval before adjusting rate |
|
|
51
51
|
| `back_off` | `boolean` | `false` | Back off for 1 full interval when error threshold is hit |
|
|
52
52
|
| `retry` | `number` | `0` | Non-negative integer number of times to retry failed callbacks |
|
|
53
|
+
| `retryBackoff` | `RetryBackoff` | — | Per-retry fixed, linear, or exponential delay policy; omit for immediate retries |
|
|
53
54
|
| `concurrency` | `number` | — | Maximum callbacks awaiting asynchronous completion; omit for no limit |
|
|
54
55
|
| `compact_threshold` | `number` | `512` | Non-negative integer minimum dead slots before internal queue compaction triggers; `0` compacts at the earliest eligible point |
|
|
55
56
|
| `rateStrategy` | `RateStrategy` | `linear` | Pure policy that requests the next rate and an optional backoff after each observation window |
|
|
56
57
|
| `rateOutcomeClassifier` | `RateOutcomeClassifier` | — | Decides whether a failed callback outcome contributes to adaptive-rate error counting |
|
|
58
|
+
| `adjustmentTiming` | `"interval" \| "settled"` | `"interval"` | Defines whether rate decisions use outcomes settled each interval or complete started-attempt sets |
|
|
57
59
|
| `onRateChange` | `(rate: number) => void` | — | Called when the current rate changes |
|
|
58
60
|
|
|
59
|
-
`retry`, `errors_per_interval`, and `compact_threshold` reject fractional and non-finite values. `errors_per_interval` must be at least `1`; `retry` and `compact_threshold` may be `0`.
|
|
61
|
+
`retry`, `errors_per_interval`, and `compact_threshold` reject fractional and non-finite values. `errors_per_interval` must be at least `1`; `retry` and `compact_threshold` may be `0`. `retryBackoff.baseDelay` and optional `maxDelay` are finite non-negative millisecond values (fractional values are accepted); optional `jitter` is finite from `0` through `1`.
|
|
62
|
+
|
|
63
|
+
`retryBackoff` is `{ strategy: "fixed" | "linear" | "exponential"; baseDelay: number; maxDelay?: number; jitter?: number; random?: () => number }`. The first retry has index `1`: fixed uses `baseDelay`, linear uses `baseDelay × retryIndex`, and exponential uses `baseDelay × 2^(retryIndex - 1)`. The calculated delay is capped at `maxDelay`, when supplied, then optional symmetric percentage jitter is applied and capped again. `random` makes jitter deterministic for tests; a thrown, non-finite, or out-of-range result safely falls back to no jitter. Retry backoff begins when the failed attempt settles and is independent of adaptive-rate `back_off`.
|
|
64
|
+
|
|
65
|
+
### Adaptive-rate timing
|
|
66
|
+
|
|
67
|
+
`adjustmentTiming: "interval"` is the compatibility default: each configured interval observes the callback outcomes that have settled so far. A slow callback can therefore settle after its start interval and affect a later rate decision.
|
|
68
|
+
|
|
69
|
+
With `adjustmentTiming: "settled"`, an observation window contains every callback attempt that starts during one full configured interval. When collection closes, no further callbacks start until every attempt in that window settles; the queue then makes exactly one rate decision from the complete window. The next collection interval begins immediately after that decision, unless adaptive-rate `back_off` delays scheduling. Empty settled intervals do not produce a decision. A never-settling callback blocks further settled windows until it settles, or until terminal `abort()`.
|
|
60
70
|
|
|
61
71
|
## Handle API
|
|
62
72
|
|
|
@@ -68,7 +78,7 @@ Set `concurrency` to bound callbacks that are still awaiting asynchronous comple
|
|
|
68
78
|
| `resume()` | `() => void` | Resume a paused queue with a fresh pacing and observation window |
|
|
69
79
|
| `stop()` | `() => void` | Stop processing the queue immediately |
|
|
70
80
|
| `abort()` | `() => void` | Terminally discard queued work and signal active callbacks |
|
|
71
|
-
| `pending` | `number` (readonly) | Number of callbacks
|
|
81
|
+
| `pending` | `number` (readonly) | Number of callbacks waiting in the queue, including delayed retries |
|
|
72
82
|
|
|
73
83
|
```ts
|
|
74
84
|
const throttle = createThrottledQueue({ min_rpi: 5, interval: 1000 });
|
|
@@ -84,13 +94,15 @@ throttle.stop(); // halt processing
|
|
|
84
94
|
| State | Pending work and enqueue | Active work | Scheduling and lifecycle operations |
|
|
85
95
|
| ----- | ------------------------ | ----------- | ----------------------------------- |
|
|
86
96
|
| Running | Pending work can start; new callbacks are accepted. | Continues normally. | `pause()` retains work and stops new starts. `stop()` retains work and clears timers. `abort()` is terminal. |
|
|
87
|
-
| Paused | Pending work, newly enqueued callbacks, and retries are retained but do not start. | Continues and settles normally. | `resume()` restarts pacing at the current rate and begins a fresh adaptive-rate observation window. `pause()` is idempotent. `stop()` clears the paused state. |
|
|
88
|
-
| Stopped | Pending work is retained. A later enqueue restarts scheduling. | Continues and settles normally. | `pause()` and `resume()` are no-ops. `stop()` is idempotent. |
|
|
97
|
+
| Paused | Pending work, newly enqueued callbacks, and retries are retained but do not start. | Continues and settles normally. | `resume()` restarts pacing at the current rate and begins a fresh adaptive-rate observation window. Delayed retries freeze their remaining delay and continue only after resume. `pause()` is idempotent. `stop()` clears the paused state. |
|
|
98
|
+
| Stopped | Pending work is retained. A later enqueue restarts scheduling. | Continues and settles normally. | Delayed retries freeze their remaining delay; the later enqueue resumes them. `pause()` and `resume()` are no-ops. `stop()` is idempotent. |
|
|
89
99
|
| Aborted | Pending work is discarded and future enqueues throw. | Receives the shared abort signal and may finish cooperatively. | `pause()`, `resume()`, `stop()`, and `abort()` do not restart scheduling; `abort()` is idempotent. |
|
|
90
100
|
|
|
91
101
|
While paused, callback outcomes do not contribute to adaptive-rate adjustment. A failed active callback may still create a configured retry, but that retry remains pending until `resume()`.
|
|
92
102
|
|
|
93
|
-
`
|
|
103
|
+
In settled timing, `pause()` discards the in-progress observation window rather than making a partial or late rate decision. `stop()` retains its non-restarting behavior, and `abort()` remains terminal: neither produces post-stop or post-abort settled-window accounting.
|
|
104
|
+
|
|
105
|
+
`stop()` clears scheduler timers and retains callbacks that have not started. It cannot cancel an active asynchronous callback; if that callback later succeeds, returns `false`, or rejects, its settlement does not restart scheduling. A retry created by a failed active callback is retained with the pending work. Enqueueing another callback resumes the queue and any frozen delayed retries.
|
|
94
106
|
|
|
95
107
|
`abort()` is terminal and idempotent. It clears scheduler timers, discards pending callbacks, and aborts the one shared signal supplied to active callbacks. Future enqueue attempts throw. Cancellation is cooperative: callbacks that ignore the signal can continue running, but their later success or failure does not retry work or affect adaptive-rate accounting.
|
|
96
108
|
|
|
@@ -249,6 +261,24 @@ throttle(async () => {
|
|
|
249
261
|
});
|
|
250
262
|
```
|
|
251
263
|
|
|
264
|
+
### Retry backoff
|
|
265
|
+
|
|
266
|
+
```ts
|
|
267
|
+
const throttle = createThrottledQueue({
|
|
268
|
+
min_rpi: 5,
|
|
269
|
+
interval: 1000,
|
|
270
|
+
retry: 3,
|
|
271
|
+
retryBackoff: {
|
|
272
|
+
strategy: "exponential",
|
|
273
|
+
baseDelay: 250,
|
|
274
|
+
maxDelay: 10_000,
|
|
275
|
+
jitter: 0.2,
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Delayed retries remain pending, return to the normal queue tail when due, and then obey normal scheduler pacing. Equal due times preserve the order their retry delays were scheduled. `abort()` discards delayed retries along with other pending work.
|
|
281
|
+
|
|
252
282
|
## Migration from v1
|
|
253
283
|
|
|
254
284
|
- `errors_per_second` removed — use `errors_per_interval` (counts errors per full interval window, not per second).
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export type RetryBackoff = {
|
|
2
|
+
strategy: "fixed" | "linear" | "exponential";
|
|
3
|
+
baseDelay: number;
|
|
4
|
+
maxDelay?: number;
|
|
5
|
+
jitter?: number;
|
|
6
|
+
random?: () => number;
|
|
7
|
+
};
|
|
1
8
|
export type RateStrategyObservation = Readonly<{
|
|
2
9
|
currentRate: number;
|
|
3
10
|
minRate: number;
|
|
@@ -26,6 +33,7 @@ export type RateFailureOutcome = Readonly<{
|
|
|
26
33
|
error: unknown;
|
|
27
34
|
}>;
|
|
28
35
|
export type RateOutcomeClassifier = (outcome: RateFailureOutcome) => boolean;
|
|
36
|
+
export type AdjustmentTiming = "interval" | "settled";
|
|
29
37
|
export declare const linear: RateStrategy;
|
|
30
38
|
export declare function aimd({ increaseBy, decreaseFactor }?: AimdOptions): RateStrategy;
|
|
31
39
|
export type ExecutionContext = Readonly<{
|
|
@@ -43,6 +51,8 @@ export type ThrottleOptions = {
|
|
|
43
51
|
back_off?: boolean;
|
|
44
52
|
/** Non-negative integer retries for each failed callback. Default 0. */
|
|
45
53
|
retry?: number;
|
|
54
|
+
/** Per-retry delay policy. Omit to preserve immediate retries. */
|
|
55
|
+
retryBackoff?: RetryBackoff;
|
|
46
56
|
/** Maximum number of callbacks awaiting asynchronous settlement. Omit for no limit. */
|
|
47
57
|
concurrency?: number;
|
|
48
58
|
/** Non-negative integer dead slots before queue compaction triggers. Default 512. */
|
|
@@ -51,6 +61,8 @@ export type ThrottleOptions = {
|
|
|
51
61
|
rateStrategy?: RateStrategy;
|
|
52
62
|
/** Decides whether a failed callback outcome contributes to adaptive-rate error counting. */
|
|
53
63
|
rateOutcomeClassifier?: RateOutcomeClassifier;
|
|
64
|
+
/** When adaptive-rate observations are adjusted. Defaults to interval compatibility behavior. */
|
|
65
|
+
adjustmentTiming?: AdjustmentTiming;
|
|
54
66
|
onRateChange?: (rate: number) => void;
|
|
55
67
|
};
|
|
56
68
|
export type ThrottleFn = (callback: ThrottleCallback) => void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createRateController } from "./rate-controller.js";
|
|
2
2
|
import { createScheduler } from "./scheduler.js";
|
|
3
|
+
const adjustmentTimings = new Set(["interval", "settled"]);
|
|
3
4
|
export const linear = ({ minRate, maxRate, currentRate, errorCount, errorThreshold, hasPendingWork, wasBackedOff, }) => {
|
|
4
5
|
if (errorCount >= errorThreshold) {
|
|
5
6
|
return { nextRate: Math.max(minRate, currentRate - 1), shouldBackOff: true };
|
|
@@ -26,6 +27,19 @@ export function aimd({ increaseBy = 1, decreaseFactor = 0.5 } = {}) {
|
|
|
26
27
|
return { nextRate: currentRate, shouldBackOff: false };
|
|
27
28
|
};
|
|
28
29
|
}
|
|
30
|
+
function validateRetryBackoff(retryBackoff) {
|
|
31
|
+
if (retryBackoff === undefined)
|
|
32
|
+
return;
|
|
33
|
+
if (!Number.isFinite(retryBackoff.baseDelay) || retryBackoff.baseDelay < 0) {
|
|
34
|
+
throw new Error("retryBackoff.baseDelay must be a finite non-negative number");
|
|
35
|
+
}
|
|
36
|
+
if (retryBackoff.maxDelay !== undefined && (!Number.isFinite(retryBackoff.maxDelay) || retryBackoff.maxDelay < 0)) {
|
|
37
|
+
throw new Error("retryBackoff.maxDelay must be a finite non-negative number");
|
|
38
|
+
}
|
|
39
|
+
if (retryBackoff.jitter !== undefined && (!Number.isFinite(retryBackoff.jitter) || retryBackoff.jitter < 0 || retryBackoff.jitter > 1)) {
|
|
40
|
+
throw new Error("retryBackoff.jitter must be a finite number from 0 through 1");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
29
43
|
export function createThrottledQueue(options) {
|
|
30
44
|
const { min_rpi, interval, max_rpi = min_rpi, concurrency, retry = 0, compact_threshold = 512 } = options;
|
|
31
45
|
const errors_per_interval = options.errors_per_interval ?? 5;
|
|
@@ -50,6 +64,10 @@ export function createThrottledQueue(options) {
|
|
|
50
64
|
if (!Number.isInteger(compact_threshold) || compact_threshold < 0) {
|
|
51
65
|
throw new Error("compact_threshold must be a non-negative integer");
|
|
52
66
|
}
|
|
67
|
+
if (options.adjustmentTiming !== undefined && !adjustmentTimings.has(options.adjustmentTiming)) {
|
|
68
|
+
throw new Error("adjustmentTiming must be either interval or settled");
|
|
69
|
+
}
|
|
70
|
+
validateRetryBackoff(options.retryBackoff);
|
|
53
71
|
return createScheduler(options, createRateController({
|
|
54
72
|
min_rpi,
|
|
55
73
|
max_rpi,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-throttled-queue.js","sourceRoot":"","sources":["../src/dynamic-throttled-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,6BAA6B;AAC5D,OAAO,EAAE,eAAe,EAAE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"dynamic-throttled-queue.js","sourceRoot":"","sources":["../src/dynamic-throttled-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function readRandom(random) {
|
|
2
|
+
try {
|
|
3
|
+
// eslint-disable-next-line sonarjs/pseudo-random -- Default jitter requires a random source.
|
|
4
|
+
const value = random?.() ?? Math.random();
|
|
5
|
+
return Number.isFinite(value) && value >= 0 && value <= 1 ? value : undefined;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function calculateRetryDelay(policy, retryIndex) {
|
|
12
|
+
let delay;
|
|
13
|
+
switch (policy.strategy) {
|
|
14
|
+
case "linear":
|
|
15
|
+
delay = policy.baseDelay * retryIndex;
|
|
16
|
+
break;
|
|
17
|
+
case "exponential":
|
|
18
|
+
delay = policy.baseDelay * 2 ** (retryIndex - 1);
|
|
19
|
+
break;
|
|
20
|
+
default: delay = policy.baseDelay;
|
|
21
|
+
}
|
|
22
|
+
const cappedDelay = policy.maxDelay === undefined ? delay : Math.min(delay, policy.maxDelay);
|
|
23
|
+
if (policy.jitter === undefined)
|
|
24
|
+
return cappedDelay;
|
|
25
|
+
const random = readRandom(policy.random);
|
|
26
|
+
if (random === undefined)
|
|
27
|
+
return cappedDelay;
|
|
28
|
+
const jitteredDelay = cappedDelay * (1 + (random * 2 - 1) * policy.jitter);
|
|
29
|
+
return policy.maxDelay === undefined ? jitteredDelay : Math.min(jitteredDelay, policy.maxDelay);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=retry-backoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-backoff.js","sourceRoot":"","sources":["../src/retry-backoff.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,MAAkC;IACpD,IAAI,CAAC;QACH,6FAA6F;QAC7F,MAAM,KAAK,GAAG,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IACD,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB,EAAE,UAAkB;IAC1E,IAAI,KAAa,CAAC;IAClB,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,QAAQ;YAAE,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC;YAAC,MAAM;QAC5D,KAAK,aAAa;YAAE,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAAC,MAAM;QAC5E,OAAO,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC7C,MAAM,aAAa,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClG,CAAC"}
|
package/dist/scheduler.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { calculateRetryDelay } from "./retry-backoff.js";
|
|
1
2
|
export function createScheduler(options, rateController) {
|
|
2
|
-
const { interval, evenly_spaced = true, retry = 0, concurrency, compact_threshold = 512, back_off = false, rateOutcomeClassifier, onRateChange, } = options;
|
|
3
|
+
const { interval, evenly_spaced = true, retry = 0, retryBackoff, concurrency, compact_threshold = 512, back_off = false, rateOutcomeClassifier, onRateChange, adjustmentTiming = "interval", } = options;
|
|
4
|
+
const usesSettledTiming = adjustmentTiming === "settled";
|
|
3
5
|
let current_rpi = rateController.rate;
|
|
4
6
|
let dyn_interval = evenly_spaced ? interval / current_rpi : interval;
|
|
5
7
|
let dyn_requests_per_interval = evenly_spaced ? 1 : current_rpi;
|
|
@@ -17,7 +19,50 @@ export function createScheduler(options, rateController) {
|
|
|
17
19
|
const abortController = new AbortController();
|
|
18
20
|
const max_concurrency = concurrency ?? Infinity;
|
|
19
21
|
const queue = [];
|
|
22
|
+
const delayedRetries = [];
|
|
20
23
|
let head = 0;
|
|
24
|
+
let observationWindow;
|
|
25
|
+
let nextObservationWindow = 0;
|
|
26
|
+
let collectingSettledWindow = false;
|
|
27
|
+
let settledOutstanding = 0;
|
|
28
|
+
function releaseDelayedRetry(delayedRetry) {
|
|
29
|
+
const index = delayedRetries.indexOf(delayedRetry);
|
|
30
|
+
if (index < 0)
|
|
31
|
+
return;
|
|
32
|
+
delayedRetries.splice(index, 1);
|
|
33
|
+
queue.push(delayedRetry.item);
|
|
34
|
+
if (!isRunning && !isPaused && !isStopped && queue.length > head)
|
|
35
|
+
start();
|
|
36
|
+
}
|
|
37
|
+
function startDelayedRetry(delayedRetry) {
|
|
38
|
+
delayedRetry.due = Date.now() + delayedRetry.remaining;
|
|
39
|
+
delayedRetry.timeout = setTimeout(() => {
|
|
40
|
+
releaseDelayedRetry(delayedRetry);
|
|
41
|
+
}, delayedRetry.remaining);
|
|
42
|
+
}
|
|
43
|
+
function freezeDelayedRetries() {
|
|
44
|
+
for (const delayedRetry of delayedRetries) {
|
|
45
|
+
if (delayedRetry.timeout === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
if (delayedRetry.due === undefined)
|
|
48
|
+
continue;
|
|
49
|
+
clearTimeout(delayedRetry.timeout);
|
|
50
|
+
delayedRetry.timeout = undefined;
|
|
51
|
+
delayedRetry.remaining = Math.max(0, delayedRetry.due - Date.now());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function resumeDelayedRetries() {
|
|
55
|
+
for (const delayedRetry of delayedRetries) {
|
|
56
|
+
if (delayedRetry.timeout === undefined)
|
|
57
|
+
startDelayedRetry(delayedRetry);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function scheduleDelayedRetry(item, delay) {
|
|
61
|
+
const delayedRetry = { item, remaining: delay };
|
|
62
|
+
delayedRetries.push(delayedRetry);
|
|
63
|
+
if (!isPaused && !isStopped)
|
|
64
|
+
startDelayedRetry(delayedRetry);
|
|
65
|
+
}
|
|
21
66
|
function halt() {
|
|
22
67
|
isRunning = false;
|
|
23
68
|
skippedLast = false;
|
|
@@ -30,22 +75,32 @@ export function createScheduler(options, rateController) {
|
|
|
30
75
|
head = 0;
|
|
31
76
|
}
|
|
32
77
|
}
|
|
78
|
+
function discardSettledWindow() {
|
|
79
|
+
observationWindow = undefined;
|
|
80
|
+
collectingSettledWindow = false;
|
|
81
|
+
settledOutstanding = 0;
|
|
82
|
+
}
|
|
33
83
|
function stop() {
|
|
34
84
|
isStopped = true;
|
|
35
85
|
isPaused = false;
|
|
86
|
+
freezeDelayedRetries();
|
|
36
87
|
halt();
|
|
88
|
+
discardSettledWindow();
|
|
37
89
|
}
|
|
38
90
|
function pause() {
|
|
39
91
|
if (isAborted || isStopped || isPaused)
|
|
40
92
|
return;
|
|
41
93
|
isPaused = true;
|
|
42
94
|
rateController.clearObservation();
|
|
95
|
+
freezeDelayedRetries();
|
|
43
96
|
halt();
|
|
97
|
+
discardSettledWindow();
|
|
44
98
|
}
|
|
45
99
|
function resume() {
|
|
46
100
|
if (!isPaused)
|
|
47
101
|
return;
|
|
48
102
|
isPaused = false;
|
|
103
|
+
resumeDelayedRetries();
|
|
49
104
|
if (queue.length > head)
|
|
50
105
|
start();
|
|
51
106
|
}
|
|
@@ -54,6 +109,9 @@ export function createScheduler(options, rateController) {
|
|
|
54
109
|
return;
|
|
55
110
|
isAborted = true;
|
|
56
111
|
halt();
|
|
112
|
+
discardSettledWindow();
|
|
113
|
+
freezeDelayedRetries();
|
|
114
|
+
delayedRetries.length = 0;
|
|
57
115
|
queue.length = 0;
|
|
58
116
|
head = 0;
|
|
59
117
|
abortController.abort();
|
|
@@ -71,21 +129,38 @@ export function createScheduler(options, rateController) {
|
|
|
71
129
|
function handleResult(item, outcome) {
|
|
72
130
|
if (isAborted)
|
|
73
131
|
return;
|
|
74
|
-
if (!isPaused)
|
|
132
|
+
if (!isPaused && (!usesSettledTiming || item.observationWindow === observationWindow)) {
|
|
75
133
|
rateController.recordCompletion(isRateReducing(outcome));
|
|
134
|
+
}
|
|
76
135
|
if (outcome && item.retries > 0) {
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
|
|
136
|
+
const retryItem = { fn: item.fn, retries: item.retries - 1 };
|
|
137
|
+
if (retryBackoff === undefined) {
|
|
138
|
+
queue.push(retryItem);
|
|
139
|
+
if (!isRunning && !isPaused && !isStopped && queue.length > head)
|
|
140
|
+
start();
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const retryIndex = retry - item.retries + 1;
|
|
144
|
+
scheduleDelayedRetry(retryItem, calculateRetryDelay(retryBackoff, retryIndex));
|
|
145
|
+
}
|
|
80
146
|
}
|
|
81
147
|
}
|
|
82
148
|
function handleSettlement(item, outcome, resume = false) {
|
|
83
149
|
active_count--;
|
|
84
150
|
handleResult(item, outcome);
|
|
85
|
-
if (
|
|
151
|
+
if (item.observationWindow === observationWindow) {
|
|
152
|
+
settledOutstanding--;
|
|
153
|
+
if (!collectingSettledWindow && settledOutstanding === 0)
|
|
154
|
+
finishSettledWindow();
|
|
155
|
+
}
|
|
156
|
+
if (resume && isRunning && !skippedLast && queue.length > head && (!usesSettledTiming || collectingSettledWindow))
|
|
86
157
|
dequeue();
|
|
87
158
|
}
|
|
88
159
|
function execute(item) {
|
|
160
|
+
if (usesSettledTiming && collectingSettledWindow) {
|
|
161
|
+
item.observationWindow = observationWindow;
|
|
162
|
+
settledOutstanding++;
|
|
163
|
+
}
|
|
89
164
|
active_count++;
|
|
90
165
|
let result;
|
|
91
166
|
try {
|
|
@@ -121,7 +196,7 @@ export function createScheduler(options, rateController) {
|
|
|
121
196
|
queue.splice(0, head);
|
|
122
197
|
head = 0;
|
|
123
198
|
}
|
|
124
|
-
if (head >= queue.length) {
|
|
199
|
+
if (head >= queue.length && !usesSettledTiming) {
|
|
125
200
|
halt();
|
|
126
201
|
return;
|
|
127
202
|
}
|
|
@@ -162,11 +237,67 @@ export function createScheduler(options, rateController) {
|
|
|
162
237
|
if (isRunning)
|
|
163
238
|
dynTimeout = setTimeout(adjustRate, interval);
|
|
164
239
|
}
|
|
240
|
+
function finishSettledWindow() {
|
|
241
|
+
if (observationWindow === undefined || isPaused || isStopped || isAborted)
|
|
242
|
+
return;
|
|
243
|
+
const wasSkipped = skippedLast;
|
|
244
|
+
skippedLast = false;
|
|
245
|
+
let decision;
|
|
246
|
+
try {
|
|
247
|
+
decision = rateController.observe({ hasPendingWork: queue.length > head, wasBackedOff: wasSkipped });
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
hasStrategyFailure = true;
|
|
251
|
+
strategyFailure = error;
|
|
252
|
+
halt();
|
|
253
|
+
discardSettledWindow();
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
observationWindow = undefined;
|
|
257
|
+
applyRate(decision.rate);
|
|
258
|
+
if (decision.shouldBackOff && back_off) {
|
|
259
|
+
skippedLast = true;
|
|
260
|
+
timeout = setTimeout(resumeSettledScheduling, interval);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
if (queue.length > head)
|
|
264
|
+
beginSettledWindow();
|
|
265
|
+
else
|
|
266
|
+
halt();
|
|
267
|
+
}
|
|
268
|
+
function closeSettledWindow() {
|
|
269
|
+
dynTimeout = undefined;
|
|
270
|
+
collectingSettledWindow = false;
|
|
271
|
+
clearTimeout(timeout);
|
|
272
|
+
timeout = undefined;
|
|
273
|
+
if (settledOutstanding === 0)
|
|
274
|
+
finishSettledWindow();
|
|
275
|
+
}
|
|
276
|
+
function resumeSettledScheduling() {
|
|
277
|
+
skippedLast = false;
|
|
278
|
+
beginSettledWindow();
|
|
279
|
+
}
|
|
280
|
+
function beginSettledWindow() {
|
|
281
|
+
if (isAborted || isPaused || isStopped || skippedLast || queue.length <= head)
|
|
282
|
+
return;
|
|
283
|
+
isRunning = true;
|
|
284
|
+
collectingSettledWindow = true;
|
|
285
|
+
observationWindow = nextObservationWindow++;
|
|
286
|
+
last_called = Date.now();
|
|
287
|
+
clearTimeout(timeout);
|
|
288
|
+
timeout = setTimeout(dequeue, dyn_interval);
|
|
289
|
+
clearTimeout(dynTimeout);
|
|
290
|
+
dynTimeout = setTimeout(closeSettledWindow, interval);
|
|
291
|
+
}
|
|
165
292
|
function start() {
|
|
166
293
|
if (isAborted || isPaused || isStopped)
|
|
167
294
|
return;
|
|
168
295
|
if (skippedLast)
|
|
169
296
|
return;
|
|
297
|
+
if (usesSettledTiming) {
|
|
298
|
+
beginSettledWindow();
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
170
301
|
isRunning = true;
|
|
171
302
|
last_called = Date.now();
|
|
172
303
|
clearTimeout(timeout);
|
|
@@ -180,7 +311,10 @@ export function createScheduler(options, rateController) {
|
|
|
180
311
|
if (hasStrategyFailure)
|
|
181
312
|
throw strategyFailure;
|
|
182
313
|
queue.push({ fn: callback, retries: retry });
|
|
314
|
+
const wasStopped = isStopped;
|
|
183
315
|
isStopped = false;
|
|
316
|
+
if (wasStopped)
|
|
317
|
+
resumeDelayedRetries();
|
|
184
318
|
if (!isRunning && !isPaused)
|
|
185
319
|
start();
|
|
186
320
|
}
|
|
@@ -188,7 +322,7 @@ export function createScheduler(options, rateController) {
|
|
|
188
322
|
enqueue.resume = resume;
|
|
189
323
|
enqueue.stop = stop;
|
|
190
324
|
enqueue.abort = abort;
|
|
191
|
-
Object.defineProperty(enqueue, "pending", { get: () => queue.length - head });
|
|
325
|
+
Object.defineProperty(enqueue, "pending", { get: () => queue.length - head + delayedRetries.length });
|
|
192
326
|
return enqueue;
|
|
193
327
|
}
|
|
194
328
|
//# sourceMappingURL=scheduler.js.map
|
package/dist/scheduler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dynamic-throttled-queue",
|
|
3
|
-
"version": "2.2.0-rc.
|
|
3
|
+
"version": "2.2.0-rc.97123f3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Dynamically throttles arbitrary code to execute between a minimum and maximum number of times per interval. Best for making throttled API requests.",
|
|
6
6
|
"files": [
|