~/bend-docscommunity

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.

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.