Kache 0.19.0 keeps large remote restores off the heap. A cached entry no longer has to fit in memory to be downloaded, and every buffered download in a process now draws from one shared budget instead of competing for the machine's RAM.
Install or update:
cargo install kache --locked --version 0.19.0Highlights
- Large restores stream to disk. A compressed v3 entry pack is written to a temporary file on the cache disk and decompressed from there, so a multi-gigabyte artifact no longer sits in RAM while it downloads. #989
- Buffered downloads share a 512 MiB budget per Kache process. A download reserves space before it reads and holds the reservation until the last copy of its bytes is dropped, so a burst of prefetch work cannot exhaust memory. #990
kache initnow offers to put the compiler links on your PATH. It could previously report setup as complete while terminal builds still bypassed Kache. #985- Debug bundles from cached macOS builds contain source-level debug info again. Contributed by @Dzejkop. #996
Performance
- Prefetch reserves against each catalog's declared pack size, releases the catalog body before scheduling packs, and consumes each pack as it completes. Holding finished bodies or waiting for input order could stall the remaining downloads. #990
- A request larger than the shared budget runs on its own under the existing object limits, so a single oversized entry still restores. The 8 GiB compressed ceiling and the extraction and verification limits are unchanged. #989, #990
Fixes
- On macOS,
dsymutilran from the caller's working directory while cached debug links make object paths relative to the executable's output directory. It warned that it could not open the objects and produced a.dSYMmissing the source compile units. Bundle generation now runs from the output directory with resolved paths. Bundles already in the cache are not repaired; they are replaced as their entries are rebuilt. #996 - Saving from the configuration editor erased
compression_level,s3_concurrency, ands3_pool_idle_secs, because the serializer read form fields that do not exist. Settings the editor does not display are now carried through a load, edit, and save cycle. #988 kache initwrites the PATH setup for bash, zsh, or fish after telling you which files it will change, and backs up what it replaces. Dotfiles under a manager are left alone,--no-shellskips the step, and--checkneither prompts nor writes. The prompts now describe the build setup rather than naming Cargo configuration keys. #985- A concurrently spawned process could keep an incremental-unit lock after its owner had finished with it. #985
Dependencies
- The Kubernetes client moves to kube 4 and k8s-openapi 0.28, zstd to 0.14, and dirs to 7. No behavior changes. #994
Contributors
Thanks to everyone who shipped something in this release:
- @jleni — remote download streaming and the shared memory budget, the
kache initshell setup, the configuration editor fix, the dependency refresh, and the benchmark reporting behind all of it. - @Dzejkop — first contribution: the macOS debug bundle fix in #996, reported in #995 with a standalone reproduction, four comparison cases, and the tool versions behind each result.
Full changelog: v0.18.0...v0.19.0