Latest Results
feat(parquet): ownership-model reader prototype — bounded resident bytes via process-wide budget
Prototype for the parquet OOM fix (RFC forthcoming). Adds an "owned" reader
mode alongside the existing path (same binary, env-toggled A/B):
- reader/budget.rs (new): process-wide ByteBudget. Strict-FIFO admission,
sync reserve() + task-side acquire().await (avoids driver deadlock when
the front RG blocks on a full output channel), oversized-RG exclusive
admission, RAII permit release, planned vs actual metrics. 12 unit tests
incl. the deadlock regression case.
- reader/chunk_source.rs: RemoteChunkSourcePlan (immutable per-occurrence
coalesced range plan, no GETs, no Bytes) + ResidentRowGroup (Bytes +
budget permit, dropped together) + download_occurrence with response
length validation. Legacy IO layout shared via rg_coalesced_layout().
- reader/mod.rs: owned driver — reservations registered in RG order (never
awaited in the driver), per-RG RuntimeTask (abort-on-drop cascade for
limit/cancel), predicate prefilter moved into the per-RG lifecycle,
cross-RG limit truncation kept solely in the outer consumer.
- reader/rg_processor.rs: RgAccess/RgReader::Resident — column decoders
hold the Arc<ResidentRowGroup>, binding bytes+permit lifetime by type.
Env knobs: DAFT_PARQUET_READER_MODE=legacy|owned (default owned; local
files stay legacy), DAFT_PARQUET_RESIDENT_BUDGET_MB (default 256, 0 =
unlimited), DAFT_PARQUET_RG_LOOKAHEAD (default 2), DAFT_PARQUET_MEM_VERBOSE.
Measured (debug, minio): single-file peak RSS 1173-1337MB -> 379-391MB;
4-file 2879 -> 734MB (process-wide budget binds across files); predicate
scan 2582 -> 645MB; compressed-resident ledger quantized to
min(budget-fitting, lookahead) x RG size and returns to zero on completion
and cancellation. Correctness: 21-case predicate matrix byte-identical
legacy vs owned; dup/out-of-order RGs; limit boundaries; in-process cancel.
Known gap (pre-existing upstream, both modes): predicate-prefilter column
decoder JoinSet is never harvested — a decoder panic yields a silently
truncated result. Fix planned as an independent PR.
Claude-Session: https://claude.ai/code/session_01U4zNcFFh5qxC5RDC6PCZnrFANNG1:parquet-owned-reader-prototype Latest Branches
0%
kyo-tom:support_iceberg_rest_catalog_on_gravitino 0%
jiangxt2:fix/gravitino-error-handling 0%
jiangxt2:fix/sql-literal-translation © 2026 CodSpeed Technology