@@ -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