Repository navigation
v1.8.0
A store reliability release, mostly for a CAS backed by an object store or Redis. Every store now checks that an upload delivered the bytes it declared before publishing the blob, and the Azure and Redis stores report an empty object already sitting under a non-empty digest as missing so the next write heals it. The existence cache writes every upload through, the compression store reports the digest size from has, a fast-slow store with a read-only slow tier counts its fast tier toward presence, and the Azure store discards the blocks a failed upload left staged. Redis reconnects for its length check after a failover and keeps its subscriptions across a reconnect, transport failures and interrupted uploads now surface as retryable Unavailable, and CompletenessCheckingStore reports a backend fault instead of a cache miss. Azure reads with no explicit length are no longer cut at the digest size, which undoes the v1.7.4 truncation of incompressible blobs through a compressed Azure tier.
The new features are opt-in: an adaptive read permit pool for object stores (max_concurrent_reads, Azure first), growing and jittered throttle waits in the retrier, a shared input fetch pool on the worker (max_concurrent_input_downloads, off at 0), read-only mounts for cached input directories on Linux workers, and allow_remove on CacheMetricsStore so a verify-store repair can evict a truncated entry from a disposable tier. Worth taking for any CAS on Azure, S3 or Redis; nothing changes in configuration unless you want the new pools.
What's Changed
⛰️ Features
- Bound object store reads with an adaptive permit pool, Azure first by @amankrx in (#2941) - (3e3237c)
- (worker) add option to mount cached input directories as read-only by @dumbmoron in (#2751) - (786c2c2)
- Bound a worker's input fetches with one pool across the actions it stages by @amankrx in (#2952) - (23b4472)
- Grow and jitter consecutive throttle waits in the retrier by @amankrx in (#2939) - (23e76a8)
🐛 Bug Fixes
- (evicting_map) stop has() batch from cascading-evicting every queried blob by @b7r6 in (#2840) - (56085a4)
- (remote-exec) handle scheduling edge cases and output flush (#1533) by @smartcalsystems-sketch in (#2963) - (1b9362d)
- Restore per-action input fetches as the worker default and suggest a shared pool under load by @MarcusSorealheis in (#2984) - (2a3ad61)
- Report empty Azure and Redis objects under a non-empty digest as missing and stop cutting unbounded Azure reads by @amankrx in (#2993) - (76e17f5)
- Report the digest size from the compression store has, not the compressed one by @amankrx in (#2960) - (a1e6efb)
- Reject incomplete CAS uploads before publishing blobs by @MarcusSorealheis in (#2974) - (086289a)
- Reconnect and retry the Redis length check after a failover by @amankrx in (#2961) - (11dc077)
- Discard the blocks a failed Azure upload left staged by @amankrx in (#2969) - (2966660)
- Forward cache removal through CacheMetricsStore by @MarcusSorealheis in (#2968) - (7abc434)
- Preserve retryable failures in CAS uploads by @MarcusSorealheis in (#2966) - (94c86c0)
- Return Unavailable when resuming an active ByteStream upload by @ashishsonamm in (#2889) - (a55baad)
- Count the fast store toward presence when the slow store is read-only by @amankrx in (#2959) - (bd87f4d)
- Reduce matcher contention after lost assignments by @MarcusSorealheis in (#2954) - (8431150)
- Write every upload through the existence cache instead of discarding one it believes present by @amankrx in (#2951) - (d05d910)
- (nativelink-store) propagate completeness backend errors instead of swallowing them by @b7r6 in (#2815) - (7149987)
- (redis) close two subscription-lifecycle windows that silently drop events by @b7r6 in (#2839) - (89ea706)
- (error) map transport-originated Unknown to retryable Unavailable by @b7r6 in (#2816) - (0cd82ff)
📚 Documentation
🧪 Testing & CI
- (ci) run Bazel Native nightly and on merge, not on every PR by @b7r6 in (#2880) - (616c315)
- Split rbe-toolchain test into generate and test by @palfrey in (#2964) - (6a52a66)
- (ci) defer cargo, integration, and coverage lanes to nightly by @b7r6 in (#2877) - (34da49a)
⬆️ Bumps & Version Updates
- Upgrade stale git and curl apt pins in the Dockerfiles by @MarcusSorealheis in (#2995) - (e1c6ed2)
- Fix vulnerable dependencies in fuzzing, Azurite, and web tooling by @MarcusSorealheis in (#2965) - (c788277)
- Update Rust crate zip to v9 [SECURITY] by @renovate[bot] in (#2956) - (d5f7f9b)
- Update renovate.json5 by @clin1234 in (#2950) - (5186112)
- Update Rust crate rustls to v0.23.46 [SECURITY] by @renovate[bot] in (#2938) - (f798fa1)
- Upgrade curl to 8.5.0-2ubuntu10.16 by @amankrx in (#2942) - (8bf6be1)
New Contributors
- @smartcalsystems-sketch made their first contribution in #2963
- @clin1234 made their first contribution in #2950
Full Changelog: v1.7.7...v1.8.0