From 3164544f9527c84befecbb1412639f3efdaf2a97 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 23 Feb 2025 11:23:25 -0500 Subject: [PATCH] workaround race condition --- catalog/common/sites.py | 3 +++ takahe/ap_handlers.py | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/catalog/common/sites.py b/catalog/common/sites.py index 7b20efa7..d7502894 100644 --- a/catalog/common/sites.py +++ b/catalog/common/sites.py @@ -84,6 +84,9 @@ class AbstractSite: self.url = self.id_to_url(self.id_value) if self.id_value else None self.resource = None + def clear_cache(self): + self.resource = None + def get_resource(self) -> ExternalResource: if not self.resource: self.resource = ExternalResource.objects.filter(url=self.url).first() diff --git a/takahe/ap_handlers.py b/takahe/ap_handlers.py index 0084eab0..b2f8be0e 100644 --- a/takahe/ap_handlers.py +++ b/takahe/ap_handlers.py @@ -86,10 +86,15 @@ def _get_or_create_item(item_obj) -> Item | None: if not site: logger.warning(f"Site not found for {url}") return None - site.get_resource_ready() + try: + site.get_resource_ready() + except Exception: + # occationally race condition happens and resource is fetched by another process, + # so we clear cache to retry matching the resource + site.clear_cache() item = site.get_item() if not item: - logger.warning(f"Item not fetched for {url}") + logger.error(f"Item not fetched for {url}") return item