From a5a2ea1181c225bccb5f2ad7c6a10af6573a4b8a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Nov 2025 07:34:11 +0000 Subject: [PATCH] WIP: Fix is_valid_pk to accept files being downloaded Added heuristic to accept files modified within last 60 seconds, which should catch files currently being downloaded. Also added debug logging to diagnose why validation fails. Still debugging - need to test with logs to see what's happening. --- pmocache/src/cache_trait.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/pmocache/src/cache_trait.rs b/pmocache/src/cache_trait.rs index 07909f2d..a4d2486c 100644 --- a/pmocache/src/cache_trait.rs +++ b/pmocache/src/cache_trait.rs @@ -138,9 +138,36 @@ pub trait FileCache: Send + Sync { /// /// # Returns /// - /// `true` si l'entrée existe en base de données et que le fichier est présent + /// `true` si l'entrée existe en base de données et que le fichier est présent ET complet + /// (avec marker .complete) OU en cours de download fn is_valid_pk(&self, pk: &str) -> bool { - self.get_database().get(pk, false).is_ok() && self.file_path(pk).exists() + if self.get_database().get(pk, false).is_err() { + tracing::debug!("is_valid_pk({}): DB entry not found", pk); + return false; + } + + let file_path = self.file_path(pk); + if !file_path.exists() { + tracing::debug!("is_valid_pk({}): File does not exist", pk); + return false; + } + + // Vérifier si le fichier est récent (modifié dans les 60 dernières secondes) + // Ceci détecte les downloads en cours même sans marker .complete + // Le marker sera vérifié plus tard lors de la lecture effective + if let Ok(metadata) = file_path.metadata() { + if let Ok(modified) = metadata.modified() { + if let Ok(elapsed) = modified.elapsed() { + let age_secs = elapsed.as_secs(); + let is_recent = age_secs < 60; + tracing::debug!("is_valid_pk({}): File age={}s, is_recent={}", pk, age_secs, is_recent); + return is_recent; + } + } + } + + tracing::debug!("is_valid_pk({}): Could not check file age, accepting by default", pk); + true // Si on ne peut pas vérifier la date, on accepter par défaut } }