diff --git a/src/api/handlers.rs b/src/api/handlers.rs index 28ca4ec..9f68d15 100644 --- a/src/api/handlers.rs +++ b/src/api/handlers.rs @@ -1,6 +1,7 @@ use crate::api::utils::{delete_from_db, retrieve_from_db, serialize_all_entries}; use crate::db::handler::{CacheHandler, KvStoreConnection}; use crate::interfaces::{SetRequestData, SetSaveData}; +use crate::utils::save_cuckoo_filter_to_disk; use futures::lock::Mutex; use serde_json::Value; use std::collections::HashMap; @@ -143,7 +144,10 @@ pub async fn set_data_handler< .lock() .await .expire_entry(&payload.address, cache_ttl) - .await; + .await + .map_err(|err| { + error!("Failed to expire cache entry: {:?}", err); + }); db.lock() .await @@ -164,10 +168,19 @@ pub async fn set_data_handler< }; match c_filter_result { - Ok(_) => r.into_ok( - "Data set successfully", - json_serialize_embed(payload.address), - ), + Ok(_) => { + // Save latest result to disk + let cf_lock = c_filter.lock().await; + if let Err(err) = save_cuckoo_filter_to_disk(&cf_lock, db).await { + error!("Failed to save cuckoo filter to disk: {:?}", err); + } + + // Return success + r.into_ok( + "Data set successfully", + json_serialize_embed(payload.address), + ) + } Err(_) => r.into_err_internal(ApiErrorType::CuckooFilterInsertionFailed), } } diff --git a/src/utils.rs b/src/utils.rs index 99c2a98..e26833b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -152,7 +152,10 @@ pub async fn init_cuckoo_filter( db: Arc>, ) -> Result, String> { match load_cuckoo_filter_from_disk(db.clone()).await { - Ok(cf) => Ok(cf), + Ok(cf) => { + info!("Cuckoo filter loaded from DB"); + Ok(cf) + } Err(_) => { info!("No cuckoo filter found in DB, initializing new one"); let cf = CuckooFilter::new();