Skip to content

Commit dc167b8

Browse files
committed
Improve logging in backup upload keys loop
Just some clarity improvements to the logging that comes out of this, since I found it rather hard to decode.
1 parent 24652b3 commit dc167b8

1 file changed

Lines changed: 33 additions & 27 deletions

File tree

src/rust-crypto/backup.ts

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)