From a86388f6de2941f078986ac95741524e7bef035b Mon Sep 17 00:00:00 2001
From: Jack Robison <jackrobison@lbry.io>
Date: Tue, 21 Jun 2022 14:26:08 -0400
Subject: [PATCH] add resolved url lru cache

---
 hub/herald/session.py | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/hub/herald/session.py b/hub/herald/session.py
index 1279113..aa2f4b9 100644
--- a/hub/herald/session.py
+++ b/hub/herald/session.py
@@ -198,8 +198,7 @@ class SessionManager:
         self.cur_group = SessionGroup(0)
         self.txs_sent = 0
         self.start_time = time.time()
-        self.resolve_outputs_cache = {}
-        self.resolve_cache = {}
+        self.resolve_cache = LRUCacheWithMetrics(16384, metric_name='resolved_url', namespace=NAMESPACE)
         self.notified_height: typing.Optional[int] = None
         # Cache some idea of room to avoid recounting on each subscription
         self.subs_room = 0
@@ -220,7 +219,6 @@ class SessionManager:
         self.history_tx_info_cache = LRUCacheWithMetrics(2 ** 19, metric_name='history_tx', namespace=NAMESPACE)
 
     def clear_caches(self):
-        self.resolve_outputs_cache.clear()
         self.resolve_cache.clear()
 
     def update_history_caches(self, touched_hashXs: typing.List[bytes]):
@@ -1274,17 +1272,15 @@ class LBRYElectrumX(asyncio.Protocol):
             self.session_manager.executor_time_metric.observe(time.perf_counter() - start)
 
     async def claimtrie_resolve(self, *urls) -> str:
-        # sorted_urls = tuple(sorted(urls))
         self.session_manager.urls_to_resolve_count_metric.inc(len(urls))
         try:
-            # if sorted_urls in self.session_manager.resolve_outputs_cache:
-            #     return self.session_manager.resolve_outputs_cache[sorted_urls]
             rows, extra = [], []
             resolved = {}
             needed = defaultdict(list)
             for idx, url in enumerate(urls):
-                if url in self.session_manager.resolve_cache:
-                    stream, channel, repost, reposted_channel = self.session_manager.resolve_cache[url]
+                cached = self.session_manager.resolve_cache.get(url)
+                if cached:
+                    stream, channel, repost, reposted_channel = cached
                     resolved[url] = stream, channel, repost, reposted_channel
                 else:
                     needed[url].append(idx)
@@ -1321,9 +1317,7 @@ class LBRYElectrumX(asyncio.Protocol):
                         extra.append(repost)
                     if reposted_channel:
                         extra.append(reposted_channel)
-                # await asyncio.sleep(0)
 
-            # self.session_manager.resolve_outputs_cache[sorted_urls] = result = Outputs.to_base64(rows, extra)
             return Outputs.to_base64(rows, extra)
         finally:
             self.session_manager.resolved_url_count_metric.inc(len(urls))