Reduce timeout for newMessageQueue
This commit is contained in:
parent
c5dda1d62d
commit
5773c7bc9a
1 changed files with 31 additions and 9 deletions
|
@ -1483,7 +1483,7 @@ export class ConversationModel extends window.Backbone
|
||||||
if (!this.newMessageQueue) {
|
if (!this.newMessageQueue) {
|
||||||
this.newMessageQueue = new PQueue({
|
this.newMessageQueue = new PQueue({
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
timeout: MINUTE * 30,
|
timeout: FETCH_TIMEOUT * 2,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1527,7 +1527,10 @@ export class ConversationModel extends window.Backbone
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setInProgressFetch(): () => unknown {
|
private setInProgressFetch(): () => unknown {
|
||||||
|
const logId = `setInProgressFetch(${this.idForLogging()})`;
|
||||||
|
const start = Date.now();
|
||||||
|
|
||||||
let resolvePromise: (value?: unknown) => void;
|
let resolvePromise: (value?: unknown) => void;
|
||||||
this.inProgressFetch = new Promise(resolve => {
|
this.inProgressFetch = new Promise(resolve => {
|
||||||
resolvePromise = resolve;
|
resolvePromise = resolve;
|
||||||
|
@ -1535,14 +1538,17 @@ export class ConversationModel extends window.Backbone
|
||||||
|
|
||||||
let timeout: NodeJS.Timeout;
|
let timeout: NodeJS.Timeout;
|
||||||
const finish = () => {
|
const finish = () => {
|
||||||
|
const duration = Date.now() - start;
|
||||||
|
if (duration > 500) {
|
||||||
|
log.warn(`${logId}: in progress fetch took ${duration}ms`);
|
||||||
|
}
|
||||||
|
|
||||||
resolvePromise();
|
resolvePromise();
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
this.inProgressFetch = undefined;
|
this.inProgressFetch = undefined;
|
||||||
};
|
};
|
||||||
timeout = setTimeout(() => {
|
timeout = setTimeout(() => {
|
||||||
log.warn(
|
log.warn(`${logId}: Calling finish manually after timeout`);
|
||||||
`setInProgressFetch(${this.idForLogging()}): Calling finish manually after timeout`
|
|
||||||
);
|
|
||||||
finish();
|
finish();
|
||||||
}, FETCH_TIMEOUT);
|
}, FETCH_TIMEOUT);
|
||||||
|
|
||||||
|
@ -1553,6 +1559,8 @@ export class ConversationModel extends window.Backbone
|
||||||
newestMessageId: string | undefined,
|
newestMessageId: string | undefined,
|
||||||
setFocus: boolean | undefined
|
setFocus: boolean | undefined
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
const logId = `loadNewestMessages/${this.idForLogging()}`;
|
||||||
|
|
||||||
const { messagesReset, setMessageLoadingState } =
|
const { messagesReset, setMessageLoadingState } =
|
||||||
window.reduxActions.conversations;
|
window.reduxActions.conversations;
|
||||||
const conversationId = this.id;
|
const conversationId = this.id;
|
||||||
|
@ -1596,11 +1604,15 @@ export class ConversationModel extends window.Backbone
|
||||||
this.get('removalStage') !== 'justNotification' &&
|
this.get('removalStage') !== 'justNotification' &&
|
||||||
metrics.oldest
|
metrics.oldest
|
||||||
) {
|
) {
|
||||||
|
log.info(`${logId}: scrolling to oldest ${metrics.oldest.sent_at}`);
|
||||||
void this.loadAndScroll(metrics.oldest.id, { disableScroll: true });
|
void this.loadAndScroll(metrics.oldest.id, { disableScroll: true });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scrollToLatestUnread && metrics.oldestUnseen) {
|
if (scrollToLatestUnread && metrics.oldestUnseen) {
|
||||||
|
log.info(
|
||||||
|
`${logId}: scrolling to oldest unseen ${metrics.oldestUnseen.sent_at}`
|
||||||
|
);
|
||||||
void this.loadAndScroll(metrics.oldestUnseen.id, {
|
void this.loadAndScroll(metrics.oldestUnseen.id, {
|
||||||
disableScroll: !setFocus,
|
disableScroll: !setFocus,
|
||||||
});
|
});
|
||||||
|
@ -1618,6 +1630,11 @@ export class ConversationModel extends window.Backbone
|
||||||
const scrollToMessageId =
|
const scrollToMessageId =
|
||||||
setFocus && metrics.newest ? metrics.newest.id : undefined;
|
setFocus && metrics.newest ? metrics.newest.id : undefined;
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
`${logId}: loaded ${cleaned.length} messages, ` +
|
||||||
|
`latest timestamp=${cleaned.at(-1)?.get('sent_at')}`
|
||||||
|
);
|
||||||
|
|
||||||
// Because our `getOlderMessages` fetch above didn't specify a receivedAt, we got
|
// Because our `getOlderMessages` fetch above didn't specify a receivedAt, we got
|
||||||
// the most recent N messages in the conversation. If it has a conflict with
|
// the most recent N messages in the conversation. If it has a conflict with
|
||||||
// metrics, fetched a bit before, that's likely a race condition. So we tell our
|
// metrics, fetched a bit before, that's likely a race condition. So we tell our
|
||||||
|
@ -1641,6 +1658,8 @@ export class ConversationModel extends window.Backbone
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async loadOlderMessages(oldestMessageId: string): Promise<void> {
|
async loadOlderMessages(oldestMessageId: string): Promise<void> {
|
||||||
|
const logId = `loadOlderMessages/${this.idForLogging()}`;
|
||||||
|
|
||||||
const { messagesAdded, setMessageLoadingState, repairOldestMessage } =
|
const { messagesAdded, setMessageLoadingState, repairOldestMessage } =
|
||||||
window.reduxActions.conversations;
|
window.reduxActions.conversations;
|
||||||
const conversationId = this.id;
|
const conversationId = this.id;
|
||||||
|
@ -1654,9 +1673,7 @@ export class ConversationModel extends window.Backbone
|
||||||
try {
|
try {
|
||||||
const message = await getMessageById(oldestMessageId);
|
const message = await getMessageById(oldestMessageId);
|
||||||
if (!message) {
|
if (!message) {
|
||||||
throw new Error(
|
throw new Error(`${logId}: failed to load message ${oldestMessageId}`);
|
||||||
`loadOlderMessages: failed to load message ${oldestMessageId}`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const receivedAt = message.received_at;
|
const receivedAt = message.received_at;
|
||||||
|
@ -1672,13 +1689,18 @@ export class ConversationModel extends window.Backbone
|
||||||
});
|
});
|
||||||
|
|
||||||
if (models.length < 1) {
|
if (models.length < 1) {
|
||||||
log.warn('loadOlderMessages: requested, but loaded no messages');
|
log.warn(`${logId}: requested, but loaded no messages`);
|
||||||
repairOldestMessage(conversationId);
|
repairOldestMessage(conversationId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cleaned = await this.cleanModels(models);
|
const cleaned = await this.cleanModels(models);
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
`${logId}: loaded ${cleaned.length} messages, ` +
|
||||||
|
`first timestamp=${cleaned.at(0)?.get('sent_at')}`
|
||||||
|
);
|
||||||
|
|
||||||
messagesAdded({
|
messagesAdded({
|
||||||
conversationId,
|
conversationId,
|
||||||
messages: cleaned.map((messageModel: MessageModel) => ({
|
messages: cleaned.map((messageModel: MessageModel) => ({
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue