@lossless.org/client 1.22.2 → 1.23.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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/nosqldb/classes.bootstraprecord.js +4 -4
- package/dist_ts/nosqldb/classes.connection.d.ts +3 -0
- package/dist_ts/nosqldb/classes.connection.js +3 -2
- package/dist_ts/nosqldb/classes.db.d.ts +31 -0
- package/dist_ts/nosqldb/classes.db.js +41 -1
- package/dist_ts/nosqldb/classes.doc.js +5 -5
- package/dist_ts/nosqldb/classes.exactpersistence.d.ts +3 -2
- package/dist_ts/nosqldb/classes.exactpersistence.js +8 -7
- package/dist_ts/nosqldb/classes.session.d.ts +7 -6
- package/dist_ts/nosqldb/classes.session.js +88 -36
- package/dist_ts/nosqldb/classes.writelog.d.ts +129 -0
- package/dist_ts/nosqldb/classes.writelog.js +497 -0
- package/dist_ts/nosqldb/classes.writeobserver.d.ts +13 -0
- package/dist_ts/nosqldb/classes.writeobserver.js +47 -25
- package/dist_ts/nosqldb/classes.writerevisions.d.ts +40 -4
- package/dist_ts/nosqldb/classes.writerevisions.js +174 -37
- package/dist_ts/nosqldb/engineidentity.d.ts +6 -0
- package/dist_ts/nosqldb/engineidentity.js +14 -1
- package/package.json +2 -2
- package/readme.md +11 -10
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/nosqldb/classes.bootstraprecord.ts +3 -3
- package/ts/nosqldb/classes.connection.ts +5 -1
- package/ts/nosqldb/classes.db.ts +64 -0
- package/ts/nosqldb/classes.doc.ts +4 -4
- package/ts/nosqldb/classes.exactpersistence.ts +8 -7
- package/ts/nosqldb/classes.session.ts +107 -38
- package/ts/nosqldb/classes.writelog.ts +701 -0
- package/ts/nosqldb/classes.writeobserver.ts +62 -28
- package/ts/nosqldb/classes.writerevisions.ts +225 -41
- package/ts/nosqldb/engineidentity.ts +16 -0
|
@@ -5,7 +5,8 @@ import { assertDataOptions } from './classes.operationbudget.js';
|
|
|
5
5
|
import { SmartdataPersistenceError, createSmartdataTimeoutError, isMongoDeadlineError, isMongoTransientTransactionError, normalizeDeadlineError, normalizeOrdinaryPersistenceError, } from './classes.persistence.js';
|
|
6
6
|
import { captureSmartdataWrite, hasSmartdataWriteObservers, } from './classes.writeobserver.js';
|
|
7
7
|
import { accountSmartdataOwnWriteRevisions, captureSmartdataCollectionChange, captureSmartdataReadChange, hasSmartdataReadScope, hasSmartdataReadSets, observeSmartdataRead, runSmartdataWrite, writeRevisionIdsOfWrite, } from './classes.readtracker.js';
|
|
8
|
-
import {
|
|
8
|
+
import { beginSmartdataWriteRevisionAttempt, flushSmartdataWriteRevisions, isSmartdataWriteRevisionsActive, readPreviousRevisionIds, sharedRevisionId, writeRevisionsPartitionField, } from './classes.writerevisions.js';
|
|
9
|
+
import { deliverSmartdataWriteLogCommit, flushSmartdataWriteLog, isSmartdataWriteLogActive, requiresSmartdataWriteTransactions, writeLogReportOf, } from './classes.writelog.js';
|
|
9
10
|
/** A transaction whose commit outcome is unknown may have applied its writes. */
|
|
10
11
|
const changeReadsOfTransaction = (writesArg) => {
|
|
11
12
|
for (const write of writesArg)
|
|
@@ -165,10 +166,17 @@ export class SmartdataSession {
|
|
|
165
166
|
let attemptInterruption;
|
|
166
167
|
/** The session-ended rejection the last attempt failed with, and how far that transaction had got. */
|
|
167
168
|
let sessionEnded;
|
|
168
|
-
let
|
|
169
|
+
let revisionAttempt;
|
|
170
|
+
/** The last attempt's write-log entry until the transaction's outcome is known. */
|
|
171
|
+
let logCommit;
|
|
169
172
|
const runAttempt = async () => {
|
|
170
|
-
|
|
171
|
-
|
|
173
|
+
// The last attempt's slots end after this one starts, so it bumps others.
|
|
174
|
+
const attemptStartedAt = performance.now();
|
|
175
|
+
revisionAttempt?.finish(false);
|
|
176
|
+
revisionAttempt = beginSmartdataWriteRevisionAttempt(binding.owner, attemptStartedAt);
|
|
177
|
+
// The driver starts another attempt only once the last one was aborted.
|
|
178
|
+
logCommit?.settle();
|
|
179
|
+
logCommit = undefined;
|
|
172
180
|
const attempt = Symbol('smartdataTransactionAttempt');
|
|
173
181
|
binding.transactionAttempt = attempt;
|
|
174
182
|
binding.transactionCallbackOpen = true;
|
|
@@ -177,6 +185,9 @@ export class SmartdataSession {
|
|
|
177
185
|
binding.transactionCommitReached = false;
|
|
178
186
|
binding.transactionWrites = [];
|
|
179
187
|
binding.revisionBumps = new Set();
|
|
188
|
+
binding.revisionAttempt = revisionAttempt;
|
|
189
|
+
binding.logReports = [];
|
|
190
|
+
binding.logUnplaced = new Set();
|
|
180
191
|
callbackError = undefined;
|
|
181
192
|
attemptInterruption = undefined;
|
|
182
193
|
try {
|
|
@@ -221,12 +232,15 @@ export class SmartdataSession {
|
|
|
221
232
|
}
|
|
222
233
|
// An abort that arrived while the callback ran rolls the attempt back.
|
|
223
234
|
signal?.throwIfAborted();
|
|
224
|
-
// The writes' revisions commit with them. A
|
|
225
|
-
// before its commit, and a transient one is
|
|
235
|
+
// The writes' revisions and write-log entry commit with them. A
|
|
236
|
+
// failure fails the attempt before its commit, and a transient one is
|
|
237
|
+
// retried with it.
|
|
238
|
+
const mongoDb = binding.client.db(binding.owner.smartdataOptions.mongoDbName);
|
|
226
239
|
if (binding.revisionBumps.size > 0) {
|
|
227
|
-
|
|
228
|
-
await flushSmartdataWriteRevisions(
|
|
240
|
+
revisionAttempt.commit();
|
|
241
|
+
await flushSmartdataWriteRevisions(mongoDb, binding.rawSession, revisionAttempt.slots, signal);
|
|
229
242
|
}
|
|
243
|
+
logCommit = await flushSmartdataWriteLog(binding.owner, mongoDb, binding.rawSession, binding.logReports, binding.logUnplaced, signal);
|
|
230
244
|
// The driver commits next; a deadline that expires or a session that
|
|
231
245
|
// ends from here on leaves the commit outcome unknown.
|
|
232
246
|
binding.transactionCommitReached = true;
|
|
@@ -314,8 +328,10 @@ export class SmartdataSession {
|
|
|
314
328
|
throw rejectTransaction(error, outcome);
|
|
315
329
|
}
|
|
316
330
|
finally {
|
|
317
|
-
if (!returnedFromCommit)
|
|
318
|
-
|
|
331
|
+
if (!returnedFromCommit) {
|
|
332
|
+
revisionAttempt?.finish(false);
|
|
333
|
+
logCommit?.settle();
|
|
334
|
+
}
|
|
319
335
|
binding.transactionActive = false;
|
|
320
336
|
binding.transactionTimeoutMS = undefined;
|
|
321
337
|
binding.transactionSignal = undefined;
|
|
@@ -325,27 +341,38 @@ export class SmartdataSession {
|
|
|
325
341
|
binding.transactionEnded = undefined;
|
|
326
342
|
binding.transactionWrites = [];
|
|
327
343
|
binding.revisionBumps = new Set();
|
|
344
|
+
binding.revisionAttempt = undefined;
|
|
345
|
+
binding.logReports = [];
|
|
346
|
+
binding.logUnplaced = new Set();
|
|
328
347
|
}
|
|
329
|
-
|
|
330
|
-
|
|
348
|
+
try {
|
|
349
|
+
if (transactionEnded) {
|
|
350
|
+
const outcome = commitOutcomeOfTransactionEnd(transactionEnded);
|
|
351
|
+
try {
|
|
352
|
+
if (outcome === 'unknown')
|
|
353
|
+
changeReadsOfTransaction(committedWrites);
|
|
354
|
+
}
|
|
355
|
+
finally {
|
|
356
|
+
revisionAttempt?.finish(false);
|
|
357
|
+
}
|
|
358
|
+
throw rejectTransaction(createTransactionSessionEndedError(transactionEnded), outcome);
|
|
359
|
+
}
|
|
331
360
|
try {
|
|
332
|
-
|
|
333
|
-
|
|
361
|
+
changeReadsOfTransaction(committedWrites);
|
|
362
|
+
accountSmartdataOwnWriteRevisions(binding.owner, committedRevisionBumps);
|
|
334
363
|
}
|
|
335
364
|
finally {
|
|
336
|
-
|
|
365
|
+
revisionAttempt?.finish(true);
|
|
337
366
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
367
|
+
for (const write of committedWrites) {
|
|
368
|
+
write.deliver?.();
|
|
369
|
+
}
|
|
370
|
+
// Followers hear of the commit before they may read it from the journal.
|
|
371
|
+
if (logCommit)
|
|
372
|
+
deliverSmartdataWriteLogCommit(binding.owner, logCommit);
|
|
343
373
|
}
|
|
344
374
|
finally {
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
for (const write of committedWrites) {
|
|
348
|
-
write.deliver?.();
|
|
375
|
+
logCommit?.settle();
|
|
349
376
|
}
|
|
350
377
|
return result;
|
|
351
378
|
}
|
|
@@ -378,6 +405,8 @@ export const createSmartdataSession = (ownerArg) => {
|
|
|
378
405
|
transactionCommitReached: false,
|
|
379
406
|
transactionWrites: [],
|
|
380
407
|
revisionBumps: new Set(),
|
|
408
|
+
logReports: [],
|
|
409
|
+
logUnplaced: new Set(),
|
|
381
410
|
invalidated: false,
|
|
382
411
|
};
|
|
383
412
|
bindings.set(session, binding);
|
|
@@ -555,14 +584,15 @@ const revisionTransactionSessionOf = (ownerArg) => {
|
|
|
555
584
|
};
|
|
556
585
|
/**
|
|
557
586
|
* Whether a write must start a transaction of its own to carry its write
|
|
558
|
-
* revisions: the database keeps
|
|
559
|
-
* transaction. A raw driver session cannot carry them and is
|
|
587
|
+
* revisions and write-log entry: the database keeps either and the write runs
|
|
588
|
+
* outside an owned transaction. A raw driver session cannot carry them and is
|
|
589
|
+
* refused.
|
|
560
590
|
*/
|
|
561
|
-
export const
|
|
562
|
-
if (!
|
|
591
|
+
export const needsSmartdataWriteTransaction = (sessionArg, ownerArg) => {
|
|
592
|
+
if (!requiresSmartdataWriteTransactions(ownerArg))
|
|
563
593
|
return false;
|
|
564
594
|
if (sessionArg !== undefined && !isSmartdataSession(sessionArg)) {
|
|
565
|
-
throw new SmartdataPersistenceError('unsupported_operation', 'Writes of a database with write revisions run on sessions of db.createSession(), not raw driver sessions.');
|
|
595
|
+
throw new SmartdataPersistenceError('unsupported_operation', 'Writes of a database with write revisions or a write log run on sessions of db.createSession(), not raw driver sessions.');
|
|
566
596
|
}
|
|
567
597
|
return sessionArg === undefined || !resolveBinding(sessionArg, ownerArg).transactionActive;
|
|
568
598
|
};
|
|
@@ -571,13 +601,13 @@ const transactionOptionsOf = (timeoutMSArg, signalArg) => ({
|
|
|
571
601
|
...(signalArg === undefined ? {} : { signal: signalArg }),
|
|
572
602
|
});
|
|
573
603
|
/**
|
|
574
|
-
* Runs one write of a database with write revisions
|
|
575
|
-
* revisions commit with it: on the caller's owned session, or on a session of
|
|
604
|
+
* Runs one write of a database with write revisions or a write log in a
|
|
605
|
+
* transaction, so its revisions and entry commit with it: on the caller's owned session, or on a session of
|
|
576
606
|
* its own that ends with the call. The call's deadline and signal bound the
|
|
577
607
|
* whole transaction; the collection is prepared before it starts, since its
|
|
578
608
|
* DDL cannot run inside.
|
|
579
609
|
*/
|
|
580
|
-
export const
|
|
610
|
+
export const runSmartdataWriteTransaction = async (sessionArg, ownerArg, optionsArg, writeArg) => {
|
|
581
611
|
const timeoutMS = optionsArg.timeoutMS ?? optionsArg.defaultTimeoutMS;
|
|
582
612
|
if (sessionArg) {
|
|
583
613
|
if (!optionsArg.prepared)
|
|
@@ -610,8 +640,8 @@ export const runSmartdataRevisionTransaction = async (sessionArg, ownerArg, opti
|
|
|
610
640
|
*/
|
|
611
641
|
export const runWithOrdinarySmartdataSession = async (sessionArg, ownerArg, optionsArg, operationArg) => {
|
|
612
642
|
optionsArg.signal?.throwIfAborted();
|
|
613
|
-
if (optionsArg.ordinaryWrite &&
|
|
614
|
-
return
|
|
643
|
+
if (optionsArg.ordinaryWrite && needsSmartdataWriteTransaction(sessionArg, ownerArg)) {
|
|
644
|
+
return runSmartdataWriteTransaction(sessionArg, ownerArg, optionsArg, (transactionSessionArg) => runWithOrdinarySmartdataSession(transactionSessionArg, ownerArg, {
|
|
615
645
|
ordinaryWrite: true,
|
|
616
646
|
prepared: true,
|
|
617
647
|
...(optionsArg.collectionName === undefined ? {} : { collectionName: optionsArg.collectionName }),
|
|
@@ -651,6 +681,20 @@ const bufferTransactionWrite = (bindingArg, writeArg) => {
|
|
|
651
681
|
bindingArg.transactionWrites.push(writeArg);
|
|
652
682
|
}
|
|
653
683
|
};
|
|
684
|
+
/**
|
|
685
|
+
* Adds a write's report, or a collection no report describes, to the
|
|
686
|
+
* write-log entry of an owned transaction's current attempt. A write that
|
|
687
|
+
* settles after its attempt ended rolls back with that attempt.
|
|
688
|
+
*/
|
|
689
|
+
const logTransactionWrite = (bindingArg, writeArg) => {
|
|
690
|
+
const attempt = transactionContext.getStore()?.attempt;
|
|
691
|
+
if (attempt === undefined || attempt !== bindingArg.transactionAttempt)
|
|
692
|
+
return;
|
|
693
|
+
if ('report' in writeArg)
|
|
694
|
+
bindingArg.logReports.push(writeArg.report);
|
|
695
|
+
else
|
|
696
|
+
bindingArg.logUnplaced.add(writeArg.unplaced);
|
|
697
|
+
};
|
|
654
698
|
/**
|
|
655
699
|
* Adds write-revision counters to the current attempt of an owned transaction.
|
|
656
700
|
* A write that settles after its attempt ended rolls back with that attempt.
|
|
@@ -659,8 +703,10 @@ const bumpTransactionRevisions = (bindingArg, idsArg) => {
|
|
|
659
703
|
const attempt = transactionContext.getStore()?.attempt;
|
|
660
704
|
if (attempt === undefined || attempt !== bindingArg.transactionAttempt)
|
|
661
705
|
return;
|
|
662
|
-
for (const id of idsArg)
|
|
706
|
+
for (const id of idsArg) {
|
|
663
707
|
bindingArg.revisionBumps.add(id);
|
|
708
|
+
bindingArg.revisionAttempt?.bump(id);
|
|
709
|
+
}
|
|
664
710
|
};
|
|
665
711
|
/**
|
|
666
712
|
* Reads, in the write's transaction, the write-revision partitions of the
|
|
@@ -701,6 +747,9 @@ export const reportSmartdataWrite = (ownerArg, sessionArg, writeArg) => {
|
|
|
701
747
|
if (field !== undefined && isSmartdataWriteRevisionsActive(ownerArg)) {
|
|
702
748
|
bumpTransactionRevisions(binding, writeRevisionIdsOfWrite(writeArg, field));
|
|
703
749
|
}
|
|
750
|
+
const report = writeLogReportOf(ownerArg, writeArg);
|
|
751
|
+
if (report)
|
|
752
|
+
logTransactionWrite(binding, { report });
|
|
704
753
|
}
|
|
705
754
|
const changeReads = captureSmartdataReadChange(ownerArg, writeArg, buffered);
|
|
706
755
|
const deliver = captureSmartdataWrite(ownerArg, writeArg);
|
|
@@ -725,6 +774,9 @@ export const reportSmartdataWriteFailure = (ownerArg, sessionArg, collectionName
|
|
|
725
774
|
if (binding && buffered && isSmartdataWriteRevisionsActive(ownerArg)) {
|
|
726
775
|
bumpTransactionRevisions(binding, [sharedRevisionId(collectionNameArg)]);
|
|
727
776
|
}
|
|
777
|
+
if (binding && buffered && isSmartdataWriteLogActive(ownerArg)) {
|
|
778
|
+
logTransactionWrite(binding, { unplaced: collectionNameArg });
|
|
779
|
+
}
|
|
728
780
|
const changeReads = captureSmartdataCollectionChange(ownerArg, collectionNameArg, buffered);
|
|
729
781
|
if (!changeReads)
|
|
730
782
|
return;
|
|
@@ -841,4 +893,4 @@ const closeSessionBinding = async (bindingArg, endOptionsArg) => {
|
|
|
841
893
|
export const unwrapSmartdataSessionInvalidationErrors = (errorArg) => errorArg instanceof SmartdataSessionInvalidationAggregateError
|
|
842
894
|
? errorArg.errors
|
|
843
895
|
: undefined;
|
|
844
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBQ2xDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsR0FHM0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLGdDQUFnQyxFQUNoQywwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUd4QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxpQ0FBaUMsRUFDakMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQix1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLDRCQUE0QixHQUM3QixNQUFNLDZCQUE2QixDQUFDO0FBeUNyQyxpRkFBaUY7QUFDakYsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFNBQWdELEVBQVEsRUFBRTtJQUMxRixLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVM7UUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFpQkYsa0ZBQWtGO0FB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
|
|
896
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBQ2xDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsR0FJM0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLGdDQUFnQyxFQUNoQywwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUd4QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUUvQix1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLDRCQUE0QixHQUM3QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6QixrQ0FBa0MsRUFDbEMsZ0JBQWdCLEdBRWpCLE1BQU0sdUJBQXVCLENBQUM7QUErQy9CLGlGQUFpRjtBQUNqRixNQUFNLHdCQUF3QixHQUFHLENBQUMsU0FBZ0QsRUFBUSxFQUFF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
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { SmartdataDb } from './classes.db.js';
|
|
3
|
+
import { type ISmartdataWrite, type ISmartdataWriteReport } from './classes.writeobserver.js';
|
|
4
|
+
/**
|
|
5
|
+
* The write log lets a process follow the model writes of every process in
|
|
6
|
+
* commit order. Every transaction that writes through the models adds one
|
|
7
|
+
* entry to `__smartdata_write_log` right before its commit: the observed
|
|
8
|
+
* fields of its writes, keyed by the transaction's commit receipt. The
|
|
9
|
+
* engine's commit journal lists each committed transaction with that receipt,
|
|
10
|
+
* so a follower reads the journal in commit order and joins every commit to
|
|
11
|
+
* its entry. A commit without an entry — a raw driver write, a migration, an
|
|
12
|
+
* entry the retention removed — still names its collections, which the
|
|
13
|
+
* follower reports as changed in ways no report describes.
|
|
14
|
+
*/
|
|
15
|
+
export interface ISmartdataWriteLogOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Top-level field names the log records of every write: 1 to 64 distinct
|
|
18
|
+
* names, no `.` and no leading `$`. A follower follows some or all of them.
|
|
19
|
+
*/
|
|
20
|
+
fields: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
/** A commit's position in the engine's commit journal. */
|
|
23
|
+
export interface ISmartdataCommitStamp {
|
|
24
|
+
/** The journal's timeline; a restart of a memory-backed engine starts a new one. */
|
|
25
|
+
readonly timeline: string;
|
|
26
|
+
/** The commit's position on the timeline, an exact unsigned decimal. */
|
|
27
|
+
readonly sequence: string;
|
|
28
|
+
}
|
|
29
|
+
/** One committed transaction, delivered once to every follower of its database. */
|
|
30
|
+
export interface ISmartdataFollowedWrite {
|
|
31
|
+
/**
|
|
32
|
+
* `local` for a transaction of this database instance, delivered as soon as
|
|
33
|
+
* its commit was confirmed; `journal` for one read from the commit journal.
|
|
34
|
+
*/
|
|
35
|
+
readonly origin: 'local' | 'journal';
|
|
36
|
+
/** The commit's journal position; `null` for a local delivery. */
|
|
37
|
+
readonly stamp: ISmartdataCommitStamp | null;
|
|
38
|
+
/** When the engine committed it; `null` for a local delivery. */
|
|
39
|
+
readonly committedAtMs: number | null;
|
|
40
|
+
/** The transaction's model writes, with the follower's fields. */
|
|
41
|
+
readonly reports: readonly ISmartdataWriteReport[];
|
|
42
|
+
/** Collections the transaction changed in ways no report describes. */
|
|
43
|
+
readonly unplaced: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Why a follower lost its place in the journal: the journal no longer
|
|
47
|
+
* continues the history the follower read, as after a restart of a
|
|
48
|
+
* memory-backed engine, or it no longer holds every commit since the
|
|
49
|
+
* follower's position.
|
|
50
|
+
*/
|
|
51
|
+
export type TSmartdataWriteGapReason = 'timeline' | 'retention';
|
|
52
|
+
export interface ISmartdataWriteGap {
|
|
53
|
+
readonly reason: TSmartdataWriteGapReason;
|
|
54
|
+
}
|
|
55
|
+
export interface ISmartdataWriteFollowerOptions {
|
|
56
|
+
/** Fields of the database's write log the deliveries carry. */
|
|
57
|
+
fields: readonly string[];
|
|
58
|
+
/**
|
|
59
|
+
* Called synchronously once per committed transaction. A listener that
|
|
60
|
+
* throws is logged and the follower moves on.
|
|
61
|
+
*/
|
|
62
|
+
onWrite: (writeArg: ISmartdataFollowedWrite) => void;
|
|
63
|
+
/**
|
|
64
|
+
* Called when commits may have been missed. The follower has already moved
|
|
65
|
+
* to the journal's head, so state rebuilt from the database now misses
|
|
66
|
+
* nothing later deliveries do not report.
|
|
67
|
+
*/
|
|
68
|
+
onGap: (gapArg: ISmartdataWriteGap) => void;
|
|
69
|
+
}
|
|
70
|
+
export interface ISmartdataWriteFollower {
|
|
71
|
+
/** Stops the follower and waits until its last delivery returned. */
|
|
72
|
+
stop(): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/** The collection that holds the entries. */
|
|
75
|
+
export declare const writeLogCollectionName = "__smartdata_write_log";
|
|
76
|
+
/** How long an entry is kept. The engine keeps a commit in its journal at most as long. */
|
|
77
|
+
export declare const writeLogRetentionSeconds: number;
|
|
78
|
+
interface IWriteLogEntry {
|
|
79
|
+
readonly reports: readonly ISmartdataWriteReport[];
|
|
80
|
+
readonly unplaced: readonly string[];
|
|
81
|
+
}
|
|
82
|
+
/** @internal One transaction's entry, written in the transaction, until its outcome settled. */
|
|
83
|
+
export interface ISmartdataWriteLogCommit {
|
|
84
|
+
readonly receipt: string;
|
|
85
|
+
readonly entry: IWriteLogEntry;
|
|
86
|
+
/** Releases the followers that wait for the outcome; called once the outcome is known. */
|
|
87
|
+
settle(): void;
|
|
88
|
+
}
|
|
89
|
+
/** @internal Validates and records the option; called once by the database's constructor. */
|
|
90
|
+
export declare const configureSmartdataWriteLog: (dbArg: SmartdataDb, optionsArg: unknown) => void;
|
|
91
|
+
/**
|
|
92
|
+
* @internal The write log is configured and the engine journals its commits
|
|
93
|
+
* in commit order; elsewhere the option is inert.
|
|
94
|
+
*/
|
|
95
|
+
export declare const isSmartdataWriteLogActive: (dbArg: SmartdataDb) => boolean;
|
|
96
|
+
/**
|
|
97
|
+
* @internal Every model write runs in an owned transaction, which carries its
|
|
98
|
+
* write revisions and its write-log entry.
|
|
99
|
+
*/
|
|
100
|
+
export declare const requiresSmartdataWriteTransactions: (dbArg: SmartdataDb) => boolean;
|
|
101
|
+
/** @internal The report a write adds to its transaction's entry, or `undefined` without an active log. */
|
|
102
|
+
export declare const writeLogReportOf: (dbArg: SmartdataDb, writeArg: ISmartdataWrite) => ISmartdataWriteReport | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* @internal Creates the index that expires entries, before `init()` publishes
|
|
105
|
+
* the connection. Another process creating it at the same time is fine.
|
|
106
|
+
*/
|
|
107
|
+
export declare const ensureSmartdataWriteLog: (mongoDbArg: plugins.mongodb.Db, optionsArg?: {
|
|
108
|
+
timeoutMS?: number;
|
|
109
|
+
signal?: AbortSignal;
|
|
110
|
+
}) => Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* @internal Writes a transaction's entry inside that transaction, right
|
|
113
|
+
* before its commit, and registers it until its outcome settled. `undefined`
|
|
114
|
+
* when the transaction wrote nothing through the models.
|
|
115
|
+
*/
|
|
116
|
+
export declare const flushSmartdataWriteLog: (dbArg: SmartdataDb, mongoDbArg: plugins.mongodb.Db, rawSessionArg: plugins.mongodb.ClientSession, reportsArg: readonly ISmartdataWriteReport[], unplacedArg: ReadonlySet<string>, signalArg: AbortSignal | undefined) => Promise<ISmartdataWriteLogCommit | undefined>;
|
|
117
|
+
/**
|
|
118
|
+
* @internal Delivers a confirmed commit of this database instance to its
|
|
119
|
+
* followers at once; each then skips the commit when the journal lists it.
|
|
120
|
+
*/
|
|
121
|
+
export declare const deliverSmartdataWriteLogCommit: (dbArg: SmartdataDb, commitArg: ISmartdataWriteLogCommit) => void;
|
|
122
|
+
/**
|
|
123
|
+
* @internal Starts a follower at the journal's head; `db.followWrites()`
|
|
124
|
+
* documents it.
|
|
125
|
+
*/
|
|
126
|
+
export declare const followSmartdataWrites: (dbArg: SmartdataDb, optionsArg: unknown) => Promise<ISmartdataWriteFollower>;
|
|
127
|
+
/** @internal Stops every follower of the database; `close()` calls it. */
|
|
128
|
+
export declare const stopSmartdataWriteFollowers: (dbArg: SmartdataDb) => Promise<void>;
|
|
129
|
+
export {};
|