Improve tap-to-view deletion query

This commit is contained in:
automated-signal 2024-11-22 13:13:20 -06:00 committed by trevor-signal
parent c3cd61d658
commit 4d7ed49dfd
2 changed files with 18 additions and 8 deletions

View file

@ -6,6 +6,7 @@ import { DataReader } from '../sql/Client';
import { clearTimeoutIfNecessary } from '../util/clearTimeoutIfNecessary';
import { getMessageQueueTime } from '../util/getMessageQueueTime';
import * as Errors from '../types/errors';
import { strictAssert } from '../util/assert';
async function eraseTapToViewMessages() {
try {
@ -15,8 +16,15 @@ async function eraseTapToViewMessages() {
const maxTimestamp = Date.now() - getMessageQueueTime();
const messages =
await DataReader.getTapToViewMessagesNeedingErase(maxTimestamp);
await Promise.all(
messages.map(async fromDB => {
strictAssert(fromDB.isViewOnce === true, 'Must be view once');
strictAssert(
(fromDB.received_at_ms ?? 0) <= maxTimestamp,
'Must be older than maxTimestamp'
);
const message = window.MessageCache.__DEPRECATED$register(
fromDB.id,
fromDB,
@ -55,13 +63,14 @@ class TapToViewMessagesDeletionService {
}
private async checkTapToViewMessages() {
const receivedAt =
const receivedAtMsForOldestTapToViewMessage =
await DataReader.getNextTapToViewMessageTimestampToAgeOut();
if (!receivedAt) {
if (!receivedAtMsForOldestTapToViewMessage) {
return;
}
const nextCheck = receivedAt + getMessageQueueTime();
const nextCheck =
receivedAtMsForOldestTapToViewMessage + getMessageQueueTime();
window.SignalContext.log.info(
'checkTapToViewMessages: next check at',
new Date(nextCheck).toISOString()

View file

@ -4584,7 +4584,8 @@ function getNextTapToViewMessageTimestampToAgeOut(
`
SELECT json FROM messages
WHERE
isViewOnce = 1
-- we want this query to use the messages_view_once index rather than received_at
likelihood(isViewOnce = 1, 0.01)
AND (isErased IS NULL OR isErased != 1)
ORDER BY received_at ASC, sent_at ASC
LIMIT 1;
@ -4595,9 +4596,8 @@ function getNextTapToViewMessageTimestampToAgeOut(
if (!row) {
return undefined;
}
const data = jsonToObject<MessageType>(row.json);
const result = data.received_at_ms || data.received_at;
const result = data.received_at_ms;
return isNormalNumber(result) ? result : undefined;
}
@ -4613,8 +4613,9 @@ function getTapToViewMessagesNeedingErase(
WHERE
isViewOnce = 1
AND (isErased IS NULL OR isErased != 1)
AND received_at <= $maxTimestamp
ORDER BY received_at ASC, sent_at ASC;
AND (
IFNULL(json ->> '$.received_at_ms', 0) <= $maxTimestamp
)
`
)
.all({