@indigoai-us/hq-cloud 6.15.78 → 6.15.79

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.
@@ -0,0 +1,460 @@
1
+ /**
2
+ * Aggregate journal storage over independently locked areas.
3
+ *
4
+ * This is deliberately an opt-in adapter. `journal.ts` continues to open the
5
+ * legacy single-shard StateStore until the later migration/cutover lane selects
6
+ * an AreaLedger layout. Keeping the adapter separate lets binaries that do
7
+ * not understand a layout continue to use their existing authority.
8
+ */
9
+ import * as crypto from "node:crypto";
10
+ import { StateStore } from "./state-store.js";
11
+ const DIRECT_DELTA = 1;
12
+ const PREPARED_TRANSACTION = 2;
13
+ const META_WATERMARK = 1;
14
+ const META_FINALIZE = 2;
15
+ let testHooks = {};
16
+ /** Test-only crash seam: data prepares are durable before a meta watermark. */
17
+ export function setAreaLedgerTestHooksForTest(hooks) {
18
+ testHooks = hooks ?? {};
19
+ }
20
+ /**
21
+ * The storage half of the parallel-sync area design.
22
+ *
23
+ * Data records are prepared in area stores first. The tiny `@meta` record is
24
+ * the final watermark. A crash before that watermark leaves a recoverable,
25
+ * invisible prepare; a crash after it leaves a complete aggregate view. This
26
+ * makes global metadata data-first and watermark-last without putting a large
27
+ * aggregate snapshot behind one append lock.
28
+ */
29
+ export class AreaLedger {
30
+ options;
31
+ areaIds;
32
+ areas = new Map();
33
+ meta;
34
+ opened = new Set();
35
+ constructor(options) {
36
+ this.options = options;
37
+ const unique = new Set(options.areaIds);
38
+ if (unique.size !== options.areaIds.length || unique.has("@meta")) {
39
+ throw new Error("area-ledger: areaIds must be unique and must not include @meta");
40
+ }
41
+ if (!Number.isSafeInteger(options.layoutEpoch) || options.layoutEpoch < 1) {
42
+ throw new Error("area-ledger: layoutEpoch must be a positive safe integer");
43
+ }
44
+ this.areaIds = [...options.areaIds].sort((left, right) => left.localeCompare(right));
45
+ }
46
+ static open(options) {
47
+ return new AreaLedger(options);
48
+ }
49
+ /** Scope identity is stable and human-auditable even though StateStore hashes it on disk. */
50
+ scopeId(areaId) {
51
+ this.assertKnownArea(areaId);
52
+ return `journal-area:${this.options.journalSlug}:${this.options.layoutEpoch}:${areaId}`;
53
+ }
54
+ /** Opens one data area only. Useful for a one-path, metadata-free operation. */
55
+ readScoped(keys) {
56
+ const selected = new Set();
57
+ for (const key of keys)
58
+ selected.add(this.resolveArea(key));
59
+ const meta = this.openMeta();
60
+ meta.refresh();
61
+ const states = new Map();
62
+ for (const areaId of selected) {
63
+ const store = this.openArea(areaId);
64
+ store.refresh();
65
+ states.set(areaId, store.getState());
66
+ }
67
+ // A selected area's prepared record is visible only when all of its peers
68
+ // are present. Refresh just those named peers, not unrelated areas.
69
+ for (const watermark of Object.values(meta.getState().watermarks)) {
70
+ if (!watermark.areas.some((areaId) => selected.has(areaId)))
71
+ continue;
72
+ for (const areaId of watermark.areas) {
73
+ if (states.has(areaId))
74
+ continue;
75
+ const store = this.openArea(areaId);
76
+ store.refresh();
77
+ states.set(areaId, store.getState());
78
+ }
79
+ }
80
+ const committed = this.committedTransactions(meta.getState(), states);
81
+ const aggregate = this.combine([...selected].map((areaId) => materializeArea(states.get(areaId), committed)));
82
+ aggregate.lastSync = meta.getState().journal.lastSync;
83
+ aggregate.pulls = structuredClone(meta.getState().journal.pulls);
84
+ return aggregate;
85
+ }
86
+ /** Aggregate read. It is the parity view used by legacy SyncJournal callers. */
87
+ read() {
88
+ this.recoverPendingTransactions();
89
+ const metaStore = this.openMeta();
90
+ metaStore.refresh();
91
+ const states = new Map();
92
+ for (const areaId of this.areaIds) {
93
+ const store = this.openArea(areaId);
94
+ store.refresh();
95
+ states.set(areaId, store.getState());
96
+ }
97
+ const meta = metaStore.getState();
98
+ const committed = this.committedTransactions(meta, states);
99
+ const aggregate = this.combine(this.areaIds.map((areaId) => materializeArea(states.get(areaId), committed)));
100
+ aggregate.lastSync = meta.journal.lastSync;
101
+ aggregate.pulls = structuredClone(meta.journal.pulls);
102
+ this.finalizeCommittedTransactions(committed);
103
+ return aggregate;
104
+ }
105
+ /**
106
+ * Commit a partitioned journal delta. A metadata-only update still has a
107
+ * `@meta` append, while all data-bearing commits use the recoverable prepare
108
+ * protocol so multiple areas never expose a half transaction to `read()`.
109
+ */
110
+ append(delta) {
111
+ const partitioned = this.partition(delta);
112
+ const metadata = cloneMetadata(delta.metadata);
113
+ if (partitioned.length === 0) {
114
+ if (metadata)
115
+ this.appendMeta({ transactionId: crypto.randomUUID(), areas: [], metadata });
116
+ return;
117
+ }
118
+ if (partitioned.length === 1 && !metadata) {
119
+ const [entry] = partitioned;
120
+ this.openArea(entry.areaId).append(DIRECT_DELTA, entry.delta);
121
+ return;
122
+ }
123
+ const transactionId = crypto.randomUUID();
124
+ const areaIds = partitioned.map((entry) => entry.areaId).sort((left, right) => left.localeCompare(right));
125
+ const appends = partitioned.map(({ areaId, delta: areaDelta }) => ({
126
+ areaId,
127
+ store: this.openArea(areaId),
128
+ type: PREPARED_TRANSACTION,
129
+ payload: {
130
+ transactionId,
131
+ areas: areaIds,
132
+ delta: areaDelta,
133
+ ...(metadata ? { metadata } : {}),
134
+ },
135
+ }));
136
+ // StateStore acquires these data locks in lexical area-id order and drops
137
+ // any partial set before retrying. @meta is deliberately not part of this
138
+ // batch: the durable data prepares must precede its watermark.
139
+ StateStore.appendBatch(appends);
140
+ testHooks.afterDataBeforeWatermark?.();
141
+ this.appendMeta({ transactionId, areas: areaIds, ...(metadata ? { metadata } : {}) });
142
+ testHooks.afterWatermarkBeforeFinalize?.();
143
+ this.finalizePublishedTransactions();
144
+ }
145
+ /**
146
+ * Finish a transaction whose process died after durable area prepares but
147
+ * before its meta watermark. Incomplete prepares stay invisible, so a
148
+ * crash can never synthesize a partial aggregate journal.
149
+ */
150
+ recoverPendingTransactions() {
151
+ const meta = this.openMeta();
152
+ meta.refresh();
153
+ const watermarks = meta.getState().watermarks;
154
+ const prepared = new Map();
155
+ for (const areaId of this.areaIds) {
156
+ const store = this.openArea(areaId);
157
+ store.refresh();
158
+ for (const transaction of Object.values(store.getState().prepared)) {
159
+ const entries = prepared.get(transaction.transactionId) ?? [];
160
+ entries.push({ areaId, transaction });
161
+ prepared.set(transaction.transactionId, entries);
162
+ }
163
+ }
164
+ for (const [transactionId, entries] of prepared) {
165
+ if (watermarks[transactionId])
166
+ continue;
167
+ const candidate = entries[0].transaction;
168
+ const found = new Set(entries.map((entry) => entry.areaId));
169
+ // A transaction is complete only when every declared area has its own
170
+ // prepare. Do not infer completeness from duplicate copied payloads.
171
+ if (candidate.areas.some((areaId) => !found.has(areaId)))
172
+ continue;
173
+ this.appendMeta({
174
+ transactionId,
175
+ areas: candidate.areas,
176
+ ...(candidate.metadata ? { metadata: candidate.metadata } : {}),
177
+ });
178
+ }
179
+ }
180
+ /** Test/diagnostic surface proving independent scopes have independent locks. */
181
+ stateDirectoriesForTest() {
182
+ const result = new Map();
183
+ for (const areaId of this.areaIds)
184
+ result.set(areaId, this.openArea(areaId).stateDir);
185
+ result.set("@meta", this.openMeta().stateDir);
186
+ return result;
187
+ }
188
+ openedAreasForTest() {
189
+ return [...this.opened].sort((left, right) => left.localeCompare(right));
190
+ }
191
+ transactionCountsForTest() {
192
+ const meta = this.openMeta().getState();
193
+ let prepared = 0;
194
+ let finalized = 0;
195
+ for (const areaId of this.areaIds) {
196
+ const state = this.openArea(areaId).getState();
197
+ prepared += Object.keys(state.prepared).length;
198
+ finalized += Object.keys(state.finalized).length;
199
+ }
200
+ return { prepared, watermarks: Object.keys(meta.watermarks).length, finalized };
201
+ }
202
+ appendMeta(watermark) {
203
+ this.openMeta().append(META_WATERMARK, watermark);
204
+ }
205
+ openArea(areaId) {
206
+ this.assertKnownArea(areaId);
207
+ const cached = this.areas.get(areaId);
208
+ if (cached)
209
+ return cached;
210
+ const initial = this.initialAreaJournal(areaId);
211
+ const store = StateStore.open({
212
+ rootDir: this.options.rootDir,
213
+ scopeId: this.scopeId(areaId),
214
+ initialState: { journal: initial, direct: [], prepared: {}, finalized: {} },
215
+ maxRecordsBeforeCompaction: this.options.maxRecordsBeforeCompaction,
216
+ maxWalBytesBeforeCompaction: this.options.maxWalBytesBeforeCompaction,
217
+ reduce: reduceAreaRecord,
218
+ validateRecord: validateAreaRecord,
219
+ });
220
+ this.areas.set(areaId, store);
221
+ this.opened.add(areaId);
222
+ return store;
223
+ }
224
+ openMeta() {
225
+ if (this.meta)
226
+ return this.meta;
227
+ const initial = this.options.initialJournal;
228
+ this.meta = StateStore.open({
229
+ rootDir: this.options.rootDir,
230
+ scopeId: `journal-area:${this.options.journalSlug}:${this.options.layoutEpoch}:@meta`,
231
+ initialState: {
232
+ journal: {
233
+ version: "2",
234
+ lastSync: initial?.lastSync ?? "",
235
+ pulls: structuredClone(initial?.pulls ?? []),
236
+ },
237
+ watermarks: {},
238
+ },
239
+ maxRecordsBeforeCompaction: this.options.maxRecordsBeforeCompaction,
240
+ maxWalBytesBeforeCompaction: this.options.maxWalBytesBeforeCompaction,
241
+ reduce: reduceMetaRecord,
242
+ validateRecord: validateMetaRecord,
243
+ });
244
+ this.opened.add("@meta");
245
+ return this.meta;
246
+ }
247
+ initialAreaJournal(areaId) {
248
+ const source = this.options.initialJournal;
249
+ if (!source)
250
+ return emptyJournal();
251
+ const files = {};
252
+ for (const [key, entry] of Object.entries(source.files)) {
253
+ if (this.resolveArea(key) === areaId)
254
+ files[key] = structuredClone(entry);
255
+ }
256
+ return { version: "2", lastSync: "", files, pulls: [] };
257
+ }
258
+ partition(delta) {
259
+ const byArea = new Map();
260
+ const add = (key) => {
261
+ const areaId = this.resolveArea(key);
262
+ const existing = byArea.get(areaId) ?? { upserts: {}, deletes: [] };
263
+ byArea.set(areaId, existing);
264
+ return existing;
265
+ };
266
+ for (const [key, entry] of Object.entries(delta.upserts ?? {}))
267
+ add(key).upserts[key] = structuredClone(entry);
268
+ for (const key of delta.deletes ?? [])
269
+ add(key).deletes.push(key);
270
+ return [...byArea.entries()]
271
+ .map(([areaId, areaDelta]) => ({ areaId, delta: areaDelta }))
272
+ .sort((left, right) => left.areaId.localeCompare(right.areaId));
273
+ }
274
+ resolveArea(key) {
275
+ const areaId = this.options.resolveArea(key);
276
+ if (!areaId || !this.areaIds.includes(areaId)) {
277
+ throw new Error(`area-ledger: key ${JSON.stringify(key)} does not map to a configured area`);
278
+ }
279
+ return areaId;
280
+ }
281
+ assertKnownArea(areaId) {
282
+ if (!this.areaIds.includes(areaId))
283
+ throw new Error(`area-ledger: unknown area ${areaId}`);
284
+ }
285
+ combine(journals) {
286
+ const aggregate = emptyJournal();
287
+ for (const journal of journals) {
288
+ for (const [key, entry] of Object.entries(journal.files)) {
289
+ if (aggregate.files[key])
290
+ throw new Error(`area-ledger: key ${JSON.stringify(key)} is present in multiple areas`);
291
+ aggregate.files[key] = structuredClone(entry);
292
+ }
293
+ }
294
+ return aggregate;
295
+ }
296
+ /** A watermark publishes only when every named area has prepared or folded it. */
297
+ committedTransactions(meta, states) {
298
+ const committed = new Set();
299
+ for (const watermark of Object.values(meta.watermarks)) {
300
+ const complete = watermark.areas.every((areaId) => {
301
+ const state = states.get(areaId);
302
+ return state !== undefined && (state.prepared[watermark.transactionId] !== undefined || state.finalized[watermark.transactionId]);
303
+ });
304
+ if (complete)
305
+ committed.add(watermark.transactionId);
306
+ }
307
+ return committed;
308
+ }
309
+ /**
310
+ * Bound replay after publication. Area folds are individually durable; a
311
+ * folded marker keeps a still-present watermark atomic if the process dies
312
+ * between peers. The watermark is retired only once every named area has
313
+ * its folded base snapshot, then a later pass clears the transient markers.
314
+ */
315
+ finalizeCommittedTransactions(committed) {
316
+ for (const areaId of this.areaIds) {
317
+ const store = this.openArea(areaId);
318
+ store.replaceStateWith((state) => {
319
+ const toFold = new Set([...committed].filter((transactionId) => state.prepared[transactionId] !== undefined));
320
+ const canFoldDirect = state.direct.length > 0 && Object.keys(state.prepared).every((transactionId) => committed.has(transactionId));
321
+ if (toFold.size === 0 && !canFoldDirect)
322
+ return state;
323
+ const journal = materializeArea(state, committed);
324
+ const prepared = Object.fromEntries(Object.entries(state.prepared).filter(([transactionId]) => !toFold.has(transactionId)));
325
+ const finalized = { ...state.finalized };
326
+ for (const transactionId of toFold)
327
+ finalized[transactionId] = true;
328
+ return { journal, direct: [], prepared, finalized };
329
+ });
330
+ }
331
+ for (const transactionId of committed)
332
+ this.openMeta().append(META_FINALIZE, { transactionId });
333
+ // Finalized markers are only needed while the watermark exists. This
334
+ // second compact replacement bounds them without risking partial visibility.
335
+ const metaStore = this.openMeta();
336
+ metaStore.refresh();
337
+ const remainingWatermarks = metaStore.getState().watermarks;
338
+ for (const areaId of this.areaIds) {
339
+ this.openArea(areaId).replaceStateWith((state) => {
340
+ const finalized = Object.fromEntries(Object.entries(state.finalized).filter(([transactionId]) => remainingWatermarks[transactionId] !== undefined));
341
+ return Object.keys(finalized).length === Object.keys(state.finalized).length ? state : { ...state, finalized };
342
+ });
343
+ }
344
+ }
345
+ finalizePublishedTransactions() {
346
+ const metaStore = this.openMeta();
347
+ metaStore.refresh();
348
+ const states = new Map();
349
+ for (const areaId of this.areaIds) {
350
+ const store = this.openArea(areaId);
351
+ store.refresh();
352
+ states.set(areaId, store.getState());
353
+ }
354
+ this.finalizeCommittedTransactions(this.committedTransactions(metaStore.getState(), states));
355
+ }
356
+ }
357
+ function reduceAreaRecord(state, record) {
358
+ state.direct ??= [];
359
+ state.prepared ??= {};
360
+ state.finalized ??= {};
361
+ if (record.type === DIRECT_DELTA) {
362
+ const delta = record.payload;
363
+ if (Object.keys(state.prepared).length === 0)
364
+ applyDelta(state.journal, delta);
365
+ else
366
+ state.direct.push({ sequence: record.sequence, delta: structuredClone(delta) });
367
+ return state;
368
+ }
369
+ if (record.type === PREPARED_TRANSACTION) {
370
+ const prepared = record.payload;
371
+ state.prepared[prepared.transactionId] = { ...structuredClone(prepared), sequence: record.sequence };
372
+ return state;
373
+ }
374
+ throw new Error(`area-ledger: unexpected area record type ${record.type}`);
375
+ }
376
+ function reduceMetaRecord(state, record) {
377
+ if (record.type === META_FINALIZE) {
378
+ delete state.watermarks[record.payload.transactionId];
379
+ return state;
380
+ }
381
+ if (record.type !== META_WATERMARK)
382
+ throw new Error(`area-ledger: unexpected meta record type ${record.type}`);
383
+ const watermark = record.payload;
384
+ state.watermarks[watermark.transactionId] = watermark;
385
+ if (watermark.metadata?.lastSync !== undefined)
386
+ state.journal.lastSync = watermark.metadata.lastSync;
387
+ if (watermark.metadata?.pulls !== undefined)
388
+ state.journal.pulls = structuredClone(watermark.metadata.pulls);
389
+ return state;
390
+ }
391
+ function validateAreaRecord(record) {
392
+ if (record.type === DIRECT_DELTA && isDelta(record.payload))
393
+ return;
394
+ if (record.type === PREPARED_TRANSACTION && isPreparedTransaction(record.payload))
395
+ return;
396
+ throw new Error("area-ledger: invalid area record");
397
+ }
398
+ function validateMetaRecord(record) {
399
+ if (record.type === META_WATERMARK && isMetaWatermark(record.payload))
400
+ return;
401
+ if (record.type === META_FINALIZE && isFinalizeRecord(record.payload))
402
+ return;
403
+ throw new Error("area-ledger: invalid meta record");
404
+ }
405
+ function isDelta(value) {
406
+ return typeof value === "object" && value !== null &&
407
+ typeof value.upserts === "object" &&
408
+ value.upserts !== null &&
409
+ Array.isArray(value.deletes);
410
+ }
411
+ function isPreparedTransaction(value) {
412
+ if (typeof value !== "object" || value === null)
413
+ return false;
414
+ const prepared = value;
415
+ return typeof prepared.transactionId === "string" &&
416
+ Array.isArray(prepared.areas) && prepared.areas.every((areaId) => typeof areaId === "string") &&
417
+ isDelta(prepared.delta);
418
+ }
419
+ function isMetaWatermark(value) {
420
+ if (typeof value !== "object" || value === null)
421
+ return false;
422
+ const watermark = value;
423
+ return typeof watermark.transactionId === "string" &&
424
+ Array.isArray(watermark.areas) && watermark.areas.every((areaId) => typeof areaId === "string");
425
+ }
426
+ function isFinalizeRecord(value) {
427
+ return typeof value === "object" && value !== null && typeof value.transactionId === "string";
428
+ }
429
+ function materializeArea(state, committed) {
430
+ const journal = structuredClone(state.journal);
431
+ const events = [...(state.direct ?? [])];
432
+ for (const transactionId of committed) {
433
+ const prepared = state.prepared[transactionId];
434
+ if (prepared?.sequence !== undefined)
435
+ events.push({ sequence: prepared.sequence, delta: prepared.delta });
436
+ }
437
+ events.sort((left, right) => left.sequence - right.sequence);
438
+ for (const event of events)
439
+ applyDelta(journal, event.delta);
440
+ return journal;
441
+ }
442
+ function applyDelta(journal, delta) {
443
+ for (const key of delta.deletes)
444
+ delete journal.files[key];
445
+ Object.assign(journal.files, structuredClone(delta.upserts));
446
+ }
447
+ function emptyJournal() {
448
+ return { version: "2", lastSync: "", files: {}, pulls: [] };
449
+ }
450
+ function cloneMetadata(metadata) {
451
+ if (!metadata)
452
+ return undefined;
453
+ const result = {};
454
+ if (metadata.lastSync !== undefined)
455
+ result.lastSync = metadata.lastSync;
456
+ if (metadata.pulls !== undefined)
457
+ result.pulls = structuredClone(metadata.pulls);
458
+ return result;
459
+ }
460
+ //# sourceMappingURL=area-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area-ledger.js","sourceRoot":"","sources":["../../src/sync/area-ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=area-ledger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"area-ledger.test.d.ts","sourceRoot":"","sources":["../../src/sync/area-ledger.test.ts"],"names":[],"mappings":""}