don't GC new users twice

deepcrayonfish^2
Thibault Duplessis 2021-11-26 18:59:09 +01:00
parent af4efb40b3
commit e00eca5112
1 changed files with 23 additions and 17 deletions

View File

@ -97,25 +97,31 @@ final class GarbageCollector(
private def isBadAccount(user: User) = user.lameOrTrollOrAlt private def isBadAccount(user: User) = user.lameOrTrollOrAlt
private def collect(user: User, email: EmailAddress, msg: => String): Funit = private def collect(user: User, email: EmailAddress, msg: => String): Funit = justOnce(user.id) ?? {
justOnce(user.id) ?? { hasBeenCollectedBefore(user) flatMap {
val armed = isArmed() case true => funit
val wait = (30 + ThreadLocalRandom.nextInt(300)).seconds case _ =>
val message = val armed = isArmed()
s"Will dispose of @${user.username} in $wait. Email: ${email.value}. $msg${!armed ?? " [SIMULATION]"}" val wait = (30 + ThreadLocalRandom.nextInt(300)).seconds
logger.info(message) val message =
noteApi.lichessWrite(user, s"Garbage collected because of $msg") s"Will dispose of @${user.username} in $wait. Email: ${email.value}. $msg${!armed ?? " [SIMULATION]"}"
irc.garbageCollector(message) >>- { logger.info(message)
if (armed) { noteApi.lichessWrite(user, s"Garbage collected because of $msg")
doInitialSb(user) irc.garbageCollector(message) >>- {
system.scheduler if (armed) {
.scheduleOnce(wait) { doInitialSb(user)
doCollect(user) system.scheduler
} .scheduleOnce(wait) {
.unit doCollect(user)
}
.unit
}
} }
}
} }
}
private def hasBeenCollectedBefore(user: User): Fu[Boolean] =
noteApi.byUserForMod(user.id).map(_.exists(_.text startsWith "Garbage collected"))
private def doInitialSb(user: User): Unit = private def doInitialSb(user: User): Unit =
Bus.publish( Bus.publish(