@@ -3,12 +3,15 @@ use crate::cloudfront::CloudFront;
33use  crate :: fastly:: Fastly ; 
44use  crate :: storage:: Storage ; 
55use  crate :: typosquat; 
6+ use  crate :: worker:: jobs:: ProcessCloudfrontInvalidationQueue ; 
67use  anyhow:: Context ; 
78use  bon:: Builder ; 
9+ use  crates_io_database:: models:: CloudFrontInvalidationQueueItem ; 
810use  crates_io_docs_rs:: DocsRsClient ; 
911use  crates_io_index:: { Repository ,  RepositoryConfig } ; 
1012use  crates_io_og_image:: OgImageGenerator ; 
1113use  crates_io_team_repo:: TeamRepo ; 
14+ use  crates_io_worker:: BackgroundJob ; 
1215use  diesel_async:: AsyncPgConnection ; 
1316use  diesel_async:: pooled_connection:: deadpool:: Pool ; 
1417use  object_store:: ObjectStore ; 
@@ -70,9 +73,20 @@ impl Environment {
7073    } 
7174
7275    /// Invalidate a file in all registered CDNs. 
73-      pub ( crate )  async  fn  invalidate_cdns ( & self ,  path :  & str )  -> anyhow:: Result < ( ) >  { 
74-         if  let  Some ( cloudfront)  = self . cloudfront ( )  { 
75-             cloudfront. invalidate ( path) . await . context ( "CloudFront" ) ?; 
76+      pub ( crate )  async  fn  invalidate_cdns ( 
77+         & self , 
78+         conn :  & mut  AsyncPgConnection , 
79+         path :  & str , 
80+     )  -> anyhow:: Result < ( ) >  { 
81+         // Queue CloudFront invalidations for batch processing instead of calling directly 
82+         if  self . cloudfront ( ) . is_some ( )  { 
83+             let  paths = & [ path. to_string ( ) ] ; 
84+             let  result = CloudFrontInvalidationQueueItem :: queue_paths ( conn,  paths) . await ; 
85+             result. context ( "Failed to queue CloudFront invalidation path" ) ?; 
86+ 
87+             // Schedule the processing job to handle the queued paths 
88+             let  result = ProcessCloudfrontInvalidationQueue . enqueue ( conn) . await ; 
89+             result. context ( "Failed to enqueue CloudFront invalidation processing job" ) ?; 
7690        } 
7791
7892        if  let  Some ( fastly)  = self . fastly ( )  { 
0 commit comments