@procedures/mongo 0.48.2 → 0.49.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/CHANGELOG.md +27 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/storage/database-changes.d.ts +15 -2
- package/dist/storage/database-changes.d.ts.map +1 -1
- package/dist/storage/database-changes.js +30 -5
- package/dist/storage/database-changes.js.map +1 -1
- package/dist/storage/document-storage.d.ts +2 -1
- package/dist/storage/document-storage.d.ts.map +1 -1
- package/dist/storage/document-storage.js +66 -18
- package/dist/storage/document-storage.js.map +1 -1
- package/dist/storage/materializer.d.ts.map +1 -1
- package/dist/storage/materializer.js +6 -5
- package/dist/storage/materializer.js.map +1 -1
- package/dist/storage/pool-share.d.ts +24 -0
- package/dist/storage/pool-share.d.ts.map +1 -0
- package/dist/storage/pool-share.js +27 -0
- package/dist/storage/pool-share.js.map +1 -0
- package/dist/storage/split-events.d.ts +57 -0
- package/dist/storage/split-events.d.ts.map +1 -0
- package/dist/storage/split-events.js +94 -0
- package/dist/storage/split-events.js.map +1 -0
- package/dist/storage/storage-hints.d.ts +7 -0
- package/dist/storage/storage-hints.d.ts.map +1 -1
- package/dist/storage/storage-hints.js +41 -7
- package/dist/storage/storage-hints.js.map +1 -1
- package/package.json +6 -3
- package/src/storage/database-changes.ts +44 -7
- package/src/storage/document-storage.ts +102 -35
- package/src/storage/materializer.ts +6 -5
- package/src/storage/pool-share.ts +30 -0
- package/src/storage/split-events.ts +135 -0
- package/src/storage/storage-hints.ts +44 -7
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
import { MongoAPIError, MongoParseError, BSON } from "mongodb";
|
|
72
72
|
import { collectionChangeTopic, collectionTopicPartition, optionalMs, realClock, writeLog, } from "@procedures/client";
|
|
73
73
|
import { DEFAULT_STORED_FORM, TOMBSTONE_FIELD, storageChangeSource, versionOfStored, } from "./document-storage.js";
|
|
74
|
+
import { SAME_TOKEN_LIMIT, SPLIT_LARGE_EVENT_STAGE, UNKNOWN_STAGE_CODE, eventJoiner, sameTokenFaults } from "./split-events.js";
|
|
74
75
|
import { trackOwnNumbers } from "./own-writes.js";
|
|
75
76
|
/** The fields of the storage that the change of an item reads. */
|
|
76
77
|
const SEQ = "_seq";
|
|
@@ -348,6 +349,9 @@ export function watchStorageChanges(storage, publish, options = {}) {
|
|
|
348
349
|
const unplaced = new Set();
|
|
349
350
|
/** The partitions that got a hint: the topics of a gap. */
|
|
350
351
|
const partitions = new Set();
|
|
352
|
+
/** True while the pipeline ends with the split stage. A server that does not know the stage sets it to false. */
|
|
353
|
+
let split = options.splitLargeEvents !== false;
|
|
354
|
+
const faults = sameTokenFaults();
|
|
351
355
|
let markReady = () => undefined;
|
|
352
356
|
let failReady = () => undefined;
|
|
353
357
|
const ready = new Promise((resolve, reject) => {
|
|
@@ -701,6 +705,7 @@ export function watchStorageChanges(storage, publish, options = {}) {
|
|
|
701
705
|
const onChange = (change) => {
|
|
702
706
|
token = change["_id"];
|
|
703
707
|
attempt = 0;
|
|
708
|
+
faults.reset();
|
|
704
709
|
const type = change["operationType"];
|
|
705
710
|
if (type === "drop" || type === "rename" || type === "dropDatabase")
|
|
706
711
|
return gap(`the collection ${source.collection} had a ${String(type)}`, { operationType: type, resumeToken: true });
|
|
@@ -805,7 +810,7 @@ export function watchStorageChanges(storage, publish, options = {}) {
|
|
|
805
810
|
gap(`the stream of ${source.collection} opens again without a resume token`, { resumeToken: false });
|
|
806
811
|
let next;
|
|
807
812
|
try {
|
|
808
|
-
next = db.collection(source.collection).watch([], {
|
|
813
|
+
next = db.collection(source.collection).watch(split ? [SPLIT_LARGE_EVENT_STAGE] : [], {
|
|
809
814
|
fullDocument: "updateLookup",
|
|
810
815
|
fullDocumentBeforeChange: "whenAvailable",
|
|
811
816
|
...(token !== undefined && { startAfter: token }),
|
|
@@ -817,6 +822,9 @@ export function watchStorageChanges(storage, publish, options = {}) {
|
|
|
817
822
|
return schedule(`the stream cannot open (${messageOf(error)})`, error);
|
|
818
823
|
}
|
|
819
824
|
stream = next;
|
|
825
|
+
const joiner = eventJoiner();
|
|
826
|
+
/** The token at the open: a reopen at the same token is no success, so the backoff does not start again. */
|
|
827
|
+
const openToken = JSON.stringify(token ?? null);
|
|
820
828
|
let ended = false;
|
|
821
829
|
const end = (reason, error) => {
|
|
822
830
|
if (ended)
|
|
@@ -835,14 +843,31 @@ export function watchStorageChanges(storage, publish, options = {}) {
|
|
|
835
843
|
log("warn", "The server does not know the resume token", { collection: source.collection, code, resumeToken: true }, `the server does not know the resume token of ${source.collection} (code ${code})`);
|
|
836
844
|
token = undefined;
|
|
837
845
|
}
|
|
846
|
+
if (code === UNKNOWN_STAGE_CODE && split) {
|
|
847
|
+
// A server before 6.0.9: the stream opens again without the split stage
|
|
848
|
+
split = false;
|
|
849
|
+
log("warn", "The server does not know the stage $changeStreamSplitLargeEvent", { collection: source.collection, code }, `the server does not know the stage $changeStreamSplitLargeEvent: an event of ${source.collection} over 16 MiB gives a gap`);
|
|
850
|
+
}
|
|
851
|
+
else if (error !== undefined) {
|
|
852
|
+
const repeats = faults.count(error, token);
|
|
853
|
+
if (repeats >= SAME_TOKEN_LIMIT) {
|
|
854
|
+
// The fault stays at one event: the next stream starts now without the token, and its open gives the gap
|
|
855
|
+
faults.reset();
|
|
856
|
+
token = undefined;
|
|
857
|
+
log("warn", "The stream fails at one token: it opens again without the token", { collection: source.collection, code, repeats }, `the stream of ${source.collection} failed ${repeats} times at one token with the code ${String(code)}: it opens again without the token`);
|
|
858
|
+
}
|
|
859
|
+
}
|
|
838
860
|
schedule(`the stream ${reason}`, error);
|
|
839
861
|
};
|
|
840
862
|
next.on("resumeTokenChanged", (resumeToken) => {
|
|
841
863
|
if (resumeToken === undefined || resumeToken === null)
|
|
842
864
|
return;
|
|
843
|
-
token
|
|
865
|
+
// In the middle of a split event, the token stays before the event: a stream that opens again gets all its fragments
|
|
866
|
+
if (!joiner.partial)
|
|
867
|
+
token = resumeToken;
|
|
844
868
|
opened = true;
|
|
845
|
-
|
|
869
|
+
if (JSON.stringify(resumeToken) !== openToken)
|
|
870
|
+
attempt = 0;
|
|
846
871
|
markReady();
|
|
847
872
|
live = true;
|
|
848
873
|
afterQueue();
|
|
@@ -852,15 +877,24 @@ export function watchStorageChanges(storage, publish, options = {}) {
|
|
|
852
877
|
markReady();
|
|
853
878
|
live = true;
|
|
854
879
|
afterQueue();
|
|
855
|
-
|
|
880
|
+
const result = joiner.push(change);
|
|
881
|
+
if (result.kind === "part")
|
|
882
|
+
return;
|
|
883
|
+
if (result.kind === "missing") {
|
|
884
|
+
// The stream started after a fragment: the event cannot be read, so the subscribers read the collection in full
|
|
885
|
+
token = result.change["_id"];
|
|
886
|
+
return gap(`a split event of ${source.collection} came without its first ${result.missing} fragments`, { missing: result.missing, resumeToken: true });
|
|
887
|
+
}
|
|
888
|
+
if (result.change["operationType"] === "invalidate") {
|
|
856
889
|
// The collection was dropped or renamed: the stream starts after the invalidate event
|
|
857
|
-
token = change["_id"];
|
|
890
|
+
token = result.change["_id"];
|
|
858
891
|
return end("ended (invalidate)");
|
|
859
892
|
}
|
|
860
|
-
onChange(change);
|
|
893
|
+
onChange(result.change);
|
|
861
894
|
});
|
|
862
895
|
next.on("error", (error) => end(`failed: ${error.message}`, error));
|
|
863
|
-
|
|
896
|
+
// The cursor of the driver tells its close before the error of a failed read. The end waits one turn, so the error comes first and counts
|
|
897
|
+
next.on("close", () => setImmediate(() => end("closed")));
|
|
864
898
|
};
|
|
865
899
|
void open();
|
|
866
900
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-hints.js","sourceRoot":"","sources":["../../src/storage/storage-hints.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage-hints.js","sourceRoot":"","sources":["../../src/storage/storage-hints.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@procedures/mongo",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.49.0",
|
|
5
5
|
"description": "MongoDB as typed procedures: documents, bulk writes, distinct, explain, collections, indexes, aggregation, change streams and database info, with safe update and delete targets.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mongodb",
|
|
@@ -66,6 +66,9 @@
|
|
|
66
66
|
"@mark1russell7/cue": "^2.1.1",
|
|
67
67
|
"@mark1russell7/rigor-bench": "^0.2.17",
|
|
68
68
|
"@mark1russell7/rigor-statistics": "^0.1.9",
|
|
69
|
+
"@mark1russell7/service": "^0.6.0",
|
|
70
|
+
"@procedures/peer": "0.49.0",
|
|
71
|
+
"@procedures/store": "0.49.0",
|
|
69
72
|
"@types/node": "^22.0.0",
|
|
70
73
|
"typescript": "^7.0.2",
|
|
71
74
|
"vitest": "^5.0.3"
|
|
@@ -74,8 +77,8 @@
|
|
|
74
77
|
"procedures": "./dist/register.js"
|
|
75
78
|
},
|
|
76
79
|
"dependencies": {
|
|
77
|
-
"@procedures/client": "0.
|
|
78
|
-
"@procedures/collections": "0.
|
|
80
|
+
"@procedures/client": "0.49.0",
|
|
81
|
+
"@procedures/collections": "0.49.0",
|
|
79
82
|
"mongodb": "^7.0.0",
|
|
80
83
|
"zod": "^4.6.5"
|
|
81
84
|
},
|
|
@@ -29,10 +29,17 @@
|
|
|
29
29
|
* of the backoff. An `onChange` that runs finishes, and no change comes after it.
|
|
30
30
|
* - Change streams need a replica set or a sharded cluster. The watcher asks the server (`hello`)
|
|
31
31
|
* before the first open: on a single server, it stops with the code 40573.
|
|
32
|
+
* - An event over the BSON limit of 16 MiB comes in fragments. The pipeline ends with the stage
|
|
33
|
+
* `$changeStreamSplitLargeEvent`, and the watcher joins the fragments into one event. A server
|
|
34
|
+
* before 6.0.9 does not know the stage. The watcher then opens the stream without it.
|
|
35
|
+
* - An error with one code at one token, 5 times in a row, does not go away: the watcher stops. An
|
|
36
|
+
* example is an event over the BSON limit (code 10334) with no split stage. A network error and an
|
|
37
|
+
* error that the driver resumes do not count.
|
|
32
38
|
*/
|
|
33
39
|
import type { ChangeStream, ChangeStreamDocument, ChangeStreamOptions, Db, Document, ResumeToken, Timestamp } from "mongodb";
|
|
34
40
|
import { realClock, writeLog, type Cancel, type Clock, type LogFields, type Logger, type ResubscribeBackoff } from "@procedures/client";
|
|
35
41
|
import { COMMAND_NOT_FOUND, LOST_TOKEN_CODES, backoffOf, codeOf, isPermanent, messageOf } from "./storage-hints.js";
|
|
42
|
+
import { SAME_TOKEN_LIMIT, SPLIT_LARGE_EVENT_STAGE, UNKNOWN_STAGE_CODE, eventJoiner, sameTokenFaults } from "./split-events.js";
|
|
36
43
|
|
|
37
44
|
/** The options of `watchDatabaseChanges()`. */
|
|
38
45
|
export interface WatchDatabaseChangesOptions<TChange extends Document = ChangeStreamDocument> {
|
|
@@ -43,8 +50,9 @@ export interface WatchDatabaseChangesOptions<TChange extends Document = ChangeSt
|
|
|
43
50
|
onChange: (change: TChange) => void | Promise<void>;
|
|
44
51
|
/**
|
|
45
52
|
* The function that gets the error that stops the watcher. The error is an `invalidate` event, a
|
|
46
|
-
* lost resume token, or an error of the first open that does not go away. An
|
|
47
|
-
* gives an `Error` with the event in its field
|
|
53
|
+
* lost resume token, or an error of the first open that does not go away. An error with one code at
|
|
54
|
+
* one token 5 times in a row also stops the watcher. An `invalidate` event gives an `Error` with the event in its field
|
|
55
|
+
* `change`. The error of a fault at one token has the fields `code`, `resumeToken` and `cause`.
|
|
48
56
|
*/
|
|
49
57
|
onError?: ((error: unknown) => void) | undefined;
|
|
50
58
|
/** The resume token after which the first stream starts. Give only one of `resumeAfter`, `startAfter` and `startAtOperationTime`. */
|
|
@@ -59,6 +67,12 @@ export interface WatchDatabaseChangesOptions<TChange extends Document = ChangeSt
|
|
|
59
67
|
fullDocumentBeforeChange?: "whenAvailable" | "required" | "off" | undefined;
|
|
60
68
|
/** The pipeline of the stream, for example a `$match` of the collections. @default [] */
|
|
61
69
|
pipeline?: Document[] | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* True to add the stage `$changeStreamSplitLargeEvent` after the pipeline. The watcher then joins
|
|
72
|
+
* the fragments of an event over 16 MiB. With false, such an event stops the watcher.
|
|
73
|
+
* @default true
|
|
74
|
+
*/
|
|
75
|
+
splitLargeEvents?: boolean | undefined;
|
|
62
76
|
/** More options of the stream, for example `maxAwaitTimeMS`, `batchSize` or `showExpandedEvents`. */
|
|
63
77
|
streamOptions?: Omit<ChangeStreamOptions, "resumeAfter" | "startAfter" | "startAtOperationTime" | "fullDocument" | "fullDocumentBeforeChange"> | undefined;
|
|
64
78
|
/**
|
|
@@ -164,6 +178,9 @@ export function watchDatabaseChanges<TChange extends Document = ChangeStreamDocu
|
|
|
164
178
|
let attempt = 0;
|
|
165
179
|
let database: string | undefined;
|
|
166
180
|
let stream: ChangeStream<Document, TChange> | undefined;
|
|
181
|
+
/** True while the pipeline ends with the split stage. A server that does not know the stage sets it to false. */
|
|
182
|
+
let split = options.splitLargeEvents !== false;
|
|
183
|
+
const faults = sameTokenFaults();
|
|
167
184
|
/** The timer of a backoff, and the end of its wait. */
|
|
168
185
|
let timer: Cancel | undefined;
|
|
169
186
|
let wake: (() => void) | undefined;
|
|
@@ -232,17 +249,24 @@ export function watchDatabaseChanges<TChange extends Document = ChangeStreamDocu
|
|
|
232
249
|
|
|
233
250
|
/** One stream: it reads the events until an error, an `invalidate` event or the stop. */
|
|
234
251
|
const read = async (next: ChangeStream<Document, TChange>): Promise<void> => {
|
|
252
|
+
const joiner = eventJoiner();
|
|
235
253
|
for (;;) {
|
|
236
|
-
const
|
|
254
|
+
const raw = await next.tryNext();
|
|
237
255
|
if (stopped) return;
|
|
238
256
|
markOpen();
|
|
239
|
-
if (
|
|
240
|
-
// A batch without events: its token is after each event that `onChange` took
|
|
257
|
+
if (raw === null) {
|
|
258
|
+
// A batch without events: its token is after each event that `onChange` took. In the middle of a split event, the token stays before it
|
|
241
259
|
const batchToken = next.resumeToken;
|
|
242
|
-
if (batchToken !== undefined && batchToken !== null) token = batchToken;
|
|
260
|
+
if (!joiner.partial && batchToken !== undefined && batchToken !== null) token = batchToken;
|
|
243
261
|
succeeded();
|
|
244
262
|
continue;
|
|
245
263
|
}
|
|
264
|
+
const result = joiner.push(raw);
|
|
265
|
+
if (result.kind === "part") continue;
|
|
266
|
+
if (result.kind === "missing") {
|
|
267
|
+
log("warn", "A split event comes without its first fragments: the stream started after one of them", { missing: result.missing, collection: collectionOf(result.change) });
|
|
268
|
+
}
|
|
269
|
+
const change = result.change as TChange;
|
|
246
270
|
if (change["operationType"] === "invalidate") {
|
|
247
271
|
token = change["_id"];
|
|
248
272
|
return fail(Object.assign(new Error(`the change stream of the database ${database ?? ""} was invalidated`), { change }), { operationType: "invalidate" });
|
|
@@ -253,6 +277,7 @@ export function watchDatabaseChanges<TChange extends Document = ChangeStreamDocu
|
|
|
253
277
|
throw new HandlerError(error, change);
|
|
254
278
|
}
|
|
255
279
|
token = change["_id"];
|
|
280
|
+
faults.reset();
|
|
256
281
|
succeeded();
|
|
257
282
|
}
|
|
258
283
|
};
|
|
@@ -287,7 +312,8 @@ export function watchDatabaseChanges<TChange extends Document = ChangeStreamDocu
|
|
|
287
312
|
if (stopped) return;
|
|
288
313
|
if (token === undefined && opened) log("warn", "The change stream opens again without a resume token: it can miss changes", {});
|
|
289
314
|
try {
|
|
290
|
-
const
|
|
315
|
+
const pipeline = [...(options.pipeline ?? []), ...(split ? [SPLIT_LARGE_EVENT_STAGE] : [])];
|
|
316
|
+
const next = handle.watch<Document, TChange>(pipeline, {
|
|
291
317
|
...options.streamOptions,
|
|
292
318
|
...(options.fullDocument !== undefined && { fullDocument: options.fullDocument }),
|
|
293
319
|
...(options.fullDocumentBeforeChange !== undefined && { fullDocumentBeforeChange: options.fullDocumentBeforeChange }),
|
|
@@ -314,7 +340,18 @@ export function watchDatabaseChanges<TChange extends Document = ChangeStreamDocu
|
|
|
314
340
|
}
|
|
315
341
|
const code = codeOf(error);
|
|
316
342
|
if (code !== undefined && LOST_TOKEN_CODES.has(code)) return fail(error, { code });
|
|
343
|
+
if (code === UNKNOWN_STAGE_CODE && split) {
|
|
344
|
+
// A server before 6.0.9: the stream opens again without the split stage
|
|
345
|
+
split = false;
|
|
346
|
+
log("warn", "The server does not know the stage $changeStreamSplitLargeEvent: an event over 16 MiB stops the watcher", { error, code });
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
317
349
|
if (!opened && isPermanent(error)) return fail(error, { code });
|
|
350
|
+
const repeats = faults.count(error, token);
|
|
351
|
+
if (repeats >= SAME_TOKEN_LIMIT) {
|
|
352
|
+
const stuck = Object.assign(new Error(`the change stream failed ${repeats} times at one token with the code ${String(code)}: ${messageOf(error)}`), { code, resumeToken: token, cause: error });
|
|
353
|
+
return fail(stuck, { code, repeats });
|
|
354
|
+
}
|
|
318
355
|
await backoff("The change stream failed: it opens again after a backoff", { error, code });
|
|
319
356
|
}
|
|
320
357
|
}
|
|
@@ -119,10 +119,11 @@ import {
|
|
|
119
119
|
type StorageWriteOptions,
|
|
120
120
|
type VersionConflict,
|
|
121
121
|
} from "@procedures/collections";
|
|
122
|
-
import { optionalMs, toMs, type Duration } from "@procedures/client";
|
|
122
|
+
import { optionalMs, Semaphore, toMs, type Duration } from "@procedures/client";
|
|
123
123
|
import { ensureConnection } from "../connection.js";
|
|
124
124
|
import { noteOwnNumbers, notePrunedIds, ownerOf } from "./own-writes.js";
|
|
125
125
|
import { boundPipeline, cutResults, DEFAULT_PIPELINE_LIMITS, scopePipeline, type PipelineLimits } from "./pipeline-scope.js";
|
|
126
|
+
import { CHANGE_READ_DIVISOR, poolShare } from "./pool-share.js";
|
|
126
127
|
|
|
127
128
|
/** The fields of the storage in a stored document. */
|
|
128
129
|
const KEY = "_key";
|
|
@@ -312,27 +313,70 @@ function hasTransactions(db: Db): Promise<boolean> {
|
|
|
312
313
|
/** The most moves of a late write to new numbers. */
|
|
313
314
|
const MAX_MOVES = 10;
|
|
314
315
|
|
|
316
|
+
/** The ends of the work of one collection. These promises do not reject. */
|
|
317
|
+
interface WorkQueue {
|
|
318
|
+
/** The end of each earlier write and change read. */
|
|
319
|
+
all: Promise<unknown>;
|
|
320
|
+
/** The end of the last write. */
|
|
321
|
+
writes: Promise<unknown>;
|
|
322
|
+
}
|
|
323
|
+
|
|
315
324
|
/**
|
|
316
|
-
* The writes and the change reads of each collection
|
|
317
|
-
*
|
|
325
|
+
* The writes and the change reads of each collection: by the client, then by the names of the database and the
|
|
326
|
+
* collection. A new `Db` object of the same client has the same queue (roadmap CLI-93). A write goes alone, in the
|
|
327
|
+
* order of the calls. A change read goes after each earlier write, next to the other change reads. So a read and a
|
|
328
|
+
* write keep the order of their calls, and a read does not wait for a read (roadmap CLI-91).
|
|
318
329
|
*/
|
|
319
|
-
const QUEUES = new WeakMap<object, Map<string,
|
|
330
|
+
const QUEUES = new WeakMap<object, Map<string, WorkQueue>>();
|
|
331
|
+
|
|
332
|
+
/** The change reads of each client at one time. A burst of reads leaves the pool to the other operations. */
|
|
333
|
+
const READS = new WeakMap<object, Semaphore>();
|
|
320
334
|
|
|
321
|
-
function
|
|
335
|
+
function queueOf(db: Db, name: string): { queues: Map<string, WorkQueue>; collection: string; queue: WorkQueue } {
|
|
322
336
|
const owner = ownerOf(db);
|
|
323
337
|
let queues = QUEUES.get(owner);
|
|
324
338
|
if (!queues) QUEUES.set(owner, (queues = new Map()));
|
|
325
339
|
const collection = `${db.databaseName}\u0000${name}`;
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
340
|
+
let queue = queues.get(collection);
|
|
341
|
+
if (!queue) queues.set(collection, (queue = { all: Promise.resolve(), writes: Promise.resolve() }));
|
|
342
|
+
return { queues, collection, queue };
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/** This function drops the queue of a collection when this end is the last of its work. */
|
|
346
|
+
function dropWhenLast(queues: Map<string, WorkQueue>, collection: string, queue: WorkQueue, end: Promise<unknown>): void {
|
|
347
|
+
void end.then(() => {
|
|
348
|
+
if (queue.all === end && queues.get(collection) === queue) queues.delete(collection);
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
const settledOf = (run: Promise<unknown>): Promise<unknown> =>
|
|
353
|
+
run.then(
|
|
329
354
|
() => undefined,
|
|
330
355
|
() => undefined
|
|
331
356
|
);
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
});
|
|
357
|
+
|
|
358
|
+
/** This function starts a write after each earlier write and change read of the collection. */
|
|
359
|
+
function enqueueWrite<R>(db: Db, name: string, task: () => Promise<R>): Promise<R> {
|
|
360
|
+
const { queues, collection, queue } = queueOf(db, name);
|
|
361
|
+
const run = queue.all.then(task);
|
|
362
|
+
const settled = settledOf(run);
|
|
363
|
+
queue.all = settled;
|
|
364
|
+
queue.writes = settled;
|
|
365
|
+
dropWhenLast(queues, collection, queue, settled);
|
|
366
|
+
return run;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** This function starts a change read after each earlier write of the collection, next to the other change reads. */
|
|
370
|
+
function enqueueRead<R>(db: Db, name: string, task: () => Promise<R>): Promise<R> {
|
|
371
|
+
const { queues, collection, queue } = queueOf(db, name);
|
|
372
|
+
const owner = ownerOf(db);
|
|
373
|
+
let reads = READS.get(owner);
|
|
374
|
+
if (!reads) READS.set(owner, (reads = new Semaphore(poolShare(db, CHANGE_READ_DIVISOR))));
|
|
375
|
+
const permits = reads;
|
|
376
|
+
const run = queue.writes.then(() => permits.withPermit(task));
|
|
377
|
+
const end = Promise.all([queue.all, settledOf(run)]);
|
|
378
|
+
queue.all = end;
|
|
379
|
+
dropWhenLast(queues, collection, queue, end);
|
|
336
380
|
return run;
|
|
337
381
|
}
|
|
338
382
|
|
|
@@ -733,6 +777,14 @@ interface Counter {
|
|
|
733
777
|
epoch: string;
|
|
734
778
|
}
|
|
735
779
|
|
|
780
|
+
/** The watermark of a collection, with the floor of the log of a partition. */
|
|
781
|
+
interface Watermark extends Counter {
|
|
782
|
+
/** The floor of the log of the partition: 0 when the partition has no floor document. */
|
|
783
|
+
floor: number;
|
|
784
|
+
/** True when a pending write holds the watermark below the counter. */
|
|
785
|
+
readonly held: boolean;
|
|
786
|
+
}
|
|
787
|
+
|
|
736
788
|
/**
|
|
737
789
|
* A `CollectionStorage` over MongoDB with flat documents, a change log, versions, queries in the
|
|
738
790
|
* database and partitions (roadmap CLI-24).
|
|
@@ -1113,35 +1165,48 @@ export class MongoDocumentStorage<T> implements CollectionStorage<T> {
|
|
|
1113
1165
|
|
|
1114
1166
|
/**
|
|
1115
1167
|
* The watermark of the collection: the highest number below each pending number of a write whose
|
|
1116
|
-
* lease has not ended, and the
|
|
1168
|
+
* lease has not ended, the epoch, and the floor of the partition. Each number up to it is written
|
|
1169
|
+
* or abandoned. One command reads them. Only the first read of a collection writes: it makes the counter.
|
|
1117
1170
|
*/
|
|
1118
|
-
private async watermark(db: Db): Promise<
|
|
1171
|
+
private async watermark(db: Db): Promise<Watermark> {
|
|
1119
1172
|
const counters = db.collection<CounterDoc>(this.countersName);
|
|
1120
|
-
|
|
1121
|
-
const
|
|
1122
|
-
|
|
1123
|
-
{
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1173
|
+
const floorId = this.floorId();
|
|
1174
|
+
const read = (): Promise<Array<{ _id: string; seq: number; epoch: string; floor?: number; low: number | null }>> =>
|
|
1175
|
+
counters
|
|
1176
|
+
.aggregate<{ _id: string; seq: number; epoch: string; floor?: number; low: number | null }>([
|
|
1177
|
+
{ $match: { _id: { $in: [this.collectionName, floorId] } } },
|
|
1178
|
+
{
|
|
1179
|
+
$project: {
|
|
1180
|
+
seq: 1,
|
|
1181
|
+
epoch: 1,
|
|
1182
|
+
floor: 1,
|
|
1183
|
+
low: {
|
|
1184
|
+
$min: {
|
|
1185
|
+
$map: {
|
|
1186
|
+
input: {
|
|
1187
|
+
$filter: { input: { $ifNull: ["$pending", []] }, cond: { $gt: ["$$this.at", { $subtract: ["$$NOW", this.writeLeaseMs] }] } },
|
|
1188
|
+
},
|
|
1189
|
+
in: "$$this.from",
|
|
1133
1190
|
},
|
|
1134
|
-
in: "$$this.from",
|
|
1135
1191
|
},
|
|
1136
1192
|
},
|
|
1137
1193
|
},
|
|
1138
1194
|
},
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1195
|
+
])
|
|
1196
|
+
.toArray();
|
|
1197
|
+
let docs = await read();
|
|
1198
|
+
if (!docs.some((doc) => doc._id === this.collectionName)) {
|
|
1199
|
+
// A duplicate key: another read made the counter at the same time
|
|
1200
|
+
await counters.updateOne({ _id: this.collectionName }, { $setOnInsert: { seq: 0, epoch: randomUUID() } }, { upsert: true }).catch((error: unknown) => {
|
|
1201
|
+
if (!isDuplicateKey(error)) throw error;
|
|
1202
|
+
});
|
|
1203
|
+
docs = await read();
|
|
1204
|
+
}
|
|
1205
|
+
const mark = docs.find((doc) => doc._id === this.collectionName);
|
|
1142
1206
|
if (!mark) throw new Error(`The sequence of ${this.collectionName} is not available`);
|
|
1143
1207
|
const seq = typeof mark.low === "number" ? Math.min(mark.seq, mark.low - 1) : mark.seq;
|
|
1144
|
-
|
|
1208
|
+
const floor = docs.find((doc) => doc._id === floorId)?.floor;
|
|
1209
|
+
return { seq, epoch: mark.epoch, floor: typeof floor === "number" ? floor : 0, held: seq < mark.seq };
|
|
1145
1210
|
}
|
|
1146
1211
|
|
|
1147
1212
|
/** The id of the document of the oldest kept change of the partition. */
|
|
@@ -1327,7 +1392,7 @@ export class MongoDocumentStorage<T> implements CollectionStorage<T> {
|
|
|
1327
1392
|
|
|
1328
1393
|
async getChangesSince(since?: string): Promise<StorageChanges<T>> {
|
|
1329
1394
|
const { db, items } = await this.collection();
|
|
1330
|
-
return
|
|
1395
|
+
return enqueueRead(db, this.collectionName, async () => {
|
|
1331
1396
|
const counter = await this.watermark(db);
|
|
1332
1397
|
const version = `${counter.epoch}.${counter.seq}`;
|
|
1333
1398
|
const held = counter.held ? { held: true } : {};
|
|
@@ -1341,7 +1406,9 @@ export class MongoDocumentStorage<T> implements CollectionStorage<T> {
|
|
|
1341
1406
|
const match = since === undefined ? null : /^([^.]+)\.(\d+)$/.exec(since);
|
|
1342
1407
|
if (!match || match[1] !== counter.epoch) return full();
|
|
1343
1408
|
const from = Number(match[2]);
|
|
1344
|
-
if (from <
|
|
1409
|
+
if (from < counter.floor || from > counter.seq) return full();
|
|
1410
|
+
// No number is above this version: the read needs no query of the items
|
|
1411
|
+
if (from === counter.seq) return { version, full: false, changed: [], deleted: [], ...held };
|
|
1345
1412
|
// A number above the watermark can belong to a write that is not visible yet: the next read gives it
|
|
1346
1413
|
const docs = await items
|
|
1347
1414
|
.find({ ...this.partitionFilter(), [SEQ]: { $gt: from, $lte: counter.seq } } as Filter<Stored>)
|
|
@@ -1367,7 +1434,7 @@ export class MongoDocumentStorage<T> implements CollectionStorage<T> {
|
|
|
1367
1434
|
|
|
1368
1435
|
private async write<R>(task: (db: Db, items: Collection<Stored>) => Promise<R>): Promise<R> {
|
|
1369
1436
|
const { db, items } = await this.collection();
|
|
1370
|
-
return
|
|
1437
|
+
return enqueueWrite(db, this.collectionName, async () => {
|
|
1371
1438
|
// The floor document of the partition, outside each transaction of the task (roadmap O66)
|
|
1372
1439
|
await this.noteFloor(db);
|
|
1373
1440
|
return task(db, items);
|