@powerhousedao/reactor 5.0.0-staging.1 → 5.0.0-staging.10
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/bench/event-bus.bench.js +17 -27
- package/dist/bench/event-bus.bench.js.map +1 -1
- package/dist/bench/queue-only.bench.js +1 -0
- package/dist/bench/queue-only.bench.js.map +1 -1
- package/dist/bench/reactor-throughput.bench.js +42 -45
- package/dist/bench/reactor-throughput.bench.js.map +1 -1
- package/dist/src/events/event-bus.d.ts +3 -3
- package/dist/src/events/event-bus.d.ts.map +1 -1
- package/dist/src/events/event-bus.js +1 -1
- package/dist/src/events/event-bus.js.map +1 -1
- package/dist/src/events/interfaces.d.ts +1 -1
- package/dist/src/events/interfaces.d.ts.map +1 -1
- package/dist/src/executor/interfaces.d.ts +31 -54
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.js +128 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
- package/dist/src/executor/simple-job-executor.d.ts +19 -0
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor.js +69 -0
- package/dist/src/executor/simple-job-executor.js.map +1 -0
- package/dist/src/executor/types.d.ts +23 -8
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/queue/interfaces.d.ts +45 -5
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +24 -0
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
- package/dist/src/queue/job-execution-handle.js +62 -0
- package/dist/src/queue/job-execution-handle.js.map +1 -0
- package/dist/src/queue/queue.d.ts +54 -5
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +237 -23
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +25 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +12 -0
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/reactor.d.ts +3 -12
- package/dist/src/reactor.d.ts.map +1 -1
- package/dist/src/reactor.js +14 -25
- package/dist/src/reactor.js.map +1 -1
- package/dist/src/registry/implementation.d.ts +62 -0
- package/dist/src/registry/implementation.d.ts.map +1 -0
- package/dist/src/registry/implementation.js +96 -0
- package/dist/src/registry/implementation.js.map +1 -0
- package/dist/src/registry/index.d.ts +3 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/index.js +2 -0
- package/dist/src/registry/index.js.map +1 -0
- package/dist/src/registry/interfaces.d.ts +39 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -0
- package/dist/src/registry/interfaces.js +2 -0
- package/dist/src/registry/interfaces.js.map +1 -0
- package/dist/src/shared/factories.d.ts +1 -1
- package/dist/src/shared/factories.d.ts.map +1 -1
- package/dist/src/utils.d.ts +2 -2
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +3 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/test/event-bus.test.js +19 -10
- package/dist/test/event-bus.test.js.map +1 -1
- package/dist/test/executor/executor-integration.test.d.ts +2 -0
- package/dist/test/executor/executor-integration.test.d.ts.map +1 -0
- package/dist/test/executor/executor-integration.test.js +287 -0
- package/dist/test/executor/executor-integration.test.js.map +1 -0
- package/dist/test/executor/job-execution-handle.test.d.ts +2 -0
- package/dist/test/executor/job-execution-handle.test.d.ts.map +1 -0
- package/dist/test/executor/job-execution-handle.test.js +272 -0
- package/dist/test/executor/job-execution-handle.test.js.map +1 -0
- package/dist/test/executor/simple-job-executor-manager.test.d.ts +2 -0
- package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +1 -0
- package/dist/test/executor/simple-job-executor-manager.test.js +132 -0
- package/dist/test/executor/simple-job-executor-manager.test.js.map +1 -0
- package/dist/test/executor/simple-job-executor.test.d.ts +2 -0
- package/dist/test/executor/simple-job-executor.test.d.ts.map +1 -0
- package/dist/test/executor/simple-job-executor.test.js +139 -0
- package/dist/test/executor/simple-job-executor.test.js.map +1 -0
- package/dist/test/factories.d.ts +123 -0
- package/dist/test/factories.d.ts.map +1 -0
- package/dist/test/factories.js +319 -0
- package/dist/test/factories.js.map +1 -0
- package/dist/test/integration/document-drive-integration.test.d.ts +2 -0
- package/dist/test/integration/document-drive-integration.test.d.ts.map +1 -0
- package/dist/test/integration/document-drive-integration.test.js +1102 -0
- package/dist/test/integration/document-drive-integration.test.js.map +1 -0
- package/dist/test/integration/reactor-read.test.d.ts.map +1 -0
- package/dist/test/{reactor-read.test.js → integration/reactor-read.test.js} +28 -67
- package/dist/test/integration/reactor-read.test.js.map +1 -0
- package/dist/test/queue/queue-integration.test.d.ts +2 -0
- package/dist/test/queue/queue-integration.test.d.ts.map +1 -0
- package/dist/test/queue/queue-integration.test.js +322 -0
- package/dist/test/queue/queue-integration.test.js.map +1 -0
- package/dist/test/{queue.test.d.ts.map → queue/queue.test.d.ts.map} +1 -1
- package/dist/test/queue/queue.test.js +770 -0
- package/dist/test/queue/queue.test.js.map +1 -0
- package/dist/test/registry/registry.test.d.ts +2 -0
- package/dist/test/registry/registry.test.d.ts.map +1 -0
- package/dist/test/registry/registry.test.js +182 -0
- package/dist/test/registry/registry.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +11 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +3 -3
- package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
- package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
- package/dist/bench/end-to-end-flow.bench.js +0 -266
- package/dist/bench/end-to-end-flow.bench.js.map +0 -1
- package/dist/src/executor/job-executor.d.ts +0 -62
- package/dist/src/executor/job-executor.d.ts.map +0 -1
- package/dist/src/executor/job-executor.js +0 -325
- package/dist/src/executor/job-executor.js.map +0 -1
- package/dist/test/job-executor.test.d.ts +0 -2
- package/dist/test/job-executor.test.d.ts.map +0 -1
- package/dist/test/job-executor.test.js +0 -587
- package/dist/test/job-executor.test.js.map +0 -1
- package/dist/test/queue.test.js +0 -407
- package/dist/test/queue.test.js.map +0 -1
- package/dist/test/reactor-read.test.d.ts.map +0 -1
- package/dist/test/reactor-read.test.js.map +0 -1
- package/dist/test/reactor-write.test.d.ts +0 -2
- package/dist/test/reactor-write.test.d.ts.map +0 -1
- package/dist/test/reactor-write.test.js +0 -232
- package/dist/test/reactor-write.test.js.map +0 -1
- /package/dist/test/{reactor-read.test.d.ts → integration/reactor-read.test.d.ts} +0 -0
- /package/dist/test/{queue.test.d.ts → queue/queue.test.d.ts} +0 -0
package/dist/src/queue/queue.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JobExecutionHandle } from "./job-execution-handle.js";
|
|
2
|
+
import { JobQueueState, QueueEventTypes } from "./types.js";
|
|
2
3
|
/**
|
|
3
4
|
* In-memory implementation of the IQueue interface.
|
|
4
5
|
* Organizes jobs by documentId, scope, and branch to ensure proper ordering.
|
|
6
|
+
* Ensures serial execution per document by tracking executing jobs.
|
|
7
|
+
* Implements dependency management through queue hints.
|
|
5
8
|
*/
|
|
6
9
|
export class InMemoryQueue {
|
|
7
10
|
eventBus;
|
|
8
11
|
queues = new Map();
|
|
9
|
-
|
|
12
|
+
jobIdToQueueKey = new Map();
|
|
13
|
+
docIdToJobId = new Map();
|
|
14
|
+
jobIdToDocId = new Map();
|
|
15
|
+
completedJobs = new Set();
|
|
16
|
+
jobIndex = new Map();
|
|
17
|
+
isBlocked = false;
|
|
18
|
+
onDrainedCallback;
|
|
10
19
|
constructor(eventBus) {
|
|
11
20
|
this.eventBus = eventBus;
|
|
12
21
|
}
|
|
@@ -27,13 +36,70 @@ export class InMemoryQueue {
|
|
|
27
36
|
}
|
|
28
37
|
return queue;
|
|
29
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if a document has any jobs currently executing
|
|
41
|
+
*/
|
|
42
|
+
isDocumentExecuting(documentId) {
|
|
43
|
+
const executingSet = this.docIdToJobId.get(documentId);
|
|
44
|
+
return executingSet ? executingSet.size > 0 : false;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Mark a job as executing for its document
|
|
48
|
+
*/
|
|
49
|
+
markJobExecuting(job) {
|
|
50
|
+
let executingSet = this.docIdToJobId.get(job.documentId);
|
|
51
|
+
if (!executingSet) {
|
|
52
|
+
executingSet = new Set();
|
|
53
|
+
this.docIdToJobId.set(job.documentId, executingSet);
|
|
54
|
+
}
|
|
55
|
+
executingSet.add(job.id);
|
|
56
|
+
this.jobIdToDocId.set(job.id, job.documentId);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Mark a job as no longer executing for its document
|
|
60
|
+
*/
|
|
61
|
+
markJobComplete(jobId, documentId) {
|
|
62
|
+
const executingSet = this.docIdToJobId.get(documentId);
|
|
63
|
+
if (executingSet) {
|
|
64
|
+
executingSet.delete(jobId);
|
|
65
|
+
if (executingSet.size === 0) {
|
|
66
|
+
this.docIdToJobId.delete(documentId);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
this.jobIdToDocId.delete(jobId);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if all dependencies for a job have been completed
|
|
73
|
+
*/
|
|
74
|
+
areDependenciesMet(job) {
|
|
75
|
+
if (job.queueHint.length === 0) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return job.queueHint.every((depId) => this.completedJobs.has(depId));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get the next job that has all its dependencies met
|
|
82
|
+
*/
|
|
83
|
+
getNextJobWithMetDependencies(queue) {
|
|
84
|
+
for (const job of queue) {
|
|
85
|
+
if (this.areDependenciesMet(job)) {
|
|
86
|
+
return job;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
30
91
|
async enqueue(job) {
|
|
92
|
+
// Throw error if queue is blocked
|
|
93
|
+
if (this.isBlocked) {
|
|
94
|
+
throw new Error("Queue is blocked");
|
|
95
|
+
}
|
|
31
96
|
const queueKey = this.createQueueKey(job.documentId, job.scope, job.branch);
|
|
32
97
|
const queue = this.getQueue(queueKey);
|
|
33
98
|
// Add job to the end of the queue (FIFO)
|
|
34
99
|
queue.push(job);
|
|
35
|
-
// Track job location for removal
|
|
36
|
-
this.
|
|
100
|
+
// Track job location for removal and dependency resolution
|
|
101
|
+
this.jobIdToQueueKey.set(job.id, queueKey);
|
|
102
|
+
this.jobIndex.set(job.id, job);
|
|
37
103
|
// Emit job available event
|
|
38
104
|
const eventData = {
|
|
39
105
|
documentId: job.documentId,
|
|
@@ -43,34 +109,79 @@ export class InMemoryQueue {
|
|
|
43
109
|
};
|
|
44
110
|
await this.eventBus.emit(QueueEventTypes.JOB_AVAILABLE, eventData);
|
|
45
111
|
}
|
|
46
|
-
async dequeue(documentId, scope, branch) {
|
|
112
|
+
async dequeue(documentId, scope, branch, signal) {
|
|
47
113
|
const queueKey = this.createQueueKey(documentId, scope, branch);
|
|
48
114
|
const queue = this.queues.get(queueKey);
|
|
49
115
|
if (!queue || queue.length === 0) {
|
|
50
116
|
return null;
|
|
51
117
|
}
|
|
52
|
-
//
|
|
53
|
-
const job =
|
|
54
|
-
|
|
55
|
-
|
|
118
|
+
// Find the first job with met dependencies
|
|
119
|
+
const job = this.getNextJobWithMetDependencies(queue);
|
|
120
|
+
if (!job) {
|
|
121
|
+
return null; // No job with met dependencies
|
|
122
|
+
}
|
|
123
|
+
// Remove job from queue
|
|
124
|
+
const jobIndex = queue.indexOf(job);
|
|
125
|
+
queue.splice(jobIndex, 1);
|
|
126
|
+
// Remove from queue tracking but keep in job index for retry
|
|
127
|
+
this.jobIdToQueueKey.delete(job.id);
|
|
128
|
+
// Mark this job as executing for its document
|
|
129
|
+
this.markJobExecuting(job);
|
|
56
130
|
// Clean up empty queue
|
|
57
131
|
if (queue.length === 0) {
|
|
58
132
|
this.queues.delete(queueKey);
|
|
59
133
|
}
|
|
60
|
-
return
|
|
134
|
+
// Create and return the execution handle
|
|
135
|
+
const handle = new JobExecutionHandle(job, JobQueueState.READY, {
|
|
136
|
+
onStart: () => {
|
|
137
|
+
// Job is now running
|
|
138
|
+
},
|
|
139
|
+
onComplete: () => {
|
|
140
|
+
this.completeJob(job.id);
|
|
141
|
+
},
|
|
142
|
+
onFail: (reason) => {
|
|
143
|
+
this.failJob(job.id, reason);
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
return handle;
|
|
61
147
|
}
|
|
62
|
-
async dequeueNext() {
|
|
63
|
-
// Find the first non-empty queue
|
|
148
|
+
async dequeueNext(signal) {
|
|
149
|
+
// Find the first non-empty queue for a document that's not currently executing
|
|
64
150
|
for (const [queueKey, queue] of this.queues.entries()) {
|
|
65
151
|
if (queue.length > 0) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
152
|
+
// Find the first job with met dependencies
|
|
153
|
+
const job = this.getNextJobWithMetDependencies(queue);
|
|
154
|
+
if (!job) {
|
|
155
|
+
continue; // No job with met dependencies in this queue
|
|
156
|
+
}
|
|
157
|
+
// Only dequeue if the document is not currently executing jobs
|
|
158
|
+
if (!this.isDocumentExecuting(job.documentId)) {
|
|
159
|
+
// Remove job from queue
|
|
160
|
+
const jobIdx = queue.indexOf(job);
|
|
161
|
+
queue.splice(jobIdx, 1);
|
|
162
|
+
// Remove from queue tracking but keep in job index for retry
|
|
163
|
+
this.jobIdToQueueKey.delete(job.id);
|
|
164
|
+
// Keep job in jobIndex so we can retry it if needed
|
|
165
|
+
// Mark this job as executing for its document
|
|
166
|
+
this.markJobExecuting(job);
|
|
167
|
+
// Clean up empty queue
|
|
168
|
+
if (queue.length === 0) {
|
|
169
|
+
this.queues.delete(queueKey);
|
|
170
|
+
}
|
|
171
|
+
// Create and return the execution handle
|
|
172
|
+
const handle = new JobExecutionHandle(job, JobQueueState.READY, {
|
|
173
|
+
onStart: () => {
|
|
174
|
+
// Job is now running
|
|
175
|
+
},
|
|
176
|
+
onComplete: () => {
|
|
177
|
+
this.completeJob(job.id);
|
|
178
|
+
},
|
|
179
|
+
onFail: (reason) => {
|
|
180
|
+
this.failJob(job.id, reason);
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
return handle;
|
|
72
184
|
}
|
|
73
|
-
return job;
|
|
74
185
|
}
|
|
75
186
|
}
|
|
76
187
|
return null;
|
|
@@ -88,25 +199,28 @@ export class InMemoryQueue {
|
|
|
88
199
|
return total;
|
|
89
200
|
}
|
|
90
201
|
async remove(jobId) {
|
|
91
|
-
const queueKey = this.
|
|
202
|
+
const queueKey = this.jobIdToQueueKey.get(jobId);
|
|
92
203
|
if (!queueKey) {
|
|
93
204
|
return false;
|
|
94
205
|
}
|
|
95
206
|
const queue = this.queues.get(queueKey);
|
|
96
207
|
if (!queue) {
|
|
97
208
|
// Clean up orphaned index entry
|
|
209
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
98
210
|
this.jobIndex.delete(jobId);
|
|
99
211
|
return false;
|
|
100
212
|
}
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
213
|
+
const jobIdx = queue.findIndex((job) => job.id === jobId);
|
|
214
|
+
if (jobIdx === -1) {
|
|
103
215
|
// Clean up orphaned index entry
|
|
216
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
104
217
|
this.jobIndex.delete(jobId);
|
|
105
218
|
return false;
|
|
106
219
|
}
|
|
107
220
|
// Remove job from queue
|
|
108
|
-
queue.splice(
|
|
221
|
+
queue.splice(jobIdx, 1);
|
|
109
222
|
// Remove from job index
|
|
223
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
110
224
|
this.jobIndex.delete(jobId);
|
|
111
225
|
// Clean up empty queue
|
|
112
226
|
if (queue.length === 0) {
|
|
@@ -120,6 +234,7 @@ export class InMemoryQueue {
|
|
|
120
234
|
if (queue) {
|
|
121
235
|
// Remove all jobs from the job index
|
|
122
236
|
for (const job of queue) {
|
|
237
|
+
this.jobIdToQueueKey.delete(job.id);
|
|
123
238
|
this.jobIndex.delete(job.id);
|
|
124
239
|
}
|
|
125
240
|
// Remove the queue
|
|
@@ -128,9 +243,108 @@ export class InMemoryQueue {
|
|
|
128
243
|
}
|
|
129
244
|
async clearAll() {
|
|
130
245
|
// Clear all job indices
|
|
246
|
+
this.jobIdToQueueKey.clear();
|
|
131
247
|
this.jobIndex.clear();
|
|
248
|
+
this.completedJobs.clear();
|
|
132
249
|
// Clear all queues
|
|
133
250
|
this.queues.clear();
|
|
134
251
|
}
|
|
252
|
+
async hasJobs() {
|
|
253
|
+
return (this.queues.size > 0 &&
|
|
254
|
+
Array.from(this.queues.values()).some((q) => q.length > 0));
|
|
255
|
+
}
|
|
256
|
+
async completeJob(jobId) {
|
|
257
|
+
// Get the documentId for the executing job
|
|
258
|
+
const documentId = this.jobIdToDocId.get(jobId);
|
|
259
|
+
if (documentId) {
|
|
260
|
+
// Mark the job as no longer executing
|
|
261
|
+
this.markJobComplete(jobId, documentId);
|
|
262
|
+
}
|
|
263
|
+
// Track the job as completed for dependency resolution
|
|
264
|
+
this.completedJobs.add(jobId);
|
|
265
|
+
// Remove from job index
|
|
266
|
+
this.jobIndex.delete(jobId);
|
|
267
|
+
// For in-memory queue, completing just removes the job
|
|
268
|
+
// In a persistent queue, this would update the job status
|
|
269
|
+
await this.remove(jobId);
|
|
270
|
+
// Check if queue is now drained
|
|
271
|
+
this.checkDrained();
|
|
272
|
+
}
|
|
273
|
+
async failJob(jobId, error) {
|
|
274
|
+
// Get the documentId for the executing job
|
|
275
|
+
const documentId = this.jobIdToDocId.get(jobId);
|
|
276
|
+
if (documentId) {
|
|
277
|
+
// Mark the job as no longer executing
|
|
278
|
+
this.markJobComplete(jobId, documentId);
|
|
279
|
+
}
|
|
280
|
+
// Remove from job index
|
|
281
|
+
this.jobIndex.delete(jobId);
|
|
282
|
+
// For in-memory queue, failing just removes the job
|
|
283
|
+
// In a persistent queue, this would update the job status and store the error
|
|
284
|
+
await this.remove(jobId);
|
|
285
|
+
// Check if queue is now drained
|
|
286
|
+
this.checkDrained();
|
|
287
|
+
}
|
|
288
|
+
async retryJob(jobId, error) {
|
|
289
|
+
// Get the job from the index (it might be executing, not in queue)
|
|
290
|
+
const job = this.jobIndex.get(jobId);
|
|
291
|
+
if (!job) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// Mark it as no longer executing if it was
|
|
295
|
+
const documentId = this.jobIdToDocId.get(jobId);
|
|
296
|
+
if (documentId) {
|
|
297
|
+
this.markJobComplete(jobId, documentId);
|
|
298
|
+
}
|
|
299
|
+
// Remove from indices
|
|
300
|
+
this.jobIndex.delete(jobId);
|
|
301
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
302
|
+
// Update retry count
|
|
303
|
+
const updatedJob = {
|
|
304
|
+
...job,
|
|
305
|
+
retryCount: (job.retryCount || 0) + 1,
|
|
306
|
+
lastError: error,
|
|
307
|
+
};
|
|
308
|
+
// Re-enqueue with updated retry count
|
|
309
|
+
await this.enqueue(updatedJob);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Check if the queue is drained and call the callback if it is
|
|
313
|
+
*/
|
|
314
|
+
checkDrained() {
|
|
315
|
+
if (this.isDrained && this.onDrainedCallback) {
|
|
316
|
+
const callback = this.onDrainedCallback;
|
|
317
|
+
this.onDrainedCallback = undefined;
|
|
318
|
+
callback();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Returns true if and only if all jobs have been resolved.
|
|
323
|
+
*/
|
|
324
|
+
get isDrained() {
|
|
325
|
+
// Queue is drained if there are no pending jobs and no executing jobs
|
|
326
|
+
const hasPendingJobs = this.queues.size > 0 &&
|
|
327
|
+
Array.from(this.queues.values()).some((q) => q.length > 0);
|
|
328
|
+
const hasExecutingJobs = this.docIdToJobId.size > 0 &&
|
|
329
|
+
Array.from(this.docIdToJobId.values()).some((set) => set.size > 0);
|
|
330
|
+
return !hasPendingJobs && !hasExecutingJobs;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Blocks the queue from accepting new jobs.
|
|
334
|
+
* @param onDrained - Optional callback to call when the queue is drained
|
|
335
|
+
*/
|
|
336
|
+
block(onDrained) {
|
|
337
|
+
this.isBlocked = true;
|
|
338
|
+
this.onDrainedCallback = onDrained;
|
|
339
|
+
// Check if already drained
|
|
340
|
+
this.checkDrained();
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Unblocks the queue from accepting new jobs.
|
|
344
|
+
*/
|
|
345
|
+
unblock() {
|
|
346
|
+
this.isBlocked = false;
|
|
347
|
+
this.onDrainedCallback = undefined;
|
|
348
|
+
}
|
|
135
349
|
}
|
|
136
350
|
//# sourceMappingURL=queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import type { Operation } from "document-model";
|
|
2
|
+
/**
|
|
3
|
+
* State of a job in the queue
|
|
4
|
+
*/
|
|
5
|
+
export declare enum JobQueueState {
|
|
6
|
+
UNKNOWN = -1,
|
|
7
|
+
PREPROCESSING = 0,
|
|
8
|
+
PENDING = 1,
|
|
9
|
+
READY = 2,
|
|
10
|
+
RUNNING = 3,
|
|
11
|
+
RESOLVED = 4
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Interface for a job execution handle
|
|
15
|
+
*/
|
|
16
|
+
export interface IJobExecutionHandle {
|
|
17
|
+
readonly job: Job;
|
|
18
|
+
readonly state: JobQueueState;
|
|
19
|
+
start(): void;
|
|
20
|
+
complete(): void;
|
|
21
|
+
fail(reason: string): void;
|
|
22
|
+
}
|
|
2
23
|
/**
|
|
3
24
|
* Represents a job to be executed by the job executor
|
|
4
25
|
*/
|
|
@@ -15,10 +36,14 @@ export type Job = {
|
|
|
15
36
|
operation: Operation;
|
|
16
37
|
/** Timestamp when the job was created */
|
|
17
38
|
createdAt: string;
|
|
39
|
+
/** The hint for the queue to use for ordering the job */
|
|
40
|
+
queueHint: string[];
|
|
18
41
|
/** Number of retry attempts */
|
|
19
42
|
retryCount?: number;
|
|
20
43
|
/** Maximum number of retries allowed */
|
|
21
44
|
maxRetries?: number;
|
|
45
|
+
/** Last error message if job failed */
|
|
46
|
+
lastError?: string;
|
|
22
47
|
};
|
|
23
48
|
/**
|
|
24
49
|
* Event types for the queue system
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IAEX,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,mCAAmC;IACnC,SAAS,EAAE,SAAS,CAAC;IAErB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,KAAK;IACZ,aAAa,IAAI;IACjB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAE9B,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,IAAI,IAAI,CAAC;IACjB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IAEX,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,mCAAmC;IACnC,SAAS,EAAE,SAAS,CAAC;IAErB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAElB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;CAElB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
|
package/dist/src/queue/types.js
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State of a job in the queue
|
|
3
|
+
*/
|
|
4
|
+
export var JobQueueState;
|
|
5
|
+
(function (JobQueueState) {
|
|
6
|
+
JobQueueState[JobQueueState["UNKNOWN"] = -1] = "UNKNOWN";
|
|
7
|
+
JobQueueState[JobQueueState["PREPROCESSING"] = 0] = "PREPROCESSING";
|
|
8
|
+
JobQueueState[JobQueueState["PENDING"] = 1] = "PENDING";
|
|
9
|
+
JobQueueState[JobQueueState["READY"] = 2] = "READY";
|
|
10
|
+
JobQueueState[JobQueueState["RUNNING"] = 3] = "RUNNING";
|
|
11
|
+
JobQueueState[JobQueueState["RESOLVED"] = 4] = "RESOLVED";
|
|
12
|
+
})(JobQueueState || (JobQueueState = {}));
|
|
1
13
|
/**
|
|
2
14
|
* Event types for the queue system
|
|
3
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,wDAAY,CAAA;IACZ,mEAAiB,CAAA;IACjB,uDAAW,CAAA;IACX,mDAAS,CAAA;IACT,uDAAW,CAAA;IACX,yDAAY,CAAA;AACd,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAiDD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,KAAK;CACZ,CAAC"}
|
package/dist/src/reactor.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { BaseDocumentDriveServer } from "document-drive";
|
|
2
2
|
import type { IDocumentStorage } from "document-drive/storage/types";
|
|
3
3
|
import type { Action, DocumentModelState, Operation, PHDocument } from "document-model";
|
|
4
|
-
import type { IEventBus } from "./events/interfaces.js";
|
|
5
|
-
import type { IJobExecutor } from "./executor/interfaces.js";
|
|
6
4
|
import type { IReactor } from "./interfaces/reactor.js";
|
|
7
5
|
import type { IQueue } from "./queue/interfaces.js";
|
|
8
|
-
import {
|
|
6
|
+
import type { JobInfo, PagedResults, PagingOptions, PropagationMode, SearchFilter, ShutdownStatus, ViewFilter } from "./shared/types.js";
|
|
7
|
+
import { JobStatus } from "./shared/types.js";
|
|
9
8
|
/**
|
|
10
9
|
* The Reactor facade implementation.
|
|
11
10
|
*
|
|
@@ -25,11 +24,8 @@ export declare class Reactor implements IReactor {
|
|
|
25
24
|
private documentStorage;
|
|
26
25
|
private shutdownStatus;
|
|
27
26
|
private setShutdown;
|
|
28
|
-
private eventBus;
|
|
29
27
|
private queue;
|
|
30
|
-
|
|
31
|
-
private jobExecutorStarted;
|
|
32
|
-
constructor(driveServer: BaseDocumentDriveServer, documentStorage: IDocumentStorage, eventBus: IEventBus, queue: IQueue, jobExecutor: IJobExecutor);
|
|
28
|
+
constructor(driveServer: BaseDocumentDriveServer, documentStorage: IDocumentStorage, queue: IQueue);
|
|
33
29
|
/**
|
|
34
30
|
* Signals that the reactor should shutdown.
|
|
35
31
|
*/
|
|
@@ -84,11 +80,6 @@ export declare class Reactor implements IReactor {
|
|
|
84
80
|
* Retrieves the status of a job
|
|
85
81
|
*/
|
|
86
82
|
getJobStatus(jobId: string, signal?: AbortSignal): Promise<JobInfo>;
|
|
87
|
-
/**
|
|
88
|
-
* Starts the job executor if not already running.
|
|
89
|
-
* Called automatically when the first job is enqueued.
|
|
90
|
-
*/
|
|
91
|
-
private ensureJobExecutorRunning;
|
|
92
83
|
/**
|
|
93
84
|
* Finds documents by their IDs
|
|
94
85
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../src/reactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,SAAS,EAET,UAAU,EACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../src/reactor.ts"],"names":[],"mappings":"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"}
|
package/dist/src/reactor.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbortError } from "document-drive/utils/errors";
|
|
2
2
|
import { v4 as uuidv4 } from "uuid";
|
|
3
3
|
import { createMutableShutdownStatus } from "./shared/factories.js";
|
|
4
|
-
import { JobStatus
|
|
4
|
+
import { JobStatus } from "./shared/types.js";
|
|
5
5
|
import { matchesScope } from "./shared/utils.js";
|
|
6
6
|
import { filterByParentId, filterByType } from "./utils.js";
|
|
7
7
|
/**
|
|
@@ -23,17 +23,12 @@ export class Reactor {
|
|
|
23
23
|
documentStorage;
|
|
24
24
|
shutdownStatus;
|
|
25
25
|
setShutdown;
|
|
26
|
-
eventBus;
|
|
27
26
|
queue;
|
|
28
|
-
|
|
29
|
-
jobExecutorStarted = false;
|
|
30
|
-
constructor(driveServer, documentStorage, eventBus, queue, jobExecutor) {
|
|
27
|
+
constructor(driveServer, documentStorage, queue) {
|
|
31
28
|
// Store required dependencies
|
|
32
29
|
this.driveServer = driveServer;
|
|
33
30
|
this.documentStorage = documentStorage;
|
|
34
|
-
this.eventBus = eventBus;
|
|
35
31
|
this.queue = queue;
|
|
36
|
-
this.jobExecutor = jobExecutor;
|
|
37
32
|
// Create mutable shutdown status using factory method
|
|
38
33
|
const [status, setter] = createMutableShutdownStatus(false);
|
|
39
34
|
this.shutdownStatus = status;
|
|
@@ -105,6 +100,7 @@ export class Reactor {
|
|
|
105
100
|
// to the underlying store, but is here now for the interface.
|
|
106
101
|
for (const scope in document.state) {
|
|
107
102
|
if (!matchesScope(view, scope)) {
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
108
104
|
delete document.state[scope];
|
|
109
105
|
}
|
|
110
106
|
}
|
|
@@ -258,8 +254,6 @@ export class Reactor {
|
|
|
258
254
|
* Applies a list of actions to a document
|
|
259
255
|
*/
|
|
260
256
|
async mutate(id, actions) {
|
|
261
|
-
// Ensure the job executor is running
|
|
262
|
-
await this.ensureJobExecutorRunning();
|
|
263
257
|
// Create jobs for each action/operation
|
|
264
258
|
const jobs = actions.map((action, index) => ({
|
|
265
259
|
id: uuidv4(),
|
|
@@ -274,6 +268,7 @@ export class Reactor {
|
|
|
274
268
|
action: action,
|
|
275
269
|
},
|
|
276
270
|
createdAt: new Date().toISOString(),
|
|
271
|
+
queueHint: [],
|
|
277
272
|
maxRetries: 3,
|
|
278
273
|
}));
|
|
279
274
|
// Enqueue all jobs
|
|
@@ -373,27 +368,17 @@ export class Reactor {
|
|
|
373
368
|
/**
|
|
374
369
|
* Retrieves the status of a job
|
|
375
370
|
*/
|
|
376
|
-
|
|
371
|
+
getJobStatus(jobId, signal) {
|
|
372
|
+
if (signal?.aborted) {
|
|
373
|
+
throw new AbortError();
|
|
374
|
+
}
|
|
377
375
|
// TODO: Phase 3 - Implement once IQueue and job tracking is in place
|
|
378
376
|
// For now, return a not found status
|
|
379
|
-
return {
|
|
377
|
+
return Promise.resolve({
|
|
380
378
|
id: jobId,
|
|
381
379
|
status: JobStatus.FAILED,
|
|
382
380
|
error: "Job tracking not yet implemented",
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Starts the job executor if not already running.
|
|
387
|
-
* Called automatically when the first job is enqueued.
|
|
388
|
-
*/
|
|
389
|
-
async ensureJobExecutorRunning() {
|
|
390
|
-
if (!this.jobExecutorStarted) {
|
|
391
|
-
await this.jobExecutor.start({
|
|
392
|
-
maxConcurrency: 5,
|
|
393
|
-
jobTimeout: 30000,
|
|
394
|
-
});
|
|
395
|
-
this.jobExecutorStarted = true;
|
|
396
|
-
}
|
|
381
|
+
});
|
|
397
382
|
}
|
|
398
383
|
/**
|
|
399
384
|
* Finds documents by their IDs
|
|
@@ -418,6 +403,7 @@ export class Reactor {
|
|
|
418
403
|
// to the underlying store, but is here now for the interface.
|
|
419
404
|
for (const scope in document.state) {
|
|
420
405
|
if (!matchesScope(view, scope)) {
|
|
406
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
421
407
|
delete document.state[scope];
|
|
422
408
|
}
|
|
423
409
|
}
|
|
@@ -474,6 +460,7 @@ export class Reactor {
|
|
|
474
460
|
// to the underlying store, but is here now for the interface.
|
|
475
461
|
for (const scope in document.state) {
|
|
476
462
|
if (!matchesScope(view, scope)) {
|
|
463
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
477
464
|
delete document.state[scope];
|
|
478
465
|
}
|
|
479
466
|
}
|
|
@@ -527,6 +514,7 @@ export class Reactor {
|
|
|
527
514
|
// to the underlying store, but is here now for the interface.
|
|
528
515
|
for (const scope in document.state) {
|
|
529
516
|
if (!matchesScope(view, scope)) {
|
|
517
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
530
518
|
delete document.state[scope];
|
|
531
519
|
}
|
|
532
520
|
}
|
|
@@ -580,6 +568,7 @@ export class Reactor {
|
|
|
580
568
|
// Apply view filter
|
|
581
569
|
for (const scope in document.state) {
|
|
582
570
|
if (!matchesScope(view, scope)) {
|
|
571
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
583
572
|
delete document.state[scope];
|
|
584
573
|
}
|
|
585
574
|
}
|