aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Numerlor <[email protected]>2021-01-23 06:38:17 +0100
committerGravatar Numerlor <[email protected]>2021-01-23 06:38:17 +0100
commit9695d7d8022729efe8fab36eb7ef854aeece8163 (patch)
treea87fb2025255bcb6397c29336cefed33d9885dd7
parentWrap 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.py13
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.