dynamic-throttled-queue 2.2.0 → 2.2.1-rc.b3d1777
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/dist/adaptive-rate.d.ts +48 -0
- package/dist/adaptive-rate.js +237 -0
- package/dist/adaptive-rate.js.map +1 -0
- package/dist/dynamic-throttled-queue.js +8 -3
- package/dist/dynamic-throttled-queue.js.map +1 -1
- package/dist/scheduler.d.ts +2 -2
- package/dist/scheduler.js +53 -192
- package/dist/scheduler.js.map +1 -1
- package/package.json +1 -1
- package/dist/rate-controller.d.ts +0 -22
- package/dist/rate-controller.js +0 -43
- package/dist/rate-controller.js.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AdjustmentTiming, RateFailureOutcome, RateOutcomeClassifier, RateStrategy } from "./dynamic-throttled-queue.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether callbacks may start. `open` allows paced starts, `held` blocks starts until the module
|
|
4
|
+
* reopens them, and `idle` means the module is not observing and waits for `start()`.
|
|
5
|
+
*/
|
|
6
|
+
export type Pacing = "idle" | "open" | "held";
|
|
7
|
+
/** Reports how one started callback settled: `undefined` for success, otherwise the failure. */
|
|
8
|
+
export type SettlementReporter = (outcome: RateFailureOutcome | undefined) => void;
|
|
9
|
+
export type AdaptiveRateOptions = {
|
|
10
|
+
min_rpi: number;
|
|
11
|
+
max_rpi: number;
|
|
12
|
+
interval: number;
|
|
13
|
+
errors_per_interval: number;
|
|
14
|
+
back_off: boolean;
|
|
15
|
+
adjustmentTiming: AdjustmentTiming;
|
|
16
|
+
rateStrategy: RateStrategy;
|
|
17
|
+
rateOutcomeClassifier?: RateOutcomeClassifier;
|
|
18
|
+
onRateChange?: (rate: number) => void;
|
|
19
|
+
};
|
|
20
|
+
export type AdaptiveRateHost = {
|
|
21
|
+
/** Whether accepted work is waiting to start. */
|
|
22
|
+
hasPendingWork: () => boolean;
|
|
23
|
+
/** Begins fresh pacing: the next paced start is one spacing from now. */
|
|
24
|
+
resumeStarts: () => void;
|
|
25
|
+
/** Cancels the next paced start, or reschedules it `deferBy` ms beyond one spacing from now. */
|
|
26
|
+
holdStarts: (deferBy?: number) => void;
|
|
27
|
+
/** Observation ended: cancel the next paced start. */
|
|
28
|
+
idle: () => void;
|
|
29
|
+
};
|
|
30
|
+
export type AdaptiveRate = {
|
|
31
|
+
readonly rate: number;
|
|
32
|
+
readonly rateIncreases: number;
|
|
33
|
+
readonly rateDecreases: number;
|
|
34
|
+
readonly pacing: Pacing;
|
|
35
|
+
/** Ends a pause, then begins observing if idle and work is pending. */
|
|
36
|
+
start: () => void;
|
|
37
|
+
/** Reports that every queued callback has started. */
|
|
38
|
+
drained: () => void;
|
|
39
|
+
/** Ends observation. Settled timing discards its in-progress window. */
|
|
40
|
+
stop: () => void;
|
|
41
|
+
/** Stops and discards the observation. Settlements are ignored until `start()` or `stop()`. */
|
|
42
|
+
pause: () => void;
|
|
43
|
+
/** Reports a callback start. Call the returned reporter once when that callback settles. */
|
|
44
|
+
started: () => SettlementReporter;
|
|
45
|
+
/** Throws the strategy failure that permanently halted adaptive rate, if one occurred. */
|
|
46
|
+
throwIfFailed: () => void;
|
|
47
|
+
};
|
|
48
|
+
export declare function createAdaptiveRate(options: AdaptiveRateOptions, host: AdaptiveRateHost): AdaptiveRate;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
const ignoreSettlement = () => { };
|
|
2
|
+
function validateDecision(decision) {
|
|
3
|
+
if (typeof decision !== "object" || decision === null) {
|
|
4
|
+
throw new TypeError("rate strategy must return a decision object");
|
|
5
|
+
}
|
|
6
|
+
const candidate = decision;
|
|
7
|
+
if (!Number.isFinite(candidate.nextRate) || !Number.isInteger(candidate.nextRate)) {
|
|
8
|
+
throw new TypeError("rate strategy must return a finite integer nextRate");
|
|
9
|
+
}
|
|
10
|
+
if (typeof candidate.shouldBackOff !== "boolean") {
|
|
11
|
+
throw new TypeError("rate strategy must return a boolean shouldBackOff");
|
|
12
|
+
}
|
|
13
|
+
return candidate;
|
|
14
|
+
}
|
|
15
|
+
/** Decides every interval from the outcomes that settled during it, whenever those callbacks started. */
|
|
16
|
+
function intervalTiming(context) {
|
|
17
|
+
let tick;
|
|
18
|
+
let run = 0;
|
|
19
|
+
function adjust() {
|
|
20
|
+
tick = undefined;
|
|
21
|
+
const current = run;
|
|
22
|
+
const hold = context.decide();
|
|
23
|
+
if (current !== run)
|
|
24
|
+
return;
|
|
25
|
+
if (hold)
|
|
26
|
+
context.hold(context.interval);
|
|
27
|
+
else if (context.pacing === "held")
|
|
28
|
+
context.reopen();
|
|
29
|
+
tick = setTimeout(adjust, context.interval);
|
|
30
|
+
}
|
|
31
|
+
function stop() {
|
|
32
|
+
clearTimeout(tick);
|
|
33
|
+
tick = undefined;
|
|
34
|
+
run++;
|
|
35
|
+
context.idle();
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
start() {
|
|
39
|
+
context.resume();
|
|
40
|
+
tick = setTimeout(adjust, context.interval);
|
|
41
|
+
},
|
|
42
|
+
started: () => context.record,
|
|
43
|
+
drained: stop,
|
|
44
|
+
stop,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Decides once every callback that started during one collection interval has settled. */
|
|
48
|
+
function settledTiming(context) {
|
|
49
|
+
let timer;
|
|
50
|
+
let window = 0;
|
|
51
|
+
let collecting = false;
|
|
52
|
+
let outstanding = 0;
|
|
53
|
+
function open() {
|
|
54
|
+
timer = undefined;
|
|
55
|
+
if (!context.hasPendingWork()) {
|
|
56
|
+
context.idle();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
window++;
|
|
60
|
+
collecting = true;
|
|
61
|
+
outstanding = 0;
|
|
62
|
+
context.resume();
|
|
63
|
+
timer = setTimeout(close, context.interval);
|
|
64
|
+
}
|
|
65
|
+
function close() {
|
|
66
|
+
timer = undefined;
|
|
67
|
+
collecting = false;
|
|
68
|
+
context.hold();
|
|
69
|
+
if (outstanding === 0)
|
|
70
|
+
finish();
|
|
71
|
+
}
|
|
72
|
+
function finish() {
|
|
73
|
+
const current = window;
|
|
74
|
+
const hold = context.decide();
|
|
75
|
+
if (current !== window)
|
|
76
|
+
return;
|
|
77
|
+
if (hold)
|
|
78
|
+
timer = setTimeout(endBackoff, context.interval);
|
|
79
|
+
else
|
|
80
|
+
open();
|
|
81
|
+
}
|
|
82
|
+
function endBackoff() {
|
|
83
|
+
timer = undefined;
|
|
84
|
+
context.endBackoff();
|
|
85
|
+
if (context.hasPendingWork())
|
|
86
|
+
open();
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
start: open,
|
|
90
|
+
started() {
|
|
91
|
+
if (!collecting)
|
|
92
|
+
return ignoreSettlement;
|
|
93
|
+
const startedIn = window;
|
|
94
|
+
outstanding++;
|
|
95
|
+
return outcome => {
|
|
96
|
+
if (startedIn !== window)
|
|
97
|
+
return;
|
|
98
|
+
context.record(outcome);
|
|
99
|
+
outstanding--;
|
|
100
|
+
if (!collecting && outstanding === 0)
|
|
101
|
+
finish();
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
drained() { },
|
|
105
|
+
stop() {
|
|
106
|
+
clearTimeout(timer);
|
|
107
|
+
timer = undefined;
|
|
108
|
+
collecting = false;
|
|
109
|
+
window++;
|
|
110
|
+
context.idle();
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export function createAdaptiveRate(options, host) {
|
|
115
|
+
const { min_rpi, max_rpi, errors_per_interval, back_off, rateStrategy, rateOutcomeClassifier, onRateChange } = options;
|
|
116
|
+
let rate = Math.ceil((max_rpi + min_rpi) / 2);
|
|
117
|
+
let rateIncreases = 0;
|
|
118
|
+
let rateDecreases = 0;
|
|
119
|
+
let errorCount = 0;
|
|
120
|
+
let wasBackedOff = false;
|
|
121
|
+
let ignoringSettlements = false;
|
|
122
|
+
let pacing = "idle";
|
|
123
|
+
let failure;
|
|
124
|
+
function isRateReducing(outcome) {
|
|
125
|
+
try {
|
|
126
|
+
return rateOutcomeClassifier?.(outcome) ?? true;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function applyRate(next) {
|
|
133
|
+
if (next === rate)
|
|
134
|
+
return;
|
|
135
|
+
if (next > rate)
|
|
136
|
+
rateIncreases++;
|
|
137
|
+
else
|
|
138
|
+
rateDecreases++;
|
|
139
|
+
rate = next;
|
|
140
|
+
onRateChange?.(rate);
|
|
141
|
+
}
|
|
142
|
+
function decide() {
|
|
143
|
+
const observation = Object.freeze({
|
|
144
|
+
currentRate: rate,
|
|
145
|
+
minRate: min_rpi,
|
|
146
|
+
maxRate: max_rpi,
|
|
147
|
+
errorCount,
|
|
148
|
+
errorThreshold: errors_per_interval,
|
|
149
|
+
hasPendingWork: host.hasPendingWork(),
|
|
150
|
+
wasBackedOff,
|
|
151
|
+
});
|
|
152
|
+
let decision;
|
|
153
|
+
try {
|
|
154
|
+
decision = validateDecision(rateStrategy(observation));
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
failure = { error };
|
|
158
|
+
timing.stop();
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
const hold = back_off && decision.shouldBackOff;
|
|
162
|
+
errorCount = 0;
|
|
163
|
+
wasBackedOff = hold;
|
|
164
|
+
applyRate(Math.min(max_rpi, Math.max(min_rpi, decision.nextRate)));
|
|
165
|
+
return hold;
|
|
166
|
+
}
|
|
167
|
+
const context = {
|
|
168
|
+
interval: options.interval,
|
|
169
|
+
get pacing() {
|
|
170
|
+
return pacing;
|
|
171
|
+
},
|
|
172
|
+
hasPendingWork: host.hasPendingWork,
|
|
173
|
+
record(outcome) {
|
|
174
|
+
if (!ignoringSettlements && outcome && isRateReducing(outcome))
|
|
175
|
+
errorCount++;
|
|
176
|
+
},
|
|
177
|
+
decide,
|
|
178
|
+
resume() {
|
|
179
|
+
pacing = "open";
|
|
180
|
+
host.resumeStarts();
|
|
181
|
+
},
|
|
182
|
+
hold(deferBy) {
|
|
183
|
+
pacing = "held";
|
|
184
|
+
host.holdStarts(deferBy);
|
|
185
|
+
},
|
|
186
|
+
reopen() {
|
|
187
|
+
pacing = "open";
|
|
188
|
+
},
|
|
189
|
+
endBackoff() {
|
|
190
|
+
wasBackedOff = false;
|
|
191
|
+
},
|
|
192
|
+
idle() {
|
|
193
|
+
wasBackedOff = false;
|
|
194
|
+
pacing = "idle";
|
|
195
|
+
host.idle();
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
const timing = options.adjustmentTiming === "settled" ? settledTiming(context) : intervalTiming(context);
|
|
199
|
+
return {
|
|
200
|
+
get rate() {
|
|
201
|
+
return rate;
|
|
202
|
+
},
|
|
203
|
+
get rateIncreases() {
|
|
204
|
+
return rateIncreases;
|
|
205
|
+
},
|
|
206
|
+
get rateDecreases() {
|
|
207
|
+
return rateDecreases;
|
|
208
|
+
},
|
|
209
|
+
get pacing() {
|
|
210
|
+
return pacing;
|
|
211
|
+
},
|
|
212
|
+
start() {
|
|
213
|
+
ignoringSettlements = false;
|
|
214
|
+
if (pacing !== "idle" || !host.hasPendingWork())
|
|
215
|
+
return;
|
|
216
|
+
timing.start();
|
|
217
|
+
},
|
|
218
|
+
drained() {
|
|
219
|
+
timing.drained();
|
|
220
|
+
},
|
|
221
|
+
stop() {
|
|
222
|
+
ignoringSettlements = false;
|
|
223
|
+
timing.stop();
|
|
224
|
+
},
|
|
225
|
+
pause() {
|
|
226
|
+
timing.stop();
|
|
227
|
+
errorCount = 0;
|
|
228
|
+
ignoringSettlements = true;
|
|
229
|
+
},
|
|
230
|
+
started: () => timing.started(),
|
|
231
|
+
throwIfFailed() {
|
|
232
|
+
if (failure)
|
|
233
|
+
throw failure.error;
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=adaptive-rate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-rate.js","sourceRoot":"","sources":["../src/adaptive-rate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createRateController } from "./rate-controller.js";
|
|
2
1
|
import { createScheduler } from "./scheduler.js";
|
|
3
2
|
const adjustmentTimings = new Set(["interval", "settled"]);
|
|
4
3
|
export const linear = ({ minRate, maxRate, currentRate, errorCount, errorThreshold, hasPendingWork, wasBackedOff, }) => {
|
|
@@ -71,10 +70,16 @@ export function createThrottledQueue(options) {
|
|
|
71
70
|
throw new Error("adjustmentTiming must be either interval or settled");
|
|
72
71
|
}
|
|
73
72
|
validateRetryBackoff(options.retryBackoff);
|
|
74
|
-
return createScheduler(options,
|
|
73
|
+
return createScheduler(options, {
|
|
75
74
|
min_rpi,
|
|
76
75
|
max_rpi,
|
|
76
|
+
interval,
|
|
77
77
|
errors_per_interval,
|
|
78
|
-
|
|
78
|
+
back_off: options.back_off ?? false,
|
|
79
|
+
adjustmentTiming: options.adjustmentTiming ?? "interval",
|
|
80
|
+
rateStrategy: options.rateStrategy ?? linear,
|
|
81
|
+
rateOutcomeClassifier: options.rateOutcomeClassifier,
|
|
82
|
+
onRateChange: options.onRateChange,
|
|
83
|
+
});
|
|
79
84
|
}
|
|
80
85
|
//# sourceMappingURL=dynamic-throttled-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-throttled-queue.js","sourceRoot":"","sources":["../src/dynamic-throttled-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dynamic-throttled-queue.js","sourceRoot":"","sources":["../src/dynamic-throttled-queue.ts"],"names":[],"mappings":"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"}
|
package/dist/scheduler.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
+
import type { AdaptiveRateOptions } from "./adaptive-rate.js";
|
|
1
2
|
import type { ThrottleHandle, ThrottleOptions } from "./dynamic-throttled-queue.js";
|
|
2
|
-
|
|
3
|
-
export declare function createScheduler(options: ThrottleOptions, rateController: RateController): ThrottleHandle;
|
|
3
|
+
export declare function createScheduler(options: ThrottleOptions, adaptiveRateOptions: AdaptiveRateOptions): ThrottleHandle;
|
package/dist/scheduler.js
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
|
+
import { createAdaptiveRate } from "./adaptive-rate.js";
|
|
1
2
|
import { calculateRetryDelay } from "./retry-backoff.js";
|
|
2
|
-
export function createScheduler(options,
|
|
3
|
-
const { interval, evenly_spaced = true, retry = 0, retryBackoff, concurrency, maxQueueSize, compact_threshold = 512,
|
|
4
|
-
const usesSettledTiming = adjustmentTiming === "settled";
|
|
5
|
-
let current_rpi = rateController.rate;
|
|
6
|
-
let dyn_interval = evenly_spaced ? interval / current_rpi : interval;
|
|
7
|
-
let dyn_requests_per_interval = evenly_spaced ? 1 : current_rpi;
|
|
8
|
-
let skippedLast = false;
|
|
9
|
-
let isRunning = false;
|
|
3
|
+
export function createScheduler(options, adaptiveRateOptions) {
|
|
4
|
+
const { interval, evenly_spaced = true, retry = 0, retryBackoff, concurrency, maxQueueSize, compact_threshold = 512, retryClassifier, } = options;
|
|
10
5
|
let last_called = 0;
|
|
11
6
|
let timeout;
|
|
12
|
-
let dynTimeout;
|
|
13
7
|
let active_count = 0;
|
|
14
8
|
let isPaused = false;
|
|
15
9
|
let isStopped = false;
|
|
16
10
|
let isAborted = false;
|
|
17
|
-
let hasStrategyFailure = false;
|
|
18
11
|
let cnt_started = 0;
|
|
19
12
|
let cnt_succeeded = 0;
|
|
20
13
|
let cnt_failed = 0;
|
|
21
14
|
let cnt_retried = 0;
|
|
22
|
-
let cnt_rateIncreases = 0;
|
|
23
|
-
let cnt_rateDecreases = 0;
|
|
24
|
-
let strategyFailure;
|
|
25
15
|
const abortController = new AbortController();
|
|
26
16
|
const max_concurrency = concurrency ?? Infinity;
|
|
27
17
|
const max_queue_size = maxQueueSize ?? Infinity;
|
|
@@ -29,11 +19,30 @@ export function createScheduler(options, rateController) {
|
|
|
29
19
|
const delayedRetries = [];
|
|
30
20
|
let head = 0;
|
|
31
21
|
let reserved_count = 0;
|
|
32
|
-
let observationWindow;
|
|
33
|
-
let nextObservationWindow = 0;
|
|
34
|
-
let collectingSettledWindow = false;
|
|
35
|
-
let settledOutstanding = 0;
|
|
36
22
|
const idleWaiters = [];
|
|
23
|
+
const adaptiveRate = createAdaptiveRate(adaptiveRateOptions, {
|
|
24
|
+
hasPendingWork: () => queue.length > head,
|
|
25
|
+
resumeStarts() {
|
|
26
|
+
last_called = Date.now();
|
|
27
|
+
clearTimeout(timeout);
|
|
28
|
+
timeout = setTimeout(dequeue, spacing());
|
|
29
|
+
},
|
|
30
|
+
holdStarts(deferBy) {
|
|
31
|
+
clearTimeout(timeout);
|
|
32
|
+
timeout = deferBy === undefined ? undefined : setTimeout(dequeue, spacing() + deferBy);
|
|
33
|
+
},
|
|
34
|
+
idle() {
|
|
35
|
+
clearTimeout(timeout);
|
|
36
|
+
timeout = undefined;
|
|
37
|
+
if (head >= queue.length) {
|
|
38
|
+
queue.length = 0;
|
|
39
|
+
head = 0;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
function spacing() {
|
|
44
|
+
return evenly_spaced ? interval / adaptiveRate.rate : interval;
|
|
45
|
+
}
|
|
37
46
|
function isIdle() {
|
|
38
47
|
return active_count === 0 && queue.length <= head && delayedRetries.length === 0;
|
|
39
48
|
}
|
|
@@ -50,8 +59,7 @@ export function createScheduler(options, rateController) {
|
|
|
50
59
|
return;
|
|
51
60
|
delayedRetries.splice(index, 1);
|
|
52
61
|
queue.push(delayedRetry.item);
|
|
53
|
-
|
|
54
|
-
start();
|
|
62
|
+
start();
|
|
55
63
|
}
|
|
56
64
|
function startDelayedRetry(delayedRetry) {
|
|
57
65
|
delayedRetry.due = Date.now() + delayedRetry.remaining;
|
|
@@ -82,53 +90,31 @@ export function createScheduler(options, rateController) {
|
|
|
82
90
|
if (!isPaused && !isStopped)
|
|
83
91
|
startDelayedRetry(delayedRetry);
|
|
84
92
|
}
|
|
85
|
-
function halt() {
|
|
86
|
-
isRunning = false;
|
|
87
|
-
skippedLast = false;
|
|
88
|
-
clearTimeout(timeout);
|
|
89
|
-
timeout = undefined;
|
|
90
|
-
clearTimeout(dynTimeout);
|
|
91
|
-
dynTimeout = undefined;
|
|
92
|
-
if (head >= queue.length) {
|
|
93
|
-
queue.length = 0;
|
|
94
|
-
head = 0;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
function discardSettledWindow() {
|
|
98
|
-
observationWindow = undefined;
|
|
99
|
-
collectingSettledWindow = false;
|
|
100
|
-
settledOutstanding = 0;
|
|
101
|
-
}
|
|
102
93
|
function stop() {
|
|
103
94
|
isStopped = true;
|
|
104
95
|
isPaused = false;
|
|
105
96
|
freezeDelayedRetries();
|
|
106
|
-
|
|
107
|
-
discardSettledWindow();
|
|
97
|
+
adaptiveRate.stop();
|
|
108
98
|
}
|
|
109
99
|
function pause() {
|
|
110
100
|
if (isAborted || isStopped || isPaused)
|
|
111
101
|
return;
|
|
112
102
|
isPaused = true;
|
|
113
|
-
rateController.clearObservation();
|
|
114
103
|
freezeDelayedRetries();
|
|
115
|
-
|
|
116
|
-
discardSettledWindow();
|
|
104
|
+
adaptiveRate.pause();
|
|
117
105
|
}
|
|
118
106
|
function resume() {
|
|
119
107
|
if (!isPaused)
|
|
120
108
|
return;
|
|
121
109
|
isPaused = false;
|
|
122
110
|
resumeDelayedRetries();
|
|
123
|
-
|
|
124
|
-
start();
|
|
111
|
+
start();
|
|
125
112
|
}
|
|
126
113
|
function abort() {
|
|
127
114
|
if (isAborted)
|
|
128
115
|
return;
|
|
129
116
|
isAborted = true;
|
|
130
|
-
|
|
131
|
-
discardSettledWindow();
|
|
117
|
+
adaptiveRate.stop();
|
|
132
118
|
freezeDelayedRetries();
|
|
133
119
|
delayedRetries.length = 0;
|
|
134
120
|
queue.length = 0;
|
|
@@ -136,16 +122,6 @@ export function createScheduler(options, rateController) {
|
|
|
136
122
|
reserved_count = 0;
|
|
137
123
|
abortController.abort();
|
|
138
124
|
}
|
|
139
|
-
function isRateReducing(outcome) {
|
|
140
|
-
if (!outcome)
|
|
141
|
-
return false;
|
|
142
|
-
try {
|
|
143
|
-
return rateOutcomeClassifier?.(outcome) ?? true;
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
125
|
function isRetryable(item, outcome) {
|
|
150
126
|
if (!outcome || item.retries === 0)
|
|
151
127
|
return false;
|
|
@@ -156,23 +132,19 @@ export function createScheduler(options, rateController) {
|
|
|
156
132
|
return true;
|
|
157
133
|
}
|
|
158
134
|
}
|
|
159
|
-
function handleResult(item, outcome) {
|
|
135
|
+
function handleResult(item, outcome, reportSettlement) {
|
|
160
136
|
if (isAborted)
|
|
161
137
|
return;
|
|
162
138
|
if (outcome)
|
|
163
139
|
cnt_failed++;
|
|
164
140
|
else
|
|
165
141
|
cnt_succeeded++;
|
|
166
|
-
if (!isPaused && (!usesSettledTiming || item.observationWindow === observationWindow)) {
|
|
167
|
-
rateController.recordCompletion(isRateReducing(outcome));
|
|
168
|
-
}
|
|
169
142
|
if (isRetryable(item, outcome)) {
|
|
170
143
|
cnt_retried++;
|
|
171
144
|
const retryItem = { fn: item.fn, retries: item.retries - 1 };
|
|
172
145
|
if (retryBackoff === undefined) {
|
|
173
146
|
queue.push(retryItem);
|
|
174
|
-
|
|
175
|
-
start();
|
|
147
|
+
start();
|
|
176
148
|
}
|
|
177
149
|
else {
|
|
178
150
|
const retryIndex = retry - item.retries + 1;
|
|
@@ -181,24 +153,17 @@ export function createScheduler(options, rateController) {
|
|
|
181
153
|
}
|
|
182
154
|
else
|
|
183
155
|
reserved_count--;
|
|
156
|
+
reportSettlement(outcome);
|
|
184
157
|
}
|
|
185
|
-
function handleSettlement(item, outcome, resume = false) {
|
|
158
|
+
function handleSettlement(item, outcome, reportSettlement, resume = false) {
|
|
186
159
|
active_count--;
|
|
187
|
-
handleResult(item, outcome);
|
|
188
|
-
if (
|
|
189
|
-
settledOutstanding--;
|
|
190
|
-
if (!collectingSettledWindow && settledOutstanding === 0)
|
|
191
|
-
finishSettledWindow();
|
|
192
|
-
}
|
|
193
|
-
if (resume && isRunning && !skippedLast && queue.length > head && (!usesSettledTiming || collectingSettledWindow))
|
|
160
|
+
handleResult(item, outcome, reportSettlement);
|
|
161
|
+
if (resume && adaptiveRate.pacing === "open" && queue.length > head)
|
|
194
162
|
dequeue();
|
|
195
163
|
notifyIdle();
|
|
196
164
|
}
|
|
197
165
|
function execute(item) {
|
|
198
|
-
|
|
199
|
-
item.observationWindow = observationWindow;
|
|
200
|
-
settledOutstanding++;
|
|
201
|
-
}
|
|
166
|
+
const reportSettlement = adaptiveRate.started();
|
|
202
167
|
cnt_started++;
|
|
203
168
|
active_count++;
|
|
204
169
|
let result;
|
|
@@ -206,24 +171,24 @@ export function createScheduler(options, rateController) {
|
|
|
206
171
|
result = item.fn({ signal: abortController.signal });
|
|
207
172
|
}
|
|
208
173
|
catch (error) {
|
|
209
|
-
handleSettlement(item, { kind: "thrown", error });
|
|
174
|
+
handleSettlement(item, { kind: "thrown", error }, reportSettlement);
|
|
210
175
|
return;
|
|
211
176
|
}
|
|
212
177
|
if (result instanceof Promise) {
|
|
213
|
-
void result.then(value => handleSettlement(item, value === false ? { kind: "returned-false" } : undefined, true), (error) => handleSettlement(item, { kind: "rejected", error }, true));
|
|
178
|
+
void result.then(value => handleSettlement(item, value === false ? { kind: "returned-false" } : undefined, reportSettlement, true), (error) => handleSettlement(item, { kind: "rejected", error }, reportSettlement, true));
|
|
214
179
|
return;
|
|
215
180
|
}
|
|
216
|
-
handleSettlement(item, result === false ? { kind: "returned-false" } : undefined);
|
|
181
|
+
handleSettlement(item, result === false ? { kind: "returned-false" } : undefined, reportSettlement);
|
|
217
182
|
}
|
|
218
183
|
function dequeue() {
|
|
219
|
-
const threshold = last_called +
|
|
184
|
+
const threshold = last_called + spacing();
|
|
220
185
|
const now = Date.now();
|
|
221
186
|
if (now < threshold) {
|
|
222
187
|
clearTimeout(timeout);
|
|
223
188
|
timeout = setTimeout(dequeue, threshold - now);
|
|
224
189
|
return;
|
|
225
190
|
}
|
|
226
|
-
const end = Math.min(head +
|
|
191
|
+
const end = Math.min(head + (evenly_spaced ? 1 : adaptiveRate.rate), queue.length);
|
|
227
192
|
let started = 0;
|
|
228
193
|
while (head < end && active_count < max_concurrency) {
|
|
229
194
|
const item = queue[head++];
|
|
@@ -235,124 +200,21 @@ export function createScheduler(options, rateController) {
|
|
|
235
200
|
queue.splice(0, head);
|
|
236
201
|
head = 0;
|
|
237
202
|
}
|
|
238
|
-
if (head >= queue.length
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
if (active_count >= max_concurrency)
|
|
203
|
+
if (head >= queue.length)
|
|
204
|
+
adaptiveRate.drained();
|
|
205
|
+
if (adaptiveRate.pacing !== "open" || active_count >= max_concurrency)
|
|
243
206
|
return;
|
|
244
|
-
timeout = setTimeout(dequeue,
|
|
245
|
-
}
|
|
246
|
-
function applyRate(newRpi) {
|
|
247
|
-
if (newRpi === current_rpi)
|
|
248
|
-
return;
|
|
249
|
-
if (newRpi > current_rpi)
|
|
250
|
-
cnt_rateIncreases++;
|
|
251
|
-
else
|
|
252
|
-
cnt_rateDecreases++;
|
|
253
|
-
current_rpi = newRpi;
|
|
254
|
-
onRateChange?.(current_rpi);
|
|
255
|
-
if (evenly_spaced)
|
|
256
|
-
dyn_interval = interval / current_rpi;
|
|
257
|
-
else
|
|
258
|
-
dyn_requests_per_interval = current_rpi;
|
|
259
|
-
}
|
|
260
|
-
function adjustRate() {
|
|
261
|
-
dynTimeout = undefined;
|
|
262
|
-
const wasSkipped = skippedLast;
|
|
263
|
-
skippedLast = false;
|
|
264
|
-
let decision;
|
|
265
|
-
try {
|
|
266
|
-
decision = rateController.observe({ hasPendingWork: queue.length > head, wasBackedOff: wasSkipped });
|
|
267
|
-
}
|
|
268
|
-
catch (error) {
|
|
269
|
-
hasStrategyFailure = true;
|
|
270
|
-
strategyFailure = error;
|
|
271
|
-
halt();
|
|
272
|
-
throw error;
|
|
273
|
-
}
|
|
274
|
-
applyRate(decision.rate);
|
|
275
|
-
if (decision.shouldBackOff && back_off) {
|
|
276
|
-
clearTimeout(timeout);
|
|
277
|
-
skippedLast = true;
|
|
278
|
-
timeout = setTimeout(dequeue, dyn_interval + interval);
|
|
279
|
-
}
|
|
280
|
-
if (isRunning)
|
|
281
|
-
dynTimeout = setTimeout(adjustRate, interval);
|
|
282
|
-
}
|
|
283
|
-
function finishSettledWindow() {
|
|
284
|
-
if (observationWindow === undefined || isPaused || isStopped || isAborted)
|
|
285
|
-
return;
|
|
286
|
-
const wasSkipped = skippedLast;
|
|
287
|
-
skippedLast = false;
|
|
288
|
-
let decision;
|
|
289
|
-
try {
|
|
290
|
-
decision = rateController.observe({ hasPendingWork: queue.length > head, wasBackedOff: wasSkipped });
|
|
291
|
-
}
|
|
292
|
-
catch (error) {
|
|
293
|
-
hasStrategyFailure = true;
|
|
294
|
-
strategyFailure = error;
|
|
295
|
-
halt();
|
|
296
|
-
discardSettledWindow();
|
|
297
|
-
throw error;
|
|
298
|
-
}
|
|
299
|
-
observationWindow = undefined;
|
|
300
|
-
applyRate(decision.rate);
|
|
301
|
-
if (decision.shouldBackOff && back_off) {
|
|
302
|
-
skippedLast = true;
|
|
303
|
-
timeout = setTimeout(resumeSettledScheduling, interval);
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
if (queue.length > head)
|
|
307
|
-
beginSettledWindow();
|
|
308
|
-
else
|
|
309
|
-
halt();
|
|
310
|
-
}
|
|
311
|
-
function closeSettledWindow() {
|
|
312
|
-
dynTimeout = undefined;
|
|
313
|
-
collectingSettledWindow = false;
|
|
314
|
-
clearTimeout(timeout);
|
|
315
|
-
timeout = undefined;
|
|
316
|
-
if (settledOutstanding === 0)
|
|
317
|
-
finishSettledWindow();
|
|
318
|
-
}
|
|
319
|
-
function resumeSettledScheduling() {
|
|
320
|
-
skippedLast = false;
|
|
321
|
-
beginSettledWindow();
|
|
322
|
-
}
|
|
323
|
-
function beginSettledWindow() {
|
|
324
|
-
if (isAborted || isPaused || isStopped || skippedLast || queue.length <= head)
|
|
325
|
-
return;
|
|
326
|
-
isRunning = true;
|
|
327
|
-
collectingSettledWindow = true;
|
|
328
|
-
observationWindow = nextObservationWindow++;
|
|
329
|
-
last_called = Date.now();
|
|
330
|
-
clearTimeout(timeout);
|
|
331
|
-
timeout = setTimeout(dequeue, dyn_interval);
|
|
332
|
-
clearTimeout(dynTimeout);
|
|
333
|
-
dynTimeout = setTimeout(closeSettledWindow, interval);
|
|
207
|
+
timeout = setTimeout(dequeue, spacing());
|
|
334
208
|
}
|
|
335
209
|
function start() {
|
|
336
210
|
if (isAborted || isPaused || isStopped)
|
|
337
211
|
return;
|
|
338
|
-
|
|
339
|
-
return;
|
|
340
|
-
if (usesSettledTiming) {
|
|
341
|
-
beginSettledWindow();
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
isRunning = true;
|
|
345
|
-
last_called = Date.now();
|
|
346
|
-
clearTimeout(timeout);
|
|
347
|
-
timeout = setTimeout(dequeue, dyn_interval);
|
|
348
|
-
if (!dynTimeout)
|
|
349
|
-
dynTimeout = setTimeout(adjustRate, interval);
|
|
212
|
+
adaptiveRate.start();
|
|
350
213
|
}
|
|
351
214
|
function enqueue(callback) {
|
|
352
215
|
if (isAborted)
|
|
353
216
|
throw new Error("Cannot enqueue work after the queue has been aborted");
|
|
354
|
-
|
|
355
|
-
throw strategyFailure;
|
|
217
|
+
adaptiveRate.throwIfFailed();
|
|
356
218
|
if (reserved_count >= max_queue_size)
|
|
357
219
|
throw new Error("Cannot enqueue work: maxQueueSize has been reached");
|
|
358
220
|
reserved_count++;
|
|
@@ -361,8 +223,7 @@ export function createScheduler(options, rateController) {
|
|
|
361
223
|
isStopped = false;
|
|
362
224
|
if (wasStopped)
|
|
363
225
|
resumeDelayedRetries();
|
|
364
|
-
|
|
365
|
-
start();
|
|
226
|
+
start();
|
|
366
227
|
}
|
|
367
228
|
function getLifecycleState() {
|
|
368
229
|
if (isAborted)
|
|
@@ -379,7 +240,7 @@ export function createScheduler(options, rateController) {
|
|
|
379
240
|
enqueue.abort = abort;
|
|
380
241
|
enqueue.waitForIdle = async () => isIdle() ? Promise.resolve() : new Promise(resolve => { idleWaiters.push(resolve); });
|
|
381
242
|
enqueue.getState = () => Object.freeze({
|
|
382
|
-
rate:
|
|
243
|
+
rate: adaptiveRate.rate,
|
|
383
244
|
pending: queue.length - head + delayedRetries.length,
|
|
384
245
|
active: active_count,
|
|
385
246
|
state: getLifecycleState(),
|
|
@@ -387,8 +248,8 @@ export function createScheduler(options, rateController) {
|
|
|
387
248
|
succeeded: cnt_succeeded,
|
|
388
249
|
failed: cnt_failed,
|
|
389
250
|
retried: cnt_retried,
|
|
390
|
-
rateIncreases:
|
|
391
|
-
rateDecreases:
|
|
251
|
+
rateIncreases: adaptiveRate.rateIncreases,
|
|
252
|
+
rateDecreases: adaptiveRate.rateDecreases,
|
|
392
253
|
});
|
|
393
254
|
Object.defineProperty(enqueue, "pending", { get: () => queue.length - head + delayedRetries.length });
|
|
394
255
|
return enqueue;
|
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.
|
|
3
|
+
"version": "2.2.1-rc.b3d1777",
|
|
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": [
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { RateStrategy } from "./dynamic-throttled-queue.js";
|
|
2
|
-
type RateControllerOptions = {
|
|
3
|
-
min_rpi: number;
|
|
4
|
-
max_rpi: number;
|
|
5
|
-
errors_per_interval: number;
|
|
6
|
-
};
|
|
7
|
-
type Observation = {
|
|
8
|
-
hasPendingWork: boolean;
|
|
9
|
-
wasBackedOff: boolean;
|
|
10
|
-
};
|
|
11
|
-
export type RateDecision = {
|
|
12
|
-
rate: number;
|
|
13
|
-
shouldBackOff: boolean;
|
|
14
|
-
};
|
|
15
|
-
export type RateController = {
|
|
16
|
-
readonly rate: number;
|
|
17
|
-
clearObservation: () => void;
|
|
18
|
-
recordCompletion: (isRateReducing: boolean) => void;
|
|
19
|
-
observe: (observation: Observation) => RateDecision;
|
|
20
|
-
};
|
|
21
|
-
export declare function createRateController(options: RateControllerOptions, strategy: RateStrategy): RateController;
|
|
22
|
-
export {};
|
package/dist/rate-controller.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
function validateDecision(decision) {
|
|
2
|
-
if (typeof decision !== "object" || decision === null) {
|
|
3
|
-
throw new TypeError("rate strategy must return a decision object");
|
|
4
|
-
}
|
|
5
|
-
const candidate = decision;
|
|
6
|
-
if (!Number.isFinite(candidate.nextRate) || !Number.isInteger(candidate.nextRate)) {
|
|
7
|
-
throw new TypeError("rate strategy must return a finite integer nextRate");
|
|
8
|
-
}
|
|
9
|
-
if (typeof candidate.shouldBackOff !== "boolean") {
|
|
10
|
-
throw new TypeError("rate strategy must return a boolean shouldBackOff");
|
|
11
|
-
}
|
|
12
|
-
return candidate;
|
|
13
|
-
}
|
|
14
|
-
export function createRateController(options, strategy) {
|
|
15
|
-
let rate = Math.ceil((options.max_rpi + options.min_rpi) / 2);
|
|
16
|
-
let errorCount = 0;
|
|
17
|
-
return {
|
|
18
|
-
get rate() {
|
|
19
|
-
return rate;
|
|
20
|
-
},
|
|
21
|
-
clearObservation() {
|
|
22
|
-
errorCount = 0;
|
|
23
|
-
},
|
|
24
|
-
recordCompletion(isRateReducing) {
|
|
25
|
-
if (isRateReducing)
|
|
26
|
-
errorCount++;
|
|
27
|
-
},
|
|
28
|
-
observe(observation) {
|
|
29
|
-
const decision = validateDecision(strategy(Object.freeze({
|
|
30
|
-
currentRate: rate,
|
|
31
|
-
minRate: options.min_rpi,
|
|
32
|
-
maxRate: options.max_rpi,
|
|
33
|
-
errorCount,
|
|
34
|
-
errorThreshold: options.errors_per_interval,
|
|
35
|
-
...observation,
|
|
36
|
-
})));
|
|
37
|
-
rate = Math.min(options.max_rpi, Math.max(options.min_rpi, decision.nextRate));
|
|
38
|
-
errorCount = 0;
|
|
39
|
-
return { rate, shouldBackOff: decision.shouldBackOff };
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=rate-controller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-controller.js","sourceRoot":"","sources":["../src/rate-controller.ts"],"names":[],"mappings":"AAyBA,SAAS,gBAAgB,CAAC,QAAiB;IACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,SAAS,GAAG,QAAgC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA8B,EAAE,QAAsB;IACzF,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO;QACL,IAAI,IAAI;YACN,OAAO,IAAI,CAAC;QACd,CAAC;QACD,gBAAgB;YACd,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,gBAAgB,CAAC,cAAuB;YACtC,IAAI,cAAc;gBAAE,UAAU,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,WAAwB;YAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBACvD,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU;gBACV,cAAc,EAAE,OAAO,CAAC,mBAAmB;gBAC3C,GAAG,WAAW;aACf,CAAC,CAAC,CAAC,CAAC;YACL,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/E,UAAU,GAAG,CAAC,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC"}
|