Improve tap-to-view deletion query
This commit is contained in:
parent
c3cd61d658
commit
4d7ed49dfd
2 changed files with 18 additions and 8 deletions
|
@ -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()
|
||||
|
|
|
@ -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({
|
||||
|
|
Loading…
Add table
Reference in a new issue