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{})