From 0d25823e5ec93ab441b0a3bf2db98261ce84612c Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 29 Aug 2021 10:26:36 +0200 Subject: [PATCH] dedup all timeline notifications - closes #9686 --- modules/timeline/src/main/Env.scala | 2 +- .../timeline/src/main/{Push.scala => TimelinePush.scala} | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) rename modules/timeline/src/main/{Push.scala => TimelinePush.scala} (89%) diff --git a/modules/timeline/src/main/Env.scala b/modules/timeline/src/main/Env.scala index cf6f897c68..71fdee8b75 100644 --- a/modules/timeline/src/main/Env.scala +++ b/modules/timeline/src/main/Env.scala @@ -50,7 +50,7 @@ final class Env( } } - system.actorOf(Props(wire[Push]), name = config.userActorName) + system.actorOf(Props(wire[TimelinePush]), name = config.userActorName) lila.common.Bus.subscribeFun("shadowban") { case lila.hub.actorApi.mod.Shadowban(userId, true) => entryApi.removeRecentFollowsBy(userId).unit diff --git a/modules/timeline/src/main/Push.scala b/modules/timeline/src/main/TimelinePush.scala similarity index 89% rename from modules/timeline/src/main/Push.scala rename to modules/timeline/src/main/TimelinePush.scala index ab3d4144fb..ec93eb2ccd 100644 --- a/modules/timeline/src/main/Push.scala +++ b/modules/timeline/src/main/TimelinePush.scala @@ -2,6 +2,7 @@ package lila.timeline import akka.actor._ import org.joda.time.DateTime +import scala.concurrent.duration._ import lila.common.config.Max import lila.hub.actorApi.timeline.propagation._ @@ -9,7 +10,7 @@ import lila.hub.actorApi.timeline.{ Atom, Propagate, ReloadTimelines } import lila.security.Permission import lila.user.{ User, UserRepo } -final private[timeline] class Push( +final private[timeline] class TimelinePush( relationApi: lila.relation.RelationApi, userRepo: UserRepo, entryApi: EntryApi, @@ -18,8 +19,10 @@ final private[timeline] class Push( implicit def ec = context.dispatcher + private val dedup = lila.memo.OnceEvery.hashCode[Atom](10 minutes) + def receive = { case Propagate(data, propagations) => - propagate(propagations) flatMap { users => + if (dedup(data)) propagate(propagations) flatMap { users => unsubApi.filterUnsub(data.channel, users) } foreach { users => if (users.nonEmpty)