src/Flush.bend relies on unsafe/foreign
raw source on the hub · import mylsm-lsm-store@0.5.0.0/src/Flush.bend as Flush
15 imports
import Base import ./Keys.bend as Keys import ./MemTable.bend as MemTable import ./Sstable.bend as Sstable import ./SortedRun.bend as SortedRun import ./SstStreamIo.bend as SstStreamIo import ./Wal.bend as Wal import ./Manifest.bend as Manifest import ./StorageBytes.bend as StorageBytes import ./Fs.bend as Fs import ./DbIo.bend as DbIo import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes import ./Db.bend as Db import ./CrashPoint.bend as CrashPoint import ./FlushPolicy.bend as Policy
Types
type ManifestReadState source · line 18 · raw
Type
Represent ManifestReadState data used by the memtable flush.
ManifestNeed@file:File -> @remaining:Nat -> @chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> ManifestReadState
ManifestGot@pair:Pair(File, Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>) -> @remaining:Nat -> @chunks:List<&1, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> ManifestReadState
Definitions
def l0_add source · line 39 · raw
@+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>>
Handle l0 add in the memtable flush.
def mfst_add source · line 47 · raw
@+mfst:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+name:String -> 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest
Handle mfst add in the memtable flush.
def write_tail.chmod source · line 58 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_tail.fsync source · line 68 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_tail source · line 81 · raw
@fr:Pair(File, Result<&1, &1, Pair(U32, String), Unit>) -> @+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Writes the remaining bytes of a file buffer.
def write_file.opened source · line 91 · raw
@opened:Result<&1, &1, Pair(U32, String), File> -> @+path:String -> @+data:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_file source · line 105 · raw
@+path:String -> @+data:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Creates and syncs one storage file.
def write_manifest.bytes.opened source · line 110 · raw
@opened:Result<&1, &1, Pair(U32, String), File> -> @+path:String -> @bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_manifest.bytes source · line 123 · raw
@+path:String -> @bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_manifest.encoded source · line 128 · raw
@path:String -> @encoded:Result<&1, &1, 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_manifest source · line 139 · raw
@path:String -> @manifest:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Write manifest for the memtable flush.
def read_tail3 source · line 143 · raw
@fr:Pair(File, Result<&1, &1, Pair(U32, String), String>) -> IO(Result<&1, &1, Pair(U32, String), String>)
Read tail3 for the memtable flush.
def read_file.opened source · line 154 · raw
@opened:Result<&1, &1, Pair(U32, String), File> -> IO(Result<&1, &1, Pair(U32, String), String>)
Base File.read decodes each returned chunk independently. A chunk boundary can split a multi-byte UTF-8 character, so table files are read in one bounded call Reads a bounded storage file and returns its bytes.
def read_file source · line 166 · raw
@+path:String -> IO(Result<&1, &1, Pair(U32, String), String>)
Reads a bounded storage file and returns its bytes.
def mfst_parsed source · line 172 · raw
@parsed:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.ParseResult -> Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>
Classifies the Manifest parse result before recovery.
def manifest.read.result source · line 183 · raw
@pair:Pair(File, Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>) -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
def manifest.read.loop source · line 196 · raw
@fuel:Nat -> @state:ManifestReadState -> IO(Pair(File, Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>))
def manifest.read.size.run source · line 231 · raw
@file:File -> @+size:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
def manifest.read.size.valid source · line 236 · raw
@file:File -> @size:Nat -> @within:Bool -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
def manifest.read.size source · line 249 · raw
@file:File -> @result:Result<&1, &1, Pair(U32, String), Nat> -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
def mfst_open_error source · line 262 · raw
@missing:Bool -> @+code:U32 -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
Handle mfst open error in the memtable flush.
def mfst_opened source · line 273 · raw
@path:String -> @result:Result<&1, &1, Pair(U32, String), File> -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
Handle mfst opened in the memtable flush.
def load_mfst source · line 286 · raw
@+path:String -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest>)
Handle load mfst in the memtable flush.
def dir_tail source · line 292 · raw
@res:Result<&1, &1, Pair(U32, String), Nat> -> @+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Handle dir tail in the memtable flush.
def ensure_dir source · line 300 · raw
@+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Handle ensure dir in the memtable flush.
def flush_goB.wal source · line 307 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+m2:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goB.synced source · line 325 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+m2:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goB.renamed source · line 345 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+m2:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goB.written source · line 363 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+mpath:String -> @+mtmp:String -> @+m2:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goB source · line 385 · raw
@+dir:String -> @+mpath:String -> @+mtmp:String -> @+m2:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Publishes flushed SSTables and updates the Manifest.
def flush_drift source · line 401 · raw
@ok:Bool -> @+dir:String -> @+mpath:String -> @+mtmp:String -> @+mfst:0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Flush drift for the memtable flush.
def flush_goA.loaded source · line 420 · raw
@result:Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Manifest.Manifest> -> @+dir:String -> @+mpath:String -> @+mtmp:String -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goA.synced source · line 440 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+mpath:String -> @+mtmp:String -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goA.renamed source · line 463 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+l0dir:String -> @+mpath:String -> @+mtmp:String -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goA.written source · line 487 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+l0dir:String -> @+tmp:String -> @+final:String -> @+mpath:String -> @+mtmp:String -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Writes the MemTable to an SSTable and completes the flush.
def flush_goA.ensured source · line 512 · raw
@result:Result<&1, &1, Pair(U32, String), Unit> -> @+dir:String -> @+l0dir:String -> @+tmp:String -> @+final:String -> @+mpath:String -> @+mtmp:String -> @+entries:List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/MemTable.Entry> -> @+level:U32 -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
def flush_goA source · line 539 · raw
@+dir:String -> @+l0dir:String -> @+tmp:String -> @+final:String -> @+mpath:String -> @+mtmp:String -> @+entries:List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/MemTable.Entry> -> @+level:U32 -> @+tbl:0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Writes the MemTable to an SSTable and completes the flush.
def flush_pre source · line 561 · raw
@+dir:String -> @+entries:List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/MemTable.Entry> -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Flush pre for the memtable flush.
def flush_frozen source · line 578 · raw
@+dir:String -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+entries:List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/MemTable.Entry> -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Frozen-path flush MERGES mem (newer) over frozen (older) into one L0 table and drains both: the WAL is truncated on publish, so anything left in mem would otherwise exist nowhere on disk (loss window caught by 20485 smoke).
def flush_pick source · line 597 · raw
@+frozen:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+mem:0x4fcd94fa965aa1443134557fd075a483/src/MemTable.MemTable -> @+dir:String -> @+levels:List<&2, List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+batch_cap:Nat -> @+bcache:List<&2, 0x4fcd94fa965aa1443134557fd075a483/src/Db.BEntry> -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Flush pick for the memtable flush.
def flush source · line 616 · raw
@+db:0x4fcd94fa965aa1443134557fd075a483/src/Db.Db -> IO(Result<&1, &1, Pair(U32, String), 0x4fcd94fa965aa1443134557fd075a483/src/Db.Db>)
Handle flush in the memtable flush.