adaptive-concurrency 0.11.0 → 0.12.0
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/Limiter.d.ts.map +1 -1
- package/dist/Limiter.js +14 -11
- package/dist/MetricRegistry.d.ts +3 -2
- package/dist/MetricRegistry.d.ts.map +1 -1
- package/dist/MetricRegistry.js +2 -1
- package/dist/limit/GroupAwareLimit.d.ts +1 -0
- package/dist/limit/GroupAwareLimit.d.ts.map +1 -1
- package/dist/limit/GroupAwareLimit.js +5 -5
- package/package.json +1 -1
package/dist/Limiter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Limiter.d.ts","sourceRoot":"","sources":["../src/Limiter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Limiter.d.ts","sourceRoot":"","sources":["../src/Limiter.ts"],"names":[],"mappings":"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"}
|
package/dist/Limiter.js
CHANGED
|
@@ -74,13 +74,13 @@ export class Limiter {
|
|
|
74
74
|
this.acquireTimeOnUnavailableDistribution = registry.distribution(MetricIds.ACQUIRE_TIME_NAME, { id: limiterName, status: "unavailable" });
|
|
75
75
|
this.acquireBypassedAllotment = {
|
|
76
76
|
releaseAndRecordSuccess: async () => {
|
|
77
|
-
this.successCounter.
|
|
77
|
+
this.successCounter.add(1);
|
|
78
78
|
},
|
|
79
79
|
releaseAndIgnore: async () => {
|
|
80
|
-
this.ignoredCounter.
|
|
80
|
+
this.ignoredCounter.add(1);
|
|
81
81
|
},
|
|
82
82
|
releaseAndRecordDropped: async () => {
|
|
83
|
-
this.droppedCounter.
|
|
83
|
+
this.droppedCounter.add(1);
|
|
84
84
|
},
|
|
85
85
|
};
|
|
86
86
|
// Emit metric for initial limit.
|
|
@@ -91,7 +91,7 @@ export class Limiter {
|
|
|
91
91
|
return undefined;
|
|
92
92
|
const ctx = (options?.context ?? undefined);
|
|
93
93
|
if (this.bypassResolver?.(ctx)) {
|
|
94
|
-
this.acquireBypassedCounter.
|
|
94
|
+
this.acquireBypassedCounter.add(1);
|
|
95
95
|
return this.acquireBypassedAllotment;
|
|
96
96
|
}
|
|
97
97
|
const acquireStart = this.clock();
|
|
@@ -100,7 +100,7 @@ export class Limiter {
|
|
|
100
100
|
inflight: this._inflight,
|
|
101
101
|
};
|
|
102
102
|
if (!(await this.acquireStrategy.tryAcquireAllotment(ctx, state))) {
|
|
103
|
-
this.acquireFailedCounter.
|
|
103
|
+
this.acquireFailedCounter.add(1);
|
|
104
104
|
if (!this.rejectionStrategy) {
|
|
105
105
|
this.acquireTimeOnUnavailableDistribution.addSample(this.clock() - acquireStart);
|
|
106
106
|
return undefined;
|
|
@@ -123,7 +123,7 @@ export class Limiter {
|
|
|
123
123
|
distribution.addSample(this.clock() - acquireStart);
|
|
124
124
|
return result;
|
|
125
125
|
}
|
|
126
|
-
this.acquireSucceededCounter.
|
|
126
|
+
this.acquireSucceededCounter.add(1);
|
|
127
127
|
const allotment = this.createAllotment(ctx);
|
|
128
128
|
// Record the acquire time as a success, since we did actually succeed even
|
|
129
129
|
// if we abort below.
|
|
@@ -141,16 +141,19 @@ export class Limiter {
|
|
|
141
141
|
inflight: this._inflight,
|
|
142
142
|
};
|
|
143
143
|
if (!(await this.acquireStrategy.tryAcquireAllotment(ctx, state))) {
|
|
144
|
-
this.acquireFailedCounter.
|
|
144
|
+
this.acquireFailedCounter.add(1);
|
|
145
145
|
return undefined;
|
|
146
146
|
}
|
|
147
|
-
this.acquireSucceededCounter.
|
|
147
|
+
this.acquireSucceededCounter.add(1);
|
|
148
148
|
return this.createAllotment(ctx);
|
|
149
149
|
}
|
|
150
150
|
createAllotment(ctx) {
|
|
151
151
|
const startTime = this.clock();
|
|
152
152
|
const currentInflight = ++this._inflight;
|
|
153
153
|
const operationName = this.operationNameFor?.(ctx);
|
|
154
|
+
const incrementTags = operationName
|
|
155
|
+
? { [MetricIds.OPERATION_NAME_TAG]: operationName }
|
|
156
|
+
: {};
|
|
154
157
|
// Make sure an allotment can only be released once; future calls become a
|
|
155
158
|
// no-op. This simplifies a lot of cleanup handling etc that'd otherwise be
|
|
156
159
|
// much racier/more complicated. It could hide subtle correctness issue, but
|
|
@@ -164,7 +167,7 @@ export class Limiter {
|
|
|
164
167
|
const endTime = this.clock();
|
|
165
168
|
const rtt = endTime - startTime;
|
|
166
169
|
this._inflight--;
|
|
167
|
-
this.successCounter.
|
|
170
|
+
this.successCounter.add(1, incrementTags);
|
|
168
171
|
// If one onAllotmentReleased call fails, hard to know what to do here.
|
|
169
172
|
// We're in some kind of inconsistent state, but we probably have to
|
|
170
173
|
// soldier on.
|
|
@@ -186,7 +189,7 @@ export class Limiter {
|
|
|
186
189
|
return;
|
|
187
190
|
releaseStarted = true;
|
|
188
191
|
this._inflight--;
|
|
189
|
-
this.ignoredCounter.
|
|
192
|
+
this.ignoredCounter.add(1, incrementTags);
|
|
190
193
|
// If one onAllotmentReleased call fails, hard to know what to do here.
|
|
191
194
|
// We're in some kind of inconsistent state, but we probably have to
|
|
192
195
|
// soldier on.
|
|
@@ -206,7 +209,7 @@ export class Limiter {
|
|
|
206
209
|
const endTime = this.clock();
|
|
207
210
|
const rtt = endTime - startTime;
|
|
208
211
|
this._inflight--;
|
|
209
|
-
this.droppedCounter.
|
|
212
|
+
this.droppedCounter.add(1, incrementTags);
|
|
210
213
|
// If one onAllotmentReleased call fails, hard to know what to do here.
|
|
211
214
|
// We're in some kind of inconsistent state, but we probably have to
|
|
212
215
|
// soldier on.
|
package/dist/MetricRegistry.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* failures from retry attempts.
|
|
8
8
|
*/
|
|
9
9
|
export declare const MetricIds: {
|
|
10
|
+
readonly OPERATION_NAME_TAG: "operation";
|
|
10
11
|
readonly LIMIT_NAME: "limit";
|
|
11
12
|
readonly CALL_NAME: "call";
|
|
12
13
|
readonly ACQUIRE_ATTEMPT_NAME: "acquire_attempt";
|
|
@@ -31,11 +32,11 @@ export interface DistributionMetric {
|
|
|
31
32
|
* translate into an actions-per-second metric.
|
|
32
33
|
*/
|
|
33
34
|
export interface Counter {
|
|
34
|
-
|
|
35
|
+
add(value: number, attributes?: Record<string, string>): void;
|
|
35
36
|
}
|
|
36
37
|
/** Opaque handle for a registered gauge (supplier is polled by the registry on flush). */
|
|
37
38
|
export interface Gauge {
|
|
38
|
-
record(value: number): void;
|
|
39
|
+
record(value: number, attributes?: Record<string, string>): void;
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
41
42
|
* Simple abstraction for tracking metrics in the limiters.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricRegistry.d.ts","sourceRoot":"","sources":["../src/MetricRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"MetricRegistry.d.ts","sourceRoot":"","sources":["../src/MetricRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CAcZ,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC/D;AAED,0FAA0F;AAC1F,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,YAAY,CACV,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,kBAAkB,CAAC;IAEtB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAE9D;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;CACnE;AAMD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAUhC,CAAC"}
|
package/dist/MetricRegistry.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* failures from retry attempts.
|
|
8
8
|
*/
|
|
9
9
|
export const MetricIds = {
|
|
10
|
+
OPERATION_NAME_TAG: "operation",
|
|
10
11
|
LIMIT_NAME: "limit",
|
|
11
12
|
CALL_NAME: "call",
|
|
12
13
|
ACQUIRE_ATTEMPT_NAME: "acquire_attempt",
|
|
@@ -21,7 +22,7 @@ export const MetricIds = {
|
|
|
21
22
|
GROUP_RTT_RATIO_NAME: "group_rtt_ratio",
|
|
22
23
|
};
|
|
23
24
|
const NOOP_SAMPLE_LISTENER = { addSample() { } };
|
|
24
|
-
const NOOP_COUNTER = {
|
|
25
|
+
const NOOP_COUNTER = { add() { } };
|
|
25
26
|
const NOOP_GAUGE = { record() { } };
|
|
26
27
|
/**
|
|
27
28
|
* No-op MetricRegistry that discards all metrics. Used as the default when
|
|
@@ -44,6 +44,7 @@ export declare class GroupAwareLimit implements AdaptiveLimit {
|
|
|
44
44
|
private readonly registry;
|
|
45
45
|
private readonly congestionSignalGauge;
|
|
46
46
|
private readonly warmedGroupsCountGauge;
|
|
47
|
+
private readonly groupRttRatioGauge;
|
|
47
48
|
constructor(options?: {
|
|
48
49
|
initialLimit?: number;
|
|
49
50
|
minLimit?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupAwareLimit.d.ts","sourceRoot":"","sources":["../../src/limit/GroupAwareLimit.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA6DzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0C;IACzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IAEzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;
|
|
1
|
+
{"version":3,"file":"GroupAwareLimit.d.ts","sourceRoot":"","sources":["../../src/limit/GroupAwareLimit.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA6DzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0C;IACzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IAEzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;gBAE/B,OAAO,CAAC,EAAE;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;QACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,cAAc,CAAC;KACjC;IA0BD,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI;IAgDP,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,SAAS,CACP,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACrC,MAAM,IAAI;IAIb,OAAO,CAAC,uBAAuB;IA8C/B,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,aAAa;IAOrB,QAAQ,IAAI,MAAM;CAGnB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI;QACZ,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;KACpD;CACF"}
|
|
@@ -97,11 +97,12 @@ export class GroupAwareLimit {
|
|
|
97
97
|
registry;
|
|
98
98
|
congestionSignalGauge;
|
|
99
99
|
warmedGroupsCountGauge;
|
|
100
|
+
groupRttRatioGauge;
|
|
100
101
|
constructor(options) {
|
|
101
|
-
this._limit = options?.initialLimit ?? 20;
|
|
102
|
-
this.groups = new LRUMap(options?.maxGroups ?? 50);
|
|
103
102
|
this.minLimit = options?.minLimit ?? 10;
|
|
104
103
|
this.maxLimit = options?.maxLimit ?? 200;
|
|
104
|
+
this._limit = this.clamp(options?.initialLimit ?? 20);
|
|
105
|
+
this.groups = new LRUMap(options?.maxGroups ?? 50);
|
|
105
106
|
this.alpha = options?.alpha ?? 1.1;
|
|
106
107
|
this.beta = options?.beta ?? 1.5;
|
|
107
108
|
this.decrease = options?.decrease ?? defaultDecrease;
|
|
@@ -113,6 +114,7 @@ export class GroupAwareLimit {
|
|
|
113
114
|
this.registry = options?.metricRegistry ?? NoopMetricRegistry;
|
|
114
115
|
this.congestionSignalGauge = this.registry.gauge(MetricIds.CONGESTION_SIGNAL_NAME);
|
|
115
116
|
this.warmedGroupsCountGauge = this.registry.gauge(MetricIds.WARMED_GROUPS_COUNT_NAME);
|
|
117
|
+
this.groupRttRatioGauge = this.registry.gauge(MetricIds.GROUP_RTT_RATIO_NAME);
|
|
116
118
|
}
|
|
117
119
|
addSample(_startTime, rtt, inflight, didDrop, operationName) {
|
|
118
120
|
const now = this.clock();
|
|
@@ -142,9 +144,7 @@ export class GroupAwareLimit {
|
|
|
142
144
|
this.warmedGroupsCountGauge.record(warmedGroupInfos.length);
|
|
143
145
|
this.congestionSignalGauge.record(signal);
|
|
144
146
|
for (const { groupName: group, ratio } of warmedGroupInfos) {
|
|
145
|
-
this.
|
|
146
|
-
.gauge(MetricIds.GROUP_RTT_RATIO_NAME, { group })
|
|
147
|
-
.record(ratio);
|
|
147
|
+
this.groupRttRatioGauge.record(ratio, { group });
|
|
148
148
|
}
|
|
149
149
|
if (signal > this.beta) {
|
|
150
150
|
this.applyNewLimit(this.clamp(this.decrease(this._limit, false)));
|