@lossless.org/client 1.22.1 → 1.23.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.
Files changed (35) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/nosqldb/classes.bootstraprecord.js +4 -4
  3. package/dist_ts/nosqldb/classes.connection.d.ts +3 -0
  4. package/dist_ts/nosqldb/classes.connection.js +3 -2
  5. package/dist_ts/nosqldb/classes.db.d.ts +31 -0
  6. package/dist_ts/nosqldb/classes.db.js +45 -2
  7. package/dist_ts/nosqldb/classes.doc.js +5 -5
  8. package/dist_ts/nosqldb/classes.exactpersistence.d.ts +3 -2
  9. package/dist_ts/nosqldb/classes.exactpersistence.js +8 -7
  10. package/dist_ts/nosqldb/classes.readtracker.d.ts +6 -4
  11. package/dist_ts/nosqldb/classes.readtracker.js +42 -10
  12. package/dist_ts/nosqldb/classes.session.d.ts +7 -6
  13. package/dist_ts/nosqldb/classes.session.js +91 -23
  14. package/dist_ts/nosqldb/classes.writelog.d.ts +129 -0
  15. package/dist_ts/nosqldb/classes.writelog.js +497 -0
  16. package/dist_ts/nosqldb/classes.writeobserver.d.ts +13 -0
  17. package/dist_ts/nosqldb/classes.writeobserver.js +47 -25
  18. package/dist_ts/nosqldb/classes.writerevisions.d.ts +18 -7
  19. package/dist_ts/nosqldb/classes.writerevisions.js +179 -30
  20. package/dist_ts/nosqldb/engineidentity.d.ts +6 -0
  21. package/dist_ts/nosqldb/engineidentity.js +14 -1
  22. package/package.json +2 -2
  23. package/readme.md +11 -10
  24. package/ts/00_commitinfo_data.ts +1 -1
  25. package/ts/nosqldb/classes.bootstraprecord.ts +3 -3
  26. package/ts/nosqldb/classes.connection.ts +5 -1
  27. package/ts/nosqldb/classes.db.ts +68 -0
  28. package/ts/nosqldb/classes.doc.ts +4 -4
  29. package/ts/nosqldb/classes.exactpersistence.ts +8 -7
  30. package/ts/nosqldb/classes.readtracker.ts +41 -7
  31. package/ts/nosqldb/classes.session.ts +107 -26
  32. package/ts/nosqldb/classes.writelog.ts +701 -0
  33. package/ts/nosqldb/classes.writeobserver.ts +62 -28
  34. package/ts/nosqldb/classes.writerevisions.ts +224 -32
  35. package/ts/nosqldb/engineidentity.ts +16 -0
