mirror of
https://github.com/zulip/zulip.git
synced 2025-11-16 20:02:15 +00:00
retention: Eliminate join with Recipient table when archiving DMs.
We can use the is_channel_message column instead of doing the join to filter on recipient type.
This commit is contained in:
committed by
Tim Abbott
parent
fd4104f365
commit
4e3ec77a0f
@@ -228,18 +228,15 @@ def move_expired_direct_messages_to_archive(
|
|||||||
assert message_retention_days != -1
|
assert message_retention_days != -1
|
||||||
check_date = timezone_now() - timedelta(days=message_retention_days)
|
check_date = timezone_now() - timedelta(days=message_retention_days)
|
||||||
|
|
||||||
recipient_types = (Recipient.PERSONAL, Recipient.DIRECT_MESSAGE_GROUP)
|
|
||||||
|
|
||||||
# Archive expired direct Messages in the realm, including cross-realm messages.
|
# Archive expired direct Messages in the realm, including cross-realm messages.
|
||||||
# Uses index: zerver_message_realm_recipient_date_sent
|
# Uses index: zerver_message_realm_date_sent
|
||||||
query = SQL(
|
query = SQL(
|
||||||
"""
|
"""
|
||||||
INSERT INTO zerver_archivedmessage ({dst_fields}, archive_transaction_id)
|
INSERT INTO zerver_archivedmessage ({dst_fields}, archive_transaction_id)
|
||||||
SELECT {src_fields}, {archive_transaction_id}
|
SELECT {src_fields}, {archive_transaction_id}
|
||||||
FROM zerver_message
|
FROM zerver_message
|
||||||
INNER JOIN zerver_recipient ON zerver_recipient.id = zerver_message.recipient_id
|
|
||||||
WHERE zerver_message.realm_id = {realm_id}
|
WHERE zerver_message.realm_id = {realm_id}
|
||||||
AND zerver_recipient.type in {recipient_types}
|
AND NOT zerver_message.is_channel_message
|
||||||
AND zerver_message.date_sent < {check_date}
|
AND zerver_message.date_sent < {check_date}
|
||||||
LIMIT {chunk_size}
|
LIMIT {chunk_size}
|
||||||
ON CONFLICT (id) DO UPDATE SET archive_transaction_id = {archive_transaction_id}
|
ON CONFLICT (id) DO UPDATE SET archive_transaction_id = {archive_transaction_id}
|
||||||
@@ -252,7 +249,6 @@ def move_expired_direct_messages_to_archive(
|
|||||||
type=ArchiveTransaction.RETENTION_POLICY_BASED,
|
type=ArchiveTransaction.RETENTION_POLICY_BASED,
|
||||||
realm=realm,
|
realm=realm,
|
||||||
realm_id=Literal(realm.id),
|
realm_id=Literal(realm.id),
|
||||||
recipient_types=Literal(recipient_types),
|
|
||||||
check_date=Literal(check_date.isoformat()),
|
check_date=Literal(check_date.isoformat()),
|
||||||
chunk_size=chunk_size,
|
chunk_size=chunk_size,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ class Message(AbstractMessage):
|
|||||||
name="zerver_message_realm_sender_recipient",
|
name="zerver_message_realm_sender_recipient",
|
||||||
),
|
),
|
||||||
models.Index(
|
models.Index(
|
||||||
# For analytics queries
|
# For analytics and retention queries
|
||||||
"realm_id",
|
"realm_id",
|
||||||
"date_sent",
|
"date_sent",
|
||||||
name="zerver_message_realm_date_sent",
|
name="zerver_message_realm_date_sent",
|
||||||
|
|||||||
Reference in New Issue
Block a user