~/bend-docscommunity

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.

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.