Repository navigation
Conversation
8acdc1d to
d7be021
Compare
d7be021 to
d80ce97
Compare
596b1b0 to
63104d5
Compare
d25202c to
122fbe3
Compare
122fbe3 to
2b47437
Compare
2b47437 to
15c56a4
Compare
15c56a4 to
463ef3a
Compare
QA LLM Review1. MEDIUM -- File store sizes itself to the whole shared scratch volume and keeps its peak, starving lgalloc and RocksDB
Details
Before this change the pool never wrote to scratch, so this contention is new. Possible fixes: pass an explicit bound, for example a dyncfg fraction of the volume as |
463ef3a to
2ab89a8
Compare
bosconi
left a comment
There was a problem hiding this comment.
The selection and fallback logic looks right, but the points from the previous round are still open. Details inline.
- Add the new flag to
KNOWN_MISSING_FROM_LDintest/launchdarkly-flag-consistency/mzcompose.pynext to its siblings, or the nightlylaunchdarkly-flag-consistencystep fails unless an LD flag exists first. - Nothing confirms CI runs on the file store. If CI's
/scratchwere memory-backed or the open failed, every replica would fall back to swap with CI still green. An mzcompose or testdrive check that a replica with spill on reportsmz_column_pool_backend{backend=~"file_.*"} = 1andmz_column_pool_backend_fallback = 0would close that. - def-'s comment about
capacity_bytes: Nonesizing against the whole shared scratch volume still applies.
| Some(scratch) if ENABLE_COLUMN_PAGED_BATCHER_FILE_EXTENTS.get(config) => { | ||
| ExtentBackend::File { | ||
| dir: scratch.join("pool"), | ||
| capacity_bytes: None, |
There was a problem hiding this comment.
When the volume has 1 GiB or less available, FileStore::open derives a capacity of 0 and still succeeds, so build_pool installs a store that can never take an extent, extents stay in RAM, and mz_column_pool_backend_fallback reads 0. An explicit bound would cover this and def-'s case: his dyncfg fraction, or a minimum capacity below which build_pool takes the swap path.
| /// Whether [`apply_pool_config`] was asked for a file backend and installed | ||
| /// the pool on swap instead. |
There was a problem hiding this comment.
This only covers installation. After a non-ENOSPC write error the store disables writes for its lifetime with no route back to swap, so say so here and in the mz_column_pool_backend_fallback help text.
| /// Whether [`apply_pool_config`] was asked for a file backend and installed | |
| /// the pool on swap instead. | |
| /// Whether [`apply_pool_config`] was asked for a file backend and installed | |
| /// the pool on swap instead. Covers installation only: a store that later | |
| /// disables writes on an I/O error reports through | |
| /// `mz_column_pool_extent_file_write_errors_total`. |
433691d to
cf8db0e
Compare
QA LLM Review1. MEDIUM -- File store can take the shared scratch volume from lgalloc, the column pager and RocksDB
Compute opens the file store with DetailsCapacity is computed once, at
A fix is to pass an explicit |
5d4964d to
c362ece
Compare
c362ece to
15e78e0
Compare
The process-wide pool now takes its extent backend from a closure that apply_pool_config evaluates exactly once, when it installs the pool. Compute picks the file store at the replica's scratch directory when the new enable_column_paged_batcher_file_extents dyncfg is on, and swap otherwise. A store that fails to open falls back to swap with a warning. Since the backend is fixed for the process, later changes to the flag have no effect. The flag defaults off and is on in mzcompose so CI exercises the file store wherever a replica has a scratch directory. New metrics report the file store's counters, its read latency, and the installed backend. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ytes The pool's backend is the ore ExtentBackend, passed by value. Directory creation and the fallback to swap happen once, when the pool is built. apply_worker_config derives the scratch path once for both the pager and the pool, and the store's allocated bytes are exported as a metric. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add mz_column_pool_backend_fallback, set when the pool was asked for a file backend and installed on swap, since the backend gauge alone reads the same as a configured swap backend. Reword the fallback warning, which also fires when the pool's own reservation failed. Move the install-once contract onto apply_pool_config, correct the read-latency bucket help to "less than le", and fix the parallel workload's description of when a flag flip takes effect. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lists the file-extents flag as known missing from LaunchDarkly, and says that the fallback flag and metric cover installation only, with later I/O errors reported through the write-errors metric. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A store that fails to open falls back to swap with every query still passing, so the cluster composition asserts the backend metrics. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add column_paged_batcher_file_release_interval and column_paged_batcher_file_release_bytes, defaulting to the values of lgalloc's background worker (1 s and 128 MiB per class), and pass them through PoolPagerConfig to the pool. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ters Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
15e78e0 to
1ba4097
Compare
The process-wide pool now takes its extent backend from a closure.
apply_pool_configevaluates the closure exactly once, when it installs the pool.Compute chooses the backend as follows:
enable_column_paged_batcher_file_extentsdyncfg is on.The backend is fixed for the life of the process, so changing the flag later has no effect.
The flag defaults to off, and mzcompose turns it on so CI exercises the file store. New metrics export the file store's counters, its read latency, and which backend is installed.
🤖 Generated with Claude Code