Added prefetch

This commit is contained in:
2026-03-13 18:06:54 +00:00
parent 078698154e
commit 9c55dce5a1
3 changed files with 12 additions and 6 deletions

View File

@@ -193,14 +193,13 @@ impl FurumiClient {
.time_to_live(Duration::from_secs(30)) .time_to_live(Duration::from_secs(30))
.build(); .build();
let this = Self { client, attr_cache, dir_cache }; Ok(Self { client, attr_cache, dir_cache })
this.start_background_sync();
Ok(this)
} }
/// Spawns background tasks that pre-warm the cache with a server snapshot and then /// Spawns background tasks that pre-warm the cache with a server snapshot and then
/// subscribe to live change events to keep it up to date. /// subscribe to live change events to keep it up to date.
fn start_background_sync(&self) { /// Must be called after a successful authentication check.
pub fn start_background_sync(&self) {
let this = self.clone(); let this = self.clone();
tokio::spawn(async move { tokio::spawn(async move {
match this.load_snapshot("/", 3).await { match this.load_snapshot("/", 3).await {

View File

@@ -63,7 +63,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
if let Err(e) = c.get_attr("/").await { if let Err(e) = c.get_attr("/").await {
return Err(format!("Failed to authenticate or connect to server: {}", e).into()); return Err(format!("Failed to authenticate or connect to server: {}", e).into());
} }
// Auth verified — start background snapshot + watch sync
c.start_background_sync();
Ok::<_, Box<dyn std::error::Error>>(c) Ok::<_, Box<dyn std::error::Error>>(c)
})?; })?;

View File

@@ -58,7 +58,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
format!("https://{}", args.server) format!("https://{}", args.server)
}; };
let client = rt.block_on(async { FurumiClient::connect(&full_addr, &args.token).await })?; let client = rt.block_on(async {
let c = FurumiClient::connect(&full_addr, &args.token).await?;
c.start_background_sync();
Ok::<_, Box<dyn std::error::Error + Send + Sync>>(c)
})?;
let furumi_nfs = nfs::FurumiNfs::new(client); let furumi_nfs = nfs::FurumiNfs::new(client);