From 0f1535161c5e6634e195d4b1a83a64e8d67497ef Mon Sep 17 00:00:00 2001 From: Adarnof Date: Wed, 21 Feb 2018 17:50:56 -0500 Subject: [PATCH] Handle HTTP429 on nickname API endpoint Closes #971 (cherry picked from commit a64dda2a2e64d1629f389adcf7ce67d15c3085bd) --- services/modules/discord/manager.py | 1 + services/modules/discord/tasks.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/services/modules/discord/manager.py b/services/modules/discord/manager.py index e87f7e29..9fc4d9af 100644 --- a/services/modules/discord/manager.py +++ b/services/modules/discord/manager.py @@ -212,6 +212,7 @@ class DiscordOAuthManager: return None @staticmethod + @api_backoff def update_nickname(user_id, nickname): try: nickname = DiscordOAuthManager._sanitize_name(nickname) diff --git a/services/modules/discord/tasks.py b/services/modules/discord/tasks.py index 03dff349..01bfa0ca 100644 --- a/services/modules/discord/tasks.py +++ b/services/modules/discord/tasks.py @@ -97,7 +97,7 @@ class DiscordTasks: @staticmethod @app.task(bind=True, name='discord.update_nickname') - def update_nickname(self, pk): + def update_nickname(task_self, pk): user = User.objects.get(pk=pk) logger.debug("Updating discord nickname for user %s" % user) if DiscordTasks.has_account(user): @@ -105,10 +105,14 @@ class DiscordTasks: logger.debug("Updating user %s discord nickname to %s" % (user, character.character_name)) try: DiscordOAuthManager.update_nickname(user.discord.uid, character.character_name) + except DiscordApiBackoff as bo: + logger.info("Discord nickname update API back off for %s, " + "retrying in %s seconds" % (user, bo.retry_after_seconds)) + raise task_self.retry(countdown=bo.retry_after_seconds) except Exception as e: - if self: + if task_self: logger.exception("Discord nickname sync failed for %s, retrying in 10 mins" % user) - raise self.retry(countdown=60 * 10) + raise task_self.retry(countdown=60 * 10) else: # Rethrow raise e