add stop() api to BackupManager for clean shutdown (#3553)

This commit is contained in:
Valere
2023-07-06 18:43:47 +02:00
committed by GitHub
parent 592c497902
commit 5b635df08d
2 changed files with 19 additions and 0 deletions
+18
View File
@@ -118,12 +118,21 @@ export class BackupManager {
public checkedForBackup: boolean; // Have we checked the server for a backup we can use?
private sendingBackups: boolean; // Are we currently sending backups?
private sessionLastCheckAttemptedTime: Record<string, number> = {}; // When did we last try to check the server for a given session id?
// The backup manager will schedule backup of keys when active (`scheduleKeyBackupSend`), this allows cancel when client is stopped
private clientRunning = true;
public constructor(private readonly baseApis: MatrixClient, public readonly getKey: GetKey) {
this.checkedForBackup = false;
this.sendingBackups = false;
}
/**
* Stop the backup manager from backing up keys and allow a clean shutdown.
*/
public stop(): void {
this.clientRunning = false;
}
public get version(): string | undefined {
return this.backupInfo && this.backupInfo.version;
}
@@ -439,6 +448,10 @@ export class BackupManager {
// the same time when a new key is sent
const delay = Math.random() * maxDelay;
await sleep(delay);
if (!this.clientRunning) {
logger.debug("Key backup send aborted, client stopped");
return;
}
let numFailures = 0; // number of consecutive failures
for (;;) {
if (!this.algorithm) {
@@ -473,6 +486,11 @@ export class BackupManager {
// exponential backoff if we have failures
await sleep(1000 * Math.pow(2, Math.min(numFailures - 1, 4)));
}
if (!this.clientRunning) {
logger.debug("Key backup send loop aborted, client stopped");
return;
}
}
} finally {
this.sendingBackups = false;
+1
View File
@@ -1832,6 +1832,7 @@ export class Crypto extends TypedEventEmitter<CryptoEvent, CryptoEventHandlerMap
this.outgoingRoomKeyRequestManager.stop();
this.deviceList.stop();
this.dehydrationManager.stop();
this.backupManager.stop();
}
/**