fix(perf): replace std::sync::Mutex with moka lock-free cache in async context
Eliminates deadlock risk under concurrent load: - SearchService: Arc<Mutex<HashMap>> → moka::sync::Cache with automatic TTL + LRU - Removed manual cleanup task, TTL checking, eviction logic (~90 lines) - get_from_cache/store_in_cache are now single lock-free calls - clear_search_cache uses invalidate_all() - HttpCache: Arc<Mutex<HashMap>> → moka::sync::Cache - Removed stats(), cleanup(), evict_oldest() manual methods - Removed CacheEntry.timestamp/max_age fields (moka handles internally) - Removed start_cache_cleanup_task (moka evicts lazily) - routes.rs: Removed dead HttpCache instantiation and unused TTL variables Impact: std::sync::Mutex::lock() blocked Tokio worker threads; N concurrent requests (N = CPU count) could freeze the entire server. moka::sync::Cache is lock-free and designed for async runtimes — zero contention.
This commit is contained in:
@@ -17,8 +17,6 @@ async fn get_version() -> AxumJson<serde_json::Value> {
|
||||
}))
|
||||
}
|
||||
|
||||
use crate::interfaces::middleware::cache::{HttpCache, start_cache_cleanup_task};
|
||||
|
||||
use crate::application::services::batch_operations::BatchOperationService;
|
||||
|
||||
use crate::interfaces::api::handlers::admin_handler;
|
||||
@@ -110,17 +108,6 @@ pub fn create_api_routes(app_state: &AppState) -> Router<AppState> {
|
||||
batch_service: batch_service.clone(),
|
||||
};
|
||||
|
||||
// Implement HTTP Cache
|
||||
let http_cache = HttpCache::new();
|
||||
|
||||
// Define TTL values for different resource types (in seconds)
|
||||
let _folders_ttl = 300; // 5 minutes
|
||||
let _files_list_ttl = 300; // 5 minutes
|
||||
let _i18n_ttl = 3600; // 1 hour
|
||||
|
||||
// Start the cleanup task for HTTP cache
|
||||
start_cache_cleanup_task(http_cache.clone());
|
||||
|
||||
// Create the basic folders router with service operations
|
||||
let folders_basic_router = Router::new()
|
||||
.route("/", post(FolderHandler::create_folder))
|
||||
|
||||
Reference in New Issue
Block a user