Skip to content

Commit fd94bfc

Browse files
sypharjyn514
authored andcommitted
don't count completed CDN invalidations as active
1 parent bd375e1 commit fd94bfc

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

src/cdn.rs

+43-2
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,29 @@ impl CdnBackend {
129129
}
130130
}
131131

132+
#[cfg(test)]
133+
fn insert_completed_invalidation(
134+
&self,
135+
distribution_id: &str,
136+
invalidation_id: &str,
137+
path_patterns: &[&str],
138+
) {
139+
let CdnBackend::Dummy { ref invalidation_requests, .. } = self else {
140+
panic!("invalid CDN backend");
141+
};
142+
143+
let mut invalidation_requests = invalidation_requests
144+
.lock()
145+
.expect("could not lock mutex on dummy CDN");
146+
147+
invalidation_requests.push(CdnInvalidation {
148+
distribution_id: distribution_id.to_owned(),
149+
invalidation_id: invalidation_id.to_owned(),
150+
path_patterns: path_patterns.iter().cloned().map(str::to_owned).collect(),
151+
completed: true,
152+
});
153+
}
154+
132155
#[cfg(test)]
133156
fn clear_active_invalidations(&self) {
134157
match self {
@@ -298,7 +321,9 @@ pub(crate) fn handle_queued_invalidation_requests(
298321
&[&distribution_id],
299322
)? {
300323
if let Some(status) = cdn.invalidation_status(distribution_id, row.get(0))? {
301-
active_invalidations.push(status);
324+
if !status.completed {
325+
active_invalidations.push(status);
326+
}
302327
}
303328
}
304329

@@ -541,7 +566,7 @@ mod tests {
541566

542567
invalidation_requests
543568
.iter()
544-
.filter(|i| i.distribution_id == distribution_id)
569+
.filter(|i| !i.completed && i.distribution_id == distribution_id)
545570
.cloned()
546571
.collect()
547572
}
@@ -750,6 +775,22 @@ mod tests {
750775

751776
let mut conn = env.db().conn();
752777
assert!(queued_or_active_crate_invalidations(&mut *conn)?.is_empty());
778+
779+
// insert some completed invalidations into the queue & the CDN, these will be ignored
780+
for i in 0..10 {
781+
insert_running_invalidation(
782+
&mut conn,
783+
"distribution_id_web",
784+
&format!("some_id_{i}"),
785+
)?;
786+
cdn.insert_completed_invalidation(
787+
"distribution_id_web",
788+
&format!("some_id_{i}"),
789+
&["/*"],
790+
);
791+
}
792+
793+
// insert the CDN representation of the already running invalidation
753794
insert_running_invalidation(
754795
&mut conn,
755796
"distribution_id_web",

0 commit comments

Comments
 (0)