From 09b30d64f2a9b1f05001e3c108e413fcaa48b9cf Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 13 Apr 2026 18:09:02 -0400 Subject: [PATCH] cmd_fsck: use access_local(), remove dead AnyView::load() Convert cmd_fsck to async and use access_local() for the cached store. Still uses Store::load_from_logs() for fresh comparison. Remove unused AnyView::load() method - was never called. Remaining Store::load() calls are all internal caching infrastructure: - persist.rs cached() for CACHED_STORE - mod.rs access() fallback for STORE_ACCESS Co-Authored-By: Proof of Concept --- src/cli/admin.rs | 7 ++++--- src/hippocampus/store/view.rs | 12 ------------ src/main.rs | 2 +- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/cli/admin.rs b/src/cli/admin.rs index e07009b..1387323 100644 --- a/src/cli/admin.rs +++ b/src/cli/admin.rs @@ -59,8 +59,9 @@ pub async fn cmd_init() -> Result<()> { Ok(()) } -pub fn cmd_fsck() -> Result<()> { - let mut store = store::Store::load()?; +pub async fn cmd_fsck() -> Result<()> { + let arc = memory::access_local()?; + let mut store = arc.lock().await; // Check cache vs log consistency let log_store = store::Store::load_from_logs()?; @@ -92,7 +93,7 @@ pub fn cmd_fsck() -> Result<()> { if cache_issues > 0 { eprintln!("{} cache inconsistencies found — rebuilding from logs", cache_issues); - store = log_store; + *store = log_store; store.save().context("rebuild save")?; } diff --git a/src/hippocampus/store/view.rs b/src/hippocampus/store/view.rs index 98bb4ca..80d7bd8 100644 --- a/src/hippocampus/store/view.rs +++ b/src/hippocampus/store/view.rs @@ -6,7 +6,6 @@ use super::types::*; -use anyhow::Result; use std::fs; // --------------------------------------------------------------------------- @@ -185,17 +184,6 @@ pub enum AnyView { Owned(Store), } -impl AnyView { - /// Load the fastest available view: mmap snapshot or owned store. - pub fn load() -> Result { - if let Some(mv) = MmapView::open() { - Ok(AnyView::Mmap(mv)) - } else { - Ok(AnyView::Owned(Store::load()?)) - } - } -} - impl StoreView for AnyView { fn for_each_node(&self, f: F) { match self { AnyView::Mmap(v) => v.for_each_node(f), AnyView::Owned(s) => s.for_each_node(f) } diff --git a/src/main.rs b/src/main.rs index a3b52e6..da066ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -460,7 +460,7 @@ impl Run for AdminCmd { Self::Init => cli::admin::cmd_init().await, Self::Health => cli::admin::cmd_health().await, Self::Topology => cli::admin::cmd_topology().await, - Self::Fsck => cli::admin::cmd_fsck(), + Self::Fsck => cli::admin::cmd_fsck().await, Self::Dedup { apply } => cli::admin::cmd_dedup(apply).await, Self::DailyCheck => cli::admin::cmd_daily_check().await, Self::Import { files } => cli::admin::cmd_import(&files).await,