scheduled_messages: Store the final delivered message ID.

This could be useful for debugging problems with the system
operationally.
This commit is contained in:
Tim Abbott 2023-05-08 18:47:07 -07:00
parent fe9656237e
commit 835f62617e
4 changed files with 13 additions and 4 deletions

View File

@ -230,10 +230,10 @@ def send_scheduled_message(scheduled_message: ScheduledMessage) -> None:
scheduled_message.realm,
)
# TODO: Store the resulting message ID on the scheduled_message object.
do_send_messages([send_request])
message_id = do_send_messages([send_request])[0]
scheduled_message.delivered_message_id = message_id
scheduled_message.delivered = True
scheduled_message.save(update_fields=["delivered"])
scheduled_message.save(update_fields=["delivered", "delivered_message_id"])
notify_remove_scheduled_message(scheduled_message.sender, scheduled_message.id)

View File

@ -1,5 +1,6 @@
# Generated by Django 4.2 on 2023-05-05 00:18
import django.db.models.deletion
from django.db import migrations, models
@ -19,4 +20,11 @@ class Migration(migrations.Migration):
name="failure_message",
field=models.TextField(null=True),
),
migrations.AddField(
model_name="scheduledmessage",
name="delivered_message",
field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.CASCADE, to="zerver.message"
),
),
]

View File

@ -4325,6 +4325,7 @@ class ScheduledMessage(models.Model):
realm = models.ForeignKey(Realm, on_delete=CASCADE)
scheduled_timestamp = models.DateTimeField(db_index=True)
delivered = models.BooleanField(default=False)
delivered_message = models.ForeignKey(Message, null=True, on_delete=CASCADE)
has_attachment = models.BooleanField(default=False, db_index=True)
# Metadata for messages that failed to send when their scheduled

View File

@ -1073,7 +1073,7 @@ class TestDoDeleteMessages(ZulipTestCase):
message_ids = [self.send_stream_message(cordelia, "Verona", str(i)) for i in range(0, 10)]
messages = Message.objects.filter(id__in=message_ids)
with self.assert_database_query_count(19):
with self.assert_database_query_count(20):
do_delete_messages(realm, messages)
self.assertFalse(Message.objects.filter(id__in=message_ids).exists())