Skip to content

Commit c342321

Browse files
committed
fastly-invalidation: use explicit surrogate keys everywhere, remove magic
1 parent a55f4a4 commit c342321

File tree

15 files changed

+708
-351
lines changed

15 files changed

+708
-351
lines changed

src/cdn/fastly.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ mod tests {
210210
let m = fastly_api
211211
.mock("POST", "/service/test-sid-1/purge")
212212
.match_header(FASTLY_KEY, "test-token")
213-
.match_header(&SURROGATE_KEY, "crate-foo crate-bar")
213+
.match_header(&SURROGATE_KEY, "crate-bar crate-foo")
214214
.with_status(200)
215215
.create_async()
216216
.await;
@@ -246,7 +246,7 @@ mod tests {
246246
let m = fastly_api
247247
.mock("POST", "/service/test-sid-1/purge")
248248
.match_header(FASTLY_KEY, "test-token")
249-
.match_header(&SURROGATE_KEY, "crate-foo crate-bar")
249+
.match_header(&SURROGATE_KEY, "crate-bar crate-foo")
250250
.with_status(500)
251251
.create_async()
252252
.await;

src/db/types/krate_name.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ use std::{io::Write, str::FromStr};
3232
)]
3333
pub struct KrateName(String);
3434

35+
impl From<&KrateName> for KrateName {
36+
fn from(krate_name: &KrateName) -> Self {
37+
krate_name.clone()
38+
}
39+
}
40+
3541
impl FromStr for KrateName {
3642
type Err = anyhow::Error;
3743

src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
//! [Docs.rs](https://docs.rs) (formerly cratesfyi) is an open source project to host
22
//! documentation of crates for the Rust Programming Language.
3-
#![allow(clippy::cognitive_complexity)]
3+
#![allow(
4+
clippy::cognitive_complexity,
5+
// TODO: `AxumNope::Redirect(EscapedURI, CachePolicy)` is too big.
6+
clippy::result_large_err,
7+
)]
48

59
pub use self::build_queue::{
610
AsyncBuildQueue, BuildQueue, queue_rebuilds, queue_rebuilds_faulty_rustdoc,

src/test/mod.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ use crate::{
1515
storage::{AsyncStorage, Storage, StorageKind},
1616
test::test_metrics::CollectedMetrics,
1717
web::{
18-
build_axum_app,
19-
cache::{self},
20-
headers::{IfNoneMatch, SURROGATE_CONTROL},
18+
build_axum_app, cache,
19+
headers::{IfNoneMatch, SURROGATE_CONTROL, SurrogateKeys},
2120
page::TemplateData,
2221
},
2322
};
@@ -75,6 +74,11 @@ pub(crate) fn assert_cache_headers_eq(
7574
response.headers().get(&SURROGATE_CONTROL),
7675
"surrogate control header mismatch"
7776
);
77+
assert_eq!(
78+
expected_headers.surrogate_keys.as_ref(),
79+
response.headers().typed_get::<SurrogateKeys>().as_ref(),
80+
"surrogate key header mismatch"
81+
);
7882
}
7983

8084
pub(crate) trait AxumResponseTestExt {
@@ -106,7 +110,7 @@ impl AxumResponseTestExt for axum::response::Response {
106110
assert!(config.cache_control_stale_while_revalidate.is_some());
107111

108112
// This method is only about asserting if the handler did set the right _policy_.
109-
assert_cache_headers_eq(self, &cache_policy.render(config));
113+
assert_cache_headers_eq(self, &cache_policy.render(config).unwrap());
110114
}
111115

112116
fn error_for_status(self) -> Result<Self>

src/web/build_details.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,14 @@ pub(crate) async fn build_details_handler(
7373
let version = match_version(&mut conn, params.name(), params.req_version())
7474
.await?
7575
.assume_exact_name()?
76-
.into_canonical_req_version_or_else(|version| {
76+
.into_canonical_req_version_or_else(|confirmed_name, version| {
77+
let params = params
78+
.clone()
79+
.with_confirmed_name(Some(confirmed_name))
80+
.with_req_version(version);
7781
AxumNope::Redirect(
78-
params
79-
.clone()
80-
.with_req_version(version)
81-
.build_details_url(id, build_params.filename.as_deref()),
82-
CachePolicy::ForeverInCdn,
82+
params.build_details_url(id, build_params.filename.as_deref()),
83+
CachePolicy::ForeverInCdn(confirmed_name.into()),
8384
)
8485
})?
8586
.into_version();

src/web/builds.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,14 @@ pub(crate) async fn build_list_handler(
6767
let version = match_version(&mut conn, params.name(), params.req_version())
6868
.await?
6969
.assume_exact_name()?
70-
.into_canonical_req_version_or_else(|version| {
70+
.into_canonical_req_version_or_else(|confirmed_name, version| {
71+
let params = params
72+
.clone()
73+
.with_confirmed_name(Some(confirmed_name))
74+
.with_req_version(version);
7175
AxumNope::Redirect(
72-
params.clone().with_req_version(version).builds_url(),
73-
CachePolicy::ForeverInCdn,
76+
params.builds_url(),
77+
CachePolicy::ForeverInCdn(confirmed_name.into()),
7478
)
7579
})?
7680
.into_version();

0 commit comments

Comments
 (0)