@chkit/plugin-ingest 0.2.0-beta.11
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/README.md +43 -0
- package/dist/destination.d.ts +40 -0
- package/dist/destination.d.ts.map +1 -0
- package/dist/destination.js +65 -0
- package/dist/destination.js.map +1 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +133 -0
- package/dist/errors.js.map +1 -0
- package/dist/executor.d.ts +30 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +552 -0
- package/dist/executor.js.map +1 -0
- package/dist/incremental.d.ts +45 -0
- package/dist/incremental.d.ts.map +1 -0
- package/dist/incremental.js +72 -0
- package/dist/incremental.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/journal-history.d.ts +15 -0
- package/dist/journal-history.d.ts.map +1 -0
- package/dist/journal-history.js +366 -0
- package/dist/journal-history.js.map +1 -0
- package/dist/journal-records.d.ts +28 -0
- package/dist/journal-records.d.ts.map +1 -0
- package/dist/journal-records.js +76 -0
- package/dist/journal-records.js.map +1 -0
- package/dist/journal.d.ts +16 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +72 -0
- package/dist/journal.js.map +1 -0
- package/dist/loader.d.ts +12 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +37 -0
- package/dist/loader.js.map +1 -0
- package/dist/paginate.d.ts +24 -0
- package/dist/paginate.d.ts.map +1 -0
- package/dist/paginate.js +37 -0
- package/dist/paginate.js.map +1 -0
- package/dist/plugin.d.ts +155 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +353 -0
- package/dist/plugin.js.map +1 -0
- package/dist/queue.d.ts +9 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +47 -0
- package/dist/queue.js.map +1 -0
- package/dist/recovery.d.ts +41 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +145 -0
- package/dist/recovery.js.map +1 -0
- package/dist/registry.d.ts +48 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +109 -0
- package/dist/registry.js.map +1 -0
- package/dist/retry.d.ts +12 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +69 -0
- package/dist/retry.js.map +1 -0
- package/dist/testing.d.ts +18 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +54 -0
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +229 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { IngestConfigError } from './errors.js';
|
|
2
|
+
/** No incremental selection: every execution reads the whole source. */
|
|
3
|
+
export function fullSync() {
|
|
4
|
+
return {
|
|
5
|
+
id: 'chkit.full_sync',
|
|
6
|
+
version: 1,
|
|
7
|
+
parseState: () => undefined,
|
|
8
|
+
plan: () => undefined,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Bundled timestamp strategy. The upper bound is fixed to the execution cutoff
|
|
13
|
+
* and `range.to` becomes the committed watermark only after the whole window
|
|
14
|
+
* has sink evidence.
|
|
15
|
+
*/
|
|
16
|
+
export function timestampWindow(options) {
|
|
17
|
+
if (options.from === undefined) {
|
|
18
|
+
if (!(options.start instanceof Date) || !Number.isFinite(options.start.getTime())) {
|
|
19
|
+
throw new IngestConfigError('timestampWindow: start must be a valid Date.');
|
|
20
|
+
}
|
|
21
|
+
if (!Number.isFinite(options.overlapMs ?? 0) || (options.overlapMs ?? 0) < 0) {
|
|
22
|
+
throw new IngestConfigError('timestampWindow: overlapMs must be a finite non-negative number.');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else if (options.start !== undefined || options.overlapMs !== undefined) {
|
|
26
|
+
throw new IngestConfigError('timestampWindow: use either start/overlapMs or from, not both.');
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
id: 'chkit.timestamp_window',
|
|
30
|
+
version: 1,
|
|
31
|
+
parseState(raw) {
|
|
32
|
+
if (typeof raw !== 'object' || raw === null || !('watermark' in raw) || typeof raw.watermark !== 'string') {
|
|
33
|
+
throw new IngestConfigError('timestampWindow: committed state has no string "watermark".');
|
|
34
|
+
}
|
|
35
|
+
if (Number.isNaN(Date.parse(raw.watermark))) {
|
|
36
|
+
throw new IngestConfigError(`timestampWindow: committed watermark "${raw.watermark}" is not a timestamp.`);
|
|
37
|
+
}
|
|
38
|
+
return { watermark: raw.watermark };
|
|
39
|
+
},
|
|
40
|
+
plan({ state, cutoff, range }) {
|
|
41
|
+
const to = range?.to ?? cutoff;
|
|
42
|
+
const watermark = state ? new Date(state.watermark) : undefined;
|
|
43
|
+
const from = range?.from ?? (options.from
|
|
44
|
+
? options.from({ watermark, cutoff })
|
|
45
|
+
: new Date(watermark ? watermark.getTime() - (options.overlapMs ?? 0) : options.start.getTime()));
|
|
46
|
+
if (!Number.isFinite(from.getTime()) || !Number.isFinite(to.getTime())) {
|
|
47
|
+
throw new IngestConfigError('timestampWindow: planned bounds must be valid dates.');
|
|
48
|
+
}
|
|
49
|
+
if (from.getTime() > to.getTime()) {
|
|
50
|
+
throw new IngestConfigError(`timestampWindow: planned lower bound ${from.toISOString()} is after upper bound ${to.toISOString()}.`);
|
|
51
|
+
}
|
|
52
|
+
return { from, to };
|
|
53
|
+
},
|
|
54
|
+
complete({ selection }) {
|
|
55
|
+
return { watermark: selection.to.toISOString() };
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Generic provider-owned state (compound cursor, change token, snapshot id…).
|
|
61
|
+
* The reader receives the committed state as its selection and advances it by
|
|
62
|
+
* yielding chunks that carry complete candidate state.
|
|
63
|
+
*/
|
|
64
|
+
export function cursorState(options) {
|
|
65
|
+
return {
|
|
66
|
+
id: options.id,
|
|
67
|
+
version: options.version,
|
|
68
|
+
parseState: options.parse,
|
|
69
|
+
plan: ({ state }) => state,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=incremental.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental.js","sourceRoot":"","sources":["../src/incremental.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { ingest, createIngestPlugin, checkGraph, type IngestPlugin, type IngestPluginOptions } from './plugin.js';
|
|
2
|
+
export { defineStream, definePipeline, selectStreams, type SelectedStream } from './registry.js';
|
|
3
|
+
export { fullSync, timestampWindow, cursorState, type TimestampRange, type TimestampWindowOptions, type TimestampWindowState } from './incremental.js';
|
|
4
|
+
export { paginate, type Page } from './paginate.js';
|
|
5
|
+
export { simpleLoader } from './loader.js';
|
|
6
|
+
export { ingestionColumns, rawTable, rawRows, createClickHouseDestination, type RawRow } from './destination.js';
|
|
7
|
+
export { createClickHouseJournal, type ClickHouseJournalOptions } from './journal.js';
|
|
8
|
+
export { doctorJournal, repairJournal, planJournalRepair, type JournalRecoveryOptions, type JournalRepairPlan, type JournalRepairResult } from './recovery.js';
|
|
9
|
+
export { runIngestion, type BackfillRequest, type ExecutionEnv, type ExecutionRequest } from './executor.js';
|
|
10
|
+
export { HttpError, FetchFailure, IngestConfigError } from './errors.js';
|
|
11
|
+
export type { DestinationAdapter, ErrorClassifier, ExecutionResult, FailureClass, FetchContext, IncrementalStrategy, Journal, Loader, LoaderContext, LoaderFactory, PipelineDefinition, ReadContext, RetryOptions, Row, SinkReceipt, SourceChunk, StreamDefinition, StreamResult, } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACtJ,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAChH,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC9J,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5G,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACxE,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,GAAG,EACH,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ingest, createIngestPlugin, checkGraph } from './plugin.js';
|
|
2
|
+
export { defineStream, definePipeline, selectStreams } from './registry.js';
|
|
3
|
+
export { fullSync, timestampWindow, cursorState } from './incremental.js';
|
|
4
|
+
export { paginate } from './paginate.js';
|
|
5
|
+
export { simpleLoader } from './loader.js';
|
|
6
|
+
export { ingestionColumns, rawTable, rawRows, createClickHouseDestination } from './destination.js';
|
|
7
|
+
export { createClickHouseJournal } from './journal.js';
|
|
8
|
+
export { doctorJournal, repairJournal, planJournalRepair } from './recovery.js';
|
|
9
|
+
export { runIngestion } from './executor.js';
|
|
10
|
+
export { HttpError, FetchFailure, IngestConfigError } from './errors.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAA+C,MAAM,aAAa,CAAA;AACjH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAuB,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAA+E,MAAM,kBAAkB,CAAA;AACtJ,OAAO,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,EAAe,MAAM,kBAAkB,CAAA;AAChH,OAAO,EAAE,uBAAuB,EAAiC,MAAM,cAAc,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAiF,MAAM,eAAe,CAAA;AAC9J,OAAO,EAAE,YAAY,EAAkE,MAAM,eAAe,CAAA;AAC5G,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type JournalRow } from './journal-records.js';
|
|
2
|
+
import type { CommittedCheckpoint } from './types.js';
|
|
3
|
+
export interface ValidatedJournalHistory {
|
|
4
|
+
checkpoint: CommittedCheckpoint;
|
|
5
|
+
/** All self-contained valid prefixes, including overlapping sibling runs. */
|
|
6
|
+
rows: JournalRow[];
|
|
7
|
+
/** A deterministic evidence fingerprint, not an authority for freshness. */
|
|
8
|
+
headHash: string;
|
|
9
|
+
problems: string[];
|
|
10
|
+
}
|
|
11
|
+
/** Project independent run histories from one immutable-part snapshot. */
|
|
12
|
+
export declare function validateJournalHistory(snapshot: readonly JournalRow[], namespaceId: string): ValidatedJournalHistory;
|
|
13
|
+
/** Hash canonical logical facts; append time and exact physical retries do not affect it. */
|
|
14
|
+
export declare function extendHeadHash(previousHash: string, rows: readonly JournalRow[]): string;
|
|
15
|
+
//# sourceMappingURL=journal-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-history.d.ts","sourceRoot":"","sources":["../src/journal-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC9F,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAMzE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,mBAAmB,CAAA;IAC/B,6EAA6E;IAC7E,IAAI,EAAE,UAAU,EAAE,CAAA;IAClB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AA6BD,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,uBAAuB,CAqDpH;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAGxF"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { canonicalJson, digest, emptyCheckpoint } from './journal-records.js';
|
|
2
|
+
const EVENT_KINDS = new Set(['run_started', 'work_planned', 'attempt_started', 'retry_scheduled', 'batch_committed', 'work_finished', 'run_finished']);
|
|
3
|
+
const WORK_STATES = new Set(['', 'planned', 'running', 'succeeded', 'failed', 'budget_exhausted', 'cancelled']);
|
|
4
|
+
const SINK_EVIDENCE = new Set(['', 'clickhouse_ack', 'none_required']);
|
|
5
|
+
/** Project independent run histories from one immutable-part snapshot. */
|
|
6
|
+
export function validateJournalHistory(snapshot, namespaceId) {
|
|
7
|
+
const problems = new Set();
|
|
8
|
+
const runs = prepareRuns(snapshot, namespaceId, problems);
|
|
9
|
+
const known = new Map();
|
|
10
|
+
const rows = [];
|
|
11
|
+
const candidates = [];
|
|
12
|
+
// Beta.9 allocated a shared sequence without recording its baseline. Its
|
|
13
|
+
// unambiguous contiguous prefix can be adopted; a fork cannot name a winner.
|
|
14
|
+
const legacy = runs.filter((run) => !run.modern && run.header === undefined);
|
|
15
|
+
const legacyRows = legacyPrefix(legacy, problems);
|
|
16
|
+
if (legacyRows.length > 0)
|
|
17
|
+
projectRun(legacyRows, emptyCheckpoint(), 0, known, rows, candidates, problems);
|
|
18
|
+
// A header names immutable checkpoint and successful-cycle facts. Resolve
|
|
19
|
+
// parents before children regardless of physical insertion or query order.
|
|
20
|
+
const ready = [];
|
|
21
|
+
const missing = new Map();
|
|
22
|
+
const waiters = new Map();
|
|
23
|
+
for (const run of runs) {
|
|
24
|
+
if (!run.header)
|
|
25
|
+
continue;
|
|
26
|
+
const dependencies = new Set([run.header.base.checkpointId, run.header.base.successId].filter((id) => id !== '' && !known.has(id)));
|
|
27
|
+
missing.set(run, dependencies);
|
|
28
|
+
if (dependencies.size === 0)
|
|
29
|
+
ready.push(run);
|
|
30
|
+
for (const id of dependencies) {
|
|
31
|
+
const waiting = waiters.get(id) ?? new Set();
|
|
32
|
+
waiting.add(run);
|
|
33
|
+
waiters.set(id, waiting);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
for (let index = 0; index < ready.length; index += 1) {
|
|
37
|
+
const run = ready[index];
|
|
38
|
+
const header = run?.header;
|
|
39
|
+
if (!run || !header)
|
|
40
|
+
continue;
|
|
41
|
+
missing.delete(run);
|
|
42
|
+
const baseline = resolveBaseline(header.base, known);
|
|
43
|
+
if (baseline === undefined || typeof baseline === 'string') {
|
|
44
|
+
problems.add(`Run "${run.runId}" has an invalid baseline: ${baseline ?? 'missing evidence'}.`);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const prefix = run.rows.filter((row) => Number(row.event_seq) < run.unsafeSeq);
|
|
48
|
+
projectRun(prefix, header.base, baseline.depth, known, rows, candidates, problems, header.startedAt, (id) => {
|
|
49
|
+
for (const waiting of waiters.get(id) ?? []) {
|
|
50
|
+
const dependencies = missing.get(waiting);
|
|
51
|
+
dependencies?.delete(id);
|
|
52
|
+
if (dependencies?.size === 0)
|
|
53
|
+
ready.push(waiting);
|
|
54
|
+
}
|
|
55
|
+
waiters.delete(id);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
for (const run of missing.keys())
|
|
59
|
+
problems.add(`Run "${run.runId}" references checkpoint or success evidence missing from this snapshot; replay from a visible valid prefix.`);
|
|
60
|
+
const canonical = rows.sort(compareRows);
|
|
61
|
+
return { checkpoint: selectCheckpoint(candidates), rows: canonical, headHash: extendHeadHash('', canonical), problems: [...problems].sort() };
|
|
62
|
+
}
|
|
63
|
+
/** Hash canonical logical facts; append time and exact physical retries do not affect it. */
|
|
64
|
+
export function extendHeadHash(previousHash, rows) {
|
|
65
|
+
const unique = new Map(rows.map((row) => [`${row.run_id}\0${row.event_seq}\0${row.event_id}\0${row.payload_hash}`, row]));
|
|
66
|
+
return [...unique.values()].sort(compareRows).reduce((hash, row) => digest([hash, row.run_id, row.event_id, row.payload_hash]), previousHash);
|
|
67
|
+
}
|
|
68
|
+
function prepareRuns(snapshot, namespaceId, problems) {
|
|
69
|
+
const runs = new Map();
|
|
70
|
+
for (const row of snapshot) {
|
|
71
|
+
if (row.namespace_id !== namespaceId) {
|
|
72
|
+
problems.add('Snapshot contains facts from a different namespace.');
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const run = runs.get(row.run_id) ?? { facts: new Map(), unsafeSeq: Infinity, modern: false };
|
|
76
|
+
runs.set(row.run_id, run);
|
|
77
|
+
const found = new Set();
|
|
78
|
+
const seq = integer(row.event_seq, 'event sequence', found);
|
|
79
|
+
if (seq === 0)
|
|
80
|
+
found.add('event sequences must start at one');
|
|
81
|
+
integer(row.expected_checkpoint_version, 'expected checkpoint version', found);
|
|
82
|
+
integer(row.checkpoint_version, 'checkpoint version', found);
|
|
83
|
+
if (row.run_id === '')
|
|
84
|
+
found.add('missing run identity');
|
|
85
|
+
if (!Number.isSafeInteger(row.attempt_no) || row.attempt_no < 0)
|
|
86
|
+
found.add('invalid attempt number');
|
|
87
|
+
if (!EVENT_KINDS.has(row.event_kind))
|
|
88
|
+
found.add('invalid event kind');
|
|
89
|
+
if (!WORK_STATES.has(row.work_state))
|
|
90
|
+
found.add('invalid work state');
|
|
91
|
+
if (!SINK_EVIDENCE.has(row.sink_evidence))
|
|
92
|
+
found.add('invalid sink evidence');
|
|
93
|
+
const modern = validateFactHash(row, found);
|
|
94
|
+
run.modern ||= modern;
|
|
95
|
+
const detail = parseObject(row.detail_json, 'invalid detail JSON', found);
|
|
96
|
+
run.modern ||= detail !== undefined && 'journal' in detail;
|
|
97
|
+
const previous = run.facts.get(seq);
|
|
98
|
+
if (previous && (previous.event_id !== row.event_id || previous.payload_hash !== row.payload_hash))
|
|
99
|
+
found.add('conflicting facts at the same run-local sequence');
|
|
100
|
+
if (found.size > 0) {
|
|
101
|
+
run.unsafeSeq = Math.min(run.unsafeSeq, Number.isSafeInteger(seq) && seq > 0 ? seq : 1);
|
|
102
|
+
report(problems, row.run_id, row.event_seq, found);
|
|
103
|
+
}
|
|
104
|
+
else if (!previous || row.event_at < previous.event_at)
|
|
105
|
+
run.facts.set(seq, row);
|
|
106
|
+
}
|
|
107
|
+
return [...runs.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([runId, run]) => {
|
|
108
|
+
const rows = [...run.facts.values()].sort((a, b) => Number(a.event_seq) - Number(b.event_seq));
|
|
109
|
+
const first = rows[0];
|
|
110
|
+
let header;
|
|
111
|
+
if (first) {
|
|
112
|
+
const found = new Set();
|
|
113
|
+
const detail = parseObject(first.detail_json, 'invalid detail JSON', found);
|
|
114
|
+
if (detail && 'journal' in detail) {
|
|
115
|
+
header = parseHeader(detail.journal, found);
|
|
116
|
+
if (Number(first.event_seq) !== 1)
|
|
117
|
+
found.add('run-local sequence gap (missing initial header)');
|
|
118
|
+
}
|
|
119
|
+
else if (run.modern && !namespaceId.startsWith('@run:'))
|
|
120
|
+
found.add('missing run checkpoint baseline header');
|
|
121
|
+
if (found.size > 0) {
|
|
122
|
+
report(problems, runId, first.event_seq, found);
|
|
123
|
+
run.unsafeSeq = 1;
|
|
124
|
+
header = undefined;
|
|
125
|
+
run.modern = true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { runId, rows, unsafeSeq: run.unsafeSeq, modern: run.modern && !namespaceId.startsWith('@run:'), header };
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function legacyPrefix(runs, problems) {
|
|
132
|
+
const facts = new Map();
|
|
133
|
+
let unsafeSeq = Infinity;
|
|
134
|
+
for (const run of runs) {
|
|
135
|
+
unsafeSeq = Math.min(unsafeSeq, run.unsafeSeq);
|
|
136
|
+
for (const row of run.rows) {
|
|
137
|
+
const seq = Number(row.event_seq);
|
|
138
|
+
const previous = facts.get(seq);
|
|
139
|
+
if (previous && previous.run_id !== row.run_id) {
|
|
140
|
+
unsafeSeq = Math.min(unsafeSeq, seq);
|
|
141
|
+
problems.add(`Legacy journal sequence ${seq} belongs to conflicting runs; retain its earlier unambiguous prefix and replay uncertain work.`);
|
|
142
|
+
}
|
|
143
|
+
else
|
|
144
|
+
facts.set(seq, row);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const prefix = [];
|
|
148
|
+
for (const row of [...facts.values()].sort((a, b) => Number(a.event_seq) - Number(b.event_seq))) {
|
|
149
|
+
const seq = Number(row.event_seq);
|
|
150
|
+
if (seq >= unsafeSeq)
|
|
151
|
+
break;
|
|
152
|
+
if (seq !== prefix.length + 1) {
|
|
153
|
+
problems.add(`Legacy journal sequence gap (expected ${prefix.length + 1}, found ${seq}); replay uncertain work.`);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
prefix.push(row);
|
|
157
|
+
}
|
|
158
|
+
return prefix;
|
|
159
|
+
}
|
|
160
|
+
function projectRun(facts, base, baseDepth, known, validRows, candidates, problems, startedAt, publish) {
|
|
161
|
+
const checkpoint = { ...base, headSeq: 0 };
|
|
162
|
+
let depth = baseDepth;
|
|
163
|
+
let expectedSeq = 1;
|
|
164
|
+
let checkpointJson = base.envelope === undefined ? '' : canonicalJson(base.envelope);
|
|
165
|
+
let latest;
|
|
166
|
+
for (const row of facts) {
|
|
167
|
+
const seq = Number(row.event_seq);
|
|
168
|
+
const found = new Set();
|
|
169
|
+
if (seq !== expectedSeq)
|
|
170
|
+
found.add(`sequence gap (expected ${expectedSeq}, found ${seq})`);
|
|
171
|
+
let envelope = checkpoint.envelope;
|
|
172
|
+
if (row.event_kind === 'batch_committed') {
|
|
173
|
+
if (row.sink_evidence !== 'clickhouse_ack' && row.sink_evidence !== 'none_required')
|
|
174
|
+
found.add('checkpoint commit has no valid sink evidence');
|
|
175
|
+
const expected = Number(row.expected_checkpoint_version);
|
|
176
|
+
const version = Number(row.checkpoint_version);
|
|
177
|
+
envelope = parseEnvelope(row.checkpoint_json, found);
|
|
178
|
+
if (expected !== checkpoint.version || version < expected || version > expected + 1 ||
|
|
179
|
+
(version === expected && row.checkpoint_json !== checkpointJson) ||
|
|
180
|
+
(version > expected && row.checkpoint_json === checkpointJson))
|
|
181
|
+
found.add('invalid checkpoint transition');
|
|
182
|
+
if (checkpoint.envelope && envelope && (checkpoint.envelope.strategy !== envelope.strategy || checkpoint.envelope.version !== envelope.version))
|
|
183
|
+
found.add('checkpoint strategy changed within one lineage');
|
|
184
|
+
if (version > 0 && envelope === undefined)
|
|
185
|
+
found.add('invalid checkpoint envelope');
|
|
186
|
+
}
|
|
187
|
+
if (found.size > 0) {
|
|
188
|
+
report(problems, row.run_id, row.event_seq, found);
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
const parents = [checkpoint.checkpointId, checkpoint.successId].filter((id) => id !== '');
|
|
192
|
+
let identity = '';
|
|
193
|
+
if (row.event_kind === 'batch_committed') {
|
|
194
|
+
if (Number(row.checkpoint_version) > checkpoint.version) {
|
|
195
|
+
identity = `${row.run_id}:${row.event_seq}`;
|
|
196
|
+
checkpoint.checkpointId = identity;
|
|
197
|
+
depth += 1;
|
|
198
|
+
}
|
|
199
|
+
checkpoint.version = Number(row.checkpoint_version);
|
|
200
|
+
checkpoint.envelope = envelope;
|
|
201
|
+
checkpointJson = row.checkpoint_json;
|
|
202
|
+
}
|
|
203
|
+
if (row.event_kind === 'work_finished' && row.work_state === 'succeeded') {
|
|
204
|
+
identity = `${row.run_id}:${row.event_seq}`;
|
|
205
|
+
checkpoint.successId = identity;
|
|
206
|
+
checkpoint.lastSuccessSeq = seq;
|
|
207
|
+
depth += 1;
|
|
208
|
+
}
|
|
209
|
+
checkpoint.headSeq = seq;
|
|
210
|
+
expectedSeq = seq + 1;
|
|
211
|
+
validRows.push(row);
|
|
212
|
+
if (identity !== '') {
|
|
213
|
+
known.set(identity, { checkpoint: { ...checkpoint }, depth, parents });
|
|
214
|
+
publish?.(identity);
|
|
215
|
+
}
|
|
216
|
+
latest = { checkpoint: { ...checkpoint }, depth, startedAt: startedAt ?? normalizeTimestamp(row.event_at), runId: row.run_id, ordinal: seq };
|
|
217
|
+
// Every advancing timestamp watermark is a completed, receipt-backed
|
|
218
|
+
// interval, even if a later interval in this run rewinds its range.
|
|
219
|
+
if (identity !== '' && timestampWatermark(checkpoint) !== undefined)
|
|
220
|
+
candidates.push(latest);
|
|
221
|
+
}
|
|
222
|
+
if (latest)
|
|
223
|
+
candidates.push(latest);
|
|
224
|
+
}
|
|
225
|
+
function resolveBaseline(base, known) {
|
|
226
|
+
const checkpoint = base.checkpointId === '' ? undefined : known.get(base.checkpointId);
|
|
227
|
+
const success = base.successId === '' ? undefined : known.get(base.successId);
|
|
228
|
+
if ((base.checkpointId !== '' && !checkpoint) || (base.successId !== '' && !success))
|
|
229
|
+
return undefined;
|
|
230
|
+
if (base.checkpointId === '' && (base.version !== 0 || base.envelope !== undefined))
|
|
231
|
+
return 'initial checkpoint contains an unproven cursor';
|
|
232
|
+
if (checkpoint && (checkpoint.checkpoint.checkpointId !== base.checkpointId || checkpoint.checkpoint.version !== base.version || canonicalJson(checkpoint.checkpoint.envelope) !== canonicalJson(base.envelope)))
|
|
233
|
+
return 'checkpoint identity does not match its version and envelope';
|
|
234
|
+
if (success && (success.checkpoint.successId !== base.successId || (success.checkpoint.checkpointId !== base.checkpointId && !isAncestor(base.successId, base.checkpointId, known))))
|
|
235
|
+
return 'success identity does not belong to this checkpoint lineage';
|
|
236
|
+
return { checkpoint: base, depth: Math.max(checkpoint?.depth ?? 0, success?.depth ?? 0), parents: [base.checkpointId, base.successId].filter((id) => id !== '') };
|
|
237
|
+
}
|
|
238
|
+
function isAncestor(ancestor, descendant, known) {
|
|
239
|
+
const pending = [descendant];
|
|
240
|
+
const visited = new Set();
|
|
241
|
+
while (pending.length > 0) {
|
|
242
|
+
const id = pending.pop();
|
|
243
|
+
if (id === ancestor)
|
|
244
|
+
return true;
|
|
245
|
+
if (id === undefined || visited.has(id))
|
|
246
|
+
continue;
|
|
247
|
+
visited.add(id);
|
|
248
|
+
pending.push(...(known.get(id)?.parents ?? []));
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
function selectCheckpoint(candidates) {
|
|
253
|
+
if (candidates.length === 0)
|
|
254
|
+
return emptyCheckpoint();
|
|
255
|
+
const ranked = [...candidates].sort(compareCandidates);
|
|
256
|
+
const leader = ranked[ranked.length - 1];
|
|
257
|
+
if (!leader)
|
|
258
|
+
return emptyCheckpoint();
|
|
259
|
+
if (timestampWatermark(leader.checkpoint) === undefined)
|
|
260
|
+
return leader.checkpoint;
|
|
261
|
+
const windows = ranked.filter((candidate) => timestampWatermark(candidate.checkpoint) !== undefined && candidate.checkpoint.envelope?.version === leader.checkpoint.envelope?.version);
|
|
262
|
+
windows.sort((a, b) => (timestampWatermark(a.checkpoint) ?? 0) - (timestampWatermark(b.checkpoint) ?? 0) || compareCandidates(a, b));
|
|
263
|
+
return windows[windows.length - 1]?.checkpoint ?? leader.checkpoint;
|
|
264
|
+
}
|
|
265
|
+
function compareCandidates(a, b) {
|
|
266
|
+
return a.depth - b.depth || a.checkpoint.version - b.checkpoint.version || a.startedAt.localeCompare(b.startedAt) || a.runId.localeCompare(b.runId) || a.ordinal - b.ordinal;
|
|
267
|
+
}
|
|
268
|
+
function timestampWatermark(checkpoint) {
|
|
269
|
+
const envelope = checkpoint.envelope;
|
|
270
|
+
if (envelope?.strategy !== 'chkit.timestamp_window' || envelope.version !== 1 || typeof envelope.state !== 'object' || envelope.state === null || !('watermark' in envelope.state) || typeof envelope.state.watermark !== 'string')
|
|
271
|
+
return undefined;
|
|
272
|
+
const value = Date.parse(envelope.state.watermark);
|
|
273
|
+
return Number.isNaN(value) ? undefined : value;
|
|
274
|
+
}
|
|
275
|
+
function parseHeader(value, problems) {
|
|
276
|
+
if (!isObject(value) || value.version !== 2 || typeof value.startedAt !== 'string' || Number.isNaN(Date.parse(value.startedAt)) || !isObject(value.base)) {
|
|
277
|
+
problems.add('invalid run checkpoint baseline header');
|
|
278
|
+
return undefined;
|
|
279
|
+
}
|
|
280
|
+
const base = value.base;
|
|
281
|
+
if (typeof base.version !== 'number' || !Number.isSafeInteger(base.version) || base.version < 0 ||
|
|
282
|
+
typeof base.headSeq !== 'number' || !Number.isSafeInteger(base.headSeq) || base.headSeq < 0 ||
|
|
283
|
+
typeof base.lastSuccessSeq !== 'number' || !Number.isSafeInteger(base.lastSuccessSeq) || base.lastSuccessSeq < 0 ||
|
|
284
|
+
typeof base.checkpointId !== 'string' || typeof base.successId !== 'string') {
|
|
285
|
+
problems.add('invalid run checkpoint baseline');
|
|
286
|
+
return undefined;
|
|
287
|
+
}
|
|
288
|
+
const envelope = base.envelope === undefined ? undefined : parseEnvelope(canonicalJson(base.envelope), problems);
|
|
289
|
+
if (base.version > 0 && envelope === undefined)
|
|
290
|
+
problems.add('invalid baseline checkpoint envelope');
|
|
291
|
+
if (problems.size > 0)
|
|
292
|
+
return undefined;
|
|
293
|
+
return { startedAt: new Date(value.startedAt).toISOString(), base: { version: base.version, headSeq: base.headSeq, lastSuccessSeq: base.lastSuccessSeq, checkpointId: base.checkpointId, successId: base.successId, envelope } };
|
|
294
|
+
}
|
|
295
|
+
function validateFactHash(row, problems) {
|
|
296
|
+
const identity = [row.event_seq, row.event_kind, row.work_id, row.batch_id, String(row.attempt_no)];
|
|
297
|
+
const modernId = digest([row.target_id, row.namespace_id, row.run_id, ...identity]);
|
|
298
|
+
const legacyId = digest([row.target_id, row.namespace_id, ...identity]);
|
|
299
|
+
if (row.event_id !== modernId && row.event_id !== legacyId)
|
|
300
|
+
problems.add('invalid fact identity');
|
|
301
|
+
const retryAt = normalizedRetryAt(row.retry_at, problems);
|
|
302
|
+
const payload = digest([
|
|
303
|
+
row.event_id, row.expected_checkpoint_version, row.checkpoint_version, row.checkpoint_json,
|
|
304
|
+
row.work_state, row.sink_evidence, row.error_class, row.run_id, retryAt, row.detail_json,
|
|
305
|
+
]);
|
|
306
|
+
if (BigInt(`0x${payload.slice(0, 16)}`).toString() !== row.payload_hash)
|
|
307
|
+
problems.add('fact with drifting payload');
|
|
308
|
+
return row.event_id === modernId;
|
|
309
|
+
}
|
|
310
|
+
function parseEnvelope(json, problems) {
|
|
311
|
+
if (json === '')
|
|
312
|
+
return undefined;
|
|
313
|
+
const parsed = parseObject(json, 'invalid checkpoint envelope', problems);
|
|
314
|
+
if (!parsed || typeof parsed.strategy !== 'string' || parsed.strategy === '' || typeof parsed.version !== 'number' || !Number.isSafeInteger(parsed.version) || parsed.version < 1) {
|
|
315
|
+
problems.add('invalid checkpoint envelope');
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
const envelope = { strategy: parsed.strategy, version: parsed.version, state: parsed.state };
|
|
319
|
+
if (envelope.strategy === 'chkit.timestamp_window' && envelope.version === 1 && timestampWatermark({ ...emptyCheckpoint(), envelope }) === undefined) {
|
|
320
|
+
problems.add('invalid timestamp watermark');
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
return envelope;
|
|
324
|
+
}
|
|
325
|
+
function parseObject(json, label, problems) {
|
|
326
|
+
try {
|
|
327
|
+
const value = JSON.parse(json);
|
|
328
|
+
if (isObject(value))
|
|
329
|
+
return value;
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// Invalid evidence is diagnosed and its uncertain suffix is replayed.
|
|
333
|
+
}
|
|
334
|
+
problems.add(label);
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
function isObject(value) {
|
|
338
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
339
|
+
}
|
|
340
|
+
function integer(value, label, problems) {
|
|
341
|
+
const parsed = Number(value);
|
|
342
|
+
if (!/^(0|[1-9][0-9]*)$/.test(value) || !Number.isSafeInteger(parsed) || parsed < 0)
|
|
343
|
+
problems.add(`invalid ${label} (outside the supported safe integer range)`);
|
|
344
|
+
return parsed;
|
|
345
|
+
}
|
|
346
|
+
function normalizedRetryAt(value, problems) {
|
|
347
|
+
if (value === null)
|
|
348
|
+
return '';
|
|
349
|
+
const date = new Date(normalizeTimestamp(value));
|
|
350
|
+
if (Number.isNaN(date.getTime())) {
|
|
351
|
+
problems.add('invalid retry timestamp');
|
|
352
|
+
return '';
|
|
353
|
+
}
|
|
354
|
+
return date.toISOString();
|
|
355
|
+
}
|
|
356
|
+
function normalizeTimestamp(value) {
|
|
357
|
+
return value.includes(' ') ? `${value.replace(' ', 'T')}Z` : value;
|
|
358
|
+
}
|
|
359
|
+
function compareRows(a, b) {
|
|
360
|
+
return a.run_id.localeCompare(b.run_id) || Number(a.event_seq) - Number(b.event_seq) || a.event_id.localeCompare(b.event_id) || a.payload_hash.localeCompare(b.payload_hash);
|
|
361
|
+
}
|
|
362
|
+
function report(problems, runId, seq, found) {
|
|
363
|
+
for (const problem of found)
|
|
364
|
+
problems.add(`Run "${runId}" at sequence ${seq}: ${problem}.`);
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=journal-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-history.js","sourceRoot":"","sources":["../src/journal-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CommittedCheckpoint, JournalEvent } from './types.js';
|
|
2
|
+
export type JournalRow = {
|
|
3
|
+
target_id: string;
|
|
4
|
+
namespace_id: string;
|
|
5
|
+
event_seq: string;
|
|
6
|
+
event_id: string;
|
|
7
|
+
payload_hash: string;
|
|
8
|
+
event_at: string;
|
|
9
|
+
event_kind: string;
|
|
10
|
+
run_id: string;
|
|
11
|
+
work_id: string;
|
|
12
|
+
attempt_no: number;
|
|
13
|
+
batch_id: string;
|
|
14
|
+
expected_checkpoint_version: string;
|
|
15
|
+
checkpoint_version: string;
|
|
16
|
+
checkpoint_json: string;
|
|
17
|
+
work_state: string;
|
|
18
|
+
sink_evidence: string;
|
|
19
|
+
retry_at: string | null;
|
|
20
|
+
error_class: string;
|
|
21
|
+
detail_json: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function toJournalRow(event: JournalEvent, targetId: string, at: Date): JournalRow;
|
|
24
|
+
/** Stable key order so equal values always serialize identically. */
|
|
25
|
+
export declare function canonicalJson(value: unknown): string;
|
|
26
|
+
export declare function digest(parts: readonly string[]): string;
|
|
27
|
+
export declare function emptyCheckpoint(): CommittedCheckpoint;
|
|
28
|
+
//# sourceMappingURL=journal-records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-records.d.ts","sourceRoot":"","sources":["../src/journal-records.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGnE,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,2BAA2B,EAAE,MAAM,CAAA;IACnC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,UAAU,CAwCxF;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQvD;AAED,wBAAgB,eAAe,IAAI,mBAAmB,CAErD"}
|