@trigger.dev/core 4.0.2 → 4.0.4

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.
Files changed (131) hide show
  1. package/dist/commonjs/v3/errors.d.ts +1 -0
  2. package/dist/commonjs/v3/errors.js +35 -2
  3. package/dist/commonjs/v3/errors.js.map +1 -1
  4. package/dist/commonjs/v3/heartbeats/api.d.ts +14 -0
  5. package/dist/commonjs/v3/heartbeats/api.js +58 -0
  6. package/dist/commonjs/v3/heartbeats/api.js.map +1 -0
  7. package/dist/commonjs/v3/heartbeats/manager.d.ts +16 -0
  8. package/dist/commonjs/v3/heartbeats/manager.js +72 -0
  9. package/dist/commonjs/v3/heartbeats/manager.js.map +1 -0
  10. package/dist/commonjs/v3/heartbeats/types.d.ts +7 -0
  11. package/dist/commonjs/v3/heartbeats/types.js +3 -0
  12. package/dist/commonjs/v3/heartbeats/types.js.map +1 -0
  13. package/dist/commonjs/v3/heartbeats-api.d.ts +3 -0
  14. package/dist/commonjs/v3/heartbeats-api.js +9 -0
  15. package/dist/commonjs/v3/heartbeats-api.js.map +1 -0
  16. package/dist/commonjs/v3/index.d.ts +1 -0
  17. package/dist/commonjs/v3/index.js +1 -0
  18. package/dist/commonjs/v3/index.js.map +1 -1
  19. package/dist/commonjs/v3/links.d.ts +1 -0
  20. package/dist/commonjs/v3/links.js +1 -0
  21. package/dist/commonjs/v3/links.js.map +1 -1
  22. package/dist/commonjs/v3/runEngineWorker/index.d.ts +1 -0
  23. package/dist/commonjs/v3/runEngineWorker/index.js +1 -0
  24. package/dist/commonjs/v3/runEngineWorker/index.js.map +1 -1
  25. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.d.ts +71 -0
  26. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.js +316 -0
  27. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.js.map +1 -0
  28. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.d.ts +1 -0
  29. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.js +589 -0
  30. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.js.map +1 -0
  31. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPoolMetrics.d.ts +43 -0
  32. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPoolMetrics.js +131 -0
  33. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPoolMetrics.js.map +1 -0
  34. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.d.ts +7 -4
  35. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.js.map +1 -1
  36. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.d.ts +76 -0
  37. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.js +161 -0
  38. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.js.map +1 -0
  39. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.d.ts +1 -0
  40. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js +293 -0
  41. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js.map +1 -0
  42. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.d.ts +67 -0
  43. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.js +153 -0
  44. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.js.map +1 -0
  45. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.d.ts +1 -0
  46. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.js +235 -0
  47. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.js.map +1 -0
  48. package/dist/commonjs/v3/runEngineWorker/supervisor/session.d.ts +5 -2
  49. package/dist/commonjs/v3/runEngineWorker/supervisor/session.js +14 -8
  50. package/dist/commonjs/v3/runEngineWorker/supervisor/session.js.map +1 -1
  51. package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +80 -111
  52. package/dist/commonjs/v3/runEngineWorker/workload/http.js +36 -14
  53. package/dist/commonjs/v3/runEngineWorker/workload/http.js.map +1 -1
  54. package/dist/commonjs/v3/schemas/api.d.ts +139 -0
  55. package/dist/commonjs/v3/schemas/api.js +11 -3
  56. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  57. package/dist/commonjs/v3/utils/globals.d.ts +2 -0
  58. package/dist/commonjs/v3/utils/globals.js.map +1 -1
  59. package/dist/commonjs/v3/utils/ioSerialization.d.ts +1 -0
  60. package/dist/commonjs/v3/utils/ioSerialization.js +92 -3
  61. package/dist/commonjs/v3/utils/ioSerialization.js.map +1 -1
  62. package/dist/commonjs/v3/workers/index.d.ts +1 -0
  63. package/dist/commonjs/v3/workers/index.js +3 -1
  64. package/dist/commonjs/v3/workers/index.js.map +1 -1
  65. package/dist/commonjs/version.js +1 -1
  66. package/dist/esm/v3/errors.d.ts +1 -0
  67. package/dist/esm/v3/errors.js +34 -2
  68. package/dist/esm/v3/errors.js.map +1 -1
  69. package/dist/esm/v3/heartbeats/api.d.ts +14 -0
  70. package/dist/esm/v3/heartbeats/api.js +54 -0
  71. package/dist/esm/v3/heartbeats/api.js.map +1 -0
  72. package/dist/esm/v3/heartbeats/manager.d.ts +16 -0
  73. package/dist/esm/v3/heartbeats/manager.js +68 -0
  74. package/dist/esm/v3/heartbeats/manager.js.map +1 -0
  75. package/dist/esm/v3/heartbeats/types.d.ts +7 -0
  76. package/dist/esm/v3/heartbeats/types.js +2 -0
  77. package/dist/esm/v3/heartbeats/types.js.map +1 -0
  78. package/dist/esm/v3/heartbeats-api.d.ts +3 -0
  79. package/dist/esm/v3/heartbeats-api.js +6 -0
  80. package/dist/esm/v3/heartbeats-api.js.map +1 -0
  81. package/dist/esm/v3/index.d.ts +1 -0
  82. package/dist/esm/v3/index.js +1 -0
  83. package/dist/esm/v3/index.js.map +1 -1
  84. package/dist/esm/v3/links.d.ts +1 -0
  85. package/dist/esm/v3/links.js +1 -0
  86. package/dist/esm/v3/links.js.map +1 -1
  87. package/dist/esm/v3/runEngineWorker/index.d.ts +1 -0
  88. package/dist/esm/v3/runEngineWorker/index.js +1 -0
  89. package/dist/esm/v3/runEngineWorker/index.js.map +1 -1
  90. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.d.ts +71 -0
  91. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.js +312 -0
  92. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.js.map +1 -0
  93. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.d.ts +1 -0
  94. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.js +587 -0
  95. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.js.map +1 -0
  96. package/dist/esm/v3/runEngineWorker/supervisor/consumerPoolMetrics.d.ts +43 -0
  97. package/dist/esm/v3/runEngineWorker/supervisor/consumerPoolMetrics.js +127 -0
  98. package/dist/esm/v3/runEngineWorker/supervisor/consumerPoolMetrics.js.map +1 -0
  99. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.d.ts +7 -4
  100. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.js.map +1 -1
  101. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.d.ts +76 -0
  102. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.js +157 -0
  103. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.js.map +1 -0
  104. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.d.ts +1 -0
  105. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js +291 -0
  106. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js.map +1 -0
  107. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.d.ts +67 -0
  108. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.js +146 -0
  109. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.js.map +1 -0
  110. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.d.ts +1 -0
  111. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.js +233 -0
  112. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.js.map +1 -0
  113. package/dist/esm/v3/runEngineWorker/supervisor/session.d.ts +5 -2
  114. package/dist/esm/v3/runEngineWorker/supervisor/session.js +14 -8
  115. package/dist/esm/v3/runEngineWorker/supervisor/session.js.map +1 -1
  116. package/dist/esm/v3/runEngineWorker/workload/http.d.ts +80 -111
  117. package/dist/esm/v3/runEngineWorker/workload/http.js +37 -15
  118. package/dist/esm/v3/runEngineWorker/workload/http.js.map +1 -1
  119. package/dist/esm/v3/schemas/api.d.ts +139 -0
  120. package/dist/esm/v3/schemas/api.js +8 -0
  121. package/dist/esm/v3/schemas/api.js.map +1 -1
  122. package/dist/esm/v3/utils/globals.d.ts +2 -0
  123. package/dist/esm/v3/utils/globals.js.map +1 -1
  124. package/dist/esm/v3/utils/ioSerialization.d.ts +1 -0
  125. package/dist/esm/v3/utils/ioSerialization.js +92 -3
  126. package/dist/esm/v3/utils/ioSerialization.js.map +1 -1
  127. package/dist/esm/v3/workers/index.d.ts +1 -0
  128. package/dist/esm/v3/workers/index.js +1 -0
  129. package/dist/esm/v3/workers/index.js.map +1 -1
  130. package/dist/esm/version.js +1 -1
  131. package/package.json +1 -1
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunQueueConsumerPool = void 0;
4
+ const structuredLogger_js_1 = require("../../utils/structuredLogger.js");
5
+ const queueConsumer_js_1 = require("./queueConsumer.js");
6
+ const queueMetricsProcessor_js_1 = require("./queueMetricsProcessor.js");
7
+ const scalingStrategies_js_1 = require("./scalingStrategies.js");
8
+ const consumerPoolMetrics_js_1 = require("./consumerPoolMetrics.js");
9
+ class RunQueueConsumerPool {
10
+ consumerOptions;
11
+ logger = new structuredLogger_js_1.SimpleStructuredLogger("consumer-pool");
12
+ promMetrics;
13
+ minConsumerCount;
14
+ maxConsumerCount;
15
+ scalingStrategy;
16
+ disableJitter;
17
+ consumers = new Map();
18
+ consumerFactory;
19
+ isEnabled = false;
20
+ isScaling = false;
21
+ metrics;
22
+ metricsProcessor;
23
+ // Scaling parameters
24
+ ewmaAlpha;
25
+ scaleUpCooldownMs;
26
+ scaleDownCooldownMs;
27
+ batchWindowMs;
28
+ constructor(opts) {
29
+ this.consumerOptions = opts.consumer;
30
+ // Initialize Prometheus metrics if registry provided
31
+ if (opts.metricsRegistry) {
32
+ this.promMetrics = new consumerPoolMetrics_js_1.ConsumerPoolMetrics({
33
+ register: opts.metricsRegistry,
34
+ });
35
+ }
36
+ this.minConsumerCount = Math.max(1, opts.scaling.minConsumerCount ?? 1);
37
+ this.maxConsumerCount = Math.max(this.minConsumerCount, opts.scaling.maxConsumerCount ?? 10);
38
+ this.scaleUpCooldownMs = opts.scaling.scaleUpCooldownMs ?? 10000; // 10 seconds default
39
+ this.scaleDownCooldownMs = opts.scaling.scaleDownCooldownMs ?? 60000; // 60 seconds default
40
+ this.disableJitter = opts.scaling.disableJitter ?? false;
41
+ // Configure EWMA parameters from options
42
+ this.ewmaAlpha = opts.scaling.ewmaAlpha ?? 0.3;
43
+ this.batchWindowMs = opts.scaling.batchWindowMs ?? 1000;
44
+ // Validate EWMA parameters
45
+ if (this.ewmaAlpha < 0 || this.ewmaAlpha > 1) {
46
+ throw new Error(`ewmaAlpha must be between 0 and 1, got: ${this.ewmaAlpha}`);
47
+ }
48
+ if (this.batchWindowMs <= 0) {
49
+ throw new Error(`batchWindowMs must be positive, got: ${this.batchWindowMs}`);
50
+ }
51
+ // Initialize metrics processor
52
+ this.metricsProcessor = new queueMetricsProcessor_js_1.QueueMetricsProcessor({
53
+ ewmaAlpha: this.ewmaAlpha,
54
+ batchWindowMs: this.batchWindowMs,
55
+ });
56
+ const targetRatio = opts.scaling.targetRatio ?? 1.0;
57
+ const dampingFactor = opts.scaling.dampingFactor;
58
+ // Create scaling strategy with metrics processor injected
59
+ this.scalingStrategy = scalingStrategies_js_1.ScalingStrategy.create(opts.scaling.strategy ?? "none", {
60
+ metricsProcessor: this.metricsProcessor,
61
+ dampingFactor,
62
+ targetRatio,
63
+ minConsumerCount: this.minConsumerCount,
64
+ maxConsumerCount: this.maxConsumerCount,
65
+ });
66
+ // Use provided factory or default to RunQueueConsumer
67
+ this.consumerFactory =
68
+ opts.consumerFactory || ((consumerOpts) => new queueConsumer_js_1.RunQueueConsumer(consumerOpts));
69
+ this.metrics = {
70
+ targetConsumerCount: this.minConsumerCount,
71
+ queueLength: undefined,
72
+ smoothedQueueLength: 0,
73
+ lastScaleTime: new Date(0),
74
+ lastQueueLengthUpdate: new Date(0),
75
+ };
76
+ this.logger.log("Initialized consumer pool", {
77
+ minConsumerCount: this.minConsumerCount,
78
+ maxConsumerCount: this.maxConsumerCount,
79
+ scalingStrategy: this.scalingStrategy.name,
80
+ mode: this.scalingStrategy.name === "none" ? "static" : "dynamic",
81
+ ewmaAlpha: this.ewmaAlpha,
82
+ batchWindowMs: this.batchWindowMs,
83
+ });
84
+ }
85
+ async start() {
86
+ if (this.isEnabled) {
87
+ return;
88
+ }
89
+ this.isEnabled = true;
90
+ // For 'none' strategy, start with max consumers (static mode)
91
+ // For dynamic strategies, start with minimum
92
+ const initialCount = this.scalingStrategy.name === "none" ? this.maxConsumerCount : this.minConsumerCount;
93
+ // Set initial metrics
94
+ this.metrics.targetConsumerCount = initialCount;
95
+ this.addConsumers(initialCount);
96
+ this.logger.log("Started dynamic consumer pool", {
97
+ initialConsumerCount: this.consumers.size,
98
+ });
99
+ // Initialize Prometheus metrics with initial state
100
+ this.promMetrics?.updateState({
101
+ consumerCount: this.consumers.size,
102
+ queueLength: this.metrics.queueLength,
103
+ smoothedQueueLength: this.metrics.smoothedQueueLength,
104
+ targetConsumerCount: initialCount,
105
+ strategy: this.scalingStrategy.name,
106
+ });
107
+ }
108
+ async stop() {
109
+ if (!this.isEnabled) {
110
+ return;
111
+ }
112
+ this.isEnabled = false;
113
+ // Stop all consumers
114
+ Array.from(this.consumers.values()).forEach((consumer) => consumer.stop());
115
+ this.consumers.clear();
116
+ this.logger.log("Stopped dynamic consumer pool");
117
+ }
118
+ /**
119
+ * Updates the queue length metric and triggers scaling decisions
120
+ * Uses QueueMetricsProcessor for batching and EWMA smoothing
121
+ */
122
+ updateQueueLength(queueLength) {
123
+ // Track queue length update in metrics
124
+ this.promMetrics?.recordQueueLengthUpdate();
125
+ // Skip metrics tracking for static mode
126
+ if (this.scalingStrategy.name === "none") {
127
+ return;
128
+ }
129
+ // Add sample to metrics processor
130
+ this.metricsProcessor.addSample(queueLength);
131
+ // Check if we should process the current batch
132
+ if (this.metricsProcessor.shouldProcessBatch()) {
133
+ this.processMetricsBatch();
134
+ }
135
+ }
136
+ processMetricsBatch() {
137
+ // Process batch using the metrics processor
138
+ const result = this.metricsProcessor.processBatch();
139
+ if (!result) {
140
+ this.logger.debug("No queue length samples in batch window - skipping scaling evaluation");
141
+ return;
142
+ }
143
+ // Update metrics
144
+ this.metrics.queueLength = result.median;
145
+ this.metrics.smoothedQueueLength = result.smoothedValue;
146
+ this.metrics.lastQueueLengthUpdate = new Date();
147
+ this.logger.verbose("Queue metrics batch processed", {
148
+ samples: result.sampleCount,
149
+ median: result.median,
150
+ smoothed: result.smoothedValue,
151
+ currentConsumerCount: this.consumers.size,
152
+ });
153
+ // Make scaling decision
154
+ this.evaluateScaling();
155
+ }
156
+ evaluateScaling() {
157
+ if (!this.isEnabled) {
158
+ return;
159
+ }
160
+ // No scaling in static mode
161
+ if (this.scalingStrategy.name === "none") {
162
+ return;
163
+ }
164
+ // Skip if already scaling
165
+ if (this.isScaling) {
166
+ this.logger.debug("Scaling blocked - operation already in progress", {
167
+ currentCount: this.consumers.size,
168
+ targetCount: this.metrics.targetConsumerCount,
169
+ actualCount: this.consumers.size,
170
+ });
171
+ return;
172
+ }
173
+ const targetCount = this.calculateTargetConsumerCount();
174
+ if (targetCount === this.consumers.size) {
175
+ return;
176
+ }
177
+ const timeSinceLastScale = Date.now() - this.metrics.lastScaleTime.getTime();
178
+ // Add random jitter to avoid thundering herd when multiple replicas exist
179
+ // Works without needing to know replica index or count
180
+ const jitterMs = this.disableJitter ? 0 : Math.random() * 3000; // 0-3 seconds random jitter
181
+ // Check cooldown periods with jitter
182
+ if (targetCount > this.consumers.size) {
183
+ // Scale up
184
+ const effectiveCooldown = this.scaleUpCooldownMs + jitterMs;
185
+ if (timeSinceLastScale < effectiveCooldown) {
186
+ this.logger.debug("Scale up blocked by cooldown", {
187
+ timeSinceLastScale,
188
+ cooldownMs: effectiveCooldown,
189
+ jitterMs,
190
+ remainingMs: effectiveCooldown - timeSinceLastScale,
191
+ });
192
+ this.promMetrics?.recordCooldownApplied("up");
193
+ return;
194
+ }
195
+ }
196
+ else if (targetCount < this.consumers.size) {
197
+ // Scale down
198
+ const effectiveCooldown = this.scaleDownCooldownMs + jitterMs;
199
+ if (timeSinceLastScale < effectiveCooldown) {
200
+ this.logger.debug("Scale down blocked by cooldown", {
201
+ timeSinceLastScale,
202
+ cooldownMs: effectiveCooldown,
203
+ jitterMs,
204
+ remainingMs: effectiveCooldown - timeSinceLastScale,
205
+ });
206
+ this.promMetrics?.recordCooldownApplied("down");
207
+ return;
208
+ }
209
+ }
210
+ this.logger.info("Scaling consumer pool", {
211
+ from: this.consumers.size,
212
+ to: targetCount,
213
+ queueLength: this.metrics.queueLength,
214
+ smoothedQueueLength: this.metrics.smoothedQueueLength,
215
+ strategy: this.scalingStrategy,
216
+ });
217
+ // Set flag before scaling
218
+ this.isScaling = true;
219
+ // Update target metric for visibility
220
+ const previousTarget = this.metrics.targetConsumerCount;
221
+ this.metrics.targetConsumerCount = targetCount;
222
+ try {
223
+ this.scaleToTarget(targetCount);
224
+ }
225
+ catch (error) {
226
+ this.logger.error("Failed to scale consumer pool", { error });
227
+ // Revert target on failure
228
+ this.metrics.targetConsumerCount = previousTarget;
229
+ }
230
+ finally {
231
+ this.isScaling = false;
232
+ }
233
+ }
234
+ calculateTargetConsumerCount() {
235
+ return this.scalingStrategy.calculateTargetCount(this.consumers.size);
236
+ }
237
+ scaleToTarget(targetCount) {
238
+ const actualCurrentCount = this.consumers.size;
239
+ if (targetCount > actualCurrentCount) {
240
+ // Scale up
241
+ const count = targetCount - actualCurrentCount;
242
+ this.addConsumers(count);
243
+ this.promMetrics?.recordScalingOperation("up", this.scalingStrategy.name, count);
244
+ }
245
+ else if (targetCount < actualCurrentCount) {
246
+ // Scale down
247
+ const count = actualCurrentCount - targetCount;
248
+ this.removeConsumers(count);
249
+ this.promMetrics?.recordScalingOperation("down", this.scalingStrategy.name, count);
250
+ }
251
+ this.metrics.lastScaleTime = new Date();
252
+ // Update Prometheus state metrics
253
+ this.promMetrics?.updateState({
254
+ consumerCount: this.consumers.size,
255
+ queueLength: this.metrics.queueLength,
256
+ smoothedQueueLength: this.metrics.smoothedQueueLength,
257
+ targetConsumerCount: targetCount,
258
+ strategy: this.scalingStrategy.name,
259
+ });
260
+ }
261
+ addConsumers(count) {
262
+ const newConsumers = [];
263
+ for (let i = 0; i < count; i++) {
264
+ const consumerId = `consumer-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
265
+ const consumer = this.consumerFactory({
266
+ ...this.consumerOptions,
267
+ onDequeue: async (messages) => {
268
+ // Always update queue length, default to 0 for empty dequeues or missing value
269
+ this.updateQueueLength(messages[0]?.workerQueueLength ?? 0);
270
+ // Forward to the original handler
271
+ await this.consumerOptions.onDequeue(messages);
272
+ },
273
+ });
274
+ this.consumers.set(consumerId, consumer);
275
+ newConsumers.push(consumer);
276
+ }
277
+ // Start all new consumers
278
+ newConsumers.forEach((c) => c.start());
279
+ this.logger.info("Added consumers", {
280
+ count,
281
+ totalConsumers: this.consumers.size,
282
+ });
283
+ }
284
+ removeConsumers(count) {
285
+ const allIds = Array.from(this.consumers.keys());
286
+ const consumerIds = allIds.slice(-count); // Take from the end
287
+ const consumersToStop = [];
288
+ for (const id of consumerIds) {
289
+ const consumer = this.consumers.get(id);
290
+ if (consumer) {
291
+ consumersToStop.push(consumer);
292
+ this.consumers.delete(id);
293
+ }
294
+ }
295
+ // Stop removed consumers
296
+ consumersToStop.forEach((c) => c.stop());
297
+ this.logger.info("Removed consumers", {
298
+ count: consumersToStop.length,
299
+ totalConsumers: this.consumers.size,
300
+ });
301
+ }
302
+ /**
303
+ * Get current pool metrics for monitoring
304
+ */
305
+ getMetrics() {
306
+ return { ...this.metrics };
307
+ }
308
+ /**
309
+ * Get current number of consumers in the pool
310
+ */
311
+ get size() {
312
+ return this.consumers.size;
313
+ }
314
+ }
315
+ exports.RunQueueConsumerPool = RunQueueConsumerPool;
316
+ //# sourceMappingURL=consumerPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumerPool.js","sourceRoot":"","sources":["../../../../../src/v3/runEngineWorker/supervisor/consumerPool.ts"],"names":[],"mappings":"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"}