Don't resync stories on new sub if it already has archive subscribers.

This commit is contained in:
Samuel Clay 2024-06-30 20:52:02 -04:00
parent 3f094cd585
commit aa84a2c1b1
2 changed files with 17 additions and 6 deletions

View file

@ -465,6 +465,11 @@ class UserSubscription(models.Model):
else:
message = "This address does not point to an RSS feed or a website with an RSS feed."
else:
allow_skip_resync = False
if user.profile.is_archive and feed.active_archive_subscribers != 0:
# Skip resync if there are already active archive subscribers
allow_skip_resync = True
us, subscription_created = cls.objects.get_or_create(
feed=feed,
user=user,
@ -499,7 +504,7 @@ class UserSubscription(models.Model):
MActivity.new_feed_subscription(user_id=user.pk, feed_id=feed.pk, feed_title=feed.title)
feed.setup_feed_for_premium_subscribers()
feed.setup_feed_for_premium_subscribers(allow_skip_resync=allow_skip_resync)
feed.count_subscribers()
r = redis.Redis(connection_pool=settings.REDIS_PUBSUB_POOL)

View file

@ -368,8 +368,8 @@ class Feed(models.Model):
self.search_indexed = True
self.save()
def sync_redis(self):
return MStory.sync_feed_redis(self.pk)
def sync_redis(self, allow_skip_resync=False):
return MStory.sync_feed_redis(self.pk, allow_skip_resync=allow_skip_resync)
def expire_redis(self, r=None):
if not r:
@ -710,10 +710,10 @@ class Feed(models.Model):
for feed in feeds:
feed.setup_feed_for_premium_subscribers()
def setup_feed_for_premium_subscribers(self):
def setup_feed_for_premium_subscribers(self, allow_skip_resync=False):
self.count_subscribers()
self.set_next_scheduled_update(verbose=settings.DEBUG)
self.sync_redis()
self.sync_redis(allow_skip_resync=allow_skip_resync)
def check_feed_link_for_feed_address(self):
@timelimit(10)
@ -3213,11 +3213,17 @@ class MStory(mongo.Document):
r.zrem("zF:%s" % self.story_feed_id, self.story_hash)
@classmethod
def sync_feed_redis(cls, story_feed_id):
def sync_feed_redis(cls, story_feed_id, allow_skip_resync=False):
r = redis.Redis(connection_pool=settings.REDIS_STORY_HASH_POOL)
feed = Feed.get_by_id(story_feed_id)
stories = cls.objects.filter(story_feed_id=story_feed_id, story_date__gte=feed.unread_cutoff)
if allow_skip_resync and stories.count() > 1000:
logging.debug(
f" ---> [{feed.log_title[:30]}] ~FYSkipping resync of ~SB{stories.count()}~SN stories because it already had archive subscribers"
)
return
# Don't delete redis keys because they take time to rebuild and subs can
# be counted incorrectly during that time.
# r.delete('F:%s' % story_feed_id)