Fluxheim 1.6.33
·
602 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Fluxheim 1.6.33 Release Notes
Fluxheim 1.6.33 is the native proxy-cache parity release in the Pingora
removal line.
This checkpoint adds Fluxheim-owned native memory-cache, filesystem and
storage-bin disk cache, local-key and OpenBao Transit encrypted disk cache, and
memory+disk tiering for ordinary HTTP/1 proxy responses.
Highlights
- Added a shared native memory-cache helper inside
fluxheim-serverfor
buffered HTTP/1 responses. Static-web cache and proxy cache now use the same
entry metadata, TTL, age, pruning, response-header map, and cache-status
helper code. - Native HTTP/1 proxy routes can now attach a Fluxheim-owned memory cache for
non-load-balanced upstreams when the cache policy is limited to the supported
native subset. - Native proxy cache lookup/fill now reuses the Pingora-independent
fluxheim-cacherequest and response policy helpers for cache key
construction, request bypasses, client revalidation, response
no-store/private,Set-Cookie, status TTLs, content-type admission, and
object-size limits. - Native proxy cache emits configured cache status and reason headers. The
live native listener test proves a cacheable proxy response returnsMISS
on first fill andHITon the second request without contacting the origin. - HEAD requests remain bypassed in the native proxy cache path so a HEAD probe
cannot poison a cached GET body. - Native root, vhost, and route readiness checks now accept only the supported
memory-tier proxy cache subset and keep unsupported cache shapes blocked
instead of silently dropping policy. - Native HTTP/1 TLS startup now recognizes managed ACME certificate sources on
server.default_vhost, so rustls deployments usingserver.tls_listencan
start with a pending default-vhost ACME certificate source and serve HTTP-01
issuance traffic instead of failing the TLS listener plan. - Native proxy memory cache now bypasses shared-cache lookup/fill for requests
carryingAuthorization, keeps configuredBYPASScache-status headers on
upstream error responses, and strips stored upstreamAgeso cache hits emit
one recomputedAgeheader. - Native proxy memory cache now isolates origin
Varyresponse variants and
configuredcache.vary_request_headersvariants in the native memory-cache
key space. - Native proxy memory cache now serves expired memory-cache entries under
configuredstale_if_error_secswhen the single-upstream native proxy sees a
matching upstream error or 5xx status. - Native proxy memory cache now enforces
cache.origin_protectionfill budgets
for the supported single-upstream memory-cache path. - Native proxy memory cache now uses checked
Instantarithmetic for freshness
and stale-if-error expiry, bypassing cache admission instead of panicking if a
constrained platform cannot represent the configured window. - Native proxy memory cache now serves bounded single
Rangerequests from
fresh cached full objects, emits cached416responses for unsatisfiable
ranges, and bypasses cache fill on range misses so upstream206responses
are never stored under full-object keys. - Native proxy memory cache now supports native load-balanced upstream pools;
cache hits return before backend selection, and cache misses fill from the
selected backend. - Native proxy memory cache now supports
cache.min_uses,
cache.pass_uncacheable_after, and opt-in[cache.predictor]cache-pass
decisions with bounded Fluxheim-owned counters. Cacheable responses clear
cache-pass state before min-use admission, matching the existing
compatibility behavior. - Native proxy memory cache now supports
stale_while_revalidate_secsfor
expired memory objects. The native path serves aSTALE-UPDATINGresponse,
keeps origin-fill protection in front of the refresh task, and updates the
cached object through the same response admission path. - Native proxy memory cache now supports
[cache.lock]request collapsing for
concurrent same-key memory-cache misses. The first request fills from origin;
matching readers wait up towait_timeout_secsand then serve the completed
object as a normalHITwhen the fill succeeds. - Native proxy memory cache now supports memory-tier
[cache.range.slice]
composition. The native path fetches fixed-size origin slices with bounded
Rangesubrequests, validates206,Content-Range,Content-Length,
identity encoding, and matching ETag/Last-Modified identity, then composes
single-range or multipart responses from cached slices. - Native proxy memory cache now supports peer-fill over HTTPS and over
constrained HTTP peers. HTTPS peers use the native upstream TLS connector and
derive SNI from the peer URL host; plaintext HTTP peers are accepted only for
loopback peers or whencache.peer_fill.allow_insecure_http = true. Native
peer-fill preserves theX-Fluxheim-Peer-Fillloop guard, sends
Cache-Control: only-if-cached, honors peer-fill concurrency limits, stores
successful peer200responses locally, and returnsPEER-HITbefore later
requests become normal memory-cacheHITs. - Native proxy cache now supports unencrypted filesystem disk cache and
memory+disk tiering. Disk objects use hashed paths under the configured cache
root, reuse the shared Fluxheim disk object envelope, persist freshness and
stale windows as absolute timestamps, rebuild a bounded native index at
startup, and promote fresh disk hits back into memory when the memory tier is
enabled. - Native proxy cache now supports local-key encrypted filesystem disk cache.
The native path reuses the existingFLUXHEIM-CACHE-ENC-v1AES-256-GCM
envelope, loads the same safekey_file/key_credentialsources, rejects
plaintext objects while encryption is enabled, and has live listener coverage
proving encrypted diskMISSthenHITreuse without storing the origin
response body in plaintext on disk. - Native proxy cache now supports the
storage-bindisk backend. The native
path prepares the same manifest/bin layout, persists a bounded native index,
rebuilds free-space state at startup, evicts oldest objects when the storage
budget is full, and has live listener coverage proving storage-binMISS
thenHITreuse across a native proxy restart. - Native proxy cache now supports local-key encrypted storage-bin disk cache.
The same encrypted disk-object envelope is written into bin slots, and live
listener coverage proves restartHITreuse without storing the origin
response body in plaintext inside bin files. - Native proxy cache now supports OpenBao Transit encrypted disk cache in the
native cache path. The native adapter reuses the existing
FLUXHEIM-CACHE-ENC-v1envelope, sends Transitencrypt/decryptrequests
with authenticated cache-key data, disables OpenBao redirects, caps Transit
response bodies, trims zeroized token-file/credential secrets before header
use, and has live storage-bin listener coverage provingMISS, restart
validation decrypt, andHITdecrypt behavior. - Native peer-fill admission now subtracts upstream
Agefrom peer response
freshness, so aged peer objects cannot extend origin freshness when copied
into local memory cache. - Native cache-only requests with
Cache-Control: only-if-cachednow return a
bounded504miss instead of contacting origin. A client-supplied
X-Fluxheim-Peer-Fillmarker is stripped before normal proxy handling and
no longer suppresses peer-fill. - Hardened native cache internals by using checked static-web cache expiry
arithmetic, suppressing duplicate stale-while-revalidate refresh tasks per
cache key before task allocation, and avoiding full predictor-counter table
scans on the hot miss path. - Hardened native cache admin purge parity by adding a Fluxheim-owned native
memory-cache purge index and wiring exact, bulk, prefix, tag, wildcard,
route-scope, and stale purge operations through live native memory state as
well as disk state. The proxy-cache smoke now proves those purges cannot
leave a native memoryHITorSTALEresponse behind while the origin is
stopped. - Closed native observability parity gaps found during the final release gate:
native HTTP/1 proxy requests now regenerate forwardedtraceparentspan IDs,
record proxy request counters, expose native cache memory/disk runtime gauges,
and publish native cache lookup duration histograms through the existing
Prometheus metrics surface. - Fixed native disk-cache purge parity so exact, bulk, prefix, tag, wildcard,
route-scope, stale, and slice path-exact purges operate on the live native
filesystem/storage-bin disk cache instead of a reconstructed throwaway cache.
Native disk cache now keeps its own purge index and reports non-zero disk
purge-index metrics when indexed disk objects are present. - Moved native disk-cache lookup and store work onto Tokio's blocking pool.
This covers filesystem I/O, storage-bin I/O, storage-bin index persistence,
and OpenBao Transit encrypt/decrypt HTTP calls so cache operations do not
pin async worker threads while external storage or OpenBao is slow. - Reduced storage-bin write amplification by batching index persistence for
multi-object eviction during one cache store, instead of rewriting the full
storage-bin index after every single evicted object. - Hardened native cache encryption and rebuild behavior by bounding
filesystem cache-object reads before startup rebuild parsing, zeroizing
transient decrypted OpenBao/native serialized-object buffers, and logging
local AES-GCM key-rotation warnings as a process approaches the random-nonce
invocation bound. - Native filesystem disk-cache startup scans now list root and shard
directories through the native safe disk-cache path wrapper, keeping the
symlink/canonical path boundary explicit at the directory traversal point. - Native disk-cache indexed purge removals now update object state and purge
index membership under the same cache-state lock, closing a split-lock race
where a concurrent store could become invisible to indexed purge operations. - Updated
arc-swapto 1.9.2 andenv_loggerto 0.11.11. - Stale admin purges now log an explicit security warning if the system clock
regresses before the Unix epoch, instead of silently substituting timestamp
zero without operator visibility.
Compatibility Notes
- Supported in this checkpoint: memory-tier proxy cache for ordinary GET
responses from static or native load-balanced upstream pools, with optional
cache-status headers, Vary/request-header variant isolation,
stale_if_error_secsserving,cache.origin_protectionfill budgets,
native load-balanced pools,cache.min_uses,pass_uncacheable_after,
opt-in[cache.predictor]cache-pass decisions,
stale_while_revalidate_secsbackground refresh,[cache.lock]same-key
request collapsing, memory-tier[cache.range.slice]composition,
unencrypted, local-key encrypted, or OpenBao Transit encrypted filesystem or
storage-bin disk cache, memory+disk tiering, and HTTPS/loopback-or-opt-in
HTTP peer-fill.
Ifcache.range.enabled = true, bounded singleRangerequests can be
served from fresh cached full objects or from compatible fixed-size memory
slices when slice caching is enabled. - Native runtime readiness still rejects cache policies that are attached to no
native cacheable handler or whose route/upstream shape is outside the
supported native proxy-cache subset; it no longer has a backend/encryption
parity gate for filesystem, storage-bin, local-key, or OpenBao Transit disk
cache. - Security note: native HTTP peer-fill is intentionally available only when
the peer is loopback orallow_insecure_http = true. Plaintext HTTP has no
transport integrity and can be cache-poisoned by a network-path attacker; use
HTTPS peers, loopback peers, encrypted overlays, mTLS sidecars, or trusted
private networks. - The compatibility runtime remains available for unsupported cache policy
shapes while operators migrate route layouts to the native-supported subset.
Verification
cargo test -p fluxheim-server native_route_proxy_caches_proxy_response_in_memory --lockedcargo test -p fluxheim-server native_route_proxy_min_uses_delays_memory_cache_admission --lockedcargo test -p fluxheim-server native_route_proxy_predictor_passes_repeated_uncacheable_memory_response --lockedcargo test -p fluxheim-server native_route_proxy_serves_stale_while_revalidating_memory_cache --lockedcargo test -p fluxheim-server native_route_proxy_cache_lock_collapses_concurrent_memory_fills --lockedcargo test -p fluxheim-server native_route_proxy_slice_cache_fills_and_composes_memory_range --lockedcargo test -p fluxheim-server native_route_proxy_slice_cache_composes_multipart_memory_response --lockedcargo test -p fluxheim-server native_route_proxy_accepts_route_memory_proxy_cache_with_https_peer_fill --lockedcargo test -p fluxheim-server native_route_proxy_caches_proxy_response_on_disk --lockedcargo test -p fluxheim-server native_route_proxy_caches_proxy_response_on_encrypted_disk --lockedcargo test -p fluxheim-server native_route_proxy_caches_proxy_response_on_storage_bin_disk --lockedcargo test -p fluxheim-server native_route_proxy_caches_proxy_response_on_encrypted_storage_bin_disk --lockedcargo test -p fluxheim-server --features openbao-cache-encryption native_route_proxy_caches_proxy_response_on_openbao_storage_bin_disk --lockedcargo test -p fluxheim-server native_route_proxy_tiered_cache_refills_memory_from_disk --lockedcargo test -p fluxheim-server native_route_proxy_peer_fills_and_stores_memory_cache_response --lockedcargo test -p fluxheim-server native_storage_bin_disk_purge_uses_live_cache_instance --lockedcargo test -p fluxheim-server static_cache_expiry_rejects_unrepresentable_ttl --lockedcargo test -p fluxheim-server native_route_proxy_regenerates_forwarded_traceparent_span_id --features otel-tracing --lockedcargo test -p fluxheim-server --features acme,tls-rustls-backend native_http1_proxy_runtime_accepts_default_vhost_acme_certificate_source --lockedcargo test -p fluxheim-server native_http1_plan --lockedcargo check -p fluxheim-server --all-features --lockedcargo check -p fluxheim --features profile-observability --lockedsh scripts/smoke_observability_local.shsh scripts/smoke_proxy_cache.shscripts/podman_smoke.shscripts/stable_release_gate.sh check
Checksums And Signatures
- Commit:
fbed3f76f86cd7f7ae394d23dff5050c6fa9366f - 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:
9c3d471bda0821f48b5fd67a0768bba2f188358d2a8e1ec8fd0693a78585b640 fluxheim-1.6.33.tar.gz3276b7d39a20fd28d2d7f71813f3af1f471bff7fee27d470731ca94b7b024292 fluxheim-1.6.33.zip
- Binary checksums:
- x86_64:
e3197578aa4b5411156cd4586662596d421db3c8a1aa3a48e246ec80521b325a fluxheim-1.6.33-full-x86_64-linux.tar.gze72280874a15530d3dbea3e4bd22f6449c5bcd2efbba131240f839b71b28b818 fluxheim-1.6.33-cache-x86_64-linux.tar.gzc67c1fa6c4638cf0fb91f2f57c85a2bdb41e56bd92dcce9435643d203f2e2ac9 fluxheim-1.6.33-proxy-x86_64-linux.tar.gzfde03ea4ba8174584da7f8a3ef8edc6327e12d149fd6fa7e0f413f16cc31608e fluxheim-1.6.33-php-x86_64-linux.tar.gzb23cdc77d1b911f4dd358c5cf8081550e9af5358b01e1b3e0df480cdbe21878b fluxheim-1.6.33-load-balancer-x86_64-linux.tar.gz05c1f5c878b856b398255f658fd1a99f7937c3f9eea8b57814ad6cbf35a111d1 fluxheim-1.6.33-config-tester-x86_64-linux.tar.gz
- aarch64:
d0ca3c256db1b7ab7c1813ecd08bb402a53685fa8d60ac68cc302db80fc4a1c4 fluxheim-1.6.33-full-aarch64-linux.tar.gzb11f62272409d6e89ef42b0a99559fdecde00267f9d48f556388986d0177e1f1 fluxheim-1.6.33-cache-aarch64-linux.tar.gz2679d60ed1e36f9d7bd68f23fd2d9026812abb1df2d292bebd80e22f1aa46652 fluxheim-1.6.33-proxy-aarch64-linux.tar.gz9fcffc1f68010c5507a9df7a1732851a6860a1f1a53b04a7a9887b77317ae185 fluxheim-1.6.33-php-aarch64-linux.tar.gzf06ec8df9f87e7f1dc9e46e9760ae7e5361000fc65558752e9e3b4a808e9277e fluxheim-1.6.33-load-balancer-aarch64-linux.tar.gza637ecdd0ebffcfd18c49533f5fba9e1b16ced5906498da6155103695f4ee12b fluxheim-1.6.33-config-tester-aarch64-linux.tar.gz
- macos:
9cbdf5a84315c631e66e7e63d206e99f53030bd8968eb4f349fa0a47388fb503 fluxheim-1.6.33-dev-aarch64-macos.tar.gz
- x86_64:
- SBOM checksums:
81d1757b0cfb0610244b100be9adeafc4fc80651111f94310b717705c2cb7d2c fluxheim.spdx.jsone515e6cf896c3c0499fe3671d48978495b5cd155574fbe4d01ddf2f182cc0d1a fluxheim.cyclonedx.json
- Reproducible build:
933e06fb8b3707b59a12a0fdd89f71df2110ca068b779c1a88fcd0db146f71c4x86_6470067e8966bc09f972553c09a2252a1b305b7c5843272bea7d9405dcbd8546f6aarch6436eedf7983a84769e3c6e7b3ebe8899c0327898f757a9586273ac05750474522macos
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:f4ba0069137962452360ab0e11f9ac4326b351f9fc15a4a777bc6bb7990c6c4e - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:47477f22bf850466616706e8de95c81df41774a9b7f6d197ad3d8e8382d0c701 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:a927099369c7aaf949211a0a37bb4dc7dce00f60319c3c8cbfb6f349aa2da1ac - Debian:
ghcr.io/valkyoth/fluxheim@sha256:033f0eec6197aedeebeb77df7424472ea3aaabb5094ca1999dbb67f4bd5855e0
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:0a85ca39440725c42028caeaba11af10c71617de254a044ec3461c3be941727b - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:b8332b98ba9e83f86f3c2cecac56e5f82c7338f145bcac5e4add81460a94b2f6 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:230bdfe4721a7bdff6806fc2afa858de8b8c0748d8a87fc8aa3b431c696792ae - Debian:
ghcr.io/valkyoth/fluxheim@sha256:4491b5576cc46dc3c1d946634c9a802043b631d62f792758b4394084fdb4cd5f
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:167d354ab055c72a2e24a4c8f4ced6478d390c1a0ad98900b312ebf90e671c4c - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:474de47af6df5f2dcaf45c27f91682c71c494fc5d8856b3e046ce21e733456c9 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:22f7bd5a89bb668a61a0a9c0da70f769e4a467bf62fb813abe41d1058cb0f0c5 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:8112e6d6e7d10728b32ebfe3571c14cbe99d6f93614e9b67ee2ea9a2a72f7680
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:1365cbf8c9f37e24168b4f7a7d0121fee801a28fdebea5598698857cda3518a1 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:249fed959289adb1d024790f6e9a519a6cbdf4794f91d2de5bc4178ba5f1e311 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:4b6ff7e0e6ca1429fdb0475ee1879e77a1604ac56b3c4c754035b7b6a8afd4d3 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:4e816031c3ce40c3801a3dd1ae94afb980113e7f28648ab3fd174d1726f41b52
- Wolfi:
- Load Balancer Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:0a9c28da592f410e2efc81a8560d161cf094a1a8b286a2050d429670b46b4f16 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:7e98d79aee2995af65ad2a40c3124abcf214c6999149513f5e178c8ce1b69a5b - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:815b1f27f42928684e634c2bd769e64a2a8e398ea8c23f7de162b767f2d0f2f2 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:42785ef9f54dacd08004ee64c0c8e8d530d67b5ac700328539030e2903ef155d
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4