diff options
author | 2021-01-23 06:38:17 +0100 | |
---|---|---|
committer | 2021-01-23 06:38:17 +0100 | |
commit | 9695d7d8022729efe8fab36eb7ef854aeece8163 (patch) | |
tree | a87fb2025255bcb6397c29336cefed33d9885dd7 | |
parent | Wrap whole string in shorten (diff) |
Cancel current task inside coro to not keep track of attempts manually
The scheduler shields the coroutine from cancellation so we can cancel
the scheduler's tasks inside of it to avoid the error from multiple
tasks with the same id trying to be scheduled which the manual tracking
of attempts solved
Co-authored-by: MarkKoz <[email protected]>
-rw-r--r-- | bot/exts/info/doc/_cog.py | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/bot/exts/info/doc/_cog.py b/bot/exts/info/doc/_cog.py index a074d8daa..df076f162 100644 --- a/bot/exts/info/doc/_cog.py +++ b/bot/exts/info/doc/_cog.py @@ -66,7 +66,6 @@ class DocCog(commands.Cog): self.renamed_symbols = defaultdict(list) self.inventory_scheduler = Scheduler(self.__class__.__name__) - self.inventory_reschedule_attempts = defaultdict(int) self.refresh_event = asyncio.Event() self.refresh_event.set() @@ -136,16 +135,15 @@ class DocCog(commands.Cog): package = await fetch_inventory(inventory_url) if not package: - attempt = self.inventory_reschedule_attempts[package] - self.inventory_reschedule_attempts[package] += 1 - if attempt == 0: - delay = FETCH_RESCHEDULE_DELAY.first - else: + if api_package_name in self.inventory_scheduler: + self.inventory_scheduler.cancel(api_package_name) delay = FETCH_RESCHEDULE_DELAY.repeated + else: + delay = FETCH_RESCHEDULE_DELAY.first log.info(f"Failed to fetch inventory; attempting again in {delay} minutes.") self.inventory_scheduler.schedule_later( delay*60, - (attempt, api_package_name), + api_package_name, self.update_or_reschedule_inventory(api_package_name, base_url, inventory_url) ) else: @@ -211,7 +209,6 @@ class DocCog(commands.Cog): await self.symbol_get_event.wait() log.debug("Refreshing documentation inventory...") self.inventory_scheduler.cancel_all() - self.inventory_reschedule_attempts.clear() # Clear the old base URLS and doc symbols to ensure # that we start from a fresh local dataset. |