github kunobi-ninja/kache v0.19.0
v0.19.0: bounded memory for remote restores

5 hours ago

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.0

Highlights

  • 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 init now 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, dsymutil ran 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 .dSYM missing 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, and s3_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 init writes 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-shell skips the step, and --check neither 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 init shell 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

Don't miss a new kache release

NewReleases is sending notifications on new releases.