database: no longer store remote actors indefinitely in JSON-LD database, use hot cache instead

This commit is contained in:
kaniini 2018-11-18 14:25:04 +00:00
parent 692cf89195
commit 5871c40667
2 changed files with 12 additions and 3 deletions

View file

@ -20,6 +20,9 @@ for inbox in following:
following.remove(inbox) following.remove(inbox)
DATABASE['relay-list'] = following DATABASE['relay-list'] = following
if 'actors' in DATABASE:
DATABASE.pop('actors')
async def database_save(): async def database_save():
while True: while True:
with open(CONFIG['db'], 'w') as f: with open(CONFIG['db'], 'w') as f:

View file

@ -1,9 +1,16 @@
import aiohttp import aiohttp
from .database import DATABASE from . import CONFIG
from .http_debug import http_debug from .http_debug import http_debug
from cachetools import TTLCache
CACHE_SIZE = CONFIG.get('cache-size', 16384)
CACHE_TTL = CONFIG.get('cache-ttl', 3600)
ACTORS = TTLCache(CACHE_SIZE, CACHE_TTL)
ACTORS = DATABASE.get("actors", {})
async def fetch_actor(uri, force=False): async def fetch_actor(uri, force=False):
if uri in ACTORS and not force: if uri in ACTORS and not force:
return ACTORS[uri] return ACTORS[uri]
@ -11,5 +18,4 @@ async def fetch_actor(uri, force=False):
async with aiohttp.ClientSession(trace_configs=[http_debug()]) as session: async with aiohttp.ClientSession(trace_configs=[http_debug()]) as session:
async with session.get(uri, headers={'Accept': 'application/activity+json'}) as resp: async with session.get(uri, headers={'Accept': 'application/activity+json'}) as resp:
ACTORS[uri] = (await resp.json(encoding='utf-8', content_type=None)) ACTORS[uri] = (await resp.json(encoding='utf-8', content_type=None))
DATABASE["actors"] = ACTORS
return ACTORS[uri] return ACTORS[uri]