@@ -129,6 +129,29 @@ impl CdnBackend {
129
129
}
130
130
}
131
131
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
+
132
155
#[ cfg( test) ]
133
156
fn clear_active_invalidations ( & self ) {
134
157
match self {
@@ -298,7 +321,9 @@ pub(crate) fn handle_queued_invalidation_requests(
298
321
& [ & distribution_id] ,
299
322
) ? {
300
323
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
+ }
302
327
}
303
328
}
304
329
@@ -541,7 +566,7 @@ mod tests {
541
566
542
567
invalidation_requests
543
568
. iter ( )
544
- . filter ( |i| i. distribution_id == distribution_id)
569
+ . filter ( |i| !i . completed && i. distribution_id == distribution_id)
545
570
. cloned ( )
546
571
. collect ( )
547
572
}
@@ -750,6 +775,22 @@ mod tests {
750
775
751
776
let mut conn = env. db ( ) . conn ( ) ;
752
777
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
753
794
insert_running_invalidation (
754
795
& mut conn,
755
796
"distribution_id_web" ,
0 commit comments