mongodash 2.4.6 → 2.5.1
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/lib/ConcurrentRunner.js +23 -0
- package/dist/lib/ConcurrentRunner.js.map +1 -1
- package/dist/lib/index.js +15 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/reactiveTasks/ReactiveTaskOps.js +12 -4
- package/dist/lib/reactiveTasks/ReactiveTaskOps.js.map +1 -1
- package/dist/lib/reactiveTasks/ReactiveTaskPlanner.js +7 -0
- package/dist/lib/reactiveTasks/ReactiveTaskPlanner.js.map +1 -1
- package/dist/lib/reactiveTasks/index.js +57 -0
- package/dist/lib/reactiveTasks/index.js.map +1 -1
- package/dist/lib/testing/assertNoReactiveTaskErrors.js +79 -0
- package/dist/lib/testing/assertNoReactiveTaskErrors.js.map +1 -0
- package/dist/lib/testing/configureForTesting.js +25 -0
- package/dist/lib/testing/configureForTesting.js.map +1 -0
- package/dist/lib/testing/index.js +20 -0
- package/dist/lib/testing/index.js.map +1 -0
- package/dist/lib/testing/waitUntil.js +77 -0
- package/dist/lib/testing/waitUntil.js.map +1 -0
- package/dist/lib/testing/waitUntilReactiveTasksIdle.js +70 -0
- package/dist/lib/testing/waitUntilReactiveTasksIdle.js.map +1 -0
- package/dist/types/ConcurrentRunner.d.ts +3 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/reactiveTasks/ReactiveTaskOps.d.ts +3 -0
- package/dist/types/reactiveTasks/ReactiveTaskPlanner.d.ts +2 -0
- package/dist/types/reactiveTasks/index.d.ts +17 -0
- package/dist/types/testing/assertNoReactiveTaskErrors.d.ts +30 -0
- package/dist/types/testing/configureForTesting.d.ts +26 -0
- package/dist/types/testing/index.d.ts +3 -0
- package/dist/types/testing/waitUntil.d.ts +25 -0
- package/dist/types/testing/waitUntilReactiveTasksIdle.d.ts +11 -0
- package/docs/index.md +3 -0
- package/docs/reactive-tasks/guides.md +8 -0
- package/docs/reactive-tasks/index.md +1 -0
- package/docs/testing.md +123 -0
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ class ConcurrentRunner {
|
|
|
12
12
|
this.workers = [];
|
|
13
13
|
this.wakeUpSignals = [];
|
|
14
14
|
this.tryRunATask = null;
|
|
15
|
+
this._activeWorkerCount = 0;
|
|
15
16
|
this.options = options;
|
|
16
17
|
}
|
|
17
18
|
registerSource(name, options) {
|
|
@@ -58,6 +59,21 @@ class ConcurrentRunner {
|
|
|
58
59
|
debug(`SpeedUp called for ${sourceName}`);
|
|
59
60
|
}
|
|
60
61
|
}
|
|
62
|
+
updateAllSources(options) {
|
|
63
|
+
for (const state of this.sources.values()) {
|
|
64
|
+
state.options = Object.assign(Object.assign({}, state.options), options);
|
|
65
|
+
// If we are lowering the minPollMs, we should probably also lower the current backoff
|
|
66
|
+
// to respect the new settings immediately.
|
|
67
|
+
if (options.minPollMs !== undefined && state.currentBackoff > options.minPollMs) {
|
|
68
|
+
state.currentBackoff = options.minPollMs;
|
|
69
|
+
}
|
|
70
|
+
if (options.maxPollMs !== undefined && state.currentBackoff > options.maxPollMs) {
|
|
71
|
+
state.currentBackoff = options.maxPollMs;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Wake up everyone to pick up new schedule/backoff
|
|
75
|
+
this.wakeUpAllWorkers();
|
|
76
|
+
}
|
|
61
77
|
async runWorker() {
|
|
62
78
|
while (this.isRunning) {
|
|
63
79
|
const now = Date.now();
|
|
@@ -78,11 +94,15 @@ class ConcurrentRunner {
|
|
|
78
94
|
// which will reset the backoff
|
|
79
95
|
this.prolongNextRun(state.name);
|
|
80
96
|
try {
|
|
97
|
+
this._activeWorkerCount++;
|
|
81
98
|
await this.tryRunATask(state.name);
|
|
82
99
|
}
|
|
83
100
|
catch (e) {
|
|
84
101
|
this.onError(e);
|
|
85
102
|
}
|
|
103
|
+
finally {
|
|
104
|
+
this._activeWorkerCount--;
|
|
105
|
+
}
|
|
86
106
|
}
|
|
87
107
|
else {
|
|
88
108
|
// No source is ready to run. Sleep until the nearest scheduled time.
|
|
@@ -136,6 +156,9 @@ class ConcurrentRunner {
|
|
|
136
156
|
}
|
|
137
157
|
}
|
|
138
158
|
}
|
|
159
|
+
get activeWorkers() {
|
|
160
|
+
return this._activeWorkerCount;
|
|
161
|
+
}
|
|
139
162
|
}
|
|
140
163
|
exports.ConcurrentRunner = ConcurrentRunner;
|
|
141
164
|
//# sourceMappingURL=ConcurrentRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentRunner.js","sourceRoot":"","sources":["../../src/ConcurrentRunner.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAChC,uCAAoD;AAEpD,MAAM,KAAK,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAqBnD,MAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"ConcurrentRunner.js","sourceRoot":"","sources":["../../src/ConcurrentRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/index.js
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
17
|
exports.withTransaction = exports.registerPostCommitHook = exports.withLock = exports.LockAlreadyAcquiredError = exports.isLockAlreadyAcquiredError = exports.serveDashboard = exports.OperationalTaskController = exports._scheduler = exports.TaskConditionFailedError = exports.stopReactiveTasks = exports.startReactiveTasks = exports.retryReactiveTasks = exports.reactiveTask = exports.getReactiveTasks = exports.getPrometheusMetrics = exports.countReactiveTasks = exports.CODE_REACTIVE_TASK_STARTED = exports.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR = exports.CODE_REACTIVE_TASK_PLANNER_STOPPED = exports.CODE_REACTIVE_TASK_PLANNER_STARTED = exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED = exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED = exports.CODE_REACTIVE_TASK_LEADER_LOCK_LOST = exports.CODE_REACTIVE_TASK_FINISHED = exports.CODE_REACTIVE_TASK_FAILED = exports.processInBatches = exports.getMongoClient = exports.getCollection = exports.triggerCronTask = exports.stopCronTasks = exports.startCronTasks = exports.scheduleCronTaskImmediately = exports.runCronTask = exports.getCronTasksList = exports.cronTask = exports.CODE_CRON_TASK_STARTED = exports.CODE_CRON_TASK_SCHEDULED = exports.CODE_CRON_TASK_FINISHED = exports.CODE_CRON_TASK_FAILED = void 0;
|
|
4
18
|
exports.init = init;
|
|
@@ -50,6 +64,7 @@ Object.defineProperty(exports, "_scheduler", { enumerable: true, get: function (
|
|
|
50
64
|
var task_management_1 = require("./task-management");
|
|
51
65
|
Object.defineProperty(exports, "OperationalTaskController", { enumerable: true, get: function () { return task_management_1.OperationalTaskController; } });
|
|
52
66
|
Object.defineProperty(exports, "serveDashboard", { enumerable: true, get: function () { return task_management_1.serveDashboard; } });
|
|
67
|
+
__exportStar(require("./testing"), exports);
|
|
53
68
|
var withLock_2 = require("./withLock");
|
|
54
69
|
Object.defineProperty(exports, "isLockAlreadyAcquiredError", { enumerable: true, get: function () { return withLock_2.isLockAlreadyAcquiredError; } });
|
|
55
70
|
Object.defineProperty(exports, "LockAlreadyAcquiredError", { enumerable: true, get: function () { return withLock_2.LockAlreadyAcquiredError; } });
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiFA,oBA6CC;AA7HD,2CAAyF;AACzF,mDAAiJ;AACjJ,qDAAqG;AAErG,+CAAmD;AACnD,uCAAsE;AACtE,qCAAkE;AAClE,mDAAqG;AACrG,yCAAoD;AACpD,yCAmBqB;AAlBjB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,qHAAA,wBAAwB,OAAA;AACxB,mHAAA,sBAAsB,OAAA;AAEtB,qGAAA,QAAQ,OAAA;AAIR,6GAAA,gBAAgB,OAAA;AAEhB,wGAAA,WAAW,OAAA;AACX,wHAAA,2BAA2B,OAAA;AAC3B,2GAAA,cAAc,OAAA;AACd,0GAAA,aAAa,OAAA;AAGb,4GAAA,eAAe,OAAA;AAEnB,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,uDAAuG;AAA9F,oHAAA,gBAAgB,OAAA;AACzB,iDAqByB;AApBrB,0HAAA,yBAAyB,OAAA;AACzB,4HAAA,2BAA2B,OAAA;AAC3B,oIAAA,mCAAmC,OAAA;AACnC,mJAAA,kDAAkD,OAAA;AAClD,kJAAA,iDAAiD,OAAA;AACjD,mIAAA,kCAAkC,OAAA;AAClC,mIAAA,kCAAkC,OAAA;AAClC,wIAAA,uCAAuC,OAAA;AACvC,2HAAA,0BAA0B,OAAA;AAC1B,mHAAA,kBAAkB,OAAA;AAClB,qHAAA,oBAAoB,OAAA;AACpB,iHAAA,gBAAgB,OAAA;AAChB,6GAAA,YAAY,OAAA;AAGZ,mHAAA,kBAAkB,OAAA;AAClB,mHAAA,kBAAkB,OAAA;AAClB,kHAAA,iBAAiB,OAAA;AACjB,yHAAA,wBAAwB,OAAA;AACxB,2GAAA,UAAU,OAAA;AAEd,qDAA8E;AAArE,4HAAA,yBAAyB,OAAA;AAAE,iHAAA,cAAc,OAAA;AAClD,4CAA0B;AAC1B,uCAA6G;AAApG,sHAAA,0BAA0B,OAAA;AAAE,oHAAA,wBAAwB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AACvE,qDAA4F;AAAnE,yHAAA,sBAAsB,OAAA;AAAE,kHAAA,eAAe,OAAA;AAEhE,IAAI,UAAU,GAAG,KAAK,CAAC;AAoBhB,KAAK,UAAU,IAAI,CAAC,OAAoB;;IAC3C,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC5D,CAAC;IACD,UAAU,GAAG,IAAI,CAAC;IAElB,gEAAgE;IAChE,kDAAkD;IAClD,IAAA,0BAAgB,EAAC,OAAO,CAAC,OAAO,IAAI,wBAAc,CAAC,CAAC;IACpD,IAAA,wBAAe,EAAC,OAAO,CAAC,MAAM,IAAI,sBAAa,CAAC,CAAC;IAEjD,0EAA0E;IAC1E,qEAAqE;IACrE,gFAAgF;IAChF,kDAAkD;IAElD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,IAAA,qBAAe,EAAC,OAAO,CAAC,CAAC;IAE/B,IAAA,qBAAkB,GAAE,CAAC,CAAC,qBAAqB;IAC3C,IAAA,oBAAiB,EAAC,EAAE,iBAAiB,EAAE,MAAA,OAAO,CAAC,iBAAiB,mCAAI,IAAI,EAAE,CAAC,CAAC;IAE5E,IAAI,iBAAoC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,OAAO,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QAC9E,iBAAiB,GAAG,IAAA,6BAAa,EAAC,MAAA,OAAO,CAAC,iBAAiB,mCAAI,oBAAoB,CAAiC,CAAC;IACzH,CAAC;SAAM,CAAC;QACJ,iBAAiB,GAAG,OAAO,CAAC,iBAAiD,CAAC;IAClF,CAAC;IAED,IAAA,gBAAa,GAAE,CAAC;IAEhB,IAAA,gBAAa,EAAC;QACV,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,mCAAI,IAAI;QAC1C,2BAA2B,EAAE,MAAA,OAAO,CAAC,2BAA2B,mCAAI,EAAE;QACtE,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,UAAU;QACpD,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KACzD,CAAC,CAAC;IACH,IAAA,oBAAiB,kCACV,OAAO,KACV,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,MAAA,OAAO,CAAC,kBAAkB,mCAAI,UAAU,IAC9D,CAAC;IAEH,IAAA,gCAAkB,GAAE,CAAC;AACzB,CAAC"}
|
|
@@ -18,6 +18,12 @@ class ReactiveTaskOps {
|
|
|
18
18
|
this.registry = registry;
|
|
19
19
|
this.onTaskPlanned = onTaskPlanned;
|
|
20
20
|
}
|
|
21
|
+
setForceDebounce(debounceMs) {
|
|
22
|
+
this._forceDebounceMs = debounceMs;
|
|
23
|
+
}
|
|
24
|
+
get forceDebounceMs() {
|
|
25
|
+
return this._forceDebounceMs;
|
|
26
|
+
}
|
|
21
27
|
async executePlanningPipeline(collectionName, sourceDocIds, allowedTaskNames) {
|
|
22
28
|
debug(`executePlanningPipeline called for ${collectionName} with ${sourceDocIds.length} ids`);
|
|
23
29
|
const entry = this.registry.getEntry(collectionName);
|
|
@@ -28,7 +34,7 @@ class ReactiveTaskOps {
|
|
|
28
34
|
const matchFilter = { _id: { $in: sourceDocIds } };
|
|
29
35
|
const pipeline = this.generatePlanningPipeline(entry, matchFilter, allowedTaskNames);
|
|
30
36
|
if (pipeline.length === 0) {
|
|
31
|
-
debug(`Pipeline empty for ${collectionName}
|
|
37
|
+
debug(`Pipeline empty for ${collectionName}(allowedTasks: ${allowedTaskNames ? Array.from(allowedTaskNames).join(',') : 'all'})`);
|
|
32
38
|
return;
|
|
33
39
|
}
|
|
34
40
|
debug(`Executing pipeline for ${collectionName} handling ${sourceDocIds.length} docs`);
|
|
@@ -39,11 +45,13 @@ class ReactiveTaskOps {
|
|
|
39
45
|
for (const task of entry.tasks.values()) {
|
|
40
46
|
if (allowedTaskNames && !allowedTaskNames.has(task.task))
|
|
41
47
|
continue;
|
|
42
|
-
|
|
48
|
+
// Use effective debounce
|
|
49
|
+
const effectiveDebounce = this.forceDebounceMs !== undefined ? this.forceDebounceMs : task.debounceMs;
|
|
50
|
+
this.onTaskPlanned(task.tasksCollection.collectionName, effectiveDebounce);
|
|
43
51
|
}
|
|
44
52
|
}
|
|
45
53
|
catch (error) {
|
|
46
|
-
debug(`Error executing pipeline for ${collectionName}
|
|
54
|
+
debug(`Error executing pipeline for ${collectionName}: `, error);
|
|
47
55
|
throw error;
|
|
48
56
|
}
|
|
49
57
|
}
|
|
@@ -67,7 +75,7 @@ class ReactiveTaskOps {
|
|
|
67
75
|
task: task.task,
|
|
68
76
|
matches: task.filter || true,
|
|
69
77
|
watchedValues: (0, compileWatchProjection_1.compileWatchProjection)(task.watchProjection),
|
|
70
|
-
debounceMs: task.debounceMs,
|
|
78
|
+
debounceMs: this.forceDebounceMs !== undefined ? this.forceDebounceMs : task.debounceMs,
|
|
71
79
|
resetRetriesOnDataChange: task.retryStrategy.policy.resetRetriesOnDataChange,
|
|
72
80
|
})),
|
|
73
81
|
as: 't',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveTaskOps.js","sourceRoot":"","sources":["../../../src/reactiveTasks/ReactiveTaskOps.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAEhC,qEAAkE;AAGlE,MAAM,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAa,eAAe;IACxB,YACY,QAA8B,EAC9B,aAAwE;QADxE,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,kBAAa,GAAb,aAAa,CAA2D;IACjF,CAAC;
|
|
1
|
+
{"version":3,"file":"ReactiveTaskOps.js","sourceRoot":"","sources":["../../../src/reactiveTasks/ReactiveTaskOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,13 @@ class ReactiveTaskPlanner {
|
|
|
43
43
|
this.ops = new ReactiveTaskOps_1.ReactiveTaskOps(registry, callbacks.onTaskPlanned);
|
|
44
44
|
this.reconciler = new ReactiveTaskReconciler_1.ReactiveTaskReconciler(instanceId, globalsCollection, registry, this.ops, onInfo, internalOptions);
|
|
45
45
|
}
|
|
46
|
+
updateOptions(options) {
|
|
47
|
+
this.internalOptions = Object.assign(Object.assign({}, this.internalOptions), options);
|
|
48
|
+
// If batch interval changes, we might want to reset timers, but it's fine for now (next batch will pick it up)
|
|
49
|
+
}
|
|
50
|
+
setForceDebounce(debounceMs) {
|
|
51
|
+
this.ops.setForceDebounce(debounceMs);
|
|
52
|
+
}
|
|
46
53
|
async start() {
|
|
47
54
|
this.onInfo({
|
|
48
55
|
message: `Reactive task planner started.`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveTaskPlanner.js","sourceRoot":"","sources":["../../../src/reactiveTasks/ReactiveTaskPlanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReactiveTaskPlanner.js","sourceRoot":"","sources":["../../../src/reactiveTasks/ReactiveTaskPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ exports.countReactiveTasks = countReactiveTasks;
|
|
|
22
22
|
exports.retryReactiveTasks = retryReactiveTasks;
|
|
23
23
|
const _debug = require("debug");
|
|
24
24
|
const ConcurrentRunner_1 = require("../ConcurrentRunner");
|
|
25
|
+
const getMongoClient_1 = require("../getMongoClient");
|
|
25
26
|
const initPromise_1 = require("../initPromise");
|
|
26
27
|
const parseInterval_1 = require("../parseInterval");
|
|
27
28
|
const LeaderElector_1 = require("./LeaderElector");
|
|
@@ -116,6 +117,48 @@ class ReactiveTaskScheduler {
|
|
|
116
117
|
this.registry.setCallbacks(OnInfo_1.onInfo, OnError_1.onError);
|
|
117
118
|
debug(`[Scheduler ${this.instanceId}] Configured.`);
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Updates internal options (for testing purposes).
|
|
122
|
+
*/
|
|
123
|
+
updateInternalOptions(options) {
|
|
124
|
+
this.internalOptions = Object.assign(Object.assign({}, this.internalOptions), options);
|
|
125
|
+
// If runner exists, update its config
|
|
126
|
+
if (this.concurrentRunner) {
|
|
127
|
+
this.concurrentRunner.updateAllSources({
|
|
128
|
+
minPollMs: options.minPollMs,
|
|
129
|
+
maxPollMs: options.maxPollMs,
|
|
130
|
+
jitterMs: options.jitterMs,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Planner options (batching) are harder to update dynamically without restart,
|
|
134
|
+
// but batch intervals are read from internalOptions reference by Planner if passed by reference?
|
|
135
|
+
// Actually Planner gets a copy or config object in constructor.
|
|
136
|
+
// Checking Planner constructor: it takes ReactiveTaskPlannerOptions.
|
|
137
|
+
if (this.taskPlanner) {
|
|
138
|
+
this.taskPlanner.updateOptions({
|
|
139
|
+
batchSize: options.batchSize,
|
|
140
|
+
batchIntervalMs: options.batchIntervalMs,
|
|
141
|
+
minBatchIntervalMs: options.minBatchIntervalMs,
|
|
142
|
+
getNextCleanupDate: options.getNextCleanupDate,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Overrides default configuration for tasks.
|
|
148
|
+
* Useful for testing to force low debounce on all tasks.
|
|
149
|
+
*/
|
|
150
|
+
overrideDefaults(defaults) {
|
|
151
|
+
if (defaults.debounce !== undefined) {
|
|
152
|
+
this._forceDebounce = defaults.debounce;
|
|
153
|
+
// Force update planner to use this debounce for FUTURE planning
|
|
154
|
+
if (this.taskPlanner) {
|
|
155
|
+
this.taskPlanner.setForceDebounce(defaults.debounce);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
get forceDebounce() {
|
|
160
|
+
return this._forceDebounce;
|
|
161
|
+
}
|
|
119
162
|
async addTask(taskDef) {
|
|
120
163
|
if (this.isRunning) {
|
|
121
164
|
throw new Error('Cannot add task after scheduler has started.');
|
|
@@ -139,6 +182,10 @@ class ReactiveTaskScheduler {
|
|
|
139
182
|
this.isRunning = true;
|
|
140
183
|
debug(`[Scheduler ${this.instanceId}] Starting...`);
|
|
141
184
|
await initPromise_1.initPromise; // Ensure init is complete
|
|
185
|
+
const helloResult = await (0, getMongoClient_1.getMongoClient)().db().command({ hello: 1 });
|
|
186
|
+
if (!helloResult.setName) {
|
|
187
|
+
throw new Error('Reactive tasks can only be started when connected to a MongoDB Replica Set.');
|
|
188
|
+
}
|
|
142
189
|
await Promise.all(this.registry.getAllTasks().map((task) => task.initPromise));
|
|
143
190
|
for (const { tasksCollection } of this.registry.getAllEntries()) {
|
|
144
191
|
if (this.concurrentRunner.hasSource(tasksCollection.collectionName)) {
|
|
@@ -177,6 +224,9 @@ class ReactiveTaskScheduler {
|
|
|
177
224
|
minBatchIntervalMs: this.internalOptions.minBatchIntervalMs,
|
|
178
225
|
getNextCleanupDate: this.internalOptions.getNextCleanupDate,
|
|
179
226
|
}, OnInfo_1.onInfo, OnError_1.onError);
|
|
227
|
+
if (typeof this._forceDebounce === 'number') {
|
|
228
|
+
this.taskPlanner.setForceDebounce(this._forceDebounce);
|
|
229
|
+
}
|
|
180
230
|
this.leaderElector = new LeaderElector_1.LeaderElector(globalsCollection, this.instanceId, {
|
|
181
231
|
lockTtlMs: this.internalOptions.lockTtlMs,
|
|
182
232
|
lockHeartbeatMs: this.internalOptions.lockHeartbeatMs,
|
|
@@ -243,6 +293,13 @@ class ReactiveTaskScheduler {
|
|
|
243
293
|
getRegistry() {
|
|
244
294
|
return this.registry;
|
|
245
295
|
}
|
|
296
|
+
// --- INTERNAL GETTERS FOR TESTING ---
|
|
297
|
+
get concurrentRunnerInstance() {
|
|
298
|
+
return this.concurrentRunner;
|
|
299
|
+
}
|
|
300
|
+
get taskPlannerInstance() {
|
|
301
|
+
return this.taskPlanner;
|
|
302
|
+
}
|
|
246
303
|
}
|
|
247
304
|
exports.ReactiveTaskScheduler = ReactiveTaskScheduler;
|
|
248
305
|
// --- SINGLETON INSTANCE ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactiveTasks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactiveTasks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertNoReactiveTaskErrors = assertNoReactiveTaskErrors;
|
|
4
|
+
const reactiveTasks_1 = require("../reactiveTasks");
|
|
5
|
+
/**
|
|
6
|
+
* Asserts that no reactive tasks have failed during the test run.
|
|
7
|
+
* Checks the 'executionHistory' and 'lastError' of tasks in all registered collections.
|
|
8
|
+
*/
|
|
9
|
+
async function assertNoReactiveTaskErrors(options) {
|
|
10
|
+
let registry;
|
|
11
|
+
// Fallback or override logic
|
|
12
|
+
const schedulerToUse = options.scheduler || reactiveTasks_1._scheduler;
|
|
13
|
+
registry = schedulerToUse.getRegistry();
|
|
14
|
+
const entries = registry.getAllEntries();
|
|
15
|
+
const errorsFound = [];
|
|
16
|
+
for (const entry of entries) {
|
|
17
|
+
// Build independent query for each collection
|
|
18
|
+
const query = {
|
|
19
|
+
// Optimization: Filter at database level for faster lookup
|
|
20
|
+
$or: [
|
|
21
|
+
{ 'executionHistory.status': 'failed', 'executionHistory.at': { $gte: options.since } },
|
|
22
|
+
// Also check lastError if it happened recently (though executionHistory covers history)
|
|
23
|
+
// We rely on executionHistory for the time-based check.
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
if (options.sourceDocIds && options.sourceDocIds.length > 0) {
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
query.sourceDocId = { $in: options.sourceDocIds };
|
|
29
|
+
}
|
|
30
|
+
const tasksWithHistory = await entry.tasksCollection.find(query).toArray();
|
|
31
|
+
for (const taskRecord of tasksWithHistory) {
|
|
32
|
+
if (!taskRecord.executionHistory)
|
|
33
|
+
continue;
|
|
34
|
+
for (const item of taskRecord.executionHistory) {
|
|
35
|
+
// 1. Check Date
|
|
36
|
+
if (item.at < options.since)
|
|
37
|
+
continue;
|
|
38
|
+
// 2. Check Status
|
|
39
|
+
if (item.status !== 'failed')
|
|
40
|
+
continue;
|
|
41
|
+
const errorMessage = item.error || 'Unknown error';
|
|
42
|
+
// 3. Check Whitelist
|
|
43
|
+
let isExcluded = false;
|
|
44
|
+
if (options.excludeErrors) {
|
|
45
|
+
for (const pattern of options.excludeErrors) {
|
|
46
|
+
if (typeof pattern === 'string') {
|
|
47
|
+
if (pattern === errorMessage) {
|
|
48
|
+
isExcluded = true;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (pattern instanceof RegExp) {
|
|
53
|
+
if (pattern.test(errorMessage)) {
|
|
54
|
+
isExcluded = true;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (!isExcluded) {
|
|
61
|
+
errorsFound.push({
|
|
62
|
+
task: taskRecord.task,
|
|
63
|
+
sourceDocId: taskRecord.sourceDocId,
|
|
64
|
+
error: errorMessage,
|
|
65
|
+
at: item.at,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (errorsFound.length > 0) {
|
|
72
|
+
const errorDetails = errorsFound
|
|
73
|
+
.sort((a, b) => a.at.getTime() - b.at.getTime())
|
|
74
|
+
.map((e) => `[${e.at.toISOString()}] Task '${e.task}' (Doc: ${e.sourceDocId}): ${e.error}`)
|
|
75
|
+
.join('\n');
|
|
76
|
+
throw new Error(`Found ${errorsFound.length} unexpected reactive task errors:\n${errorDetails}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=assertNoReactiveTaskErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertNoReactiveTaskErrors.js","sourceRoot":"","sources":["../../../src/testing/assertNoReactiveTaskErrors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configureForTesting = configureForTesting;
|
|
4
|
+
const reactiveTasks_1 = require("../reactiveTasks");
|
|
5
|
+
/**
|
|
6
|
+
* optimized configuration for testing environments.
|
|
7
|
+
* Reduces all intervals to minimal values (10ms) to make tests run fast.
|
|
8
|
+
*
|
|
9
|
+
* Can be called before or after task registration.
|
|
10
|
+
*
|
|
11
|
+
* @param options Overrides for the default test configuration.
|
|
12
|
+
*/
|
|
13
|
+
function configureForTesting(options = {}) {
|
|
14
|
+
const config = Object.assign({ debounce: 10, minPollMs: 10, minBatchIntervalMs: 10 }, options);
|
|
15
|
+
// Update internal scheduler options (affecting polling and batching)
|
|
16
|
+
reactiveTasks_1._scheduler.updateInternalOptions({
|
|
17
|
+
minPollMs: config.minPollMs,
|
|
18
|
+
minBatchIntervalMs: config.minBatchIntervalMs,
|
|
19
|
+
});
|
|
20
|
+
// Override task defaults (affecting debounce)
|
|
21
|
+
reactiveTasks_1._scheduler.overrideDefaults({
|
|
22
|
+
debounce: config.debounce,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=configureForTesting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configureForTesting.js","sourceRoot":"","sources":["../../../src/testing/configureForTesting.ts"],"names":[],"mappings":";;AA4BA,kDAkBC;AA9CD,oDAA8C;AAoB9C;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAC,UAAsC,EAAE;IACxE,MAAM,MAAM,mBACR,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,EAAE,EACb,kBAAkB,EAAE,EAAE,IACnB,OAAO,CACb,CAAC;IAEF,qEAAqE;IACrE,0BAAU,CAAC,qBAAqB,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAChD,CAAC,CAAC;IAEH,8CAA8C;IAC9C,0BAAU,CAAC,gBAAgB,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC5B,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./assertNoReactiveTaskErrors"), exports);
|
|
18
|
+
__exportStar(require("./configureForTesting"), exports);
|
|
19
|
+
__exportStar(require("./waitUntilReactiveTasksIdle"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,wDAAsC;AACtC,+DAA6C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitUntil = waitUntil;
|
|
4
|
+
const _debug = require("debug");
|
|
5
|
+
const debug = _debug('mongodash:testing');
|
|
6
|
+
/**
|
|
7
|
+
* Waits until the provided condition function returns true.
|
|
8
|
+
*
|
|
9
|
+
* Includes "Time Jump Detection" to handle debugging sessions:
|
|
10
|
+
* If a significant time gap is detected between checks (likely due to a breakpoint),
|
|
11
|
+
* the timeout deadline is extended by that gap to prevent false timeouts.
|
|
12
|
+
*/
|
|
13
|
+
async function waitUntil(condition, options = {}) {
|
|
14
|
+
const { timeoutMs = 10000, pollIntervalMs = 50, stabilityDurationMs = 0 } = options;
|
|
15
|
+
const start = Date.now();
|
|
16
|
+
let deadline = start + timeoutMs;
|
|
17
|
+
let stableSince = Date.now();
|
|
18
|
+
let lastTick = Date.now();
|
|
19
|
+
debug(`Started. Timeout: ${timeoutMs}ms, Poll: ${pollIntervalMs}ms, Stability: ${stabilityDurationMs}ms`);
|
|
20
|
+
while (true) {
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
// --- Time Jump Detection (Debug Support) ---
|
|
23
|
+
const elapsedSinceLastTick = now - lastTick;
|
|
24
|
+
// If elapsed time is significantly larger than poll interval (e.g. > 1s),
|
|
25
|
+
// we assume the process was paused (e.g. at a breakpoint).
|
|
26
|
+
if (elapsedSinceLastTick > 1000) {
|
|
27
|
+
const jump = elapsedSinceLastTick - pollIntervalMs; // Approximate jump
|
|
28
|
+
if (jump > 0) {
|
|
29
|
+
debug(`Time jump detected: ${jump}ms. Extending deadline.`);
|
|
30
|
+
deadline += jump;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
lastTick = now;
|
|
34
|
+
// -------------------------------------------
|
|
35
|
+
if (now > deadline) {
|
|
36
|
+
debug(`Timeout! Elapsed: ${now - start}ms`);
|
|
37
|
+
throw new Error(`waitUntil timeout after ${timeoutMs}ms (adjusted for pauses)`);
|
|
38
|
+
}
|
|
39
|
+
let result;
|
|
40
|
+
try {
|
|
41
|
+
result = await condition();
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
debug(`Condition threw error:`, err);
|
|
45
|
+
// error is ignored
|
|
46
|
+
result = false; // Condition failing throws implies not met? Or should we propagate?
|
|
47
|
+
// Usually waitUntil swallows errors unless critical. Let's assume false.
|
|
48
|
+
// But if it's a logic error in condition, maybe we should throw.
|
|
49
|
+
// For now, let's treat throw as false for robustness in shaky tests.
|
|
50
|
+
}
|
|
51
|
+
if (result) {
|
|
52
|
+
if (stabilityDurationMs === 0) {
|
|
53
|
+
debug(`Condition met immediately.`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (now - stableSince >= stabilityDurationMs) {
|
|
57
|
+
debug(`Condition stable for ${now - stableSince}ms. Done.`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Condition is true but haven't been stable long enough
|
|
61
|
+
// Continue loop
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Condition failed, reset stability timer
|
|
65
|
+
if (stableSince !== now) {
|
|
66
|
+
// Avoid spamming log every tick if it was already failing
|
|
67
|
+
// Actually, stableSince is reset to 'now' every time it fails?
|
|
68
|
+
// No, only when it WAS true and becomes false?
|
|
69
|
+
// Original code: stableSince = now; on else.
|
|
70
|
+
// So if it keeps failing, stableSince keeps moving forward.
|
|
71
|
+
}
|
|
72
|
+
stableSince = now;
|
|
73
|
+
}
|
|
74
|
+
await new Promise((r) => setTimeout(r, pollIntervalMs));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=waitUntil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitUntil.js","sourceRoot":"","sources":["../../../src/testing/waitUntil.ts"],"names":[],"mappings":";;AA4BA,8BAqEC;AAjGD,gCAAgC;AAChC,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAoB1C;;;;;;GAMG;AACI,KAAK,UAAU,SAAS,CAAC,SAA2C,EAAE,UAA4B,EAAE;IACvG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,cAAc,GAAG,EAAE,EAAE,mBAAmB,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAEpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE1B,KAAK,CAAC,qBAAqB,SAAS,aAAa,cAAc,kBAAkB,mBAAmB,IAAI,CAAC,CAAC;IAE1G,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,8CAA8C;QAC9C,MAAM,oBAAoB,GAAG,GAAG,GAAG,QAAQ,CAAC;QAC5C,0EAA0E;QAC1E,2DAA2D;QAC3D,IAAI,oBAAoB,GAAG,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,oBAAoB,GAAG,cAAc,CAAC,CAAC,mBAAmB;YACvE,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACX,KAAK,CAAC,uBAAuB,IAAI,yBAAyB,CAAC,CAAC;gBAC5D,QAAQ,IAAI,IAAI,CAAC;YACrB,CAAC;QACL,CAAC;QACD,QAAQ,GAAG,GAAG,CAAC;QACf,8CAA8C;QAE9C,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;YACjB,KAAK,CAAC,qBAAqB,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,0BAA0B,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACD,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YACrC,mBAAmB;YACnB,MAAM,GAAG,KAAK,CAAC,CAAC,oEAAoE;YACpF,yEAAyE;YACzE,iEAAiE;YACjE,qEAAqE;QACzE,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACpC,OAAO;YACX,CAAC;YACD,IAAI,GAAG,GAAG,WAAW,IAAI,mBAAmB,EAAE,CAAC;gBAC3C,KAAK,CAAC,wBAAwB,GAAG,GAAG,WAAW,WAAW,CAAC,CAAC;gBAC5D,OAAO;YACX,CAAC;YACD,wDAAwD;YACxD,gBAAgB;QACpB,CAAC;aAAM,CAAC;YACJ,0CAA0C;YAC1C,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;gBACtB,0DAA0D;gBAC1D,+DAA+D;gBAC/D,+CAA+C;gBAC/C,6CAA6C;gBAC7C,4DAA4D;YAChE,CAAC;YACD,WAAW,GAAG,GAAG,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitUntilReactiveTasksIdle = waitUntilReactiveTasksIdle;
|
|
4
|
+
const _debug = require("debug");
|
|
5
|
+
const reactiveTasks_1 = require("../reactiveTasks");
|
|
6
|
+
const waitUntil_1 = require("./waitUntil");
|
|
7
|
+
const debug = _debug('mongodash:testing');
|
|
8
|
+
/**
|
|
9
|
+
* Waits until the reactive task system is idle.
|
|
10
|
+
* "Idle" means:
|
|
11
|
+
* 1. No changes are buffered in the Planner.
|
|
12
|
+
* 2. No workers are currently executing tasks (active count is 0).
|
|
13
|
+
* 3. No tasks in the database are in a pending or processing state.
|
|
14
|
+
*
|
|
15
|
+
* This enables robust E2E testing by ensuring that all side effects and cascading tasks have finished.
|
|
16
|
+
*/
|
|
17
|
+
async function waitUntilReactiveTasksIdle(customOptions = {}) {
|
|
18
|
+
const options = Object.assign({ timeoutMs: 10000, pollIntervalMs: 50, stabilityDurationMs: 200 }, customOptions);
|
|
19
|
+
await (0, waitUntil_1.waitUntil)(async () => {
|
|
20
|
+
// 1. Check Internal Buffers (Planner)
|
|
21
|
+
// Accessing private planner via exposed getter for testing
|
|
22
|
+
const planner = reactiveTasks_1._scheduler.taskPlannerInstance;
|
|
23
|
+
if (planner && !planner.isEmpty) {
|
|
24
|
+
debug('Planner not empty');
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
// 2. Check Active Workers (Runner)
|
|
28
|
+
const runner = reactiveTasks_1._scheduler.concurrentRunnerInstance;
|
|
29
|
+
if (runner && runner.activeWorkers > 0) {
|
|
30
|
+
debug(`Active workers: ${runner.activeWorkers}`);
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// 3. Check Database
|
|
34
|
+
const registry = reactiveTasks_1._scheduler.getRegistry();
|
|
35
|
+
const entries = registry.getAllEntries();
|
|
36
|
+
// Optimized check: If any collection has pending work, we are not idle.
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
// We count documents that are "active"
|
|
39
|
+
// status IN [pending, processing, processing_dirty]
|
|
40
|
+
// AND dueAt <= Now (approx) - actually, for "settled" we might want to wait for EVERYTHING?
|
|
41
|
+
// Usually we want to wait for anything that is currently actionable.
|
|
42
|
+
// If a task is scheduled for tomorrow, we shouldn't wait for it.
|
|
43
|
+
// However, the user requirement is "guarantees that all reactive tasks that are currently planned... have been completed".
|
|
44
|
+
// "Currently planned" usually implies "executable now".
|
|
45
|
+
// But if we ignore future tasks, we are safe.
|
|
46
|
+
const horizon = Date.now() + (options.timeoutMs || 0) + (options.stabilityDurationMs || 0) + 100;
|
|
47
|
+
// We count documents that are "active"
|
|
48
|
+
// ONE OF:
|
|
49
|
+
// 1. status IN [processing, processing_dirty] (always active)
|
|
50
|
+
// 2. status = pending AND (nextRunAt <= horizon OR nextRunAt IS NULL)
|
|
51
|
+
// (NULL nextRunAt usually means "now" or "asap" in some contexts, or "never",
|
|
52
|
+
// but for pending it usually means "ready").
|
|
53
|
+
const count = await entry.tasksCollection.countDocuments({
|
|
54
|
+
$or: [
|
|
55
|
+
{ status: { $in: ['processing', 'processing_dirty'] } },
|
|
56
|
+
{
|
|
57
|
+
status: 'pending',
|
|
58
|
+
$or: [{ nextRunAt: { $lte: new Date(horizon) } }, { nextRunAt: null }],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
});
|
|
62
|
+
if (count > 0) {
|
|
63
|
+
debug(`Collection ${entry.tasksCollection.collectionName} has ${count} active tasks`);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}, options);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=waitUntilReactiveTasksIdle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitUntilReactiveTasksIdle.js","sourceRoot":"","sources":["../../../src/testing/waitUntilReactiveTasksIdle.ts"],"names":[],"mappings":";;AAeA,gEAmEC;AAlFD,gCAAgC;AAChC,oDAAkE;AAClE,2CAA0D;AAE1D,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE1C;;;;;;;;GAQG;AACI,KAAK,UAAU,0BAA0B,CAAC,gBAA2C,EAAE;IAC1F,MAAM,OAAO,mBACT,SAAS,EAAE,KAAK,EAChB,cAAc,EAAE,EAAE,EAClB,mBAAmB,EAAE,GAAG,IACrB,aAAa,CACnB,CAAC;IAEF,MAAM,IAAA,qBAAS,EAAC,KAAK,IAAI,EAAE;QACvB,sCAAsC;QACtC,2DAA2D;QAC3D,MAAM,OAAO,GAAG,0BAAU,CAAC,mBAAmB,CAAC;QAC/C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAG,0BAAU,CAAC,wBAAwB,CAAC;QACnD,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,0BAAU,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAEzC,wEAAwE;QACxE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,uCAAuC;YACvC,oDAAoD;YACpD,4FAA4F;YAC5F,qEAAqE;YACrE,iEAAiE;YAEjE,2HAA2H;YAC3H,wDAAwD;YACxD,8CAA8C;YAE9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAEjG,uCAAuC;YACvC,UAAU;YACV,8DAA8D;YAC9D,sEAAsE;YACtE,iFAAiF;YACjF,iDAAiD;YAEjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC;gBACrD,GAAG,EAAE;oBACD,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAyB,EAAE,EAAE;oBAC/E;wBACI,MAAM,EAAE,SAAS;wBACjB,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;qBACzE;iBACJ;aACJ,CAAC,CAAC;YAEH,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACZ,KAAK,CAAC,cAAc,KAAK,CAAC,eAAe,CAAC,cAAc,QAAQ,KAAK,eAAe,CAAC,CAAC;gBACtF,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,EAAE,OAAO,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -16,15 +16,18 @@ export declare class ConcurrentRunner {
|
|
|
16
16
|
private workers;
|
|
17
17
|
private wakeUpSignals;
|
|
18
18
|
private tryRunATask;
|
|
19
|
+
private _activeWorkerCount;
|
|
19
20
|
constructor(options: ConcurrentRunnerOptions, onError?: OnError);
|
|
20
21
|
registerSource(name: string, options: SourceOptions): void;
|
|
21
22
|
hasSource(name: string): boolean;
|
|
22
23
|
start(tryRunATask: TryRunATaskCallback): void;
|
|
23
24
|
stop(): Promise<void>;
|
|
24
25
|
speedUp(sourceName: string): void;
|
|
26
|
+
updateAllSources(options: Partial<SourceOptions>): void;
|
|
25
27
|
private runWorker;
|
|
26
28
|
private prolongNextRun;
|
|
27
29
|
private sleep;
|
|
28
30
|
private wakeUpOneWorker;
|
|
29
31
|
private wakeUpAllWorkers;
|
|
32
|
+
get activeWorkers(): number;
|
|
30
33
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { OnError } from './OnError';
|
|
|
12
12
|
export { processInBatches, ProcessInBatchesOptions, ProcessInBatchesResult } from './processInBatches';
|
|
13
13
|
export { CODE_REACTIVE_TASK_FAILED, CODE_REACTIVE_TASK_FINISHED, CODE_REACTIVE_TASK_LEADER_LOCK_LOST, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED, CODE_REACTIVE_TASK_PLANNER_STARTED, CODE_REACTIVE_TASK_PLANNER_STOPPED, CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR, CODE_REACTIVE_TASK_STARTED, countReactiveTasks, getPrometheusMetrics, getReactiveTasks, reactiveTask, ReactiveTask, ReactiveTaskHandler, retryReactiveTasks, startReactiveTasks, stopReactiveTasks, TaskConditionFailedError, _scheduler, } from './reactiveTasks';
|
|
14
14
|
export { OperationalTaskController, serveDashboard } from './task-management';
|
|
15
|
+
export * from './testing';
|
|
15
16
|
export { isLockAlreadyAcquiredError, LockAlreadyAcquiredError, withLock, WithLockOptions } from './withLock';
|
|
16
17
|
export { PostCommitHook, registerPostCommitHook, withTransaction } from './withTransaction';
|
|
17
18
|
type PackageOptions = {
|
|
@@ -12,6 +12,9 @@ export declare class ReactiveTaskOps {
|
|
|
12
12
|
private registry;
|
|
13
13
|
private onTaskPlanned;
|
|
14
14
|
constructor(registry: ReactiveTaskRegistry, onTaskPlanned: (tasksCollectionName: string, debounceMs: number) => void);
|
|
15
|
+
private _forceDebounceMs?;
|
|
16
|
+
setForceDebounce(debounceMs: number | undefined): void;
|
|
17
|
+
get forceDebounceMs(): number | undefined;
|
|
15
18
|
executePlanningPipeline(collectionName: string, sourceDocIds: unknown[], allowedTaskNames?: Set<string>): Promise<void>;
|
|
16
19
|
private generatePlanningPipeline;
|
|
17
20
|
}
|
|
@@ -41,6 +41,8 @@ export declare class ReactiveTaskPlanner {
|
|
|
41
41
|
minBatchIntervalMs: number;
|
|
42
42
|
getNextCleanupDate: (date?: Date) => Date;
|
|
43
43
|
}, onInfo?: OnInfo, onError?: OnError);
|
|
44
|
+
updateOptions(options: Partial<typeof this.internalOptions>): void;
|
|
45
|
+
setForceDebounce(debounceMs: number | undefined): void;
|
|
44
46
|
start(): Promise<void>;
|
|
45
47
|
stop(): Promise<void>;
|
|
46
48
|
private getIsStoppedTester;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Document } from 'mongodb';
|
|
2
2
|
import type { Registry } from 'prom-client';
|
|
3
|
+
import { ConcurrentRunner } from '../ConcurrentRunner';
|
|
3
4
|
import { GlobalsCollection } from '../globalsCollection';
|
|
4
5
|
import { ReactiveTaskManager } from './ReactiveTaskManager';
|
|
6
|
+
import { ReactiveTaskPlanner } from './ReactiveTaskPlanner';
|
|
5
7
|
import { ReactiveTaskRegistry } from './ReactiveTaskRegistry';
|
|
6
8
|
import { PagedResult, PaginationOptions, ReactiveTask, ReactiveTaskQuery, ReactiveTaskRecord, ReactiveTaskSchedulerOptions } from './ReactiveTaskTypes';
|
|
7
9
|
export { CODE_REACTIVE_TASK_CLEANUP, CODE_REACTIVE_TASK_FAILED, CODE_REACTIVE_TASK_FINISHED, CODE_REACTIVE_TASK_INITIALIZED, CODE_REACTIVE_TASK_LEADER_LOCK_LOST, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED, CODE_REACTIVE_TASK_PLANNER_STARTED, CODE_REACTIVE_TASK_PLANNER_STOPPED, CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR, CODE_REACTIVE_TASK_STARTED, PagedResult, PaginationOptions, ReactiveTask, ReactiveTaskCaller, ReactiveTaskFilter, ReactiveTaskHandler, ReactiveTaskQuery, ReactiveTaskRecord, ReactiveTaskSchedulerOptions, ReactiveTaskStatus, REACTIVE_TASK_META_DOC_ID, TaskConditionFailedError, } from './ReactiveTaskTypes';
|
|
@@ -39,6 +41,19 @@ export declare class ReactiveTaskScheduler {
|
|
|
39
41
|
*/
|
|
40
42
|
private get instanceId();
|
|
41
43
|
configure(options: Partial<ReactiveTaskSchedulerOptions>): void;
|
|
44
|
+
/**
|
|
45
|
+
* Updates internal options (for testing purposes).
|
|
46
|
+
*/
|
|
47
|
+
updateInternalOptions(options: Partial<typeof this.internalOptions>): void;
|
|
48
|
+
private _forceDebounce?;
|
|
49
|
+
/**
|
|
50
|
+
* Overrides default configuration for tasks.
|
|
51
|
+
* Useful for testing to force low debounce on all tasks.
|
|
52
|
+
*/
|
|
53
|
+
overrideDefaults(defaults: {
|
|
54
|
+
debounce?: number;
|
|
55
|
+
}): void;
|
|
56
|
+
get forceDebounce(): number | string | undefined;
|
|
42
57
|
addTask(taskDef: ReactiveTask<Document>): Promise<void>;
|
|
43
58
|
/**
|
|
44
59
|
* Starts the entire system - leader election and workers.
|
|
@@ -51,6 +66,8 @@ export declare class ReactiveTaskScheduler {
|
|
|
51
66
|
getPrometheusMetrics(): Promise<Registry | null>;
|
|
52
67
|
getTaskManager(): ReactiveTaskManager;
|
|
53
68
|
getRegistry(): ReactiveTaskRegistry;
|
|
69
|
+
get concurrentRunnerInstance(): ConcurrentRunner | undefined;
|
|
70
|
+
get taskPlannerInstance(): ReactiveTaskPlanner | undefined;
|
|
54
71
|
}
|
|
55
72
|
declare const scheduler: ReactiveTaskScheduler;
|
|
56
73
|
export declare function init(initOptions: InitOptions): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ReactiveTaskScheduler } from '../reactiveTasks';
|
|
2
|
+
export interface AssertNoReactiveTaskErrorsOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Check for errors occurring after this time.
|
|
5
|
+
* Essential to isolate the current test run.
|
|
6
|
+
*/
|
|
7
|
+
since: Date;
|
|
8
|
+
/**
|
|
9
|
+
* Optional: Check only tasks related to these specific source documents.
|
|
10
|
+
* Useful when other tests might be generating noise in the background.
|
|
11
|
+
* Supports generic ID types (ObjectId, string, number).
|
|
12
|
+
*/
|
|
13
|
+
sourceDocIds?: unknown[];
|
|
14
|
+
/**
|
|
15
|
+
* Optional: Whitelist specific errors.
|
|
16
|
+
* If a string is provided, exact match is required.
|
|
17
|
+
* If a RegExp is provided, it must test true against the error message.
|
|
18
|
+
*/
|
|
19
|
+
excludeErrors?: (string | RegExp)[];
|
|
20
|
+
/**
|
|
21
|
+
* Optional: ReactiveTaskScheduler instance to use.
|
|
22
|
+
* Essential for isolated testing where multiple schedulers might exist.
|
|
23
|
+
*/
|
|
24
|
+
scheduler?: ReactiveTaskScheduler;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Asserts that no reactive tasks have failed during the test run.
|
|
28
|
+
* Checks the 'executionHistory' and 'lastError' of tasks in all registered collections.
|
|
29
|
+
*/
|
|
30
|
+
export declare function assertNoReactiveTaskErrors(options: AssertNoReactiveTaskErrorsOptions): Promise<void>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ConfigureForTestingOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Sets the debounce time for all tasks (new and existing).
|
|
4
|
+
* Default: 10ms
|
|
5
|
+
*/
|
|
6
|
+
debounce?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Sets the minimum polling interval for source collections.
|
|
9
|
+
* Default: 10ms
|
|
10
|
+
*/
|
|
11
|
+
minPollMs?: number;
|
|
12
|
+
/**
|
|
13
|
+
* Sets the minimum batch processing interval options.
|
|
14
|
+
* Default: 10ms
|
|
15
|
+
*/
|
|
16
|
+
minBatchIntervalMs?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* optimized configuration for testing environments.
|
|
20
|
+
* Reduces all intervals to minimal values (10ms) to make tests run fast.
|
|
21
|
+
*
|
|
22
|
+
* Can be called before or after task registration.
|
|
23
|
+
*
|
|
24
|
+
* @param options Overrides for the default test configuration.
|
|
25
|
+
*/
|
|
26
|
+
export declare function configureForTesting(options?: ConfigureForTestingOptions): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface WaitUntilOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Maximum time to wait for the condition to become true.
|
|
4
|
+
* Default: 10000ms
|
|
5
|
+
*/
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Interval between checks.
|
|
9
|
+
* Default: 50ms
|
|
10
|
+
*/
|
|
11
|
+
pollIntervalMs?: number;
|
|
12
|
+
/**
|
|
13
|
+
* How long the condition must remain true to be considered stable.
|
|
14
|
+
* Default: 0 (no stability check)
|
|
15
|
+
*/
|
|
16
|
+
stabilityDurationMs?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Waits until the provided condition function returns true.
|
|
20
|
+
*
|
|
21
|
+
* Includes "Time Jump Detection" to handle debugging sessions:
|
|
22
|
+
* If a significant time gap is detected between checks (likely due to a breakpoint),
|
|
23
|
+
* the timeout deadline is extended by that gap to prevent false timeouts.
|
|
24
|
+
*/
|
|
25
|
+
export declare function waitUntil(condition: () => boolean | Promise<boolean>, options?: WaitUntilOptions): Promise<void>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WaitUntilOptions } from './waitUntil';
|
|
2
|
+
/**
|
|
3
|
+
* Waits until the reactive task system is idle.
|
|
4
|
+
* "Idle" means:
|
|
5
|
+
* 1. No changes are buffered in the Planner.
|
|
6
|
+
* 2. No workers are currently executing tasks (active count is 0).
|
|
7
|
+
* 3. No tasks in the database are in a pending or processing state.
|
|
8
|
+
*
|
|
9
|
+
* This enables robust E2E testing by ensuring that all side effects and cascading tasks have finished.
|
|
10
|
+
*/
|
|
11
|
+
export declare function waitUntilReactiveTasksIdle(customOptions?: Partial<WaitUntilOptions>): Promise<void>;
|
package/docs/index.md
CHANGED
|
@@ -29,4 +29,7 @@ features:
|
|
|
29
29
|
- title: Transactions
|
|
30
30
|
details: Simplified transaction management with automatic session handling.
|
|
31
31
|
link: /with-transaction
|
|
32
|
+
- title: Testing Utilities
|
|
33
|
+
details: Helpers for robust E2E testing of asynchronous and reactive flows.
|
|
34
|
+
link: /testing
|
|
32
35
|
---
|
|
@@ -294,3 +294,11 @@ process.on('SIGINT', () => gracefulShutdown('SIGINT')); // Ctrl+C
|
|
|
294
294
|
|
|
295
295
|
> [!NOTE]
|
|
296
296
|
> **Self-Healing Design**: While graceful shutdown is recommended best practice, the system is designed to be resilient. If your application crashes or is forcefully terminated, task locks will automatically expire after a timeout (default: 1 minute), allowing other instances to pick up and process the unfinished tasks. Similarly, leadership locks expire, ensuring another instance takes over. This guarantees eventual task processing even in failure scenarios.
|
|
297
|
+
|
|
298
|
+
## Testing
|
|
299
|
+
|
|
300
|
+
Testing asynchronous, event-driven workflows can be challenging. Mongodash provides dedicated test utilities to make this easier.
|
|
301
|
+
|
|
302
|
+
Use \`waitUntilReactiveTasksIdle\` to robustly wait for all side-effects (including retries and cascading tasks) to finish before making assertions.
|
|
303
|
+
|
|
304
|
+
See **[Testing Utilities](../testing.md)** for detailed usage and examples.
|
|
@@ -15,6 +15,7 @@ Reactive Tasks allow you to define background jobs that trigger automatically wh
|
|
|
15
15
|
- **[Concurrency Control](./configuration.md)**: Limit parallel execution to protect downstream resources.
|
|
16
16
|
- **[Deduplication](./guides.md#idempotency--re-execution)**: Automatic debouncing ("wait for data to settle") and task merging.
|
|
17
17
|
- **[Observability](./monitoring.md)**: First-class Prometheus metrics support.
|
|
18
|
+
- **[Testing Support](../testing.md)**: Built-in utilities (`waitUntilReactiveTasksIdle`) to ensure your reactive flows are robust and error-free.
|
|
18
19
|
- **[Dashboard](../dashboard.md)**: A visual Dashboard to monitor, retry, and debug tasks.
|
|
19
20
|
- **Developer Friendly**: Zero-config local development, fully typed with TypeScript.
|
|
20
21
|
|
package/docs/testing.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Testing Utilities
|
|
2
|
+
|
|
3
|
+
Mongodash provides a set of utilities to help you write robust End-to-End (E2E) tests for your asynchronous applications.
|
|
4
|
+
|
|
5
|
+
## `waitUntilReactiveTasksIdle`
|
|
6
|
+
|
|
7
|
+
A specialized helper for testing **Reactive Tasks**. It blocks execution until the reactive task system is completely quiesced.
|
|
8
|
+
|
|
9
|
+
This is essential for testing "side effects" and "cascading tasks" where you want to assert the final state of the system after a chain of events has completed.
|
|
10
|
+
|
|
11
|
+
### What it waits for
|
|
12
|
+
|
|
13
|
+
It resolves only when **ALL** of the following validation checks pass simultaneously (or for the `stabilityDurationMs`):
|
|
14
|
+
|
|
15
|
+
1. **Planner Empty**: The internal `ReactiveTaskPlanner` has no buffered Change Stream events waiting to be flushed.
|
|
16
|
+
2. **Workers Idle**: No `ResponsiveTaskWorker` is currently processing a task (active count is 0).
|
|
17
|
+
3. **Database Settled**: No tasks in any registered task collection are in `pending`, `processing`, or `processing_dirty` state.
|
|
18
|
+
* **Exception**: Pending tasks scheduled for the **distant future** (beyond the current timeout + stability window) are ignored. This ensures that long-term retries (e.g., "retry in 1 hour") do not cause your tests to timeout.
|
|
19
|
+
|
|
20
|
+
### Usage
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { waitUntilReactiveTasksIdle } from 'mongodash/testing';
|
|
24
|
+
|
|
25
|
+
it('should process user registration workflow', async () => {
|
|
26
|
+
// 1. Trigger the workflow
|
|
27
|
+
await users.insertOne({ email: 'test@example.com', status: 'new' });
|
|
28
|
+
|
|
29
|
+
// 2. Wait for the reactive task to process ONLY the insert
|
|
30
|
+
// AND any subsequent tasks that might be triggered (e.g. sending email)
|
|
31
|
+
await waitUntilReactiveTasksIdle();
|
|
32
|
+
|
|
33
|
+
// 3. Assert the final state
|
|
34
|
+
const emailTask = await emailTasks.findOne({ email: 'test@example.com' });
|
|
35
|
+
expect(emailTask).toBeDefined();
|
|
36
|
+
expect(emailTask.status).toBe('sent');
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Configuration
|
|
41
|
+
|
|
42
|
+
You can override the default options if needed, though the defaults are tuned for general use.
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
await waitUntilReactiveTasksIdle({
|
|
46
|
+
timeoutMs: 30000,
|
|
47
|
+
stabilityDurationMs: 200, // Wait for 200ms of "silence" to catch in-flight cascading tasks
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## `assertNoReactiveTaskErrors`
|
|
52
|
+
|
|
53
|
+
Ensures that no reactive tasks have failed during your test execution. This is critical for catching "silent failures" where a task failed but didn't crash the application or the test.
|
|
54
|
+
|
|
55
|
+
### Features
|
|
56
|
+
|
|
57
|
+
- **Time filtering**: Only checks for errors that occurred after a specific time (e.g., the start of your test).
|
|
58
|
+
- **Scope**: Can check globally or for specific source documents.
|
|
59
|
+
- **Filtering**: Allows ignoring "expected" errors (e.g., negative tests).
|
|
60
|
+
|
|
61
|
+
### Usage
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { assertNoReactiveTaskErrors } from 'mongodash/testing';
|
|
65
|
+
|
|
66
|
+
it('should process successfully', async () => {
|
|
67
|
+
const startTime = new Date();
|
|
68
|
+
|
|
69
|
+
// ... run test steps ...
|
|
70
|
+
await waitUntilReactiveTasksIdle();
|
|
71
|
+
|
|
72
|
+
// Verify no tasks failed
|
|
73
|
+
await assertNoReactiveTaskErrors({ since: startTime });
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Options
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
await assertNoReactiveTaskErrors({
|
|
81
|
+
since: startTime, // Required: Check for errors after this time
|
|
82
|
+
sourceDocIds: [docId], // Optional: Limit check to specific source documents
|
|
83
|
+
excludeErrors: [ // Optional: Allow known errors (strings or RegEx)
|
|
84
|
+
'Expected Failure',
|
|
85
|
+
/Authorization Error/
|
|
86
|
+
]
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## `configureForTesting`
|
|
91
|
+
|
|
92
|
+
A helper to configure the library for fast, deterministic testing execution.
|
|
93
|
+
|
|
94
|
+
By default, the library is optimized for production scenarios (e.g. `debounce: 1000ms`, `minPollMs: 200ms`). In tests, these delays cause unnecessary slowness.
|
|
95
|
+
|
|
96
|
+
`configureForTesting` overrides these defaults globally to minimal values (e.g. `10ms`).
|
|
97
|
+
|
|
98
|
+
### Usage
|
|
99
|
+
|
|
100
|
+
Call this **once** in your global test setup (e.g. `jest.setup.js` or `beforeAll`).
|
|
101
|
+
|
|
102
|
+
It works regardless of whether you call it before or after registering your tasks.
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { configureForTesting } from 'mongodash/testing';
|
|
106
|
+
|
|
107
|
+
beforeAll(() => {
|
|
108
|
+
// Sets debounce, polling, and batching to 10ms
|
|
109
|
+
configureForTesting();
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Options
|
|
114
|
+
|
|
115
|
+
You can customize specific values if needed:
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
configureForTesting({
|
|
119
|
+
debounce: 0, // Force 0ms debounce (immediate execution)
|
|
120
|
+
minPollMs: 50, // Poll every 50ms
|
|
121
|
+
minBatchIntervalMs: 50
|
|
122
|
+
});
|
|
123
|
+
```
|