@quolu/lattice 0.43.0 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -2
- package/sensor/NOTICE +8 -19
- package/sensor/dist/bin/lattice-sensor.js +31 -0
- package/sensor/dist/db/index.d.ts +114 -0
- package/sensor/dist/db/index.d.ts.map +1 -1
- package/sensor/dist/db/index.js +235 -7
- package/sensor/dist/db/index.js.map +1 -1
- package/sensor/dist/db/migrations.js +1 -1
- package/sensor/dist/db/migrations.js.map +1 -1
- package/sensor/dist/db/queries.d.ts +46 -8
- package/sensor/dist/db/queries.d.ts.map +1 -1
- package/sensor/dist/db/queries.js +99 -16
- package/sensor/dist/db/queries.js.map +1 -1
- package/sensor/dist/db/wal-valve.d.ts +15 -2
- package/sensor/dist/db/wal-valve.d.ts.map +1 -1
- package/sensor/dist/db/wal-valve.js +88 -6
- package/sensor/dist/db/wal-valve.js.map +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts.map +1 -1
- package/sensor/dist/extraction/extraction-version.js +5 -1
- package/sensor/dist/extraction/extraction-version.js.map +1 -1
- package/sensor/dist/extraction/function-ref.d.ts.map +1 -1
- package/sensor/dist/extraction/function-ref.js +6 -0
- package/sensor/dist/extraction/function-ref.js.map +1 -1
- package/sensor/dist/extraction/grammars.d.ts.map +1 -1
- package/sensor/dist/extraction/grammars.js +46 -0
- package/sensor/dist/extraction/grammars.js.map +1 -1
- package/sensor/dist/extraction/index.d.ts +11 -1
- package/sensor/dist/extraction/index.d.ts.map +1 -1
- package/sensor/dist/extraction/index.js +68 -16
- package/sensor/dist/extraction/index.js.map +1 -1
- package/sensor/dist/extraction/kernel/decode.d.ts.map +1 -1
- package/sensor/dist/extraction/kernel/decode.js +9 -3
- package/sensor/dist/extraction/kernel/decode.js.map +1 -1
- package/sensor/dist/extraction/kernel/index.d.ts +2 -0
- package/sensor/dist/extraction/kernel/index.d.ts.map +1 -1
- package/sensor/dist/extraction/kernel/index.js +122 -8
- package/sensor/dist/extraction/kernel/index.js.map +1 -1
- package/sensor/dist/extraction/kernel/layout.d.ts +10 -1
- package/sensor/dist/extraction/kernel/layout.d.ts.map +1 -1
- package/sensor/dist/extraction/kernel/layout.js +11 -2
- package/sensor/dist/extraction/kernel/layout.js.map +1 -1
- package/sensor/dist/extraction/kernel/loader.d.ts +42 -0
- package/sensor/dist/extraction/kernel/loader.d.ts.map +1 -1
- package/sensor/dist/extraction/kernel/loader.js.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.d.ts +13 -0
- package/sensor/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.js +809 -13
- package/sensor/dist/extraction/languages/c-cpp.js.map +1 -1
- package/sensor/dist/extraction/store-worker.js +29 -0
- package/sensor/dist/extraction/store-worker.js.map +1 -1
- package/sensor/dist/extraction/tree-sitter.d.ts +4 -1
- package/sensor/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.js +20 -4
- package/sensor/dist/extraction/tree-sitter.js.map +1 -1
- package/sensor/dist/extraction/wasm/tree-sitter-c.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-cpp.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-dart.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-kotlin.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-php.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-ruby.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-rust.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-swift.wasm +0 -0
- package/sensor/dist/index.d.ts +12 -1
- package/sensor/dist/index.d.ts.map +1 -1
- package/sensor/dist/index.js +42 -7
- package/sensor/dist/index.js.map +1 -1
- package/sensor/dist/mcp/daemon-registry.d.ts +5 -2
- package/sensor/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-registry.js +5 -2
- package/sensor/dist/mcp/daemon-registry.js.map +1 -1
- package/sensor/dist/mcp/index.d.ts +24 -0
- package/sensor/dist/mcp/index.d.ts.map +1 -1
- package/sensor/dist/mcp/index.js +51 -2
- package/sensor/dist/mcp/index.js.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.js +3 -1
- package/sensor/dist/mcp/liveness-watchdog.js.map +1 -1
- package/sensor/dist/mcp/server-instructions.d.ts +1 -1
- package/sensor/dist/mcp/server-instructions.d.ts.map +1 -1
- package/sensor/dist/mcp/server-instructions.js +1 -0
- package/sensor/dist/mcp/server-instructions.js.map +1 -1
- package/sensor/dist/mcp/tools.d.ts +48 -0
- package/sensor/dist/mcp/tools.d.ts.map +1 -1
- package/sensor/dist/mcp/tools.js +231 -4
- package/sensor/dist/mcp/tools.js.map +1 -1
- package/sensor/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/c-fnptr-synthesizer.js +561 -127
- package/sensor/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts +1 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.js +80 -11
- package/sensor/dist/resolution/callback-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/import-resolver.d.ts.map +1 -1
- package/sensor/dist/resolution/import-resolver.js +34 -2
- package/sensor/dist/resolution/import-resolver.js.map +1 -1
- package/sensor/dist/resolution/index.d.ts +34 -0
- package/sensor/dist/resolution/index.d.ts.map +1 -1
- package/sensor/dist/resolution/index.js +393 -51
- package/sensor/dist/resolution/index.js.map +1 -1
- package/sensor/dist/resolution/memory-budget.d.ts +48 -0
- package/sensor/dist/resolution/memory-budget.d.ts.map +1 -0
- package/sensor/dist/resolution/memory-budget.js +162 -0
- package/sensor/dist/resolution/memory-budget.js.map +1 -0
- package/sensor/dist/resolution/name-matcher.d.ts +4 -7
- package/sensor/dist/resolution/name-matcher.d.ts.map +1 -1
- package/sensor/dist/resolution/name-matcher.js +256 -91
- package/sensor/dist/resolution/name-matcher.js.map +1 -1
- package/sensor/dist/resolution/resolver-pool.d.ts +41 -1
- package/sensor/dist/resolution/resolver-pool.d.ts.map +1 -1
- package/sensor/dist/resolution/resolver-pool.js +103 -3
- package/sensor/dist/resolution/resolver-pool.js.map +1 -1
- package/sensor/dist/resolution/resolver-worker.js +27 -0
- package/sensor/dist/resolution/resolver-worker.js.map +1 -1
- package/sensor/dist/sync/watcher.d.ts +8 -1
- package/sensor/dist/sync/watcher.d.ts.map +1 -1
- package/sensor/dist/sync/watcher.js +44 -2
- package/sensor/dist/sync/watcher.js.map +1 -1
- package/sensor/dist/types.d.ts +7 -3
- package/sensor/dist/types.d.ts.map +1 -1
- package/src/cli-help.mjs +16 -0
- package/src/sensor-adapter.mjs +4 -0
- package/src/sensor-cli.mjs +37 -5
- package/src/sensor-diff.mjs +661 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quolu/lattice",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.45.0",
|
|
4
4
|
"description": "Schedulability compiler for multi-agent development: observe real code boundaries, refactor the conflicting seam, recompile the plan for parallel execution",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Quo / クオ at kitepon.dev",
|
|
@@ -74,7 +74,9 @@
|
|
|
74
74
|
"verify:todo-store": "node bin/lattice.mjs todo verify --json",
|
|
75
75
|
"check:cli-surface": "node scripts/verify-cli-surface.mjs",
|
|
76
76
|
"check:open-questions": "node scripts/verify-open-questions.mjs",
|
|
77
|
-
"check:reachability": "node scripts/verify-product-reachability.mjs"
|
|
77
|
+
"check:reachability": "node scripts/verify-product-reachability.mjs",
|
|
78
|
+
"upstream:check": "node scripts/upstream-check.mjs",
|
|
79
|
+
"upstream:sync": "node scripts/upstream-sync.mjs"
|
|
78
80
|
},
|
|
79
81
|
"homepage": "https://github.com/kitepon-rgb/Lattice#readme",
|
|
80
82
|
"bugs": {
|
package/sensor/NOTICE
CHANGED
|
@@ -8,23 +8,12 @@ Lattice の構造 sensor として吸収したものである(Lattice ADR 0047
|
|
|
8
8
|
- 取り込み方法: `git archive`(pristine tree。改変は吸収後の履歴が持つ)
|
|
9
9
|
- 取り込み時の唯一の改変: upstream `CLAUDE.md` → `docs/UPSTREAM-CLAUDE.md` へ移動
|
|
10
10
|
(Lattice 内での AI セッションへ upstream 正典が自動注入されるのを防ぐ。内容は不変)
|
|
11
|
-
## upstream 追従方針(
|
|
11
|
+
## upstream 追従方針(ADR 0155・オーナー裁定 2026-08-03)
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
衝突する場合は自前実装を優先し、必要なら考え方だけ手移植する。
|
|
21
|
-
- 手順: upstream diff を実読 → cherry-pick または手移植 → schema migration は
|
|
22
|
-
**Lattice 採番(v9 以降は Lattice が所有。upstream の同番 migration は振替)** →
|
|
23
|
-
focused test → `npm run ci` green → 本 NOTICE 末尾の「追従記録」へ
|
|
24
|
-
upstream commit を追記。
|
|
25
|
-
- 監視は定期ジョブ化しない。sensor の欠陥・機能不足に当たった時に upstream を
|
|
26
|
-
確認する(必要駆動)。
|
|
27
|
-
|
|
28
|
-
## 追従記録
|
|
29
|
-
|
|
30
|
-
(吸収時点 04ab45c 以降の取り込みなし)
|
|
13
|
+
- 既定は**全量 3-way merge**。貰えるものは全部取り込む。旧方針(選択的 cherry-pick・
|
|
14
|
+
必要駆動の監視)は54コミット溜めた実績をもって廃止した(経緯は ADR 0155)。
|
|
15
|
+
- 正本は `sensor/UPSTREAM.json`(同期点 synced_at・path 写像・skip・衝突方針・削除承認)。
|
|
16
|
+
- 追従は `npm run upstream:sync`(衝突後は解決 → commit → `--mark-synced`)、
|
|
17
|
+
検知は週次の `.github/workflows/upstream-check.yml` と `npm run upstream:check`。
|
|
18
|
+
- 取り込み履歴は UPSTREAM.json の synced_at と git 履歴が持つ(本 NOTICE には重複記録しない)。
|
|
19
|
+
現在の同期点: 49c11fc(2026-08-03、54コミット消化・kernel 20言語化)。
|
|
@@ -861,6 +861,8 @@ function main() {
|
|
|
861
861
|
const journalMode = cg.getJournalMode();
|
|
862
862
|
const buildInfo = cg.getIndexBuildInfo();
|
|
863
863
|
const reindexRecommended = cg.isIndexStale();
|
|
864
|
+
// Non-zero means THIS process is older than the index it is attached to.
|
|
865
|
+
const engineBehindIndexFiles = cg.getEngineBehindIndexFileCount();
|
|
864
866
|
const indexState = cg.getIndexState();
|
|
865
867
|
// Zero on a healthy index; non-zero at rest means a resolution pass was
|
|
866
868
|
// interrupted, so some files' call edges are missing (#1187).
|
|
@@ -878,6 +880,7 @@ function main() {
|
|
|
878
880
|
nodeCount: stats.nodeCount,
|
|
879
881
|
edgeCount: stats.edgeCount,
|
|
880
882
|
dbSizeBytes: stats.dbSizeBytes,
|
|
883
|
+
walSizeBytes: stats.walSizeBytes,
|
|
881
884
|
backend,
|
|
882
885
|
journalMode,
|
|
883
886
|
nodesByKind: stats.nodesByKind,
|
|
@@ -895,6 +898,11 @@ function main() {
|
|
|
895
898
|
builtWithExtractionVersion: buildInfo.extractionVersion,
|
|
896
899
|
currentExtractionVersion: extraction_version_1.EXTRACTION_VERSION,
|
|
897
900
|
reindexRecommended,
|
|
901
|
+
// Files written by a NEWER extractor than this process. Non-zero
|
|
902
|
+
// means this process is behind the index; it leaves those rows
|
|
903
|
+
// alone rather than downgrading them, so the gap persists until
|
|
904
|
+
// the older process is restarted on the current build.
|
|
905
|
+
engineBehindIndexFiles,
|
|
898
906
|
// 'complete' | 'partial' (files silently dropped) | 'indexing'
|
|
899
907
|
// (a run was killed mid-index — the index is truncated) |
|
|
900
908
|
// 'failed' | null (predates the marker).
|
|
@@ -933,6 +941,19 @@ function main() {
|
|
|
933
941
|
console.log(` Nodes: ${formatNumber(stats.nodeCount)}`);
|
|
934
942
|
console.log(` Edges: ${formatNumber(stats.edgeCount)}`);
|
|
935
943
|
console.log(` DB Size: ${(stats.dbSizeBytes / 1024 / 1024).toFixed(2)} MB`);
|
|
944
|
+
// Surface the WAL sidecar (#1431): a WAL that dwarfs the DB at rest is
|
|
945
|
+
// the killed-session leak — invisible before this line, it only showed
|
|
946
|
+
// up as a mysteriously full disk. open() above already kicked off the
|
|
947
|
+
// automatic heal for the oversized case.
|
|
948
|
+
if (stats.walSizeBytes > 0) {
|
|
949
|
+
const { WAL_HEAL_THRESHOLD_BYTES } = await Promise.resolve().then(() => __importStar(require('../db/index')));
|
|
950
|
+
const oversized = stats.walSizeBytes > Math.max(WAL_HEAL_THRESHOLD_BYTES, stats.dbSizeBytes);
|
|
951
|
+
const walLabel = `${(stats.walSizeBytes / 1024 / 1024).toFixed(2)} MB`;
|
|
952
|
+
console.log(` WAL Size: ${oversized ? chalk.yellow(walLabel) : walLabel}`);
|
|
953
|
+
if (oversized) {
|
|
954
|
+
warn('The write-ahead log is larger than the database — killed sessions left it behind. It is reclaimed automatically on open; if it persists across runs, another live LatticeSensor process is holding it.');
|
|
955
|
+
}
|
|
956
|
+
}
|
|
936
957
|
// Surface the active SQLite backend (node:sqlite — Node's built-in real
|
|
937
958
|
// SQLite, full WAL + FTS5, no native build).
|
|
938
959
|
const backendLabel = chalk.green(`node:sqlite ${(0, glyphs_1.getGlyphs)().dash} built-in (full WAL)`);
|
|
@@ -991,6 +1012,16 @@ function main() {
|
|
|
991
1012
|
info('Run "lattice sensor index" (full rebuild) or "lattice sensor sync"');
|
|
992
1013
|
console.log();
|
|
993
1014
|
}
|
|
1015
|
+
// The opposite direction, and the one that used to be invisible: this
|
|
1016
|
+
// process is older than the index. Those rows are left untouched on
|
|
1017
|
+
// purpose, so nothing converges until the stale process is restarted.
|
|
1018
|
+
if (engineBehindIndexFiles > 0) {
|
|
1019
|
+
warn(`${engineBehindIndexFiles} file(s) were indexed by a NEWER extractor than this process`
|
|
1020
|
+
+ ` (running extraction v${extraction_version_1.EXTRACTION_VERSION}).`);
|
|
1021
|
+
info('This process is behind the index and will not rewrite those rows.'
|
|
1022
|
+
+ ' Restart any long-running sensor process on the current build.');
|
|
1023
|
+
console.log();
|
|
1024
|
+
}
|
|
994
1025
|
cg.destroy();
|
|
995
1026
|
}
|
|
996
1027
|
catch (err) {
|
|
@@ -6,6 +6,20 @@
|
|
|
6
6
|
import { SqliteDatabase, SqliteBackend } from './sqlite-adapter';
|
|
7
7
|
import { SchemaVersion } from '../types';
|
|
8
8
|
export { SqliteDatabase, SqliteBackend } from './sqlite-adapter';
|
|
9
|
+
/**
|
|
10
|
+
* WAL size past which `healOversizedWal` (run at every `open`) checkpoints and
|
|
11
|
+
* truncates the file, and to which `journal_size_limit` clips the WAL after any
|
|
12
|
+
* resetting checkpoint. A SIGKILL'd process (the #850 liveness watchdog, OOM,
|
|
13
|
+
* crash) can leave an arbitrarily large WAL behind — a whole deferred-sync
|
|
14
|
+
* run's worth (#1248) — and before #1431 no later session ever shrank it: the
|
|
15
|
+
* file just grew, killed session after killed session, until the disk filled
|
|
16
|
+
* (25.6 GB observed). 64 MB is far above anything a healthy open ever sees
|
|
17
|
+
* (a clean close deletes the WAL) yet small enough to cap the leak.
|
|
18
|
+
* Override with `LATTICE_SENSOR_WAL_HEAL_MB` (also feeds `journal_size_limit`).
|
|
19
|
+
*/
|
|
20
|
+
export declare const WAL_HEAL_THRESHOLD_BYTES: number;
|
|
21
|
+
/** Resolve the heal threshold from the env override (MB); invalid ⇒ 64 MB. */
|
|
22
|
+
export declare function resolveWalHealBytes(envVal: string | undefined): number;
|
|
9
23
|
/**
|
|
10
24
|
* Database connection wrapper with lifecycle management
|
|
11
25
|
*/
|
|
@@ -52,6 +66,64 @@ export declare class DatabaseConnection {
|
|
|
52
66
|
* IF NOT EXISTS).
|
|
53
67
|
*/
|
|
54
68
|
endBulkNodeLoad(): void;
|
|
69
|
+
/**
|
|
70
|
+
* NON-UNIQUE secondary indexes maintained per-row during the parse phase's
|
|
71
|
+
* bulk inserts — the store-architecture arc's first lever (plan §4d: dubbo's
|
|
72
|
+
* parse-loop wall is 94% store-writer busy, and the #1320 post-mortem showed
|
|
73
|
+
* statement batching and sorted inserts are ~zero on this path because
|
|
74
|
+
* B-TREE MAINTENANCE is the floor). A fresh init writes every row of
|
|
75
|
+
* nodes/unresolved_refs/files exactly once and reads none of them until
|
|
76
|
+
* resolution, so the parse window can drop all of these and rebuild each in
|
|
77
|
+
* one table scan afterwards — the same measured trade as the resolution
|
|
78
|
+
* phase's edge-index window (2.8s → 1.1s inserting, ~0.3s recreating).
|
|
79
|
+
* Primary keys and UNIQUE constraints stay (upserts and OR-IGNORE dedup
|
|
80
|
+
* conflict on them).
|
|
81
|
+
*/
|
|
82
|
+
private static readonly BULK_PARSE_INDEX_NAMES;
|
|
83
|
+
/**
|
|
84
|
+
* Enter bulk-parse-load mode (FRESH-INIT ONLY — the caller gates on a fresh
|
|
85
|
+
* DB, because an incremental index deletes per-file rows mid-phase and needs
|
|
86
|
+
* the file_path indexes): drop every parse-lane secondary index, including
|
|
87
|
+
* the four non-unique edge indexes (parse inserts contains-edges too; the
|
|
88
|
+
* UNIQUE identity index stays for INSERT OR IGNORE dedup, and its `source`
|
|
89
|
+
* prefix keeps source-keyed reads indexed, as in the edge window). MUST be
|
|
90
|
+
* paired with endBulkParseLoad(); a crash inside the window is healed on the
|
|
91
|
+
* next DatabaseConnection open (schema.sql re-applies CREATE INDEX IF NOT
|
|
92
|
+
* EXISTS).
|
|
93
|
+
*/
|
|
94
|
+
beginBulkParseLoad(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Leave bulk-parse-load mode: recreate everything the window dropped, one
|
|
97
|
+
* table scan per index, with a yield between statements (same
|
|
98
|
+
* liveness-watchdog rationale as endBulkEdgeLoad — at kernel scale each
|
|
99
|
+
* build is a long synchronous scan). The edge indexes are rebuilt here too,
|
|
100
|
+
* so paths that never enter the resolution phase's own bulk-edge window
|
|
101
|
+
* (small runs) are left with a complete schema; the batched resolver's
|
|
102
|
+
* beginBulkEdgeLoad simply re-drops them (DROP IF EXISTS — idempotent).
|
|
103
|
+
*/
|
|
104
|
+
endBulkParseLoad(): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* unresolved_refs secondary indexes NOT read by the batched resolution
|
|
107
|
+
* loop. The loop pages pending refs by keyset (`status='pending' AND id>?`
|
|
108
|
+
* — the status index + PK), deletes resolved rows by id, and parks failures
|
|
109
|
+
* with a status UPDATE; every other ref index serves SYNC-time paths
|
|
110
|
+
* (per-file re-index deletes, name-keyed retry, failed-tail heal). Each
|
|
111
|
+
* per-batch DELETE maintains all of them — the biggest single main-thread
|
|
112
|
+
* stage on the dubbo profile (deletes 1.2s of a 5.4s resolution phase) —
|
|
113
|
+
* so the batched loop drops them and rebuilds at the end, where the table
|
|
114
|
+
* holds only the surviving FAILED refs (resolved rows are gone), making
|
|
115
|
+
* the recreate near-free.
|
|
116
|
+
*/
|
|
117
|
+
private static readonly BULK_REF_INDEX_NAMES;
|
|
118
|
+
/**
|
|
119
|
+
* Enter bulk-ref mode for the batched resolution loop — see
|
|
120
|
+
* BULK_REF_INDEX_NAMES. MUST be paired with endBulkRefLoad(); a crash
|
|
121
|
+
* inside the window heals on the next open (schema.sql re-applies
|
|
122
|
+
* CREATE INDEX IF NOT EXISTS).
|
|
123
|
+
*/
|
|
124
|
+
beginBulkRefLoad(): void;
|
|
125
|
+
/** Leave bulk-ref mode: recreate each index in one scan (yield between). */
|
|
126
|
+
endBulkRefLoad(): Promise<void>;
|
|
55
127
|
/**
|
|
56
128
|
* Names of the NON-UNIQUE edge indexes dropped for a bulk edge load.
|
|
57
129
|
* idx_edges_identity deliberately stays: INSERT OR IGNORE's dedup conflicts
|
|
@@ -136,6 +208,9 @@ export declare class DatabaseConnection {
|
|
|
136
208
|
* journal mode, in-memory DB, or no write since the last checkpoint+reset).
|
|
137
209
|
*/
|
|
138
210
|
getWalSizeBytes(): number;
|
|
211
|
+
/** Size of the main DB file in bytes (0 for in-memory/unknown) — the WAL
|
|
212
|
+
* valve scales its fold caps with it (resolveWalValveMb). */
|
|
213
|
+
getDbFileSizeBytes(): number;
|
|
139
214
|
/** Current `wal_autocheckpoint` interval in pages (0 = disabled). */
|
|
140
215
|
getWalAutocheckpoint(): number;
|
|
141
216
|
/**
|
|
@@ -169,6 +244,45 @@ export declare class DatabaseConnection {
|
|
|
169
244
|
log: number;
|
|
170
245
|
checkpointed: number;
|
|
171
246
|
} | null>;
|
|
247
|
+
/**
|
|
248
|
+
* `PRAGMA wal_checkpoint(TRUNCATE)` — same off-thread pattern as PASSIVE,
|
|
249
|
+
* but on success the WAL FILE is chopped to zero. A completed passive
|
|
250
|
+
* backfill bounds the un-checkpointed backlog, yet the FILE only stops
|
|
251
|
+
* growing when a commit finds ZERO readers holding WAL marks — rare while
|
|
252
|
+
* pool workers cycle, so at kernel scale a fully-backfilled WAL still
|
|
253
|
+
* accreted the phase's whole write volume on disk (§7a.1: 22GB). The valve
|
|
254
|
+
* calls this exactly at a parked barrier (writer parked, pool drained,
|
|
255
|
+
* backfill complete) where the no-reader condition is guaranteed rather
|
|
256
|
+
* than lucky. The worker sets a short busy_timeout so a racing reader
|
|
257
|
+
* degrades this to a no-op (busy=1) instead of a stall.
|
|
258
|
+
*/
|
|
259
|
+
checkpointWalTruncate(): Promise<{
|
|
260
|
+
busy: number;
|
|
261
|
+
log: number;
|
|
262
|
+
checkpointed: number;
|
|
263
|
+
} | null>;
|
|
264
|
+
/**
|
|
265
|
+
* Shrink a leftover oversized WAL (#1431). A SIGKILL'd session — the #850
|
|
266
|
+
* liveness watchdog, OOM, a crash — leaves its WAL on disk, the next session
|
|
267
|
+
* appends to the same file, and (pre-#1431) nothing ever truncated it:
|
|
268
|
+
* PASSIVE checkpoints fold frames but keep the file at its high-water mark,
|
|
269
|
+
* and the one shrinking path (a clean last-connection close) is exactly what
|
|
270
|
+
* the killed world never takes. Unbounded growth until the disk fills.
|
|
271
|
+
*
|
|
272
|
+
* Called fire-and-forget from every `open()`: cost is one statSync when the
|
|
273
|
+
* WAL is small (the overwhelmingly common case). Past the threshold it runs
|
|
274
|
+
* the off-thread PASSIVE fold then TRUNCATE — both on worker connections
|
|
275
|
+
* with a busy_timeout, so a racing writer degrades this to a no-op that the
|
|
276
|
+
* next open retries rather than a stall.
|
|
277
|
+
*/
|
|
278
|
+
healOversizedWal(): Promise<{
|
|
279
|
+
healed: boolean;
|
|
280
|
+
beforeBytes: number;
|
|
281
|
+
afterBytes: number;
|
|
282
|
+
}>;
|
|
283
|
+
private walHeal;
|
|
284
|
+
private runWalHeal;
|
|
285
|
+
private checkpointWal;
|
|
172
286
|
/**
|
|
173
287
|
* Optimize database (vacuum and analyze)
|
|
174
288
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
|
package/sensor/dist/db/index.js
CHANGED
|
@@ -38,7 +38,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
38
38
|
};
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.DATABASE_FILENAME = exports.DatabaseConnection = void 0;
|
|
41
|
+
exports.DATABASE_FILENAME = exports.DatabaseConnection = exports.WAL_HEAL_THRESHOLD_BYTES = void 0;
|
|
42
|
+
exports.resolveWalHealBytes = resolveWalHealBytes;
|
|
42
43
|
exports.getDatabasePath = getDatabasePath;
|
|
43
44
|
exports.removeDatabaseFiles = removeDatabaseFiles;
|
|
44
45
|
const sqlite_adapter_1 = require("./sqlite-adapter");
|
|
@@ -68,6 +69,34 @@ function configureConnection(db) {
|
|
|
68
69
|
db.pragma('cache_size = -64000'); // 64 MB page cache
|
|
69
70
|
db.pragma('temp_store = MEMORY'); // temp tables in memory
|
|
70
71
|
db.pragma('mmap_size = 268435456'); // 256 MB memory-mapped I/O
|
|
72
|
+
// Without a journal_size_limit the -wal file never shrinks below its
|
|
73
|
+
// high-water mark while a connection lives: checkpoints fold frames back but
|
|
74
|
+
// leave the file at full size, so one giant deferred-sync WAL stays giant
|
|
75
|
+
// forever. With the limit set, any checkpoint that resets the WAL truncates
|
|
76
|
+
// the file back down. Killed-process leftovers are handled separately by
|
|
77
|
+
// healOversizedWal() at open. (#1431)
|
|
78
|
+
db.pragma(`journal_size_limit = ${exports.WAL_HEAL_THRESHOLD_BYTES}`);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* WAL size past which `healOversizedWal` (run at every `open`) checkpoints and
|
|
82
|
+
* truncates the file, and to which `journal_size_limit` clips the WAL after any
|
|
83
|
+
* resetting checkpoint. A SIGKILL'd process (the #850 liveness watchdog, OOM,
|
|
84
|
+
* crash) can leave an arbitrarily large WAL behind — a whole deferred-sync
|
|
85
|
+
* run's worth (#1248) — and before #1431 no later session ever shrank it: the
|
|
86
|
+
* file just grew, killed session after killed session, until the disk filled
|
|
87
|
+
* (25.6 GB observed). 64 MB is far above anything a healthy open ever sees
|
|
88
|
+
* (a clean close deletes the WAL) yet small enough to cap the leak.
|
|
89
|
+
* Override with `LATTICE_SENSOR_WAL_HEAL_MB` (also feeds `journal_size_limit`).
|
|
90
|
+
*/
|
|
91
|
+
exports.WAL_HEAL_THRESHOLD_BYTES = resolveWalHealBytes(process.env.LATTICE_SENSOR_WAL_HEAL_MB);
|
|
92
|
+
/** Resolve the heal threshold from the env override (MB); invalid ⇒ 64 MB. */
|
|
93
|
+
function resolveWalHealBytes(envVal) {
|
|
94
|
+
if (envVal !== undefined && envVal !== '') {
|
|
95
|
+
const n = Number(envVal);
|
|
96
|
+
if (Number.isFinite(n) && n > 0)
|
|
97
|
+
return Math.floor(n * 1024 * 1024);
|
|
98
|
+
}
|
|
99
|
+
return 64 * 1024 * 1024;
|
|
71
100
|
}
|
|
72
101
|
/**
|
|
73
102
|
* Database connection wrapper with lifecycle management
|
|
@@ -133,6 +162,9 @@ class DatabaseConnection {
|
|
|
133
162
|
// beginBulkNodeLoad and endBulkNodeLoad): the FTS triggers are missing and
|
|
134
163
|
// nodes_fts is stale. Rebuild + recreate so search stays in sync.
|
|
135
164
|
conn.healBulkNodeLoad();
|
|
165
|
+
// Self-heal a killed session's leftover oversized WAL (#1431) — one
|
|
166
|
+
// statSync when healthy, off-thread checkpoint+truncate when not.
|
|
167
|
+
void conn.healOversizedWal();
|
|
136
168
|
return conn;
|
|
137
169
|
}
|
|
138
170
|
/**
|
|
@@ -163,6 +195,116 @@ class DatabaseConnection {
|
|
|
163
195
|
this.db.exec(`INSERT INTO nodes_fts(nodes_fts) VALUES('rebuild')`);
|
|
164
196
|
this.recreateFtsTriggers();
|
|
165
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* NON-UNIQUE secondary indexes maintained per-row during the parse phase's
|
|
200
|
+
* bulk inserts — the store-architecture arc's first lever (plan §4d: dubbo's
|
|
201
|
+
* parse-loop wall is 94% store-writer busy, and the #1320 post-mortem showed
|
|
202
|
+
* statement batching and sorted inserts are ~zero on this path because
|
|
203
|
+
* B-TREE MAINTENANCE is the floor). A fresh init writes every row of
|
|
204
|
+
* nodes/unresolved_refs/files exactly once and reads none of them until
|
|
205
|
+
* resolution, so the parse window can drop all of these and rebuild each in
|
|
206
|
+
* one table scan afterwards — the same measured trade as the resolution
|
|
207
|
+
* phase's edge-index window (2.8s → 1.1s inserting, ~0.3s recreating).
|
|
208
|
+
* Primary keys and UNIQUE constraints stay (upserts and OR-IGNORE dedup
|
|
209
|
+
* conflict on them).
|
|
210
|
+
*/
|
|
211
|
+
static BULK_PARSE_INDEX_NAMES = [
|
|
212
|
+
'idx_nodes_kind',
|
|
213
|
+
'idx_nodes_name',
|
|
214
|
+
'idx_nodes_qualified_name',
|
|
215
|
+
'idx_nodes_file_path',
|
|
216
|
+
'idx_nodes_language',
|
|
217
|
+
'idx_nodes_file_line',
|
|
218
|
+
'idx_nodes_lower_name',
|
|
219
|
+
'idx_unresolved_from_node',
|
|
220
|
+
'idx_unresolved_name',
|
|
221
|
+
'idx_unresolved_file_path',
|
|
222
|
+
'idx_unresolved_from_name',
|
|
223
|
+
'idx_unresolved_status',
|
|
224
|
+
'idx_unresolved_failed_tail',
|
|
225
|
+
'idx_files_language',
|
|
226
|
+
'idx_files_modified_at',
|
|
227
|
+
];
|
|
228
|
+
/**
|
|
229
|
+
* Enter bulk-parse-load mode (FRESH-INIT ONLY — the caller gates on a fresh
|
|
230
|
+
* DB, because an incremental index deletes per-file rows mid-phase and needs
|
|
231
|
+
* the file_path indexes): drop every parse-lane secondary index, including
|
|
232
|
+
* the four non-unique edge indexes (parse inserts contains-edges too; the
|
|
233
|
+
* UNIQUE identity index stays for INSERT OR IGNORE dedup, and its `source`
|
|
234
|
+
* prefix keeps source-keyed reads indexed, as in the edge window). MUST be
|
|
235
|
+
* paired with endBulkParseLoad(); a crash inside the window is healed on the
|
|
236
|
+
* next DatabaseConnection open (schema.sql re-applies CREATE INDEX IF NOT
|
|
237
|
+
* EXISTS).
|
|
238
|
+
*/
|
|
239
|
+
beginBulkParseLoad() {
|
|
240
|
+
for (const idx of DatabaseConnection.BULK_PARSE_INDEX_NAMES) {
|
|
241
|
+
this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
|
|
242
|
+
}
|
|
243
|
+
this.beginBulkEdgeLoad();
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Leave bulk-parse-load mode: recreate everything the window dropped, one
|
|
247
|
+
* table scan per index, with a yield between statements (same
|
|
248
|
+
* liveness-watchdog rationale as endBulkEdgeLoad — at kernel scale each
|
|
249
|
+
* build is a long synchronous scan). The edge indexes are rebuilt here too,
|
|
250
|
+
* so paths that never enter the resolution phase's own bulk-edge window
|
|
251
|
+
* (small runs) are left with a complete schema; the batched resolver's
|
|
252
|
+
* beginBulkEdgeLoad simply re-drops them (DROP IF EXISTS — idempotent).
|
|
253
|
+
*/
|
|
254
|
+
async endBulkParseLoad() {
|
|
255
|
+
const schemaPath = path.join(__dirname, 'schema.sql');
|
|
256
|
+
const schema = fs.readFileSync(schemaPath, 'utf-8');
|
|
257
|
+
for (const idx of DatabaseConnection.BULK_PARSE_INDEX_NAMES) {
|
|
258
|
+
const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
|
|
259
|
+
if (!m)
|
|
260
|
+
throw new Error(`schema.sql: parse index ${idx} not found for bulk-load recreation`);
|
|
261
|
+
this.db.exec(m[0]);
|
|
262
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
263
|
+
}
|
|
264
|
+
await this.endBulkEdgeLoad();
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* unresolved_refs secondary indexes NOT read by the batched resolution
|
|
268
|
+
* loop. The loop pages pending refs by keyset (`status='pending' AND id>?`
|
|
269
|
+
* — the status index + PK), deletes resolved rows by id, and parks failures
|
|
270
|
+
* with a status UPDATE; every other ref index serves SYNC-time paths
|
|
271
|
+
* (per-file re-index deletes, name-keyed retry, failed-tail heal). Each
|
|
272
|
+
* per-batch DELETE maintains all of them — the biggest single main-thread
|
|
273
|
+
* stage on the dubbo profile (deletes 1.2s of a 5.4s resolution phase) —
|
|
274
|
+
* so the batched loop drops them and rebuilds at the end, where the table
|
|
275
|
+
* holds only the surviving FAILED refs (resolved rows are gone), making
|
|
276
|
+
* the recreate near-free.
|
|
277
|
+
*/
|
|
278
|
+
static BULK_REF_INDEX_NAMES = [
|
|
279
|
+
'idx_unresolved_from_node',
|
|
280
|
+
'idx_unresolved_name',
|
|
281
|
+
'idx_unresolved_file_path',
|
|
282
|
+
'idx_unresolved_from_name',
|
|
283
|
+
'idx_unresolved_failed_tail',
|
|
284
|
+
];
|
|
285
|
+
/**
|
|
286
|
+
* Enter bulk-ref mode for the batched resolution loop — see
|
|
287
|
+
* BULK_REF_INDEX_NAMES. MUST be paired with endBulkRefLoad(); a crash
|
|
288
|
+
* inside the window heals on the next open (schema.sql re-applies
|
|
289
|
+
* CREATE INDEX IF NOT EXISTS).
|
|
290
|
+
*/
|
|
291
|
+
beginBulkRefLoad() {
|
|
292
|
+
for (const idx of DatabaseConnection.BULK_REF_INDEX_NAMES) {
|
|
293
|
+
this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/** Leave bulk-ref mode: recreate each index in one scan (yield between). */
|
|
297
|
+
async endBulkRefLoad() {
|
|
298
|
+
const schemaPath = path.join(__dirname, 'schema.sql');
|
|
299
|
+
const schema = fs.readFileSync(schemaPath, 'utf-8');
|
|
300
|
+
for (const idx of DatabaseConnection.BULK_REF_INDEX_NAMES) {
|
|
301
|
+
const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
|
|
302
|
+
if (!m)
|
|
303
|
+
throw new Error(`schema.sql: ref index ${idx} not found for bulk-load recreation`);
|
|
304
|
+
this.db.exec(m[0]);
|
|
305
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
166
308
|
/**
|
|
167
309
|
* Names of the NON-UNIQUE edge indexes dropped for a bulk edge load.
|
|
168
310
|
* idx_edges_identity deliberately stays: INSERT OR IGNORE's dedup conflicts
|
|
@@ -321,6 +463,18 @@ class DatabaseConnection {
|
|
|
321
463
|
return 0;
|
|
322
464
|
}
|
|
323
465
|
}
|
|
466
|
+
/** Size of the main DB file in bytes (0 for in-memory/unknown) — the WAL
|
|
467
|
+
* valve scales its fold caps with it (resolveWalValveMb). */
|
|
468
|
+
getDbFileSizeBytes() {
|
|
469
|
+
if (!this.dbPath || this.dbPath === ':memory:')
|
|
470
|
+
return 0;
|
|
471
|
+
try {
|
|
472
|
+
return fs.statSync(this.dbPath).size;
|
|
473
|
+
}
|
|
474
|
+
catch {
|
|
475
|
+
return 0;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
324
478
|
/** Current `wal_autocheckpoint` interval in pages (0 = disabled). */
|
|
325
479
|
getWalAutocheckpoint() {
|
|
326
480
|
const v = this.db.pragma('wal_autocheckpoint', { simple: true });
|
|
@@ -356,9 +510,72 @@ class DatabaseConnection {
|
|
|
356
510
|
* never run inline on the main thread).
|
|
357
511
|
*/
|
|
358
512
|
async checkpointWalPassive() {
|
|
513
|
+
return this.checkpointWal('PASSIVE');
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* `PRAGMA wal_checkpoint(TRUNCATE)` — same off-thread pattern as PASSIVE,
|
|
517
|
+
* but on success the WAL FILE is chopped to zero. A completed passive
|
|
518
|
+
* backfill bounds the un-checkpointed backlog, yet the FILE only stops
|
|
519
|
+
* growing when a commit finds ZERO readers holding WAL marks — rare while
|
|
520
|
+
* pool workers cycle, so at kernel scale a fully-backfilled WAL still
|
|
521
|
+
* accreted the phase's whole write volume on disk (§7a.1: 22GB). The valve
|
|
522
|
+
* calls this exactly at a parked barrier (writer parked, pool drained,
|
|
523
|
+
* backfill complete) where the no-reader condition is guaranteed rather
|
|
524
|
+
* than lucky. The worker sets a short busy_timeout so a racing reader
|
|
525
|
+
* degrades this to a no-op (busy=1) instead of a stall.
|
|
526
|
+
*/
|
|
527
|
+
async checkpointWalTruncate() {
|
|
528
|
+
return this.checkpointWal('TRUNCATE');
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Shrink a leftover oversized WAL (#1431). A SIGKILL'd session — the #850
|
|
532
|
+
* liveness watchdog, OOM, a crash — leaves its WAL on disk, the next session
|
|
533
|
+
* appends to the same file, and (pre-#1431) nothing ever truncated it:
|
|
534
|
+
* PASSIVE checkpoints fold frames but keep the file at its high-water mark,
|
|
535
|
+
* and the one shrinking path (a clean last-connection close) is exactly what
|
|
536
|
+
* the killed world never takes. Unbounded growth until the disk fills.
|
|
537
|
+
*
|
|
538
|
+
* Called fire-and-forget from every `open()`: cost is one statSync when the
|
|
539
|
+
* WAL is small (the overwhelmingly common case). Past the threshold it runs
|
|
540
|
+
* the off-thread PASSIVE fold then TRUNCATE — both on worker connections
|
|
541
|
+
* with a busy_timeout, so a racing writer degrades this to a no-op that the
|
|
542
|
+
* next open retries rather than a stall.
|
|
543
|
+
*/
|
|
544
|
+
async healOversizedWal() {
|
|
545
|
+
const beforeBytes = this.getWalSizeBytes();
|
|
546
|
+
if (beforeBytes <= exports.WAL_HEAL_THRESHOLD_BYTES) {
|
|
547
|
+
return { healed: false, beforeBytes, afterBytes: beforeBytes };
|
|
548
|
+
}
|
|
549
|
+
// Single-flight: open() fires this fire-and-forget and callers may also
|
|
550
|
+
// invoke it explicitly. Two concurrent passes DEFEAT each other — each
|
|
551
|
+
// checkpoint worker sees the other as a busy reader and no-ops — so share
|
|
552
|
+
// one in-flight pass instead of racing.
|
|
553
|
+
this.walHeal ??= this.runWalHeal(beforeBytes).finally(() => { this.walHeal = null; });
|
|
554
|
+
return this.walHeal;
|
|
555
|
+
}
|
|
556
|
+
walHeal = null;
|
|
557
|
+
async runWalHeal(beforeBytes) {
|
|
558
|
+
// A racing reader/writer (another session healing the same file, a query
|
|
559
|
+
// pool warming up) degrades a checkpoint pass to a busy no-op — retry a
|
|
560
|
+
// few times before leaving the rest to the next open.
|
|
561
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
562
|
+
if (attempt > 0)
|
|
563
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
564
|
+
await this.checkpointWalPassive();
|
|
565
|
+
await this.checkpointWalTruncate();
|
|
566
|
+
if (this.getWalSizeBytes() <= exports.WAL_HEAL_THRESHOLD_BYTES)
|
|
567
|
+
break;
|
|
568
|
+
}
|
|
569
|
+
const afterBytes = this.getWalSizeBytes();
|
|
570
|
+
if (process.env.LATTICE_SENSOR_WAL_VALVE_DEBUG) {
|
|
571
|
+
console.error(`[wal-heal] oversized WAL at open: ${Math.round(beforeBytes / (1024 * 1024))}MB -> ${Math.round(afterBytes / (1024 * 1024))}MB`);
|
|
572
|
+
}
|
|
573
|
+
return { healed: afterBytes < beforeBytes, beforeBytes, afterBytes };
|
|
574
|
+
}
|
|
575
|
+
async checkpointWal(mode) {
|
|
359
576
|
if (!this.dbPath || this.dbPath === ':memory:') {
|
|
360
577
|
try {
|
|
361
|
-
const row = this.db.prepare(
|
|
578
|
+
const row = this.db.prepare(`PRAGMA wal_checkpoint(${mode})`).get();
|
|
362
579
|
return row ? { busy: Number(row.busy), log: Number(row.log), checkpointed: Number(row.checkpointed) } : null;
|
|
363
580
|
}
|
|
364
581
|
catch {
|
|
@@ -370,13 +587,18 @@ class DatabaseConnection {
|
|
|
370
587
|
const workerSource = `
|
|
371
588
|
const { workerData, parentPort } = require('node:worker_threads');
|
|
372
589
|
let row = null;
|
|
590
|
+
let err = null;
|
|
373
591
|
try {
|
|
374
592
|
const { DatabaseSync } = require('node:sqlite');
|
|
375
593
|
const db = new DatabaseSync(workerData.dbPath);
|
|
376
|
-
|
|
594
|
+
const mode = workerData.mode === 'TRUNCATE' ? 'TRUNCATE' : 'PASSIVE';
|
|
595
|
+
try {
|
|
596
|
+
if (mode === 'TRUNCATE') db.exec('PRAGMA busy_timeout = 2000');
|
|
597
|
+
row = db.prepare('PRAGMA wal_checkpoint(' + mode + ')').get();
|
|
598
|
+
} catch (e) { err = String(e && e.message || e); }
|
|
377
599
|
try { db.close(); } catch {}
|
|
378
|
-
} catch {}
|
|
379
|
-
parentPort.postMessage({ row });
|
|
600
|
+
} catch (e) { err = err || String(e && e.message || e); }
|
|
601
|
+
parentPort.postMessage({ row, err });
|
|
380
602
|
`;
|
|
381
603
|
return await new Promise((resolve) => {
|
|
382
604
|
let settled = false;
|
|
@@ -387,8 +609,14 @@ class DatabaseConnection {
|
|
|
387
609
|
resolve(row ? { busy: Number(row.busy), log: Number(row.log), checkpointed: Number(row.checkpointed) } : null);
|
|
388
610
|
};
|
|
389
611
|
try {
|
|
390
|
-
const worker = new Worker(workerSource, { eval: true, workerData: { dbPath: this.dbPath } });
|
|
391
|
-
worker.once('message', (m) => {
|
|
612
|
+
const worker = new Worker(workerSource, { eval: true, workerData: { dbPath: this.dbPath, mode } });
|
|
613
|
+
worker.once('message', (m) => {
|
|
614
|
+
if (m?.err && process.env.LATTICE_SENSOR_WAL_VALVE_DEBUG) {
|
|
615
|
+
console.error(`[wal-valve] checkpoint worker (${mode}): ${m.err}`);
|
|
616
|
+
}
|
|
617
|
+
void worker.terminate();
|
|
618
|
+
finish(m?.row ?? null);
|
|
619
|
+
});
|
|
392
620
|
worker.once('error', () => { void worker.terminate(); finish(null); });
|
|
393
621
|
worker.once('exit', () => finish(null));
|
|
394
622
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -142,7 +142,7 @@ const migrations = [
|
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
version: 12,
|
|
145
|
-
description: 'files.extraction_version — EXTRACTION_VERSION of the engine that wrote each row (DEFAULT 0 = pre-stamp). Sync re-extracts rows whose stamp
|
|
145
|
+
description: 'files.extraction_version — EXTRACTION_VERSION of the engine that wrote each row (DEFAULT 0 = pre-stamp). Sync re-extracts rows whose stamp is BELOW the running engine, so extractor upgrades heal incrementally instead of relying on a manual full re-index that the status hint merely recommends. Rows stamped above the running engine are left untouched: rewriting them would downgrade the index',
|
|
146
146
|
up: (db) => {
|
|
147
147
|
const cols = db.prepare('PRAGMA table_info(files)').all();
|
|
148
148
|
if (!cols.some((c) => c.name === 'extraction_version')) {
|