@@ -427,17 +427,20 @@ export class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents,
427427 }
428428
429429 private async backupKeysLoop ( ) : Promise < void > {
430+ const logger = this . logger . getChild ( "[backupKeysLoop]" ) ;
431+
430432 if ( this . backupKeysLoopRunning ) {
431- this . logger . debug ( `Backup loop already running` ) ;
433+ logger . debug ( `Backup loop already running` ) ;
432434 return ;
433435 }
434436 this . backupKeysLoopRunning = true ;
435437
436- this . logger . debug ( `Backup: Starting keys upload loop for backup version:${ this . activeBackupVersion } .` ) ;
437-
438438 // Wait between 0 and `maxBackupLoopStartDelayMillis` milliseconds, to avoid backup requests from different
439439 // clients hitting the server all at the same time when a new key is sent.
440440 const delay = Math . random ( ) * RustBackupManager . maxBackupLoopStartDelayMillis ;
441+ logger . debug (
442+ `Starting keys upload loop for backup version ${ this . activeBackupVersion } , but delaying startup by ${ delay } ms` ,
443+ ) ;
441444 await sleep ( delay ) ;
442445
443446 try {
@@ -451,25 +454,28 @@ export class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents,
451454
452455 while ( ! this . stopped ) {
453456 // Get a batch of room keys to upload
454- let request : RustSdkCryptoJs . KeysBackupRequest | undefined = undefined ;
457+ let request ;
455458 try {
456- request = await logDuration (
457- this . logger ,
458- "BackupRoomKeys: Get keys to backup from rust crypto-sdk" ,
459- async ( ) => {
460- return await this . olmMachine . backupRoomKeys ( ) ;
461- } ,
462- ) ;
459+ request = await this . olmMachine . backupRoomKeys ( ) ;
460+ if ( request ) {
461+ logger . debug ( "Got keys to back up from crypto-sdk" ) ;
462+ } else {
463+ logger . debug ( `No more keys to back up: ending loop for version ${ this . activeBackupVersion } .` ) ;
464+ this . emit ( CryptoEvent . KeyBackupSessionsRemaining , 0 ) ;
465+ return ;
466+ }
463467 } catch ( err ) {
464- this . logger . error ( "Backup: Failed to get keys to backup from rust crypto-sdk" , err ) ;
468+ logger . error ( "Failed to get keys to backup from rust crypto-sdk: ending backup loop" , err ) ;
469+ return ;
465470 }
466471
467- if ( ! request || this . stopped || ! this . activeBackupVersion ) {
468- this . logger . debug ( `Backup: Ending loop for version ${ this . activeBackupVersion } .` ) ;
469- if ( ! request ) {
470- // nothing more to upload
471- this . emit ( CryptoEvent . KeyBackupSessionsRemaining , 0 ) ;
472- }
472+ if ( this . stopped ) {
473+ logger . debug ( `Client stopping: ending loop for version ${ this . activeBackupVersion } .` ) ;
474+ return ;
475+ }
476+
477+ if ( ! this . activeBackupVersion ) {
478+ logger . debug ( `Backup no longer active: ending loop.` ) ;
473479 return ;
474480 }
475481
@@ -492,7 +498,7 @@ export class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents,
492498 const keyCount = await this . olmMachine . roomKeyCounts ( ) ;
493499 remainingToUploadCount = keyCount . total - keyCount . backedUp ;
494500 } catch ( err ) {
495- this . logger . error ( "Backup: Failed to get key counts from rust crypto-sdk" , err ) ;
501+ logger . error ( "Failed to get key counts from rust crypto-sdk" , err ) ;
496502 }
497503 }
498504
@@ -508,15 +514,15 @@ export class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents,
508514 }
509515 } catch ( err ) {
510516 numFailures ++ ;
511- this . logger . error ( "Backup: Error processing backup request for rust crypto-sdk" , err ) ;
517+ logger . error ( "Error processing backup request for rust crypto-sdk" , err ) ;
512518 if ( err instanceof MatrixError ) {
513519 const errCode = err . data . errcode ;
514520 if ( errCode == "M_NOT_FOUND" || errCode == "M_WRONG_ROOM_KEYS_VERSION" ) {
515- this . logger . debug ( `Backup: Failed to upload keys to current vesion : ${ errCode } .` ) ;
521+ logger . debug ( `Failed to upload keys to current version : ${ errCode } .` ) ;
516522 try {
517523 await this . disableKeyBackup ( ) ;
518524 } catch ( error ) {
519- this . logger . error ( "Backup: An error occurred while disabling key backup:" , error ) ;
525+ logger . error ( "An error occurred while disabling key backup:" , error ) ;
520526 }
521527 this . emit ( CryptoEvent . KeyBackupFailed , err . data . errcode ! ) ;
522528 // There was an active backup and we are out of sync with the server
@@ -529,21 +535,21 @@ export class RustBackupManager extends TypedEventEmitter<RustBackupCryptoEvents,
529535 try {
530536 const waitTime = err . getRetryAfterMs ( ) ;
531537 if ( waitTime && waitTime > 0 ) {
538+ logger . debug ( `Sleeping ${ waitTime } ms after ratelimit` ) ;
532539 await sleep ( waitTime ) ;
533540 continue ;
534541 }
535542 } catch ( error ) {
536- this . logger . warn (
537- "Backup: An error occurred while retrieving a rate-limit retry delay" ,
538- error ,
539- ) ;
543+ logger . warn ( "An error occurred while retrieving a rate-limit retry delay" , error ) ;
540544 } // else go to the normal backoff
541545 }
542546 }
543547
544548 // Some other errors (mx, network, or CORS or invalid urls?) anyhow backoff
545549 // exponential backoff if we have failures
546- await sleep ( 1000 * Math . pow ( 2 , Math . min ( numFailures - 1 , 4 ) ) ) ;
550+ const waitTime = 1000 * Math . pow ( 2 , Math . min ( numFailures - 1 , 4 ) ) ;
551+ logger . debug ( `Sleeping ${ waitTime } ms after failure #${ numFailures } ` ) ;
552+ await sleep ( waitTime ) ;
547553 }
548554 isFirstIteration = false ;
549555 }
0 commit comments