Skip to content

v0.10.0

Latest

Choose a tag to compare

@pecorino-bot pecorino-bot released this 14 Jul 19:14
Immutable release. Only release title and notes can be modified.
3b61909

kache 0.10.0 — instant download dedup, and a Windows CoW warning that was lying

kache is a content-addressed build cache that plugs in as a RUSTC_WRAPPER (and a C/C++ compiler wrapper). 0.10.0 is a smaller release: it makes concurrent cache downloads wake instantly instead of polling, closes a latent double-download race, and stops a Windows warning from blaming a filesystem that was innocent all along.

Why

Two builds that need the same cached artifact shouldn't fetch it twice, so kache elects one downloader and makes the others wait. That waiting was implemented as polling — up to 30 seconds of it — and the poll budget hid a race that could let two waiters both decide they were the owner. Separately, 0.8.0's ReFS block-cloning support started warning "this volume has no copy-on-write" on Windows Dev Drives that do support it; one reporter saw the warning 670 times in a single build.

What's new

  • Notify-based download dedup. Waiters on an in-flight download now wake through a per-key tokio Notify the moment the leader's claim guard drops, instead of polling a shared set every 100 ms for up to 30 s. Latency on a contended key goes from "up to a poll interval" to "immediate."
  • A double-claim race is closed. Previously, two waiters that both exhausted the poll budget each re-inserted the key ignoring the result, so both proceeded as owners and downloaded the same artifact twice — the destructive-extraction hazard the code was meant to guard against. Re-claiming is now an atomic insert-if-absent: exactly one waiter becomes the new leader.
  • The Windows CoW warning tells the truth. kache no longer treats a single failed reflink as proof that the volume lacks copy-on-write.
  • CARGO_HOME is honored. kache init and kache migrate no longer hardcode ~/.cargo.
  • Prefetch telemetry (Phase 0). Observability-only counters for the prefetch/planning work — attributed downloads and bytes, keys later used by a wrapper, dedup join-waits, planner-vs-fallback plans — so the coordination changes that follow have a measured baseline instead of a guess.

These notes were drafted with LLM assistance and edited by the maintainers (@jleni, @emmanuelm41).


What's Changed

  • fix(cli): honor CARGO_HOME instead of hardcoding ~/.cargo in init and migrate by @CookieHCl in #502
  • feat(daemon): prefetch Phase 0 — baseline telemetry + scheduling fixes (#485) by @jleni in #503
  • fix(daemon): notify-based download dedup replaces 30s polling (#485) by @jleni in #504
  • bench(firefox): permanent daily-pull benchmark for #477 by @emmanuelm41 in #479
  • fix(link): stop blaming the filesystem for sub-cluster copy-restores (#508) by @emmanuelm41 in #512
  • chore: bump kache to v0.10.0 by @emmanuelm41 in #513

New Contributors

Full Changelog: v0.9.0...v0.10.0