mongodash 2.6.0 → 2.8.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/README.md +45 -0
- package/dist/lib/ConcurrentRunner.js +47 -2
- package/dist/lib/ConcurrentRunner.js.map +1 -1
- package/dist/lib/createContinuousLock.js +23 -6
- package/dist/lib/createContinuousLock.js.map +1 -1
- package/dist/lib/cronTasks.js +119 -64
- package/dist/lib/cronTasks.js.map +1 -1
- package/dist/lib/index.js +11 -6
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/reactiveTasks/LeaderElector.js +21 -3
- package/dist/lib/reactiveTasks/LeaderElector.js.map +1 -1
- package/dist/lib/reactiveTasks/MetricsCollector.js +118 -39
- package/dist/lib/reactiveTasks/MetricsCollector.js.map +1 -1
- package/dist/lib/reactiveTasks/ReactiveTaskPlanner.js +66 -31
- package/dist/lib/reactiveTasks/ReactiveTaskPlanner.js.map +1 -1
- package/dist/lib/reactiveTasks/ReactiveTaskRepository.js +19 -1
- package/dist/lib/reactiveTasks/ReactiveTaskRepository.js.map +1 -1
- package/dist/lib/reactiveTasks/ReactiveTaskTypes.js +7 -1
- package/dist/lib/reactiveTasks/ReactiveTaskTypes.js.map +1 -1
- package/dist/lib/reactiveTasks/ReactiveTaskWorker.js +80 -5
- package/dist/lib/reactiveTasks/ReactiveTaskWorker.js.map +1 -1
- package/dist/lib/reactiveTasks/index.js +20 -13
- package/dist/lib/reactiveTasks/index.js.map +1 -1
- package/dist/lib/task-management/OperationalTaskController.js +1 -1
- package/dist/lib/task-management/OperationalTaskController.js.map +1 -1
- package/dist/lib/testing/assertNoReactiveTaskErrors.js +16 -12
- package/dist/lib/testing/assertNoReactiveTaskErrors.js.map +1 -1
- package/dist/lib/testing/index.js +2 -0
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/resolveWhitelistFilter.js +48 -0
- package/dist/lib/testing/resolveWhitelistFilter.js.map +1 -0
- package/dist/lib/testing/waitUntilReactiveTasksIdle.js +17 -46
- package/dist/lib/testing/waitUntilReactiveTasksIdle.js.map +1 -1
- package/dist/types/ConcurrentRunner.d.ts +16 -0
- package/dist/types/createContinuousLock.d.ts +17 -1
- package/dist/types/cronTasks.d.ts +17 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/reactiveTasks/LeaderElector.d.ts +15 -1
- package/dist/types/reactiveTasks/MetricsCollector.d.ts +19 -8
- package/dist/types/reactiveTasks/ReactiveTaskPlanner.d.ts +11 -0
- package/dist/types/reactiveTasks/ReactiveTaskRepository.d.ts +10 -1
- package/dist/types/reactiveTasks/ReactiveTaskTypes.d.ts +19 -0
- package/dist/types/reactiveTasks/index.d.ts +8 -2
- package/dist/types/testing/assertNoReactiveTaskErrors.d.ts +4 -4
- package/dist/types/testing/index.d.ts +2 -0
- package/dist/types/testing/resolveWhitelistFilter.d.ts +35 -0
- package/dist/types/testing/waitUntilReactiveTasksIdle.d.ts +7 -13
- package/docs/.vitepress/config.mts +9 -1
- package/docs/cron-tasks.md +130 -1
- package/docs/error-handling.md +156 -0
- package/docs/reactive-tasks/guides.md +1 -1
- package/docs/reactive-tasks/index.md +2 -2
- package/docs/reactive-tasks/monitoring.md +7 -0
- package/docs/reactive-tasks/testing.md +187 -0
- package/docs/testing.md +60 -94
- package/package.json +36 -24
- package/docs/.vitepress/cache/deps/_metadata.json +0 -31
- package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +0 -12824
- package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +0 -7
- package/docs/.vitepress/cache/deps/package.json +0 -3
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4505
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -9731
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
- package/docs/.vitepress/cache/deps/vue.js +0 -347
- package/docs/.vitepress/cache/deps/vue.js.map +0 -7
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LeaderElector = void 0;
|
|
4
|
-
const mongodb_1 = require("mongodb");
|
|
5
|
-
const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
|
|
6
4
|
const _debug = require("debug");
|
|
7
|
-
const
|
|
5
|
+
const mongodb_1 = require("mongodb");
|
|
8
6
|
const OnError_1 = require("../OnError");
|
|
7
|
+
const OnInfo_1 = require("../OnInfo");
|
|
8
|
+
const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
|
|
9
9
|
const debug = _debug('mongodash:reactiveTasks:leader');
|
|
10
10
|
/**
|
|
11
11
|
* Manages leader election among multiple scheduler instances.
|
|
@@ -52,8 +52,26 @@ class LeaderElector {
|
|
|
52
52
|
this._isLeader = false;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Give up leadership locally. The DB lock is NOT released - the next
|
|
57
|
+
* heartbeat will likely re-acquire it (unless another instance raced
|
|
58
|
+
* in). onLoseLeader is fired asynchronously so callers (e.g. the
|
|
59
|
+
* scheduler wiring this to a flush-failure path) get a clean
|
|
60
|
+
* planner.stop() before the next heartbeat restarts it, rather than
|
|
61
|
+
* starting a new planner on top of a live one.
|
|
62
|
+
*
|
|
63
|
+
* Note: the follow-up onBecomeLeader that fires after a forced loss
|
|
64
|
+
* looks identical to a real leader election and will increment
|
|
65
|
+
* reactive_tasks_leader_elections_total; see the event codes
|
|
66
|
+
* CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR and the flush-failure
|
|
67
|
+
* counter to disambiguate "real" flapping from restart-driven ones.
|
|
68
|
+
*/
|
|
55
69
|
forceLoseLeader() {
|
|
70
|
+
if (!this._isLeader)
|
|
71
|
+
return;
|
|
56
72
|
this._isLeader = false;
|
|
73
|
+
// Fire-and-forget: we are sync and the caller does not await.
|
|
74
|
+
this.callbacks.onLoseLeader().catch((err) => this.onError(err));
|
|
57
75
|
}
|
|
58
76
|
async runLeaderElectionLoop() {
|
|
59
77
|
const loop = async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeaderElector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/LeaderElector.ts"],"names":[],"mappings":";;;AAAA,qCAA+D;AAE/D,
|
|
1
|
+
{"version":3,"file":"LeaderElector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/LeaderElector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MetricsCollector = void 0;
|
|
4
|
-
const debug_1 = require("debug");
|
|
5
4
|
const OnError_1 = require("../OnError");
|
|
6
|
-
const OnInfo_1 = require("../OnInfo");
|
|
7
5
|
const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
|
|
8
|
-
const _debugLogger = (0, debug_1.default)('mongodash:reactiveTasks:metrics');
|
|
9
6
|
// ============================================================================
|
|
10
7
|
// Constants
|
|
11
8
|
// ============================================================================
|
|
@@ -16,9 +13,29 @@ const METRIC_NAMES = {
|
|
|
16
13
|
GLOBAL_LAG: 'reactive_tasks_global_lag_seconds',
|
|
17
14
|
CHANGE_STREAM_LAG: 'reactive_tasks_change_stream_lag_seconds',
|
|
18
15
|
LAST_RECONCILIATION: 'reactive_tasks_last_reconciliation_timestamp_seconds',
|
|
16
|
+
LEADER_ELECTIONS: 'reactive_tasks_leader_elections_total',
|
|
17
|
+
LOCK_LOST: 'reactive_tasks_lock_lost_total',
|
|
18
|
+
STREAM_ERRORS: 'reactive_tasks_stream_errors_total',
|
|
19
|
+
FLUSH_FAILURES: 'reactive_tasks_flush_failures_total',
|
|
19
20
|
};
|
|
20
21
|
const REGISTRY_DOC_ID = 'reactive_tasks_metrics_registry';
|
|
22
|
+
/**
|
|
23
|
+
* Instance entries older than this many push intervals are ignored
|
|
24
|
+
* during scrape aggregation and pruned by the leader's next push.
|
|
25
|
+
* Generous because an instance could be briefly unreachable but still
|
|
26
|
+
* alive; its counters are cumulative anyway.
|
|
27
|
+
*/
|
|
21
28
|
const STALE_THRESHOLD_MULTIPLIER = 20;
|
|
29
|
+
/**
|
|
30
|
+
* The leader-pushed `globalStats` blob is treated as stale sooner than
|
|
31
|
+
* per-instance local metrics: it reflects a point-in-time DB query
|
|
32
|
+
* (queue depth / lag) and is meaningless once the leader stops pushing.
|
|
33
|
+
* With `2 * pushIntervalMs`, a single missed push (e.g. slow DB on the
|
|
34
|
+
* leader) still serves the last known value; two missed pushes in a
|
|
35
|
+
* row stop serving the gauge. Cluster-mode follower gauges are thus
|
|
36
|
+
* bounded-stale at `GLOBAL_STATS_STALE_MULTIPLIER * pushIntervalMs`.
|
|
37
|
+
*/
|
|
38
|
+
const GLOBAL_STATS_STALE_MULTIPLIER = 2;
|
|
22
39
|
const DEFAULT_PUSH_INTERVAL = 60000;
|
|
23
40
|
const DEFAULT_OPTIONS = {
|
|
24
41
|
enabled: true,
|
|
@@ -38,13 +55,18 @@ const DEFAULT_OPTIONS = {
|
|
|
38
55
|
* - **local**: Returns metrics from THIS instance only.
|
|
39
56
|
* Use when Prometheus scrapes each pod individually (K8s Pod Monitors).
|
|
40
57
|
*
|
|
41
|
-
* Global stats (queue depth, lag
|
|
58
|
+
* Global stats (queue depth, lag, change-stream lag, reconciliation timestamp)
|
|
59
|
+
* are computed by the Leader. In `cluster` mode the Leader also pushes these
|
|
60
|
+
* values into the registry document on each push interval so a scrape that
|
|
61
|
+
* lands on a Follower still returns a complete metrics view - bounded-stale
|
|
62
|
+
* at `GLOBAL_STATS_STALE_MULTIPLIER * pushIntervalMs` (2x by default,
|
|
63
|
+
* i.e. a single missed push is tolerated).
|
|
42
64
|
*/
|
|
43
65
|
class MetricsCollector {
|
|
44
66
|
// ========================================================================
|
|
45
67
|
// Constructor
|
|
46
68
|
// ========================================================================
|
|
47
|
-
constructor(instanceId, registry, globalsCollection, leaderElector, options,
|
|
69
|
+
constructor(instanceId, registry, globalsCollection, leaderElector, options, onError = OnError_1.defaultOnError) {
|
|
48
70
|
this.queueMetricsPromise = null;
|
|
49
71
|
this.instanceId = instanceId;
|
|
50
72
|
this.registry = registry;
|
|
@@ -52,7 +74,6 @@ class MetricsCollector {
|
|
|
52
74
|
this.leaderElector = leaderElector;
|
|
53
75
|
this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
|
|
54
76
|
this.enabled = this.options.enabled;
|
|
55
|
-
this.onInfo = onInfo;
|
|
56
77
|
this.onError = onError;
|
|
57
78
|
if (this.enabled) {
|
|
58
79
|
this.initPrometheus();
|
|
@@ -78,6 +99,13 @@ class MetricsCollector {
|
|
|
78
99
|
initLocalMetrics() {
|
|
79
100
|
this.metricDuration = this.getOrCreateMetric(METRIC_NAMES.DURATION, this.promClientModule.Histogram, { help: 'Distribution of task execution durations.', labelNames: ['task_name', 'status'] }, this.localPromRegistry);
|
|
80
101
|
this.metricRetries = this.getOrCreateMetric(METRIC_NAMES.RETRIES, this.promClientModule.Counter, { help: 'Total number of retries attempted.', labelNames: ['task_name'] }, this.localPromRegistry);
|
|
102
|
+
this.metricLeaderElections = this.getOrCreateMetric(METRIC_NAMES.LEADER_ELECTIONS, this.promClientModule.Counter, { help: 'Number of times this instance became leader. A high rate indicates leader flapping.', labelNames: [] }, this.localPromRegistry);
|
|
103
|
+
this.metricLockLost = this.getOrCreateMetric(METRIC_NAMES.LOCK_LOST, this.promClientModule.Counter, {
|
|
104
|
+
help: 'Number of tasks whose execution lock was stolen by another worker (CAS detection). Indicates visibility-timeout pressure or a slow worker.',
|
|
105
|
+
labelNames: ['task_name'],
|
|
106
|
+
}, this.localPromRegistry);
|
|
107
|
+
this.metricStreamErrors = this.getOrCreateMetric(METRIC_NAMES.STREAM_ERRORS, this.promClientModule.Counter, { help: 'Number of change-stream errors observed by this instance.', labelNames: [] }, this.localPromRegistry);
|
|
108
|
+
this.metricFlushFailures = this.getOrCreateMetric(METRIC_NAMES.FLUSH_FAILURES, this.promClientModule.Counter, { help: 'Number of planner flush batches that failed and required a stream restart.', labelNames: [] }, this.localPromRegistry);
|
|
81
109
|
}
|
|
82
110
|
initGlobalStatsMetrics() {
|
|
83
111
|
const registry = this.globalStatsRegistry;
|
|
@@ -146,6 +174,26 @@ class MetricsCollector {
|
|
|
146
174
|
return;
|
|
147
175
|
this.metricRetries.inc({ task_name: task });
|
|
148
176
|
}
|
|
177
|
+
recordLeaderElection() {
|
|
178
|
+
if (!this.enabled || !this.metricLeaderElections)
|
|
179
|
+
return;
|
|
180
|
+
this.metricLeaderElections.inc();
|
|
181
|
+
}
|
|
182
|
+
recordLockLost(task) {
|
|
183
|
+
if (!this.enabled || !this.metricLockLost)
|
|
184
|
+
return;
|
|
185
|
+
this.metricLockLost.inc({ task_name: task });
|
|
186
|
+
}
|
|
187
|
+
recordStreamError() {
|
|
188
|
+
if (!this.enabled || !this.metricStreamErrors)
|
|
189
|
+
return;
|
|
190
|
+
this.metricStreamErrors.inc();
|
|
191
|
+
}
|
|
192
|
+
recordFlushFailure() {
|
|
193
|
+
if (!this.enabled || !this.metricFlushFailures)
|
|
194
|
+
return;
|
|
195
|
+
this.metricFlushFailures.inc();
|
|
196
|
+
}
|
|
149
197
|
// ========================================================================
|
|
150
198
|
// Public API: Scraping Metrics
|
|
151
199
|
// ========================================================================
|
|
@@ -160,21 +208,29 @@ class MetricsCollector {
|
|
|
160
208
|
/**
|
|
161
209
|
* Returns aggregated metrics from ALL instances.
|
|
162
210
|
* Fetches other instances' metrics from DB and merges with fresh local metrics.
|
|
163
|
-
*
|
|
211
|
+
* Global stats: leader computes fresh; followers read the leader's last
|
|
212
|
+
* push from the registry doc (so a scrape that hits a follower still
|
|
213
|
+
* returns queue depth / lag / reconciliation / stream-lag gauges).
|
|
164
214
|
*/
|
|
165
215
|
async getClusterMetrics() {
|
|
166
216
|
const allMetrics = [];
|
|
167
|
-
// 1. Fetch other instances' metrics
|
|
168
|
-
const
|
|
169
|
-
allMetrics.push(...
|
|
170
|
-
// 2. Add fresh local metrics
|
|
217
|
+
// 1. Fetch other instances' local metrics AND last-pushed global stats.
|
|
218
|
+
const { otherInstancesMetrics, pushedGlobalStats } = await this.fetchClusterStateFromDb();
|
|
219
|
+
allMetrics.push(...otherInstancesMetrics);
|
|
220
|
+
// 2. Add fresh local metrics from this instance.
|
|
171
221
|
const localMetrics = await this.getLocalMetricsAsJson();
|
|
172
222
|
if (localMetrics)
|
|
173
223
|
allMetrics.push(localMetrics);
|
|
174
|
-
// 3.
|
|
175
|
-
|
|
176
|
-
if (
|
|
177
|
-
|
|
224
|
+
// 3. Global stats: leader uses fresh on-the-fly values; followers
|
|
225
|
+
// fall back to what the current leader last pushed.
|
|
226
|
+
if (this.leaderElector.isLeader) {
|
|
227
|
+
const freshGlobalStats = await this.getGlobalStatsAsJson();
|
|
228
|
+
if (freshGlobalStats)
|
|
229
|
+
allMetrics.push(freshGlobalStats);
|
|
230
|
+
}
|
|
231
|
+
else if (pushedGlobalStats) {
|
|
232
|
+
allMetrics.push(pushedGlobalStats);
|
|
233
|
+
}
|
|
178
234
|
// 4. Aggregate all
|
|
179
235
|
if (allMetrics.length === 0)
|
|
180
236
|
return null;
|
|
@@ -200,11 +256,6 @@ class MetricsCollector {
|
|
|
200
256
|
await this.triggerGlobalStatsCollection();
|
|
201
257
|
registries.push(this.globalStatsRegistry);
|
|
202
258
|
}
|
|
203
|
-
// The following line was added as per instruction, but 'stats' is not defined in this scope.
|
|
204
|
-
// It also has a syntax error (missing closing brace).
|
|
205
|
-
// Assuming it was meant to be a placeholder or part of a different context,
|
|
206
|
-
// it's commented out to maintain syntactical correctness of the file.
|
|
207
|
-
// if (stats.statuses.find((s) => s._id === 'failed')) {return null;
|
|
208
259
|
if (registries.length === 0)
|
|
209
260
|
return null;
|
|
210
261
|
if (registries.length === 1)
|
|
@@ -214,26 +265,36 @@ class MetricsCollector {
|
|
|
214
265
|
// ========================================================================
|
|
215
266
|
// Metrics Data Fetching
|
|
216
267
|
// ========================================================================
|
|
217
|
-
async
|
|
268
|
+
async fetchClusterStateFromDb() {
|
|
218
269
|
try {
|
|
219
270
|
const registryDoc = (await this.globalsCollection.findOne({ _id: REGISTRY_DOC_ID }, { readPreference: this.options.readPreference }));
|
|
220
|
-
if (!
|
|
221
|
-
return [];
|
|
271
|
+
if (!registryDoc) {
|
|
272
|
+
return { otherInstancesMetrics: [], pushedGlobalStats: null };
|
|
222
273
|
}
|
|
223
274
|
const now = Date.now();
|
|
224
275
|
const staleThreshold = STALE_THRESHOLD_MULTIPLIER * this.options.pushIntervalMs;
|
|
225
|
-
|
|
226
|
-
.
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
276
|
+
const otherInstancesMetrics = Array.isArray(registryDoc.instances)
|
|
277
|
+
? registryDoc.instances
|
|
278
|
+
.filter((inst) => {
|
|
279
|
+
const age = now - new Date(inst.lastSeen).getTime();
|
|
280
|
+
const isStale = age > staleThreshold;
|
|
281
|
+
const isSelf = inst.id === this.instanceId;
|
|
282
|
+
return !isStale && !isSelf && Array.isArray(inst.metrics);
|
|
283
|
+
})
|
|
284
|
+
.map((inst) => inst.metrics)
|
|
285
|
+
: [];
|
|
286
|
+
let pushedGlobalStats = null;
|
|
287
|
+
if (registryDoc.globalStats && Array.isArray(registryDoc.globalStats.metrics)) {
|
|
288
|
+
const age = now - new Date(registryDoc.globalStats.updatedAt).getTime();
|
|
289
|
+
if (age <= GLOBAL_STATS_STALE_MULTIPLIER * this.options.pushIntervalMs) {
|
|
290
|
+
pushedGlobalStats = registryDoc.globalStats.metrics;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return { otherInstancesMetrics, pushedGlobalStats };
|
|
233
294
|
}
|
|
234
295
|
catch (e) {
|
|
235
296
|
this.onError(e);
|
|
236
|
-
return [];
|
|
297
|
+
return { otherInstancesMetrics: [], pushedGlobalStats: null };
|
|
237
298
|
}
|
|
238
299
|
}
|
|
239
300
|
async getLocalMetricsAsJson() {
|
|
@@ -275,32 +336,50 @@ class MetricsCollector {
|
|
|
275
336
|
if (!this.localPromRegistry)
|
|
276
337
|
return;
|
|
277
338
|
try {
|
|
278
|
-
const
|
|
279
|
-
|
|
339
|
+
const localMetrics = await this.localPromRegistry.getMetricsAsJSON();
|
|
340
|
+
// Leader bundles the freshly computed global stats into the
|
|
341
|
+
// registry document so follower-served scrapes in cluster
|
|
342
|
+
// mode return a complete metrics view. Non-leaders write
|
|
343
|
+
// only their local metrics.
|
|
344
|
+
const globalStatsToPush = this.leaderElector.isLeader ? await this.getGlobalStatsAsJson() : null;
|
|
345
|
+
await this.publishMetricsToGlobalRegistry(localMetrics, globalStatsToPush);
|
|
280
346
|
}
|
|
281
347
|
catch (e) {
|
|
282
348
|
this.onError(e);
|
|
283
349
|
}
|
|
284
350
|
}
|
|
285
|
-
async publishMetricsToGlobalRegistry(
|
|
351
|
+
async publishMetricsToGlobalRegistry(localMetrics, globalStats) {
|
|
286
352
|
try {
|
|
287
353
|
const threshold = STALE_THRESHOLD_MULTIPLIER * this.options.pushIntervalMs;
|
|
354
|
+
// Re-check leadership immediately before emitting the pipeline
|
|
355
|
+
// so a transition that happened during `getGlobalStatsAsJson()`
|
|
356
|
+
// doesn't let a former leader overwrite the shared globalStats
|
|
357
|
+
// blob after stepping down.
|
|
358
|
+
const stillLeader = this.leaderElector.isLeader;
|
|
288
359
|
// Leader cleans up stale instances; followers only update self
|
|
289
|
-
const keepCondition =
|
|
360
|
+
const keepCondition = stillLeader
|
|
290
361
|
? { $and: [{ $ne: ['$$inst.id', this.instanceId] }, { $lt: [{ $subtract: ['$$NOW', '$$inst.lastSeen'] }, threshold] }] }
|
|
291
362
|
: { $ne: ['$$inst.id', this.instanceId] };
|
|
292
|
-
|
|
363
|
+
const pipeline = [
|
|
293
364
|
{
|
|
294
365
|
$set: {
|
|
295
366
|
instances: {
|
|
296
367
|
$concatArrays: [
|
|
297
368
|
{ $filter: { input: { $ifNull: ['$instances', []] }, as: 'inst', cond: keepCondition } },
|
|
298
|
-
[{ id: this.instanceId, lastSeen: '$$NOW', metrics }],
|
|
369
|
+
[{ id: this.instanceId, lastSeen: '$$NOW', metrics: localMetrics }],
|
|
299
370
|
],
|
|
300
371
|
},
|
|
301
372
|
},
|
|
302
373
|
},
|
|
303
|
-
]
|
|
374
|
+
];
|
|
375
|
+
if (globalStats && stillLeader) {
|
|
376
|
+
pipeline.push({
|
|
377
|
+
$set: {
|
|
378
|
+
globalStats: { updatedAt: '$$NOW', leaderId: this.instanceId, metrics: globalStats },
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
await this.globalsCollection.updateOne({ _id: REGISTRY_DOC_ID }, pipeline, { upsert: true });
|
|
304
383
|
}
|
|
305
384
|
catch (e) {
|
|
306
385
|
this.onError(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/MetricsCollector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/MetricsCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ class ReactiveTaskPlanner {
|
|
|
37
37
|
this.batchFlushTimer = null;
|
|
38
38
|
this.batchFirstEventTime = null;
|
|
39
39
|
this.isFlushing = false;
|
|
40
|
+
this.lastFlushFailed = false;
|
|
40
41
|
this.metaDocId = ReactiveTaskTypes_1.REACTIVE_TASK_META_DOC_ID;
|
|
41
42
|
this.lastClusterTime = null;
|
|
42
43
|
this.isStopping = false;
|
|
@@ -88,8 +89,10 @@ class ReactiveTaskPlanner {
|
|
|
88
89
|
return this.taskBatch.size === 0 && !this.isFlushing;
|
|
89
90
|
}
|
|
90
91
|
async onHeartbeat() {
|
|
91
|
-
// Save resume token if stream is running and idle
|
|
92
|
-
if
|
|
92
|
+
// Save resume token if stream is running and idle.
|
|
93
|
+
// Skip if the previous flush failed: advancing the token would cause
|
|
94
|
+
// the un-planned events to be lost forever on resume.
|
|
95
|
+
if (this.changeStream && this.isEmpty && !this.lastFlushFailed) {
|
|
93
96
|
await this.saveResumeToken(this.changeStream.resumeToken, this.lastClusterTime ? new Date(this.lastClusterTime * 1000) : undefined);
|
|
94
97
|
}
|
|
95
98
|
// Periodic cleanup of orphaned tasks
|
|
@@ -142,6 +145,8 @@ class ReactiveTaskPlanner {
|
|
|
142
145
|
debug(`[ReactiveTaskPlanner] Watching database: ${dbToWatch.databaseName}`);
|
|
143
146
|
const stream = dbToWatch.watch(pipeline, streamOptions);
|
|
144
147
|
this.changeStream = stream;
|
|
148
|
+
// Stream started successfully — safe to advance resume tokens again.
|
|
149
|
+
this.lastFlushFailed = false;
|
|
145
150
|
stream.on('change', (change) => {
|
|
146
151
|
this.enqueueTaskChange(change);
|
|
147
152
|
});
|
|
@@ -259,6 +264,7 @@ class ReactiveTaskPlanner {
|
|
|
259
264
|
}
|
|
260
265
|
}
|
|
261
266
|
async flushTaskBatch() {
|
|
267
|
+
var _a, _b, _c, _d;
|
|
262
268
|
if (this.batchFlushTimer) {
|
|
263
269
|
clearTimeout(this.batchFlushTimer);
|
|
264
270
|
this.batchFlushTimer = null;
|
|
@@ -275,14 +281,24 @@ class ReactiveTaskPlanner {
|
|
|
275
281
|
const { idsByCollection, deletedIdsByTask } = this.groupEventsByCollection(events);
|
|
276
282
|
await this.processDeletions(deletedIdsByTask);
|
|
277
283
|
await this.executeUpsertOperations(idsByCollection);
|
|
278
|
-
|
|
284
|
+
// Do not advance the token past events that could not be planned in a
|
|
285
|
+
// previous batch. lastFlushFailed is cleared only when the stream restarts
|
|
286
|
+
// (startChangeStream), so it stays true across any subsequent successful
|
|
287
|
+
// flushes that run before the restart completes.
|
|
288
|
+
if (lastToken && !this.lastFlushFailed) {
|
|
279
289
|
await this.saveResumeToken(lastToken, lastClusterTime);
|
|
280
290
|
}
|
|
281
291
|
}
|
|
282
292
|
catch (error) {
|
|
283
293
|
this.onError(error);
|
|
284
|
-
//
|
|
285
|
-
// The
|
|
294
|
+
// Mark as failed so heartbeat and future flushes do not advance the
|
|
295
|
+
// resume token past events we could not plan. The flag is cleared only
|
|
296
|
+
// when the change stream is restarted (startChangeStream).
|
|
297
|
+
this.lastFlushFailed = true;
|
|
298
|
+
(_b = (_a = this.callbacks).onFlushFailure) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
299
|
+
// Use onRequestRestart (not onStreamError) so flush failures don't
|
|
300
|
+
// pollute the stream-error metric.
|
|
301
|
+
(_d = (_c = this.callbacks).onRequestRestart) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
286
302
|
}
|
|
287
303
|
finally {
|
|
288
304
|
this.isFlushing = false;
|
|
@@ -322,37 +338,56 @@ class ReactiveTaskPlanner {
|
|
|
322
338
|
return { idsByCollection, deletedIdsByTask };
|
|
323
339
|
}
|
|
324
340
|
async processDeletions(deletedIdsByTask) {
|
|
325
|
-
if (deletedIdsByTask.size
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
341
|
+
if (deletedIdsByTask.size === 0)
|
|
342
|
+
return;
|
|
343
|
+
const entries = Array.from(deletedIdsByTask.entries());
|
|
344
|
+
const labels = entries.map(([taskName]) => `task=${taskName}`);
|
|
345
|
+
const results = await Promise.allSettled(entries.map(async ([taskName, ids]) => {
|
|
346
|
+
if (ids.size === 0)
|
|
347
|
+
return;
|
|
348
|
+
const taskDef = this.registry.getTask(taskName);
|
|
349
|
+
if (taskDef) {
|
|
350
|
+
// We use deleteOrphanedTasks but limit it to the source IDs we just saw deleted.
|
|
351
|
+
// This reuses the EXACT same logic (including keepFor checks) as the background cleaner.
|
|
352
|
+
await taskDef.repository.deleteOrphanedTasks(taskName, taskDef.sourceCollection.collectionName, taskDef.filter || {}, taskDef.cleanupPolicyParsed, () => false, // shouldStop: immediate execution, no need to stop
|
|
353
|
+
Array.from(ids));
|
|
354
|
+
}
|
|
355
|
+
}));
|
|
356
|
+
this.throwOnAnyRejection(results, 'processDeletions', labels);
|
|
338
357
|
}
|
|
339
358
|
async executeUpsertOperations(idsByCollection) {
|
|
340
|
-
if (idsByCollection.size
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
359
|
+
if (idsByCollection.size === 0)
|
|
360
|
+
return;
|
|
361
|
+
const entries = Array.from(idsByCollection.entries());
|
|
362
|
+
const labels = entries.map(([collectionName]) => `collection=${collectionName}`);
|
|
363
|
+
const results = await Promise.allSettled(entries.map(async ([collectionName, ids]) => {
|
|
364
|
+
if (ids.size === 0)
|
|
365
|
+
return;
|
|
366
|
+
await this.ops.executePlanningPipeline(collectionName, Array.from(ids));
|
|
367
|
+
}));
|
|
368
|
+
this.throwOnAnyRejection(results, 'executeUpsertOperations', labels);
|
|
369
|
+
}
|
|
370
|
+
throwOnAnyRejection(results, context, labels = []) {
|
|
371
|
+
if (results.every((r) => r.status !== 'rejected'))
|
|
372
|
+
return;
|
|
373
|
+
// Build a single aggregated error so the caller (flushTaskBatch) reports it once.
|
|
374
|
+
// Calling onError here for each failure would duplicate the report since flushTaskBatch
|
|
375
|
+
// also calls onError on the thrown error. We zip each result with its label (taskName /
|
|
376
|
+
// collectionName) so operators can immediately identify the failing pipeline or delete.
|
|
377
|
+
const failures = [];
|
|
378
|
+
for (let i = 0; i < results.length; i += 1) {
|
|
379
|
+
const r = results[i];
|
|
380
|
+
if (r.status !== 'rejected')
|
|
381
|
+
continue;
|
|
382
|
+
const msg = r.reason instanceof Error ? r.reason.message : String(r.reason);
|
|
383
|
+
const label = labels[i] ? ` (${labels[i]})` : '';
|
|
384
|
+
failures.push(`[${failures.length + 1}]${label} ${msg}`);
|
|
351
385
|
}
|
|
386
|
+
throw new Error(`${context}: ${failures.length} of ${results.length} operation(s) failed. Errors: ${failures.join('; ')}`);
|
|
352
387
|
}
|
|
353
388
|
async handleStreamError(error) {
|
|
354
389
|
if (error.code === 280) {
|
|
355
|
-
this.onError(new Error(`Critical error: Oplog history lost(ChangeStreamHistoryLost).Resetting Resume Token.Original error: ${error.message}
|
|
390
|
+
this.onError(new Error(`Critical error: Oplog history lost (ChangeStreamHistoryLost). Resetting Resume Token. Original error: ${error.message}`));
|
|
356
391
|
await this.globalsCollection.updateOne({ _id: this.metaDocId }, { $unset: { 'streamState.resumeToken': '', reconciliation: '' } });
|
|
357
392
|
this.onInfo({
|
|
358
393
|
message: `Oplog lost, triggering reconciliation...`,
|
|
@@ -367,7 +402,7 @@ class ReactiveTaskPlanner {
|
|
|
367
402
|
}
|
|
368
403
|
else {
|
|
369
404
|
this.onInfo({
|
|
370
|
-
message: `Change Stream error: ${error.message}
|
|
405
|
+
message: `Change Stream error: ${error.message}`,
|
|
371
406
|
code: ReactiveTaskTypes_1.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR,
|
|
372
407
|
error: error.message,
|
|
373
408
|
});
|