Skip to content

Commit 39fc5cc

Browse files
yashikakhuranaYashika Khurana
andauthored
feat(nimbus): Handle already reacted slack emojis (#15286)
Because - The Slack API returns already_reacted when an emoji reaction is already present on a message. This caused add_emoji_to_message_async to log an error and retry unnecessarily via Celery's retry backoff. This commit - Suppress already_reacted SlackApiError inline in add_emoji_to_slack_message Fixes #15226 Co-authored-by: Yashika Khurana <yashikakhurana@Yashikas-MBP.home.local>
1 parent 6878a83 commit 39fc5cc

2 files changed

Lines changed: 35 additions & 5 deletions

File tree

experimenter/experimenter/slack/notification.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,15 @@ def add_emoji_to_slack_message(experiment, alert_type, emoji_name):
273273
return False
274274

275275
# Add emoji reaction to the message
276-
client.reactions_add(
277-
channel=channel_id,
278-
name=emoji_name,
279-
timestamp=thread_ts,
280-
)
276+
try:
277+
client.reactions_add(
278+
channel=channel_id,
279+
name=emoji_name,
280+
timestamp=thread_ts,
281+
)
282+
except SlackApiError as e:
283+
if e.response.get("error") != SlackConstants.ErrorCode.ALREADY_REACTED:
284+
raise
281285

282286
logger.info(
283287
SlackConstants.SLACK_LOG_EMOJI_ADDED.format(

experimenter/experimenter/slack/tests/test_notification.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,32 @@ def test_add_emoji_to_slack_message_with_custom_emoji(self, mock_webclient):
895895
self.assertEqual(call_args.kwargs["name"], "tada")
896896
self.assertEqual(call_args.kwargs["timestamp"], "1234567890.123456")
897897

898+
@override_settings(SLACK_AUTH_TOKEN="test-token")
899+
@patch("experimenter.slack.notification.WebClient")
900+
def test_add_emoji_to_slack_message_already_reacted(self, mock_webclient):
901+
mock_client = Mock()
902+
mock_webclient.return_value = mock_client
903+
mock_client.reactions_add.side_effect = SlackApiError(
904+
message="already_reacted",
905+
response={"error": "already_reacted"},
906+
)
907+
908+
NimbusAlert.objects.create(
909+
experiment=self.experiment,
910+
alert_type=NimbusConstants.AlertType.LAUNCH_REQUEST,
911+
message="Test launch request",
912+
slack_thread_id="1234567890.123456",
913+
slack_channel_id="C123456",
914+
)
915+
916+
result = add_emoji_to_slack_message(
917+
self.experiment,
918+
NimbusConstants.AlertType.LAUNCH_REQUEST,
919+
"eyes",
920+
)
921+
922+
self.assertTrue(result)
923+
898924
@override_settings(SLACK_AUTH_TOKEN=None)
899925
def test_add_emoji_to_slack_message_not_configured(self):
900926
NimbusAlert.objects.create(

0 commit comments

Comments
 (0)