-
-
Notifications
You must be signed in to change notification settings - Fork 602
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Element-R: reduce log spam when checking server key backup #3826
Conversation
@@ -460,7 +460,7 @@ export class RustBackupDecryptor implements BackupDecryptor { | |||
for (const [sessionId, sessionData] of Object.entries(ciphertexts)) { | |||
try { | |||
const decrypted = JSON.parse( | |||
await this.decryptionKey.decryptV1( | |||
this.decryptionKey.decryptV1( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is slightly separate, but a cleanup while I was in the area.
decryptionKey.decryptV1
doesn't return a promise.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I have seen it now that I use WebStorm. I am wondering if you shouldn't update the bindings to make it async?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added an await immediate()
in 131c524 to make sure we don't block the event loop.
Fixes a lot of spam in the logs about "uncaught in promise: No room_keys found".
c70f48f
to
217fef9
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thx for the cleaning, it was mostly copy pasted from legacy. Just a few comments
@@ -460,7 +460,7 @@ export class RustBackupDecryptor implements BackupDecryptor { | |||
for (const [sessionId, sessionData] of Object.entries(ciphertexts)) { | |||
try { | |||
const decrypted = JSON.parse( | |||
await this.decryptionKey.decryptV1( | |||
this.decryptionKey.decryptV1( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I have seen it now that I use WebStorm. I am wondering if you shouldn't update the bindings to make it async?
const path = encodeUri("/room_keys/keys/$roomId/$sessionId", { | ||
$roomId: targetRoomId, | ||
$sessionId: targetSessionId, | ||
this.queryKeyBackup(targetRoomId, targetSessionId).catch((e) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we might want to check if we have the private key before marking the check as attempted (sessionLastCheckAttemptedTime = now). Because if we attempt to get the key and you don't have the private key yet (verification not yet done) it will not retry until KEY_BACKUP_CHECK_RATE_LIMIT. So when you verify after login, you'll have to wait?
KEY_BACKUP_CHECK_RATE_LIMIT isn't that high currently, so maybe not too important though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we might want to check if we have the private key before marking the check as attempted (sessionLastCheckAttemptedTime = now).
The problem with that is that it is racy: if two calls to startQueryKeyBackupRateLimited
happen in quick succession (eg, because there are two messages in a sync response), then both will check sessionLastCheckAttemptedTime
and find it ok, and go on to make a backup request. We need to make sure there is no await
between the check and the update on sessionLastCheckAttemptedTime
.
cypress failures: element-hq/element-web#26437, element-hq/element-web#26447, element-hq/element-web#26452 |
Fixes a lot of spam in the logs about "uncaught in promise: No room_keys found".
This change is marked as an internal change (Task), so will not be included in the changelog.