Expand description
ColumnChunk: differential’s Chunk over ColumnBody updates.
A chunk is a sorted, consolidated run of (D, T, R) updates in the flat
columnar layout, in one of two homes:
- Resident: an
Rc-sharedColumnBodyon the heap. Fresh input, merge output, and small tails live here. - Spilled: the serialized body in the process
Pool, with the record count and the first and last data items resident. The pool owns residency from there, with slots under a memory budget and compression and device pageout under pressure, and a body that dies before pressure reaches it is freed without I/O.
Reads of a spilled body are copy-out and scoped to the call that needs
them, the contract that lets the pool evict with no reader accounting
(see mz_ore::pool).
Spilling happens in Chunk::settle, the trait’s designated commit point:
chunks moved to settled output are handed to the pool while the chunk
type’s SpillGate is open. Grading is by serialized
bytes, the ship size Column already targets, rather than by the
record-count TARGET, since record count does not bound bytes for
variable-width data.
Chunks whose data is a (key, val) pair additionally implement
UnloadChunk, the bulk-read capability: sorted probe keys in, matching
updates appended to caller-owned staging, with locate answered from the
resident fence metadata so a probe set faults only the chunk bodies it
actually touches.
Modules§
- metrics
- Process-wide work counters for columnar chunk maintenance.
Structs§
- Accounted
Chunk Merger - The chunk merger of
AccountedChunkBatcher: differential’s merger with a resident readied side, plus theMerger::allocationfigures themz_arrangement_batcher_*_rawintrospection tables are assembled from. - Chunk
Chunker - A chunker for
arrange_coreoverColumnChunks: sorts and consolidates raw input columns through aColumnChunkerand wraps its output chunks. - Lz4Codec
- The chunk-side
ExtentCodec: a little-endianu32body-length prefix followed by one lz4 block, the framinglz4_flex::block::compress_prepend_sizeproduces. Every chunk consumer passesLZ4_CODECat insert; the pool itself has no codec opinion. - Spilled
Body - A spilled chunk body: the serialized column in the pool, plus the resident
metadata every
Chunkmust answer without fetching. That metadata is the record count, the first and last data items (the fence entriesUnloadChunk::locateconsults), and the time boundsextractconsults to pass frontier-disjoint chunks through without loading them. - Unchunk
Builder - A batch builder over
ColumnChunkinput that delegates to a builder overColumnBodyinput, loading each chunk’s body as it is pushed.
Enums§
- Column
Chunk - A sorted, consolidated run of
(D, T, R)updates, resident or spilled. - Compute
Spill - The gate of compute’s chunk batchers. See
set_compute_spill_enabled. - Storage
Spill - The gate of storage’s upsert chunk batchers. See
set_storage_spill_enabled.
Constants§
- COMMIT_
BYTES 🔒 - The serialized-byte size committed chunks aim for, matching the ship size of the columnar merge machinery.
- DEFAULT_
COMPRESS_ 🔒MIN_ DEPTH - The default compression depth floor: fresh (depth 0) bodies spill uncompressed.
- READ_
SCRATCH 🔒 - Reusable staging for call-scoped reads of spilled bodies.
- SCRATCH_
RETAIN_ 🔒WORDS - Scratch capacity retained across reads, in words. A read larger than this releases the buffer afterward, so a thread’s scratch does not ratchet to the largest body it ever carried (heap no pool gauge can see).
- SPILL_
MIN_ 🔒BYTES - Bodies smaller than this stay resident: the pool’s smallest size class is 64 KiB, so spilling below it trades no meaningful memory for slot waste.
- SPILL_
OVERRIDE 🔒 - A thread-scoped pool override, taking precedence over the global enable flag and pool. Lets tests and benches spill through a private pool without touching process-global state.
Statics§
- COMPRESS_
MIN_ 🔒DEPTH - The youngest generational depth whose spilled bodies are compressed. See
set_compress_min_depth. - COMPUTE_
SPILL_ 🔒ENABLED - The gate of
ComputeSpillchunks. Seeset_compute_spill_enabled. - LZ4_
CODEC - The
Lz4Codecinstance chunk consumers pass toPool::insert_with. - SINK_
SPILL_ 🔒ENABLED - The gate for bodies spilled through
try_spill_ref. Seeset_sink_spill_enabled. - STORAGE_
SPILL_ 🔒ENABLED - The gate of
StorageSpillchunks. Seeset_storage_spill_enabled.
Traits§
- Chain
State - A builder whose batches carry state derived from a whole chain, computed before the chain’s first push.
- Spill
Gate - Which process-wide gate decides whether a
ColumnChunkspills.
Functions§
- at_
commit_ 🔒size - Whether a body is big enough to commit on its own.
- codec_
for_ 🔒depth - The codec a body at
depthstores under, identity below the compression floor and lz4 at and past it, paired with whether that codec compresses. One read of the floor, so the pair cannot disagree with itself when the floor moves under a concurrent commit. - compress_
min_ 🔒depth - The depth floor in effect for this thread’s commits.
- cut_
records 🔒 - Records of a body with
lenrecords inbytesthat fit inspacebytes at the body’s average width, keeping 5% ofCOMMIT_BYTESas a margin for per-piece framing. Uniform rows cut this way fill their size class and leave one short remainder thatsettlecan coalesce. Uneven widths can still overflow, so callers check the cut piece. - extract_
view_ 🔒into - Append every update in
viewwhose key matches a probe at or after*probe_indexintostaging, per theUnloadChunkconsume-index protocol: probes strictly below the view’s last key are consumed, a probe equal to it is extracted but left for the next chunk. - resolve_
pool 🔒 - The thread’s override pool, else the installed pool while
enabled. - rr 🔒
- Narrow a columnar ref to a shorter lifetime, so refs from different borrows, such as a probe column and a chunk’s own columns, can be compared (the refs are lifetime-invariant).
- set_
compress_ min_ depth - Set the youngest generational depth whose spilled bodies are compressed.
- set_
compute_ spill_ enabled - Enable or disable spilling of
ComputeSpillchunks. Already-spilled chunks are unaffected either way. - set_
sink_ spill_ enabled - Enable or disable spilling of bodies offered through
try_spill_ref, which is how compute’s MV sink correction buffer spills. Like theSpillGates, it takes effect only onceapply_pool_confighas installed the pool. - set_
spill_ override - Set or unset the pool through which this thread’s chunk spills are
routed, taking precedence over the gates and the process pool.
Nonerestores the global resolution. - set_
storage_ spill_ enabled - Enable or disable spilling of
StorageSpillchunks. Already-spilled chunks are unaffected either way. - spill_
serialized 🔒 - Serialize a body into a pool slot, writing its serialized form through a cursor over the slot memory. A serialized body’s encoding is one copy. Sizing is exact, so a short or overlong write is a contract violation and panics.
- spill_
target 🔒 - The pool a body of
len_bytesspills into whileenabled, orNonewhen it stays resident. - try_
spill_ ref - Spill a serialized copy of
bodyinto the process pool, leavingbodyuntouched, orNonewhen the body stays resident. - with_
scratch 🔒 - Run
fwith this thread’s read scratch, cleared of any previous use.
Type Aliases§
- Accounted
Chunk Batcher - The
ChunkBatcherof a chunk chain, reporting resident bytes to the batcher size logger.