src/DurableCommit.bend
mylsm-lsm-store@0.5.0.0 · 27 lines · 0 definitions
1import Base
2import mylsm-lsm-store@0.5.0.0/src/Db.bend as Db
3import mylsm-lsm-store@0.5.0.0/src/Wal.bend as Wal
4
5# Identifies the durability boundary reached by a commit.
6type Stage is Data:
7 EncodingRejected{error: Wal.Error}
8 AppendRejected{code: U32, message: String}
9 AppendUnknown{code: U32, message: String}
10 DurableAppend{}
11
12# Applies mutations only after the WAL commit stage is durable.
13def apply(pair: Stage & List<&2, Wal.Mut>, +db: Db.Db) -> Db.Db & Stage:
14 match pair:
15 case (stage, muts):
16 match stage:
17 case EncodingRejected{error}:
18 (db, EncodingRejected{error})
19 case AppendRejected{code, message}:
20 (db, AppendRejected{code, message})
21 case AppendUnknown{code, message}:
22 (db, AppendUnknown{code, message})
23 case DurableAppend{}:
24 match db:
25 case Db.Db{dir, mem, frozen, batch_cap, bcache, levels, flushed, manifest_token, mem_count, frozen_count}:
26 (Db.apply_done(Db.apply_and_rotate(muts, mem, frozen, mem_count, frozen_count), dir,
27 batch_cap, bcache, levels, flushed, manifest_token), DurableAppend{})