From df9787dd7a7ae29ca86808a132881d77e743b948 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 2 Aug 2021 18:14:44 -0700 Subject: [PATCH] Removes stale data before doing repopulation This probably is only an issue when there are very few users, like my test instance --- bookwyrm/redis_store.py | 4 ++++ bookwyrm/suggested_users.py | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/bookwyrm/redis_store.py b/bookwyrm/redis_store.py index fa5c73a5..578cb550 100644 --- a/bookwyrm/redis_store.py +++ b/bookwyrm/redis_store.py @@ -65,6 +65,10 @@ class RedisStore(ABC): pipeline = r.pipeline() queryset = self.get_objects_for_store(store) + # first, remove everything currently in it + pipeline.delete(store) + + # now, add everything back for obj in queryset[: self.max_length]: pipeline.zadd(store, self.get_value(obj)) diff --git a/bookwyrm/suggested_users.py b/bookwyrm/suggested_users.py index 2aee6d88..e588bc9e 100644 --- a/bookwyrm/suggested_users.py +++ b/bookwyrm/suggested_users.py @@ -1,5 +1,6 @@ """ store recommended follows in redis """ import math +import logging from django.dispatch import receiver from django.db.models import signals, Count, Q @@ -8,6 +9,9 @@ from bookwyrm.redis_store import RedisStore, r from bookwyrm.tasks import app +logger = logging.getLogger(__name__) + + class SuggestedUsers(RedisStore): """suggested users for a user""" @@ -84,7 +88,12 @@ class SuggestedUsers(RedisStore): # annotate users with mutuals and shared book counts for user_id, rank in values[:5]: counts = self.get_counts_from_rank(rank) - user = models.User.objects.get(id=user_id) + try: + user = models.User.objects.get(id=user_id) + except models.User.DoesNotExist as err: + # if this happens, the suggestions are janked way up + logger.exception(err) + continue user.mutuals = counts["mutuals"] user.shared_books = counts["shared_books"] results.append(user)