@@ -11,6 +11,8 @@ use log::{debug, info};
1111
1212use git2:: Oid ;
1313use std:: sync:: Arc ;
14+ use std:: thread;
15+ use std:: time:: Duration ;
1416
1517#[ derive( Debug , Clone , Eq , PartialEq , serde:: Serialize ) ]
1618pub ( crate ) struct QueuedCrate {
@@ -220,20 +222,22 @@ impl BuildQueue {
220222 }
221223}
222224
223- fn retry < T > ( mut f : impl FnMut ( ) -> Result < T > ) -> Result < T > {
224- const MAX_ATTEMPTS : u8 = 3 ;
225+ fn retry < T > ( mut f : impl FnMut ( ) -> Result < T > , max_attempts : u32 ) -> Result < T > {
225226 for attempt in 1 .. {
226227 match f ( ) {
227228 Ok ( result) => return Ok ( result) ,
228229 Err ( err) => {
229- if attempt > MAX_ATTEMPTS {
230+ if attempt > max_attempts {
230231 return Err ( err) ;
231232 } else {
233+ let sleep_for = 2u32 . pow ( attempt) ;
232234 log:: warn!(
233- "got error on attempt {}, will try again:\n {:?}" ,
235+ "got error on attempt {}, will try again after {}s :\n {:?}" ,
234236 attempt,
237+ sleep_for,
235238 err
236239 ) ;
240+ thread:: sleep ( Duration :: from_secs ( sleep_for as u64 ) ) ;
237241 }
238242 }
239243 }
@@ -345,23 +349,29 @@ impl BuildQueue {
345349 . map ( |r| PackageKind :: Registry ( r. as_str ( ) ) )
346350 . unwrap_or ( PackageKind :: CratesIo ) ;
347351
348- match retry ( || {
349- builder
350- . update_toolchain ( )
351- . context ( "Updating toolchain failed, locking queue" )
352- } ) {
352+ match retry (
353+ || {
354+ builder
355+ . update_toolchain ( )
356+ . context ( "Updating toolchain failed, locking queue" )
357+ } ,
358+ 3 ,
359+ ) {
353360 Err ( err) => {
354361 report_error ( & err) ;
355362 self . lock ( ) ?;
356363 return Err ( err) ;
357364 }
358365 Ok ( true ) => {
359366 // toolchain has changed, purge caches
360- if let Err ( err) = retry ( || {
361- builder
362- . purge_caches ( )
363- . context ( "purging rustwide caches failed, locking queue" )
364- } ) {
367+ if let Err ( err) = retry (
368+ || {
369+ builder
370+ . purge_caches ( )
371+ . context ( "purging rustwide caches failed, locking queue" )
372+ } ,
373+ 3 ,
374+ ) {
365375 report_error ( & err) ;
366376 self . lock ( ) ?;
367377 return Err ( err) ;
0 commit comments