mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 08:26:11 +00:00
scheduled_messages: Send event on commit in try_deliver_..._message.
Earlier, we were using 'send_event' in 'try_deliver_one_scheduled_messages' which can lead to a situation where we enqueue events but the action function fails at a later stage. Events should not be sent until we know we're not rolling back. Fixes part of #30489.
This commit is contained in:
committed by
Tim Abbott
parent
567615a484
commit
b0390ce1ee
@@ -24,7 +24,7 @@ from zerver.lib.scheduled_messages import access_scheduled_message
|
|||||||
from zerver.lib.string_validation import check_stream_topic
|
from zerver.lib.string_validation import check_stream_topic
|
||||||
from zerver.models import Client, Realm, ScheduledMessage, Subscription, UserProfile
|
from zerver.models import Client, Realm, ScheduledMessage, Subscription, UserProfile
|
||||||
from zerver.models.users import get_system_bot
|
from zerver.models.users import get_system_bot
|
||||||
from zerver.tornado.django_api import send_event, send_event_on_commit
|
from zerver.tornado.django_api import send_event_on_commit
|
||||||
|
|
||||||
SCHEDULED_MESSAGE_LATE_CUTOFF_MINUTES = 10
|
SCHEDULED_MESSAGE_LATE_CUTOFF_MINUTES = 10
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@ def notify_update_scheduled_message(
|
|||||||
"op": "update",
|
"op": "update",
|
||||||
"scheduled_message": scheduled_message.to_dict(),
|
"scheduled_message": scheduled_message.to_dict(),
|
||||||
}
|
}
|
||||||
send_event(user_profile.realm, event, [user_profile.id])
|
send_event_on_commit(user_profile.realm, event, [user_profile.id])
|
||||||
|
|
||||||
|
|
||||||
def edit_scheduled_message(
|
def edit_scheduled_message(
|
||||||
@@ -252,7 +252,7 @@ def notify_remove_scheduled_message(user_profile: UserProfile, scheduled_message
|
|||||||
"op": "remove",
|
"op": "remove",
|
||||||
"scheduled_message_id": scheduled_message_id,
|
"scheduled_message_id": scheduled_message_id,
|
||||||
}
|
}
|
||||||
send_event(user_profile.realm, event, [user_profile.id])
|
send_event_on_commit(user_profile.realm, event, [user_profile.id])
|
||||||
|
|
||||||
|
|
||||||
def delete_scheduled_message(user_profile: UserProfile, scheduled_message_id: int) -> None:
|
def delete_scheduled_message(user_profile: UserProfile, scheduled_message_id: int) -> None:
|
||||||
@@ -356,7 +356,7 @@ def send_failed_scheduled_message_notification(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic(durable=True)
|
||||||
def try_deliver_one_scheduled_message(logger: logging.Logger) -> bool:
|
def try_deliver_one_scheduled_message(logger: logging.Logger) -> bool:
|
||||||
# Returns whether there was a scheduled message to attempt
|
# Returns whether there was a scheduled message to attempt
|
||||||
# delivery on, regardless of whether delivery succeeded.
|
# delivery on, regardless of whether delivery succeeded.
|
||||||
|
|||||||
Reference in New Issue
Block a user