perf(app-proxy): hold the frozen snapshot by reference (#2449)

This commit is contained in:
Hampus
2026-09-04 16:00:23 +02:00
committed by GitHub
parent 8e39a00e34
commit 2770482baf
2 changed files with 17 additions and 14 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ fn serve_frozen_file(
return (None, debug_header);
}
if let Some(snapshot) = &config.snapshot
if let Some(snapshot) = config.snapshot
&& let Some((bytes, content_type)) = pick(snapshot)
{
let mut response = bytes.to_vec().into_response();
+16 -13
View File
@@ -31,7 +31,7 @@ pub struct FrozenSnapshot {
pub struct TimeFreezeConfig {
pub enabled: bool,
pub release_channel: ReleaseChannel,
pub snapshot: Option<FrozenSnapshot>,
pub snapshot: Option<&'static FrozenSnapshot>,
pub client_exempt: bool,
}
@@ -87,7 +87,7 @@ pub fn load_time_freeze_config_for_index_source(
};
}
let snapshot: Option<FrozenSnapshot> = load_frozen_snapshot(release_channel);
let snapshot: Option<&'static FrozenSnapshot> = load_frozen_snapshot(release_channel);
TimeFreezeConfig {
enabled,
@@ -98,26 +98,26 @@ pub fn load_time_freeze_config_for_index_source(
}
#[cfg(feature = "time-freeze")]
fn load_frozen_snapshot(release_channel: ReleaseChannel) -> Option<FrozenSnapshot> {
fn load_frozen_snapshot(release_channel: ReleaseChannel) -> Option<&'static FrozenSnapshot> {
match release_channel {
ReleaseChannel::Stable => Some(crate::frozen_snapshots::STABLE_SNAPSHOT.clone()),
ReleaseChannel::Stable => Some(&crate::frozen_snapshots::STABLE_SNAPSHOT),
ReleaseChannel::Canary => None,
}
}
#[cfg(not(feature = "time-freeze"))]
fn load_frozen_snapshot(_release_channel: ReleaseChannel) -> Option<FrozenSnapshot> {
fn load_frozen_snapshot(_release_channel: ReleaseChannel) -> Option<&'static FrozenSnapshot> {
None
}
pub fn should_serve_frozen(config: &TimeFreezeConfig) -> Option<&FrozenSnapshot> {
pub fn should_serve_frozen(config: &TimeFreezeConfig) -> Option<&'static FrozenSnapshot> {
if !config.enabled {
return None;
}
if config.client_exempt {
return None;
}
config.snapshot.as_ref()
config.snapshot
}
pub fn describe_decision(config: &TimeFreezeConfig) -> TimeFreezeDebug {
@@ -276,6 +276,7 @@ pub fn format_debug_header(debug: &TimeFreezeDebug) -> String {
mod tests {
use super::*;
use axum::http::{HeaderMap, HeaderValue};
use std::sync::LazyLock;
#[cfg(feature = "time-freeze")]
#[test]
@@ -361,17 +362,19 @@ mod tests {
assert!(debug.snapshot_sha.is_none());
}
static TEST_SNAPSHOT: LazyLock<FrozenSnapshot> = LazyLock::new(|| FrozenSnapshot {
sha: "deadbeef".to_owned(),
index_html: vec![],
sw_js: vec![],
version_json: vec![],
});
#[test]
fn describe_decision_frozen() {
let config = TimeFreezeConfig {
enabled: true,
release_channel: ReleaseChannel::Stable,
snapshot: Some(FrozenSnapshot {
sha: "deadbeef".to_owned(),
index_html: vec![],
sw_js: vec![],
version_json: vec![],
}),
snapshot: Some(&TEST_SNAPSHOT),
client_exempt: false,
};
let debug = describe_decision(&config);