This commit is contained in:
Mateusz Gruszczyński committed 2026-10-03 10:05:46 +02:00
1 parent 5e23e9af02
commit 3883a21bc4
56 files changed
+1640 -403

No files matched your search

+36 -1
View File
@@ -83,8 +83,23 @@ enum CacheInvalidation {
/// Keeping it stable across logging/TLS/admin saves lets the persistent cold
/// tier survive a restart after unrelated control-plane edits.
fn cache_revision(config: &config::Config) -> u64 {
// Preset fields are UI intent metadata. Persist them, but do not rotate the
// cache compatibility identity (and purge HOT/COLD) when only the label
// changes while the effective cache limits stay identical.
let mut cache = config.cache.clone();
cache.memory_preset = None;
cache.cold_preset = None;
// Resource-only transform controls decide how much optimization work may
// happen concurrently, but do not change the transformed representation.
// Keep those out of the cache identity while including representation and
// eligibility controls such as enabled kinds, extensions and max body.
let mut transform = config.transform.clone();
transform.preset = None;
transform.memory_budget_bytes = 0;
transform.max_inflight = 0;
let encoded = serde_json::to_vec(&(
&config.cache,
&cache,
&transform,
&config.headers,
&config.forwarding,
&config.vhosts,
@@ -605,6 +620,26 @@ mod cache_revision_tests {
});
assert_eq!(cache_revision(&docker), identity);
let mut preset = base.clone();
preset.cache.memory_preset = Some(crate::cache::MemoryPreset::Recommended);
preset.cache.cold_preset = Some(crate::cache::ColdPreset::Recommended);
preset.transform.preset = Some(crate::transform::Preset::Uber);
preset.transform.memory_budget_bytes = 1024 * 1024 * 1024;
preset.transform.max_inflight = 128;
assert_eq!(cache_revision(&preset), identity);
assert!(matches!(
cache_invalidation(&base, &preset),
CacheInvalidation::None
));
let mut transform_policy = base.clone();
transform_policy.transform.json = !transform_policy.transform.json;
assert_ne!(cache_revision(&transform_policy), identity);
let mut transform_body_limit = base.clone();
transform_body_limit.transform.max_body_bytes += 1024;
assert_ne!(cache_revision(&transform_body_limit), identity);
let mut cache = base.clone();
cache.cache.max_entries += 1;
let cache_identity = cache_revision(&cache);