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 { clearTimeoutIfNecessary } from '../util/clearTimeoutIfNecessary';
|
||||||
import { getMessageQueueTime } from '../util/getMessageQueueTime';
|
import { getMessageQueueTime } from '../util/getMessageQueueTime';
|
||||||
import * as Errors from '../types/errors';
|
import * as Errors from '../types/errors';
|
||||||
|
import { strictAssert } from '../util/assert';
|
||||||
|
|
||||||
async function eraseTapToViewMessages() {
|
async function eraseTapToViewMessages() {
|
||||||
try {
|
try {
|
||||||
|
@ -15,8 +16,15 @@ async function eraseTapToViewMessages() {
|
||||||
const maxTimestamp = Date.now() - getMessageQueueTime();
|
const maxTimestamp = Date.now() - getMessageQueueTime();
|
||||||
const messages =
|
const messages =
|
||||||
await DataReader.getTapToViewMessagesNeedingErase(maxTimestamp);
|
await DataReader.getTapToViewMessagesNeedingErase(maxTimestamp);
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
messages.map(async fromDB => {
|
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(
|
const message = window.MessageCache.__DEPRECATED$register(
|
||||||
fromDB.id,
|
fromDB.id,
|
||||||
fromDB,
|
fromDB,
|
||||||
|
@ -55,13 +63,14 @@ class TapToViewMessagesDeletionService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async checkTapToViewMessages() {
|
private async checkTapToViewMessages() {
|
||||||
const receivedAt =
|
const receivedAtMsForOldestTapToViewMessage =
|
||||||
await DataReader.getNextTapToViewMessageTimestampToAgeOut();
|
await DataReader.getNextTapToViewMessageTimestampToAgeOut();
|
||||||
if (!receivedAt) {
|
if (!receivedAtMsForOldestTapToViewMessage) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextCheck = receivedAt + getMessageQueueTime();
|
const nextCheck =
|
||||||
|
receivedAtMsForOldestTapToViewMessage + getMessageQueueTime();
|
||||||
window.SignalContext.log.info(
|
window.SignalContext.log.info(
|
||||||
'checkTapToViewMessages: next check at',
|
'checkTapToViewMessages: next check at',
|
||||||
new Date(nextCheck).toISOString()
|
new Date(nextCheck).toISOString()
|
||||||
|
|
|
@ -4584,7 +4584,8 @@ function getNextTapToViewMessageTimestampToAgeOut(
|
||||||
`
|
`
|
||||||
SELECT json FROM messages
|
SELECT json FROM messages
|
||||||
WHERE
|
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)
|
AND (isErased IS NULL OR isErased != 1)
|
||||||
ORDER BY received_at ASC, sent_at ASC
|
ORDER BY received_at ASC, sent_at ASC
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -4595,9 +4596,8 @@ function getNextTapToViewMessageTimestampToAgeOut(
|
||||||
if (!row) {
|
if (!row) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = jsonToObject<MessageType>(row.json);
|
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;
|
return isNormalNumber(result) ? result : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4613,8 +4613,9 @@ function getTapToViewMessagesNeedingErase(
|
||||||
WHERE
|
WHERE
|
||||||
isViewOnce = 1
|
isViewOnce = 1
|
||||||
AND (isErased IS NULL OR isErased != 1)
|
AND (isErased IS NULL OR isErased != 1)
|
||||||
AND received_at <= $maxTimestamp
|
AND (
|
||||||
ORDER BY received_at ASC, sent_at ASC;
|
IFNULL(json ->> '$.received_at_ms', 0) <= $maxTimestamp
|
||||||
|
)
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
.all({
|
.all({
|
||||||
|
|
Loading…
Add table
Reference in a new issue