@feltdb/core 0.11.6 → 0.11.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/file-db.d.ts CHANGED
@@ -3,6 +3,26 @@ import type { FreshnessCapability } from './freshness.js';
3
3
  import type { OperationAdmissionInput, OperationAdmissionResult, OperationTransitionInput, OperationTransitionResult } from './operation-admission.js';
4
4
  import type { AtomicTransactionRequest, AtomicTransactionResult } from './transaction.js';
5
5
  import type { AuthorityQueryRequest } from './http-db.js';
6
+ import { type PersistenceProfile } from './file-journal.js';
7
+ export { JournalCorruptionError } from './file-journal.js';
8
+ /** The newest local file snapshot format this build reads and writes. */
9
+ export declare const FILE_SNAPSHOT_FORMAT_VERSION = 2;
10
+ /**
11
+ * The runtime directory was written in a durable format newer than this build
12
+ * understands.
13
+ *
14
+ * Refused rather than recovered around: treating a newer snapshot as invalid
15
+ * and falling back to an older backup — or to an empty database — silently
16
+ * discards every commit the newer format carries. That is exactly what a
17
+ * package-only rollback onto upgraded data would do, so it fails closed.
18
+ */
19
+ export declare class UnsupportedDurableFormatError extends Error {
20
+ readonly statePath: string;
21
+ readonly found: number;
22
+ readonly code = "UNSUPPORTED_DURABLE_FORMAT";
23
+ constructor(statePath: string, found: number);
24
+ }
25
+ export type { PersistenceProfile, PersistencePhase, PhaseSummary } from './file-journal.js';
6
26
  interface JsResult {
7
27
  success: boolean;
8
28
  data?: string;
@@ -18,11 +38,49 @@ interface PortableEvent {
18
38
  origin: string;
19
39
  value?: unknown;
20
40
  }
41
+ export interface FileJsDbOptions {
42
+ compaction?: {
43
+ /**
44
+ * `auto` (default) compacts after a commit once the journal is large
45
+ * enough, outside that commit's acknowledgement. `manual` compacts only
46
+ * when `compact()` is called.
47
+ */
48
+ mode?: 'auto' | 'manual';
49
+ /** Never compact automatically below this journal size. Default 8 MiB. */
50
+ minJournalBytes?: number;
51
+ /**
52
+ * Compact automatically once the journal exceeds this multiple of the
53
+ * snapshot. Default 1, which bounds the bytes rewritten per byte
54
+ * appended to a constant over time.
55
+ */
56
+ journalToSnapshotRatio?: number;
57
+ };
58
+ /** Collect persistence timings. Also enabled by `FELTDB_PERSISTENCE_PROFILE=1`. */
59
+ profile?: boolean;
60
+ }
61
+ export interface PersistenceStatus {
62
+ format: 'none' | 'legacy-snapshot' | 'snapshot+journal';
63
+ source: 'primary' | 'backup' | 'empty';
64
+ generation: number;
65
+ commit: number;
66
+ sequence: number;
67
+ snapshotBytes: number;
68
+ journalBytes: number;
69
+ journalRecords: number;
70
+ recovery: 'clean' | {
71
+ tornTail: {
72
+ byteOffset: number;
73
+ discardedBytes: number;
74
+ };
75
+ };
76
+ }
21
77
  export declare class FileJsDb implements JsDb {
22
78
  private readonly dataPath;
23
79
  private readonly statePath;
80
+ private readonly backupPath;
24
81
  private readonly lockPath;
25
82
  private state;
83
+ private view;
26
84
  private readonly origin;
27
85
  private readonly peers;
28
86
  private lockFd;
@@ -30,11 +88,104 @@ export declare class FileJsDb implements JsDb {
30
88
  private readonly applied;
31
89
  private readonly queryEngine;
32
90
  private indexedSequence;
33
- constructor(path: string);
34
- private loadState;
35
- private loadStateFromBackup;
91
+ private readonly profiler;
92
+ private readonly compaction;
93
+ private compactionScheduled;
94
+ constructor(path: string, options?: FileJsDbOptions);
95
+ private journalPath;
96
+ private snapshotKey;
97
+ private parseSnapshot;
98
+ /**
99
+ * Read the snapshot this handle should start from: the primary, or the
100
+ * backup when the primary cannot be read (unchanged from the single-file
101
+ * runtime), or nothing at all.
102
+ */
103
+ private readSnapshot;
36
104
  private initializeState;
37
- private restorePeers;
105
+ /**
106
+ * Materialize the durable state from scratch: snapshot, then every complete
107
+ * commit in its journal, in order. A journal that disappears while it is
108
+ * being read has been superseded by a compaction, so the read starts over
109
+ * from the new snapshot. One that is missing for the current snapshot is
110
+ * corruption.
111
+ */
112
+ private loadDurableState;
113
+ private adopt;
114
+ /** Apply one commit to memory. The only way any mutation reaches memory. */
115
+ private applyCommit;
116
+ /**
117
+ * Bring memory up to date with the durable files.
118
+ *
119
+ * While the snapshot is unchanged, only journal bytes after the last
120
+ * complete record already applied are read, so a read costs what was
121
+ * committed since the previous read — not the size of all history. Any
122
+ * change to the snapshot, or a journal that no longer continues what was
123
+ * applied, falls back to a complete load.
124
+ */
125
+ private refresh;
126
+ /** Apply newly committed journal records. False when a full load is required. */
127
+ private tailJournal;
128
+ /** A commit body starting from the current sequence. */
129
+ private stage;
130
+ private stageRow;
131
+ private stageEvent;
132
+ /** Stage a row write together with the event that records it. */
133
+ private stagePut;
134
+ /**
135
+ * Make one commit durable, then visible. Caller holds the lock and has
136
+ * refreshed, so memory reflects every earlier commit.
137
+ *
138
+ * 1 body framed and written, without its terminator
139
+ * 2 fdatasync ← the record's bytes are durable
140
+ * 3 terminator written ← the commit boundary exists
141
+ * 4 fdatasync ← the boundary is durable
142
+ * 5 applied to memory, success returned
143
+ *
144
+ * A crash before 3 leaves an unterminated record that recovery discards; it
145
+ * was never acknowledged. Readers only accept terminated records, so no
146
+ * process can observe a commit whose bytes were not already durable. A
147
+ * failure at any step removes whatever was written, so a failed commit is
148
+ * not visible after it returns either.
149
+ */
150
+ private persist;
151
+ private timedSync;
152
+ private compactionDue;
153
+ /**
154
+ * Compaction runs after the commit that made it due has been acknowledged,
155
+ * never as part of it, and under the same lock as every other writer.
156
+ */
157
+ private scheduleCompaction;
158
+ /**
159
+ * Rewrite the current state as a new snapshot and start an empty journal.
160
+ * Caller holds the lock and has refreshed.
161
+ *
162
+ * 1 new empty journal G+1 created and synced
163
+ * 2 snapshot naming (G+1, commit C) written to a temporary file, synced
164
+ * 3 previous snapshot linked as the backup
165
+ * 4 snapshot renamed into place, directory synced ← compaction commits
166
+ * 5 journals other than G and G+1 removed
167
+ *
168
+ * A crash before 4 leaves the previous snapshot and journal authoritative;
169
+ * an orphaned journal G+1 is never read and is removed by the next
170
+ * compaction. After 4 the new snapshot is complete by itself.
171
+ */
172
+ private compactLocked;
173
+ private syncDirectory;
174
+ /**
175
+ * Fold the journal into a new snapshot now. Logical state is unchanged;
176
+ * only its physical representation is. Normal commits never do this.
177
+ */
178
+ compact(): PersistenceStatus;
179
+ /** How the durable state is currently represented on disk. */
180
+ persistence_status(): PersistenceStatus;
181
+ /**
182
+ * Persistence timings collected by this handle: mutation, serialization,
183
+ * write, fsync, commit, compaction and recovery. Empty unless profiling was
184
+ * enabled with the `profile` option or `FELTDB_PERSISTENCE_PROFILE=1`.
185
+ */
186
+ persistence_profile(options?: {
187
+ reset?: boolean;
188
+ }): PersistenceProfile;
38
189
  private isStalelock;
39
190
  private cleanupStaleLock;
40
191
  private acquireLockAsync;
@@ -42,19 +193,15 @@ export declare class FileJsDb implements JsDb {
42
193
  private ownsLock;
43
194
  private acquireLockSync;
44
195
  private withMutationLock;
45
- private refresh;
46
- private saveState;
47
- private event;
48
196
  /**
49
197
  * Commit several operations atomically and durably.
50
198
  *
51
- * The snapshot is published by writing a temporary file, fsyncing it, and
52
- * renaming it over the previous one. The rename is atomic, so a reader sees
53
- * either the whole transaction or none of it, and a crash at any point
54
- * leaves one of those two states on disk — never a mixture.
199
+ * The whole transaction is one journal record, and a record is either
200
+ * terminated — committed, every mutation in it — or discarded on recovery.
201
+ * A reader or a restart sees the whole transaction or none of it.
55
202
  *
56
- * Order matters here. The next state is built and persisted *before* it is
57
- * adopted in memory, so a failed write cannot leave memory ahead of disk.
203
+ * Order matters here. The commit is made durable *before* it is applied in
204
+ * memory, so a failed write cannot leave memory ahead of disk.
58
205
  */
59
206
  commit_transaction(request: AtomicTransactionRequest): Promise<AtomicTransactionResult>;
60
207
  insert(key: string, value: string): JsResult;
@@ -125,5 +272,4 @@ export declare class FileJsDb implements JsDb {
125
272
  }>;
126
273
  close(): void;
127
274
  }
128
- export {};
129
275
  //# sourceMappingURL=file-db.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-db.d.ts","sourceRoot":"","sources":["../src/file-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-db.d.ts","sourceRoot":"","sources":["../src/file-db.ts"],"names":[],"mappings":"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"}