From 94cff7c2c8f19a235ba8bc254cce7082382abd95 Mon Sep 17 00:00:00 2001 From: Natty Date: Tue, 16 Jan 2024 13:04:53 +0100 Subject: [PATCH] Skip non-cacheable scenarios --- src/service/emoji_cache.rs | 34 ++++++++++++++++++++-------------- src/service/instance_cache.rs | 14 +++++++++++++- src/service/mod.rs | 1 + 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/service/emoji_cache.rs b/src/service/emoji_cache.rs index dbba24b..c266486 100644 --- a/src/service/emoji_cache.rs +++ b/src/service/emoji_cache.rs @@ -98,13 +98,16 @@ impl EmojiCacheService { } drop(read); - let emoji = self - .db - .fetch_many_emojis(&to_resolve, host) - .await? - .into_iter() - .map(Arc::new) - .collect::>(); + let emoji = if to_resolve.is_empty() { + Vec::new() + } else { + self.db + .fetch_many_emojis(&to_resolve, host) + .await? + .into_iter() + .map(Arc::new) + .collect::>() + }; resolved.extend(emoji.iter().cloned()); let mut write = self.cache.lock().await; @@ -148,13 +151,16 @@ impl EmojiCacheService { } drop(read); - let emoji = self - .db - .fetch_many_tagged_emojis(&to_resolve) - .await? - .into_iter() - .map(Arc::new) - .collect::>(); + let emoji = if to_resolve.is_empty() { + Vec::new() + } else { + self.db + .fetch_many_tagged_emojis(&to_resolve) + .await? + .into_iter() + .map(Arc::new) + .collect::>() + }; resolved.extend(emoji.iter().cloned()); let mut write = self.cache.lock().await; diff --git a/src/service/instance_cache.rs b/src/service/instance_cache.rs index 592ead3..879a1f8 100644 --- a/src/service/instance_cache.rs +++ b/src/service/instance_cache.rs @@ -1,6 +1,7 @@ use crate::web::ApiError; use lru::LruCache; use magnetar_calckey_model::{ck, CalckeyDbError, CalckeyModel}; +use magnetar_common::config::MagnetarConfig; use std::sync::Arc; use std::time::{Duration, Instant}; use strum::EnumVariantNames; @@ -44,10 +45,16 @@ pub struct RemoteInstanceCacheService { cache: Mutex>, lifetime_max: Duration, db: CalckeyModel, + config: &'static MagnetarConfig, } impl RemoteInstanceCacheService { - pub(super) fn new(db: CalckeyModel, cache_size: usize, entry_lifetime: Duration) -> Self { + pub(super) fn new( + db: CalckeyModel, + config: &'static MagnetarConfig, + cache_size: usize, + entry_lifetime: Duration, + ) -> Self { const CACHE_SIZE: usize = 256; Self { @@ -58,6 +65,7 @@ impl RemoteInstanceCacheService { )), lifetime_max: entry_lifetime, db, + config, } } @@ -65,6 +73,10 @@ impl RemoteInstanceCacheService { &self, host: &str, ) -> Result>, RemoteInstanceCacheError> { + if host == self.config.networking.host { + return Ok(None); + } + let mut read = self.cache.lock().await; if let Some(item) = read.peek(host) { if item.created + self.lifetime_max >= Instant::now() { diff --git a/src/service/mod.rs b/src/service/mod.rs index 91c0cc3..d66aa05 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -51,6 +51,7 @@ impl MagnetarService { let emoji_cache = emoji_cache::EmojiCacheService::new(db.clone()); let remote_instance_cache = instance_cache::RemoteInstanceCacheService::new( db.clone(), + config, 256, Duration::from_secs(100), );