From d03dc8914daf38805765e027387e7d6d991ad058 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 4 Jan 2019 14:42:12 -0500 Subject: [PATCH] xp tracker: try to not look up the same user too frequently --- .../http/service/xp/XpTrackerService.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java b/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java index d35d81fcf6..6764449380 100644 --- a/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java +++ b/http-service/src/main/java/net/runelite/http/service/xp/XpTrackerService.java @@ -24,6 +24,9 @@ */ package net.runelite.http.service.xp; +import com.google.common.hash.BloomFilter; +import com.google.common.hash.Funnels; +import java.nio.charset.Charset; import java.time.Duration; import java.time.Instant; import java.util.concurrent.ExecutionException; @@ -54,6 +57,7 @@ public class XpTrackerService @Autowired private HiscoreService hiscoreService; + private BloomFilter usernameFilter = createFilter(); private String nextUsername; public void update(String username) throws ExecutionException @@ -64,7 +68,13 @@ public class XpTrackerService public void tryUpdate(String username) { + if (nextUsername != null || usernameFilter.mightContain(username)) + { + return; + } + nextUsername = username; + usernameFilter.put(username); } public void update(String username, HiscoreResult hiscoreResult) @@ -212,4 +222,18 @@ public class XpTrackerService HiscoreResult hiscoreResult = hiscoreService.lookupUsername(next, HiscoreEndpoint.NORMAL); update(next, hiscoreResult); } + + @Scheduled(fixedDelay = 60 * 60 * 1000) // one hour + public void clearFilter() + { + usernameFilter = createFilter(); + } + + private static BloomFilter createFilter() + { + return BloomFilter.create( + Funnels.stringFunnel(Charset.defaultCharset()), + 100_000 + ); + } }