src/Flush.bend relies on unsafe/foreign
raw source on the hub · import mylsm-lsm-store@0.4.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, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+tbl:0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table -> List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>>
Handle l0 add in the memtable flush.
def mfst_add source · line 47 · raw
@+mfst:0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest -> @+name:String -> 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest
Handle mfst add in the memtable flush.
def write_tail source · line 59 · raw
@fr:Pair(File, Result<&1, &1, Pair(U32, String), Unit>) -> @+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Write tail for the memtable flush.
def write_file source · line 73 · raw
@+path:String -> @+data:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Write file for the memtable flush.
def write_manifest.bytes source · line 79 · raw
@+path:String -> @bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_manifest.encoded source · line 85 · raw
@path:String -> @encoded:Result<&1, &1, 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes> -> IO(Result<&1, &1, Pair(U32, String), Unit>)
def write_manifest source · line 96 · raw
@path:String -> @manifest:0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Write manifest for the memtable flush.
def read_tail3 source · line 100 · 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 source · line 111 · raw
@+path:String -> 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 until a byte-oriented streaming effect with decoder carry is available.
def mfst_parsed source · line 118 · raw
@+opt:Maybe<&2, 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest> -> Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>
Handle mfst parsed in the memtable flush.
def manifest.read.result source · line 125 · raw
@pair:Pair(File, Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>) -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
def manifest.read.loop source · line 138 · raw
@fuel:Nat -> @state:ManifestReadState -> IO(Pair(File, Result<&1, &1, Pair(U32, String), 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>))
def manifest.read.size.run source · line 173 · raw
@file:File -> @+size:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
def manifest.read.size.valid source · line 178 · raw
@file:File -> @size:Nat -> @within:Bool -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
def manifest.read.size source · line 191 · raw
@file:File -> @result:Result<&1, &1, Pair(U32, String), Nat> -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
def mfst_open_error source · line 204 · raw
@missing:Bool -> @+code:U32 -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
Handle mfst open error in the memtable flush.
def mfst_opened source · line 215 · raw
@path:String -> @result:Result<&1, &1, Pair(U32, String), File> -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
Handle mfst opened in the memtable flush.
def load_mfst source · line 228 · raw
@+path:String -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest>)
Handle load mfst in the memtable flush.
def dir_tail source · line 234 · 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 242 · raw
@+path:String -> IO(Result<&1, &1, Pair(U32, String), Unit>)
Handle ensure dir in the memtable flush.
def flush_goB source · line 250 · raw
@+dir:String -> @+mpath:String -> @+mtmp:String -> @+m2:0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest -> @+tbl:0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table -> @+levels:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Flush goB for the memtable flush.
def flush_drift source · line 272 · raw
@ok:Bool -> @+dir:String -> @+mpath:String -> @+mtmp:String -> @+mfst:0x571fd57004366c423dfd4b51196743b5/src/Manifest.Manifest -> @+tbl:0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+flushed:Nat -> @+mem:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Flush drift for the memtable flush.
def flush_goA source · line 292 · raw
@+dir:String -> @+l0dir:String -> @+tmp:String -> @+final:String -> @+mpath:String -> @+mtmp:String -> @+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+level:U32 -> @+tbl:0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table -> @+name:String -> @+levels:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+mem:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Flush goA for the memtable flush.
def flush_pre source · line 320 · raw
@+dir:String -> @+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+levels:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Flush pre for the memtable flush.
def flush_frozen source · line 337 · raw
@+dir:String -> @+mem:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+entries:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/MemTable.Entry> -> @+levels:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+batch_cap:Nat -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/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 356 · raw
@+frozen:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+mem:0x571fd57004366c423dfd4b51196743b5/src/MemTable.MemTable -> @+dir:String -> @+levels:List<&2, List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Sstable.Table>> -> @+flushed:Nat -> @+manifest_token:String -> @+batch_cap:Nat -> @+bcache:List<&2, 0x571fd57004366c423dfd4b51196743b5/src/Db.BEntry> -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Flush pick for the memtable flush.
def flush source · line 375 · raw
@+db:0x571fd57004366c423dfd4b51196743b5/src/Db.Db -> IO(Result<&1, &1, Pair(U32, String), 0x571fd57004366c423dfd4b51196743b5/src/Db.Db>)
Handle flush in the memtable flush.