Fix failover on failed sends, and improve logging

This commit is contained in:
Scott Nonnenberg 2023-06-20 17:06:38 -07:00 committed by GitHub
parent 5e9bbb42f1
commit 65b6d9c2bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 4 deletions

View file

@ -1772,7 +1772,9 @@ export async function startApp(): Promise<void> {
} catch (error) {
log.error(
'connect: Error refreshing remote config:',
Errors.toLogFormat(error)
isNumber(error.code)
? `code: ${error.code}`
: Errors.toLogFormat(error)
);
}
}

View file

@ -3,6 +3,7 @@
import type { ProfileKeyCredentialRequestContext } from '@signalapp/libsignal-client/zkgroup';
import PQueue from 'p-queue';
import { isNumber } from 'lodash';
import type { ConversationModel } from '../models/conversations';
import type {
@ -496,7 +497,9 @@ async function doGetProfile(c: ConversationModel): Promise<void> {
log.warn(
'getProfile failure:',
idForLogging,
Errors.toLogFormat(error)
isNumber(error.code)
? `code: ${error.code}`
: Errors.toLogFormat(error)
);
return;
}

View file

@ -539,9 +539,12 @@ export default class OutgoingMessage {
},
async (error: Error) => {
if (
error instanceof HTTPError &&
error instanceof SendMessageNetworkError &&
(error.code === 401 || error.code === 403)
) {
log.warn(
`OutgoingMessage.doSendMessage: Failing over to unsealed send for identifier ${identifier}`
);
if (this.failoverIdentifiers.indexOf(identifier) === -1) {
this.failoverIdentifiers.push(identifier);
}

View file

@ -843,7 +843,14 @@ export function _shouldFailSend(error: unknown, logId: string): boolean {
if (error instanceof SendMessageProtoError) {
if (!error.errors || !error.errors.length) {
logError('SendMessageProtoError had no errors, failing.');
logError('SendMessageProtoError had no errors but was thrown! Failing.');
return true;
}
if (error.successfulIdentifiers && error.successfulIdentifiers.length > 0) {
logError(
'SendMessageProtoError had successful sends; no further sends needed. Failing.'
);
return true;
}