@@ -4,8 +4,9 @@ import { SmartdataOperationDeadline, requireOperationSignal, requireOperationTim
4
4
  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
- import { captureSmartdataCollectionChange, captureSmartdataReadChange, hasSmartdataReadScope, hasSmartdataReadSets, observeSmartdataRead, runSmartdataWrite, writeRevisionIdsOfWrite, } from './classes.readtracker.js';
8
- import { flushSmartdataWriteRevisions, isSmartdataWriteRevisionsActive, readPreviousRevisionIds, sharedRevisionId, writeRevisionsPartitionField, } from './classes.writerevisions.js';
7
+ import { accountSmartdataOwnWriteRevisions, captureSmartdataCollectionChange, captureSmartdataReadChange, hasSmartdataReadScope, hasSmartdataReadSets, observeSmartdataRead, runSmartdataWrite, writeRevisionIdsOfWrite, } from './classes.readtracker.js';
8
+ import { beginSmartdataWriteRevisionCommit, flushSmartdataWriteRevisions, isSmartdataWriteRevisionsActive, noteSmartdataWriteRevisionEntries, 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,7 +166,15 @@ 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;
169
+ let finishRevisionCommit;
170
+ /** The last attempt's write-log entry until the transaction's outcome is known. */
171
+ let logCommit;
168
172
  const runAttempt = async () => {
173
+ finishRevisionCommit?.();
174
+ finishRevisionCommit = undefined;
175
+ // The driver starts another attempt only once the last one was aborted.
176
+ logCommit?.settle();
177
+ logCommit = undefined;
169
178
  const attempt = Symbol('smartdataTransactionAttempt');
170
179
  binding.transactionAttempt = attempt;
171
180
  binding.transactionCallbackOpen = true;
@@ -174,6 +183,8 @@ export class SmartdataSession {
174
183
  binding.transactionCommitReached = false;
175
184
  binding.transactionWrites = [];
176
185
  binding.revisionBumps = new Set();
186
+ binding.logReports = [];
187
+ binding.logUnplaced = new Set();
177
188
  callbackError = undefined;
178
189
  attemptInterruption = undefined;
179
190
  try {
@@ -218,11 +229,15 @@ export class SmartdataSession {
218
229
  }
219
230
  // An abort that arrived while the callback ran rolls the attempt back.
220
231
  signal?.throwIfAborted();
221
- // The writes' revisions commit with them. A failure fails the attempt
222
- // before its commit, and a transient one is retried with it.
232
+ // The writes' revisions and write-log entry commit with them. A
233
+ // failure fails the attempt before its commit, and a transient one is
234
+ // retried with it.
235
+ const mongoDb = binding.client.db(binding.owner.smartdataOptions.mongoDbName);
223
236
  if (binding.revisionBumps.size > 0) {
224
- await flushSmartdataWriteRevisions(binding.client.db(binding.owner.smartdataOptions.mongoDbName), binding.rawSession, binding.revisionBumps, signal);
237
+ finishRevisionCommit = beginSmartdataWriteRevisionCommit(binding.owner, binding.revisionBumps);
238
+ await flushSmartdataWriteRevisions(mongoDb, binding.rawSession, binding.revisionBumps, signal);
225
239
  }
240
+ logCommit = await flushSmartdataWriteLog(binding.owner, mongoDb, binding.rawSession, binding.logReports, binding.logUnplaced, signal);
226
241
  // The driver commits next; a deadline that expires or a session that
227
242
  // ends from here on leaves the commit outcome unknown.
228
243
  binding.transactionCommitReached = true;
@@ -292,12 +307,16 @@ export class SmartdataSession {
292
307
  let result;
293
308
  let transactionEnded;
294
309
  let committedWrites = [];
310
+ let committedRevisionBumps = new Set();
311
+ let returnedFromCommit = false;
295
312
  try {
296
313
  result = timeoutMS === undefined
297
314
  ? await binding.rawSession.withTransaction(runAttempt)
298
315
  : await binding.rawSession.withTransaction(runAttempt, { timeoutMS });
299
316
  transactionEnded = binding.transactionEnded;
300
317
  committedWrites = binding.transactionWrites;
318
+ committedRevisionBumps = binding.revisionBumps;
319
+ returnedFromCommit = true;
301
320
  }
302
321
  catch (errorArg) {
303
322
  const { error, outcome } = settleTransactionRejection(errorArg);
@@ -306,6 +325,10 @@ export class SmartdataSession {
306
325
  throw rejectTransaction(error, outcome);
307
326
  }
308
327
  finally {
328
+ if (!returnedFromCommit) {
329
+ finishRevisionCommit?.();
330
+ logCommit?.settle();
331
+ }
309
332
  binding.transactionActive = false;
310
333
  binding.transactionTimeoutMS = undefined;
311
334
  binding.transactionSignal = undefined;
@@ -315,16 +338,38 @@ export class SmartdataSession {
315
338
  binding.transactionEnded = undefined;
316
339
  binding.transactionWrites = [];
317
340
  binding.revisionBumps = new Set();
341
+ binding.logReports = [];
342
+ binding.logUnplaced = new Set();
318
343
  }
319
- if (transactionEnded) {
320
- const outcome = commitOutcomeOfTransactionEnd(transactionEnded);
321
- if (outcome === 'unknown')
344
+ try {
345
+ if (transactionEnded) {
346
+ const outcome = commitOutcomeOfTransactionEnd(transactionEnded);
347
+ try {
348
+ if (outcome === 'unknown')
349
+ changeReadsOfTransaction(committedWrites);
350
+ }
351
+ finally {
352
+ finishRevisionCommit?.();
353
+ }
354
+ throw rejectTransaction(createTransactionSessionEndedError(transactionEnded), outcome);
355
+ }
356
+ try {
322
357
  changeReadsOfTransaction(committedWrites);
323
- throw rejectTransaction(createTransactionSessionEndedError(transactionEnded), outcome);
358
+ accountSmartdataOwnWriteRevisions(binding.owner, committedRevisionBumps);
359
+ }
360
+ finally {
361
+ finishRevisionCommit?.();
362
+ }
363
+ noteSmartdataWriteRevisionEntries(binding.owner, committedRevisionBumps);
364
+ for (const write of committedWrites) {
365
+ write.deliver?.();
366
+ }
367
+ // Followers hear of the commit before they may read it from the journal.
368
+ if (logCommit)
369
+ deliverSmartdataWriteLogCommit(binding.owner, logCommit);
324
370
  }
325
- changeReadsOfTransaction(committedWrites);
326
- for (const write of committedWrites) {
327
- write.deliver?.();
371
+ finally {
372
+ logCommit?.settle();
328
373
  }
329
374
  return result;
330
375
  }
@@ -357,6 +402,8 @@ export const createSmartdataSession = (ownerArg) => {
357
402
  transactionCommitReached: false,
358
403
  transactionWrites: [],
359
404
  revisionBumps: new Set(),
405
+ logReports: [],
406
+ logUnplaced: new Set(),
360
407
  invalidated: false,
361
408
  };
362
409
  bindings.set(session, binding);
@@ -534,14 +581,15 @@ const revisionTransactionSessionOf = (ownerArg) => {
534
581
  };
535
582
  /**
536
583
  * Whether a write must start a transaction of its own to carry its write
537
- * revisions: the database keeps them and the write runs outside an owned
538
- * transaction. A raw driver session cannot carry them and is refused.
584
+ * revisions and write-log entry: the database keeps either and the write runs
585
+ * outside an owned transaction. A raw driver session cannot carry them and is
586
+ * refused.
539
587
  */
540
- export const needsSmartdataRevisionTransaction = (sessionArg, ownerArg) => {
541
- if (!isSmartdataWriteRevisionsActive(ownerArg))
588
+ export const needsSmartdataWriteTransaction = (sessionArg, ownerArg) => {
589
+ if (!requiresSmartdataWriteTransactions(ownerArg))
542
590
  return false;
543
591
  if (sessionArg !== undefined && !isSmartdataSession(sessionArg)) {
544
- throw new SmartdataPersistenceError('unsupported_operation', 'Writes of a database with write revisions run on sessions of db.createSession(), not raw driver sessions.');
592
+ 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.');
545
593
  }
546
594
  return sessionArg === undefined || !resolveBinding(sessionArg, ownerArg).transactionActive;
547
595
  };
@@ -550,13 +598,13 @@ const transactionOptionsOf = (timeoutMSArg, signalArg) => ({
550
598
  ...(signalArg === undefined ? {} : { signal: signalArg }),
551
599
  });
552
600
  /**
553
- * Runs one write of a database with write revisions in a transaction, so its
554
- * revisions commit with it: on the caller's owned session, or on a session of
601
+ * Runs one write of a database with write revisions or a write log in a
602
+ * transaction, so its revisions and entry commit with it: on the caller's owned session, or on a session of
555
603
  * its own that ends with the call. The call's deadline and signal bound the
556
604
  * whole transaction; the collection is prepared before it starts, since its
557
605
  * DDL cannot run inside.
558
606
  */
559
- export const runSmartdataRevisionTransaction = async (sessionArg, ownerArg, optionsArg, writeArg) => {
607
+ export const runSmartdataWriteTransaction = async (sessionArg, ownerArg, optionsArg, writeArg) => {
560
608
  const timeoutMS = optionsArg.timeoutMS ?? optionsArg.defaultTimeoutMS;
561
609
  if (sessionArg) {
562
610
  if (!optionsArg.prepared)
@@ -589,8 +637,8 @@ export const runSmartdataRevisionTransaction = async (sessionArg, ownerArg, opti
589
637
  */
590
638
  export const runWithOrdinarySmartdataSession = async (sessionArg, ownerArg, optionsArg, operationArg) => {
591
639
  optionsArg.signal?.throwIfAborted();
592
- if (optionsArg.ordinaryWrite && needsSmartdataRevisionTransaction(sessionArg, ownerArg)) {
593
- return runSmartdataRevisionTransaction(sessionArg, ownerArg, optionsArg, (transactionSessionArg) => runWithOrdinarySmartdataSession(transactionSessionArg, ownerArg, {
640
+ if (optionsArg.ordinaryWrite && needsSmartdataWriteTransaction(sessionArg, ownerArg)) {
641
+ return runSmartdataWriteTransaction(sessionArg, ownerArg, optionsArg, (transactionSessionArg) => runWithOrdinarySmartdataSession(transactionSessionArg, ownerArg, {
594
642
  ordinaryWrite: true,
595
643
  prepared: true,
596
644
  ...(optionsArg.collectionName === undefined ? {} : { collectionName: optionsArg.collectionName }),
@@ -630,6 +678,20 @@ const bufferTransactionWrite = (bindingArg, writeArg) => {
630
678
  bindingArg.transactionWrites.push(writeArg);
631
679
  }
632
680
  };
681
+ /**
682
+ * Adds a write's report, or a collection no report describes, to the
683
+ * write-log entry of an owned transaction's current attempt. A write that
684
+ * settles after its attempt ended rolls back with that attempt.
685
+ */
686
+ const logTransactionWrite = (bindingArg, writeArg) => {
687
+ const attempt = transactionContext.getStore()?.attempt;
688
+ if (attempt === undefined || attempt !== bindingArg.transactionAttempt)
689
+ return;
690
+ if ('report' in writeArg)
691
+ bindingArg.logReports.push(writeArg.report);
692
+ else
693
+ bindingArg.logUnplaced.add(writeArg.unplaced);
694
+ };
633
695
  /**
634
696
  * Adds write-revision counters to the current attempt of an owned transaction.
635
697
  * A write that settles after its attempt ended rolls back with that attempt.
@@ -680,6 +742,9 @@ export const reportSmartdataWrite = (ownerArg, sessionArg, writeArg) => {
680
742
  if (field !== undefined && isSmartdataWriteRevisionsActive(ownerArg)) {
681
743
  bumpTransactionRevisions(binding, writeRevisionIdsOfWrite(writeArg, field));
682
744
  }
745
+ const report = writeLogReportOf(ownerArg, writeArg);
746
+ if (report)
747
+ logTransactionWrite(binding, { report });
683
748
  }
684
749
  const changeReads = captureSmartdataReadChange(ownerArg, writeArg, buffered);
685
750
  const deliver = captureSmartdataWrite(ownerArg, writeArg);
@@ -704,6 +769,9 @@ export const reportSmartdataWriteFailure = (ownerArg, sessionArg, collectionName
704
769
  if (binding && buffered && isSmartdataWriteRevisionsActive(ownerArg)) {
705
770
  bumpTransactionRevisions(binding, [sharedRevisionId(collectionNameArg)]);
706
771
  }
772
+ if (binding && buffered && isSmartdataWriteLogActive(ownerArg)) {
773
+ logTransactionWrite(binding, { unplaced: collectionNameArg });
774
+ }
707
775
  const changeReads = captureSmartdataCollectionChange(ownerArg, collectionNameArg, buffered);
708
776
  if (!changeReads)
709
777
  return;
@@ -820,4 +888,4 @@ const closeSessionBinding = async (bindingArg, endOptionsArg) => {
820
888
  export const unwrapSmartdataSessionInvalidationErrors = (errorArg) => errorArg instanceof SmartdataSessionInvalidationAggregateError
821
889
  ? errorArg.errors
822
890
  : undefined;
823
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBQ2xDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsR0FHM0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsdUJBQXVCLEdBR3hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQiw0QkFBNEIsR0FDN0IsTUFBTSw2QkFBNkIsQ0FBQztBQXlDckMsaUZBQWlGO0FBQ2pGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxTQUFnRCxFQUFRLEVBQUU7SUFDMUYsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTO1FBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBaUJGLGtGQUFrRjtBQUNsRixNQUFNLHlCQUF5QixHQUFHLElBQUks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
891
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBQ2xDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsR0FJM0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLGdDQUFnQyxFQUNoQywwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUd4QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxpQ0FBaUMsRUFDakMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixpQ0FBaUMsRUFDakMsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQiw0QkFBNEIsR0FDN0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsa0NBQWtDLEVBQ2xDLGdCQUFnQixHQUVqQixNQUFNLHVCQUF1QixDQUFDO0FBNkMvQixpRkFBaUY7QUFDakYsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFNB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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 {};