Skip to content

Fluxheim 1.2.6

Choose a tag to compare

@eldryoth eldryoth released this 14 May 16:28
Immutable release. Only release title and notes can be modified.
v1.2.6
17aa33f

Fluxheim 1.2.6 Release Notes

Summary

Fluxheim 1.2.6 is a focused cache follow-up for full slice-based range cache
composition. It extends the 1.2.5 exact bounded range cache with an opt-in
fixed-slice engine for large proxy-cache objects.

  • Release type: focused slice-cache follow-up
  • Compatibility: opt-in; existing cache range behavior remains unchanged unless
    range.slice.enabled = true
  • Primary area: proxy cache

Added

  • Added [cache.range.slice], [vhosts.cache.range.slice], and route-scoped
    slice policy.
  • Added normalized slice cache keys for fixed-size byte slices.
  • Added direct slice-cache response composition before upstream proxying.
  • Added bounded missing-slice fill from origin using normalized single-slice
    Range requests.
  • Added per-slice request collapsing so concurrent clients requesting the same
    missing slice do not all fetch it from origin.
  • Added support for:
    • bounded ranges, such as Range: bytes=1000-1999;
    • open-ended ranges, such as Range: bytes=1000-;
    • suffix ranges, such as Range: bytes=-65536;
    • multipart multi-range responses when all requested ranges can be composed
      from fresh compatible slices.
  • Added If-Range handling for slice responses. Fluxheim serves from slices
    only when the cached ETag or Last-Modified matches; otherwise the request
    falls back to the normal proxy path.
  • Exact admin purges remove all indexed slice entries for the same request path
    when slice caching is enabled.

Config Example

[cache.range]
enabled = true
max_bytes = "128MiB"

[cache.range.slice]
enabled = true
size_bytes = "1MiB"
max_slices = 128
fill_missing = true

Safety Model

  • Slice caching remains disabled by default.
  • Each slice is stored under its own key and cannot collide with full-object
    cache entries or 1.2.5 exact range entries.
  • Missing-slice fill only stores upstream 206 Partial Content responses whose
    Content-Range, Content-Length, content type, total object length, and
    validators are compatible.
  • Content-Encoding responses are not admitted to the slice cache unless they
    are explicitly identity encoded.
  • range.slice.size_bytes must not exceed cache.max_object_bytes.
  • range.max_bytes must not exceed
    range.slice.size_bytes * range.slice.max_slices.

Validation

Release validation should include:

cargo fmt --all --check
cargo test --lib
cargo clippy --all-targets -- -D warnings
sh scripts/smoke_proxy_cache.sh

The proxy cache smoke now verifies slice fill, slice hit, open-ended ranges,
suffix ranges, multipart multi-range composition, and cached slice If-Range
matches.

Checksums And Signatures

  • Commit: 17aa33f376ce25fb36b470044f6c1f6382a0c60e
  • Local gate: GitHub CI green before tag; local release metadata checks passed
  • CodeQL/code scanning: no open release-blocking alerts before tag
  • Source archive checksums:
    • 0195168efd8ac886d9e2fc3707b54cea340c8e8fa3d837c4a8e301a3065d20b4 fluxheim-1.2.6.tar.gz
    • 7b457fe5d3bfaace1dd6cccb397fb75ae16da27c9e8a4faecddca8e5c0898eaa fluxheim-1.2.6.zip
  • Binary checksums:
    • d4137182dd8589021becc936a5b8c42572fee92e8e610da3743ae9f5350349c0 fluxheim-1.2.6-full-x86_64-linux.tar.gz
    • 86a2f0a99dd1d070131d3212c8cb512b26c2ea07c975555b3f991759c6c2a104 fluxheim-1.2.6-cache-x86_64-linux.tar.gz
  • SBOM checksums:
    • 9568ddf2e0e5e91aeab13a277bba0fb732ff33c63169698415dbd0c9893f74ef fluxheim.spdx.json
    • 3d5ceea012cbe9360c48919c3528148843eec44406f10175def0a1bfaf748780 fluxheim.cyclonedx.json
  • Reproducible build:
    • fcb59dd0693bd38e2ebdc0b36b37a72d7b36d10be1857f44ab101ac936350258
  • Full Build Container digests:
    • Wolfi: ghcr.io/valkyoth/fluxheim@sha256:0eb134f33b7d6e0707fdb1c7a911fb5df022acfe5796522920411e7919dc7c28
    • Alpine: ghcr.io/valkyoth/fluxheim@sha256:3cf8dd421f523699637a3d8ac3ac5527bd6dd63eed01e542166d8f10037f5626
    • SUSE Micro: ghcr.io/valkyoth/fluxheim@sha256:b2cc0cc0de9a955ea303f1f64327fad0b510a76679233221cf2091e8b8c03668
    • Debian: ghcr.io/valkyoth/fluxheim@sha256:880c87cc102ad7ea4939b7c9eb2cf63c1f07fec019be9993944ad2d4bbfa75eb
  • Cache Build Container digests:
    • Wolfi: ghcr.io/valkyoth/fluxheim@sha256:83980d2556d9858ab1c222b4a5f0d58bec594071e4f46c4450a4c735062f9c94
    • Alpine: ghcr.io/valkyoth/fluxheim@sha256:18d0b8e76318ac5d2429ce843486a145ffa9d3acd99594437a846285e58cf9e9
    • SUSE Micro: ghcr.io/valkyoth/fluxheim@sha256:1f3fba32cb18b03ac409ab53ada0c20cbcaa39870d97af073ee14c7fd479dcb9
    • Debian: ghcr.io/valkyoth/fluxheim@sha256:1df4dd3679def2c21e5b670a7c5777f3f579332202a555b36b0ac0f1c6e66413
  • Tag signature:
    • Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4