From 9c63f9969a0952b5f5098640bb5074b35b8e5aef Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sat, 29 Aug 2026 11:37:33 +0200 Subject: [PATCH 01/13] feat(transcode): write transcodes to the derived tier, with negative rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Step 7 of docs/plan/derived-blobs.md, write path first — the plan is explicit that fixing it before the import means transcode_import only has to handle history, not a moving target. ImageTranscodeService now reads and writes storage.content_derived_blobs under kind='transcode', keyed by the BLAKE3 of the SOURCE content. The hash is threaded in from file_retrieval_service, which already holds it as dto.content_hash; hashing here would be a BLAKE3 over the whole file on every request. Callers without one (external mounts) keep the local cache untouched, which is what the service did before this tier existed. Negative verdicts become rows rather than zero-byte .skip files. A transcode that came out larger is deterministic in the content, so it is worth remembering; the row survives moka eviction, a restart, and the deletion of .transcoded/, none of which the marker does. Only that verdict is persisted — a timeout or a read error returns Err and is recorded nowhere, because a momentary failure written here would mark a perfectly transcodable image hopeless with nothing to retry it. Representation is a NULL blob_hash, per the plan: a sentinel hash would stop blob_hash naming a real Blob and every consumer would need to learn the exception. A CHECK keeps blob_hash and content_type NULL together — a type without bytes describes nothing, bytes without a type cannot be served. Two consumers had to be corrected for NULLs first, both of which would have broken on the first negative row ever written: * satellites_consistency reported them as derived_dangling_blob at data_loss severity. SQL comparison against NULL is NULL, so EXISTS was false and a row correctly pointing at nothing read as an artifact that had gone missing. * blob_reference_sources::list_referenced_blobs decodes blob_hash into String, so the first NULL would have failed the decode and taken the whole enumeration down. It would also have been wrong if it decoded — a negative row holds no reference, which is why the counting forms (WHERE blob_hash = ) already exclude it for free. lookup_derived returns a three-way answer because Option collapses the two cases a caller deciding whether to spend a decode most needs apart: never attempted, versus attempted and known not worth it. DedupService is attached after construction via a OnceLock. DI builds the transcode service ~240 lines before DedupService exists, and the retrieval path that needs it is wired earlier still, so a constructor argument would mean reordering more than this is worth. Co-Authored-By: Claude Opus 5 (1M context) --- ...00_content_derived_blobs_negative_rows.sql | 63 +++++ src/application/ports/dedup_ports.rs | 23 ++ src/application/ports/transcode_ports.rs | 6 + .../services/file_retrieval_service.rs | 19 +- src/common/di.rs | 11 + .../repositories/pg/blob_reference_sources.rs | 12 +- src/infrastructure/services/dedup_service.rs | 84 ++++++- .../services/image_transcode_service.rs | 231 ++++++++++++++++-- .../satellites_consistency_service.rs | 16 +- 9 files changed, 430 insertions(+), 35 deletions(-) create mode 100644 migrations/20261023000000_content_derived_blobs_negative_rows.sql diff --git a/migrations/20261023000000_content_derived_blobs_negative_rows.sql b/migrations/20261023000000_content_derived_blobs_negative_rows.sql new file mode 100644 index 00000000..b119ade7 --- /dev/null +++ b/migrations/20261023000000_content_derived_blobs_negative_rows.sql @@ -0,0 +1,63 @@ +-- Negative rows in `storage.content_derived_blobs`. +-- +-- Some derivations can only be known to be useless by doing the whole +-- expensive job. `ImageTranscodeService` learns that WebP is not smaller +-- than the original by decoding and re-encoding the whole image; a +-- thumbnail renderer learns a source is undecodable, or over the +-- 50-megapixel ceiling, only by attempting it. Recomputing that verdict +-- on every request is the same cost as computing it the first time. +-- +-- Today those verdicts live in RAM (moka's zero-weight empty-Bytes +-- convention) and, for transcodes, as zero-byte `.skip` files on local +-- disk. Both vanish: moka evicts, and the local disk is exactly what +-- this plan is deleting. So the verdict is stored here, next to the +-- positive derivations, as a row whose derived Blob is NULL. +-- +-- ## Why NULL rather than a sentinel hash +-- +-- A reserved hash was considered and rejected. It would stop +-- `blob_hash` naming a real Blob, and every consumer — the refcount +-- recompute in `manifests_consistency`, `dedup_gc`'s reap predicate, +-- `satellites_consistency`'s dangling check — would need to learn the +-- exception or silently mis-handle it. NULL is already the SQL way to +-- say "no Blob", and those consumers all join on `blob_hash`, so a NULL +-- drops out of the join instead of matching something fictional. +-- +-- ## The CHECK matters +-- +-- A row with a `blob_hash` but no `content_type` is unserveable; a row +-- with a `content_type` but no `blob_hash` claims a type for bytes that +-- do not exist. Both are bugs that would surface far from their cause, +-- so the pair moves together or not at all. +-- +-- ## What must NOT become a negative row +-- +-- Only failures that are DETERMINISTIC IN THE CONTENT. A transcode that +-- was not smaller, or a source that cannot be decoded, will fail the +-- same way forever — those are worth remembering. A generation timeout, +-- a closed semaphore, an I/O error reading the source Blob are +-- properties of the moment, not the content; persisting one marks a +-- perfectly good image as underivable permanently, and nothing ever +-- retries it. The asymmetry sets the default: a wrongly-cached +-- transient is silent and forever, a missing negative merely costs +-- repeated work. When in doubt, do not write the row. + +ALTER TABLE storage.content_derived_blobs + ALTER COLUMN blob_hash DROP NOT NULL, + ALTER COLUMN content_type DROP NOT NULL; + +ALTER TABLE storage.content_derived_blobs + DROP CONSTRAINT IF EXISTS content_derived_blobs_positive_or_negative; + +ALTER TABLE storage.content_derived_blobs + ADD CONSTRAINT content_derived_blobs_positive_or_negative + CHECK ( + (blob_hash IS NOT NULL AND content_type IS NOT NULL) + OR (blob_hash IS NULL AND content_type IS NULL) + ); + +COMMENT ON COLUMN storage.content_derived_blobs.blob_hash IS + 'The derived Blob, or NULL for a NEGATIVE row: the derivation was attempted and is known not to be worth storing (transcode came out larger, source undecodable, source over the decode ceiling). Reference HOLDER when present — bumps chunk_manifests.ref_count via DedupService::add_reference. Only content-deterministic failures may be recorded as negatives; transient ones (timeout, semaphore, I/O) must not, or a momentary failure becomes permanent.'; + +COMMENT ON COLUMN storage.content_derived_blobs.content_type IS + 'MIME type of the derived Blob. NULL exactly when blob_hash is NULL — the CHECK keeps the pair together, since a type without bytes describes nothing and bytes without a type cannot be served.'; diff --git a/src/application/ports/dedup_ports.rs b/src/application/ports/dedup_ports.rs index 046ca45c..21910c8a 100644 --- a/src/application/ports/dedup_ports.rs +++ b/src/application/ports/dedup_ports.rs @@ -34,6 +34,29 @@ pub struct DerivedBlobRef { pub content_type: String, } +/// What the derived tier knows about one `(source_hash, kind, variant)`. +/// +/// Three answers, not two. `Option` could only say +/// "have it" or "don't", which collapses the two cases that matter most +/// to a caller deciding whether to spend a decode: +/// +/// * [`Missing`](Self::Missing) — never attempted. Derive it. +/// * [`NotDerivable`](Self::NotDerivable) — attempted, and the attempt +/// is known to be a waste for this content: the transcode came out +/// larger than the original, the source cannot be decoded, the source +/// is over the decode ceiling. Serve the original and do not retry. +/// * [`Found`](Self::Found) — here are the bytes. +/// +/// Only failures that are deterministic in the CONTENT may be recorded +/// as `NotDerivable`. A timeout or an I/O error is a property of the +/// moment; persisting one would mark a good image underivable forever. +#[derive(Debug, Clone)] +pub enum DerivedLookup { + Missing, + NotDerivable, + Found(DerivedBlobRef), +} + /// Result of a deduplication store operation. #[derive(Debug, Clone)] pub enum DedupResultDto { diff --git a/src/application/ports/transcode_ports.rs b/src/application/ports/transcode_ports.rs index 1e7ed3b9..f727e8b0 100644 --- a/src/application/ports/transcode_ports.rs +++ b/src/application/ports/transcode_ports.rs @@ -85,9 +85,15 @@ pub trait ImageTranscodePort: Send + Sync + 'static { /// Returns `(content, mime_type, was_transcoded)`. /// If transcoding is not beneficial (output larger than input), returns the /// original content with `was_transcoded = false`. + /// + /// `source_hash` is the BLAKE3 of the original content, which is how the + /// durable derived tier is keyed. `None` restricts the implementation to + /// its local cache — correct for callers with no hash (external mounts), + /// and the behaviour of every caller before that tier existed. async fn get_transcoded( &self, file_id: &str, + source_hash: Option<&str>, original_content: Bytes, original_mime: &str, target_format: OutputFormat, diff --git a/src/application/services/file_retrieval_service.rs b/src/application/services/file_retrieval_service.rs index ac253662..6bd37ea9 100644 --- a/src/application/services/file_retrieval_service.rs +++ b/src/application/services/file_retrieval_service.rs @@ -274,9 +274,15 @@ impl FileRetrievalService { } /// Try to transcode image content to WebP and return transcoded variant. + /// + /// `source_hash` keys the durable derived tier. The caller has it as + /// `dto.content_hash`; passing it rather than hashing here matters, + /// because hashing would be a BLAKE3 over the whole file on every + /// request that reaches this path. async fn try_transcode( &self, id: &str, + source_hash: Option<&str>, content: &Bytes, mime: &str, file_size: u64, @@ -291,7 +297,7 @@ impl FileRetrievalService { } let format = OutputFormat::WebP; match transcode - .get_transcoded(id, content.clone(), mime, format) + .get_transcoded(id, source_hash, content.clone(), mime, format) .await { Ok((transcoded, webp_mime, true)) => { @@ -364,7 +370,16 @@ impl FileRetrievalService { if do_transcode && let Some((t, m)) = self - .try_transcode(id, &content_bytes, &mime_type, file_size, true) + .try_transcode( + id, + // Empty on the hash-less stub DTOs (external mounts), + // which the content-keyed tier cannot serve anyway. + Some(&*dto.content_hash).filter(|h: &&str| !h.is_empty()), + &content_bytes, + &mime_type, + file_size, + true, + ) .await { return Ok(( diff --git a/src/common/di.rs b/src/common/di.rs index f6ea7345..73e98ee1 100644 --- a/src/common/di.rs +++ b/src/common/di.rs @@ -451,6 +451,17 @@ impl AppServiceFactory { ); dedup_service.initialize().await?; + // Hand the transcode service its derived tier. + // + // Deferred rather than injected at construction because that happens + // ~240 lines above this, before `DedupService` exists, and the + // retrieval path that needs the transcode service is wired earlier + // still. Reordering DI to make the dependency a constructor argument + // would move more than it is worth; the service treats a missing + // handle as "local cache only", which is exactly its pre-derived-tier + // behaviour. + image_transcode_service.attach_dedup(dedup_service.clone()); + // One-time background migration: re-chunk pre-CDC whole-file blobs // into chunk manifests so Range reads (and, with encryption, partial // decrypts) stop paying for the entire blob. No-op once converged. diff --git a/src/infrastructure/repositories/pg/blob_reference_sources.rs b/src/infrastructure/repositories/pg/blob_reference_sources.rs index d273d2b2..e9534c82 100644 --- a/src/infrastructure/repositories/pg/blob_reference_sources.rs +++ b/src/infrastructure/repositories/pg/blob_reference_sources.rs @@ -392,6 +392,15 @@ impl BlobReferenceSource for ContentDerivedReferenceSource { // Paged by `blob_hash` itself — unlike files it IS the value we // return, and DISTINCT keeps a Blob shared by several variants from // appearing more than once per page. + // + // `IS NOT NULL` is load-bearing, not defensive. A NEGATIVE row — + // "this content is not worth transcoding" — carries a NULL + // blob_hash, and this query decodes into `String`, so the first one + // ever written would fail the decode and take the whole enumeration + // down. It would also be wrong if it decoded: a negative row holds + // no reference on any Blob, which is exactly why the counting forms + // above (`WHERE blob_hash = `) already exclude it for free — + // NULL equals nothing. let after: Option = match cursor { Some(bytes) => Some(String::from_utf8(bytes).map_err(|e| { DomainError::internal_error("BlobRefSource", format!("bad derived cursor: {e}")) @@ -401,7 +410,8 @@ impl BlobReferenceSource for ContentDerivedReferenceSource { let rows: Vec<(String,)> = sqlx::query_as( "SELECT DISTINCT blob_hash FROM storage.content_derived_blobs - WHERE ($1::text IS NULL OR blob_hash > $1) + WHERE blob_hash IS NOT NULL + AND ($1::text IS NULL OR blob_hash > $1) ORDER BY blob_hash LIMIT $2", ) diff --git a/src/infrastructure/services/dedup_service.rs b/src/infrastructure/services/dedup_service.rs index 4ae12f37..b089a1f6 100644 --- a/src/infrastructure/services/dedup_service.rs +++ b/src/infrastructure/services/dedup_service.rs @@ -778,7 +778,33 @@ impl DedupService { kind: &str, variant: &str, ) -> Option { - sqlx::query_as::<_, (String, String)>( + match self.lookup_derived(source_hash, kind, variant).await { + crate::application::ports::dedup_ports::DerivedLookup::Found(r) => Some(r), + _ => None, + } + } + + /// Full three-way answer: no row, a negative verdict, or the blob. + /// + /// Callers deciding whether to spend a decode want the middle case, + /// which [`Self::find_derived_blob`] cannot express — it folds + /// "never attempted" and "attempted, not worth it" into the same + /// `None`, and a caller acting on that repeats the expensive work + /// forever. Use this wherever the derivation is costly; use + /// `find_derived_blob` when you only need the bytes. + /// + /// A query error reads as `Missing`, deliberately: a database blip + /// should cost a redundant render, never a wrong "not derivable" + /// that suppresses a derivation the content can support. + pub async fn lookup_derived( + &self, + source_hash: &str, + kind: &str, + variant: &str, + ) -> crate::application::ports::dedup_ports::DerivedLookup { + use crate::application::ports::dedup_ports::{DerivedBlobRef, DerivedLookup}; + + let row = sqlx::query_as::<_, (Option, Option)>( "SELECT blob_hash, content_type FROM storage.content_derived_blobs WHERE source_hash = $1 AND kind = $2 AND variant = $3", ) @@ -788,13 +814,59 @@ impl DedupService { .fetch_optional(self.pool.as_ref()) .await .ok() - .flatten() - .map(|(blob_hash, content_type)| { - crate::application::ports::dedup_ports::DerivedBlobRef { + .flatten(); + + match row { + None => DerivedLookup::Missing, + // The CHECK constraint keeps blob_hash and content_type NULL + // together, so one NULL is the whole negative row. + Some((None, _)) | Some((_, None)) => DerivedLookup::NotDerivable, + Some((Some(blob_hash), Some(content_type))) => DerivedLookup::Found(DerivedBlobRef { blob_hash, content_type, - } - }) + }), + } + } + + /// Record that this derivation is not worth attempting again. + /// + /// For outcomes that are deterministic in the source content — a + /// transcode that came out larger, a source that will not decode, a + /// source over the decode ceiling. **Never** for a timeout, a closed + /// semaphore, or an I/O error: those are properties of the moment, + /// and a row written for one marks good content underivable forever + /// with nothing to retry it. + /// + /// Takes no reference on any Blob — there is no derived Blob to hold + /// one. The row is dependent on its source and is reaped with it, + /// same as a positive row. + /// + /// Guarded by the same source-exists check as `store_derived_blob`: + /// a row whose source has already been reaped is a permanent leak of + /// a mapping nothing will ever clean up. + pub async fn store_derived_negative( + &self, + source_hash: &str, + kind: &str, + variant: &str, + ) -> Result<(), DomainError> { + sqlx::query( + "INSERT INTO storage.content_derived_blobs + (source_hash, kind, variant, blob_hash, content_type) + SELECT $1, $2, $3, NULL, NULL + WHERE EXISTS (SELECT 1 FROM storage.chunk_manifests WHERE file_hash = $1) + OR EXISTS (SELECT 1 FROM storage.blobs WHERE hash = $1) + ON CONFLICT (source_hash, kind, variant) DO NOTHING", + ) + .bind(source_hash) + .bind(kind) + .bind(variant) + .execute(self.pool.as_ref()) + .await + .map_err(|e| { + DomainError::internal_error("Dedup", format!("store_derived_negative: {e}")) + })?; + Ok(()) } /// The registry backing the reap predicate. diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs index 4501f746..02be73d9 100644 --- a/src/infrastructure/services/image_transcode_service.rs +++ b/src/infrastructure/services/image_transcode_service.rs @@ -147,6 +147,20 @@ pub struct ImageTranscodeService { memory_cache: moka::future::Cache, /// Lock-free statistics stats: Arc, + /// The derived tier, attached after construction. + /// + /// A constructor parameter would be cleaner but does not fit: DI builds + /// this service before `DedupService` exists, and reordering is worse + /// than a one-shot — the transcode service is needed by the retrieval + /// path, which is wired early. `ThumbnailService` met the same wall and + /// took a per-call parameter instead; that does not work here because + /// the caller (`FileRetrievalService`) holds no dedup handle either, so + /// threading one through would push the dependency into a service that + /// has no other use for it. + /// + /// `OnceLock` rather than a `Mutex`: set exactly once at boot, read on + /// every request, never replaced. + dedup: OnceLock>, } impl ImageTranscodeService { @@ -176,10 +190,37 @@ impl ImageTranscodeService { cache_dir, memory_cache, stats: Arc::new(AtomicTranscodeStats::default()), + dedup: OnceLock::new(), } } - /// Initialize the service (create cache directories) + /// Attach the derived tier. Called once from DI, after `DedupService` + /// exists. Until then — and in tests that never call it — the service + /// behaves exactly as before, reading and writing only its local cache. + pub fn attach_dedup( + &self, + dedup: Arc, + ) { + if self.dedup.set(dedup).is_err() { + tracing::warn!( + target: "oxicloud::transcode", + "attach_dedup called twice — the first handle is kept" + ); + } + } + + /// The `content_derived_blobs.kind` for everything this service writes. + const DERIVED_KIND: &'static str = "transcode"; + + /// Initialize the service. + /// + /// Still creates the local cache directories, because this service DOES + /// still write them — unlike `ThumbnailService`, whose sidecar writes + /// are gone. When the transcode write path moves fully to the derived + /// tier, these two `create_dir_all` calls have to go at the same time: + /// leaving them would recreate the tree on every boot and make the + /// absence that `transcode_import` works toward unreachable, which is + /// exactly the bug that kept `.thumbnails/` alive across restarts. pub async fn initialize(&self) -> std::io::Result<()> { fs::create_dir_all(&self.cache_dir).await?; fs::create_dir_all(self.cache_dir.join("webp")).await?; @@ -213,13 +254,28 @@ impl ImageTranscodeService { /// /// Accepts `Bytes` (ref-counted) so callers avoid copying the buffer. /// Cloning `Bytes` is O(1) — only an atomic increment. + /// + /// `source_hash` is the BLAKE3 of the ORIGINAL content — the key the + /// derived tier uses. `None` falls back to the local cache alone, which + /// is what happens for callers that have no hash (external mounts) and + /// what the whole service did before the derived tier existed. + /// + /// It is a parameter rather than something computed here on purpose: + /// hashing `original_content` per request would be a BLAKE3 over the + /// whole file on every GET, and the caller already has the value. pub async fn get_transcoded( &self, file_id: &str, + source_hash: Option<&str>, original_content: Bytes, original_mime: &str, target_format: OutputFormat, ) -> Result<(Bytes, String, bool), String> { + // Keyed by file_id, not content hash. Deliberate: this cache is + // per-request-path and short-lived (10 min TTL), and the file id is + // what the caller has in hand on every request. The DURABLE tier + // below is content-keyed, which is where dedup across identical + // files actually pays. let cache_key = format!("{}:{}", file_id, target_format.extension()); // ── 1. Fast path: moka memory cache (lock-free read) ── @@ -248,8 +304,14 @@ impl ImageTranscodeService { let cached = self .memory_cache .try_get_with(cache_key, async { - self.compute_transcode(file_id, original_for_loader, original_mime, target_format) - .await + self.compute_transcode( + file_id, + source_hash, + original_for_loader, + original_mime, + target_format, + ) + .await }) .await // try_get_with shares one `Arc` across waiters; DomainError @@ -271,11 +333,62 @@ impl ImageTranscodeService { async fn compute_transcode( &self, file_id: &str, + source_hash: Option<&str>, original_content: Bytes, original_mime: &str, target_format: OutputFormat, ) -> Result { - // ── Disk cache (async fs) ── + // ── Derived tier, ahead of the local cache ── + // + // Content-keyed, so it is shared across every file with these bytes + // and survives both a restart and a backend migration — neither of + // which the local `.transcoded/` tree does. Read first for the same + // reason the thumbnail read-order flip put it first: the local tree + // is the legacy tier being drained, and a fallback that is consulted + // first never stops being load-bearing. + let derived = match (source_hash, self.dedup.get()) { + (Some(hash), Some(dedup)) => Some((hash, dedup)), + _ => None, + }; + if let Some((hash, dedup)) = derived { + use crate::application::ports::dedup_ports::DerivedLookup; + match dedup + .lookup_derived(hash, Self::DERIVED_KIND, target_format.extension()) + .await + { + DerivedLookup::Found(r) => match dedup.read_blob_bytes(&r.blob_hash).await { + Ok(bytes) if !bytes.is_empty() => { + self.stats.disk_hits.fetch_add(1, Ordering::Relaxed); + tracing::debug!("🧱 Transcode derived tier HIT: {}", file_id); + return Ok(bytes); + } + // The row promised bytes that are gone or empty. Fall + // through and re-derive rather than serving nothing — + // a transcode is a pure function of its source, so this + // is recoverable by construction. `satellites_consistency` + // reports the dangling row separately. + _ => tracing::warn!( + target: "oxicloud::transcode", + source_hash = %hash, + blob_hash = %r.blob_hash, + "derived transcode row points at unreadable bytes; re-deriving" + ), + }, + // Known not worth transcoding for this content. This is the + // whole point of persisting the verdict: without it every GET + // repeats a full decode + encode to throw the result away. + DerivedLookup::NotDerivable => { + self.stats.disk_hits.fetch_add(1, Ordering::Relaxed); + tracing::debug!("🧱 Transcode negative derived row HIT: {}", file_id); + return Ok(Bytes::new()); + } + DerivedLookup::Missing => {} + } + } + + // ── Legacy local cache (async fs) ── + // + // Drained by `transcode_import`; kept as a fallback until it is gone. let cache_path = self.get_cache_path(file_id, target_format); if tokio::fs::try_exists(&cache_path).await.unwrap_or(false) { match fs::read(&cache_path).await { @@ -326,35 +439,103 @@ impl ImageTranscodeService { original_size, transcoded_size ); - // Remember the negative verdict so the next GET doesn't repeat the - // decode + encode: the caller caches the empty-Bytes sentinel (TTL) - // and we drop a zero-byte marker on disk (survives restarts; - // removed by `invalidate` when the file changes). - let marker = self.get_skip_marker_path(file_id, target_format); - tokio::spawn(async move { - if let Some(parent) = marker.parent() { - let _ = fs::create_dir_all(parent).await; + // Remember the verdict so the next GET does not repeat the decode + // + encode. The caller caches the empty-Bytes sentinel in RAM + // (10 min TTL); this row is what makes it survive eviction, a + // restart, and a move to another instance. + // + // Safe to persist because it is deterministic in the CONTENT: + // these exact bytes will always re-encode larger. A timeout or a + // read error would not be — those return `Err` above and are + // deliberately not recorded, since a momentary failure written + // here would mark a perfectly transcodable image as hopeless + // with nothing to ever retry it. + match derived { + Some((hash, dedup)) => { + if let Err(e) = dedup + .store_derived_negative(hash, Self::DERIVED_KIND, target_format.extension()) + .await + { + tracing::warn!( + target: "oxicloud::transcode", + source_hash = %hash, + error = %e, + "failed to persist negative transcode verdict; it will be recomputed" + ); + } } - if let Err(e) = fs::write(&marker, b"").await { - tracing::warn!("Failed to persist transcode skip marker: {}", e); + // Hash-less callers still get the zero-byte marker, for the + // same reason they still get the local cache write: the + // content-keyed tier cannot hold a verdict for content it + // cannot name. Dropping this would make every external-mount + // GET of a non-shrinking image re-decode once moka's TTL + // expires. + None => { + let marker = self.get_skip_marker_path(file_id, target_format); + tokio::spawn(async move { + if let Some(parent) = marker.parent() { + let _ = fs::create_dir_all(parent).await; + } + if let Err(e) = fs::write(&marker, b"").await { + tracing::warn!("Failed to persist transcode skip marker: {}", e); + } + }); } - }); + } return Ok(Bytes::new()); } let saved = original_size - transcoded_size; - // ── Persist to disk cache (fire-and-forget) ── - let cache_path_clone = cache_path.clone(); - let transcoded_for_disk = transcoded_bytes.clone(); - tokio::spawn(async move { - if let Some(parent) = cache_path_clone.parent() { - let _ = fs::create_dir_all(parent).await; + // ── Persist ── + // + // Derived tier when we have a source hash, local cache otherwise. + // Not both: writing the sidecar too would mean `transcode_import` + // chases a tail that keeps being refilled, which is the trap the + // thumbnail migration hit — four render paths wrote the sidecar and + // one wrote the row, so the tail never emptied. + // + // The local write survives only for hash-less callers (external + // mounts), which the derived tier cannot serve at all. When those + // gain a hash this branch goes, and `initialize`'s `create_dir_all` + // calls go with it. + match derived { + Some((hash, dedup)) => { + let dedup = dedup.clone(); + let hash = hash.to_string(); + let variant = target_format.extension().to_string(); + let mime = target_format.mime_type().to_string(); + let bytes = transcoded_bytes.clone(); + // Fire-and-forget, as the disk write was: the bytes are + // already on their way to the client, and a storage hiccup + // should cost a re-derive later rather than this response. + tokio::spawn(async move { + if let Err(e) = dedup + .store_derived_blob(&hash, Self::DERIVED_KIND, &variant, &mime, bytes) + .await + { + tracing::warn!( + target: "oxicloud::transcode", + source_hash = %hash, + error = %e, + "failed to store derived transcode; it will be recomputed" + ); + } + }); } - if let Err(e) = fs::write(&cache_path_clone, &transcoded_for_disk).await { - tracing::warn!("Failed to cache transcoded image: {}", e); + None => { + let cache_path_clone = cache_path.clone(); + let transcoded_for_disk = transcoded_bytes.clone(); + tokio::spawn(async move { + if let Some(parent) = cache_path_clone.parent() { + let _ = fs::create_dir_all(parent).await; + } + if let Err(e) = fs::write(&cache_path_clone, &transcoded_for_disk).await { + tracing::warn!("Failed to cache transcoded image: {}", e); + } + }); } - }); + } // ── Update stats (lock-free atomics) ── self.stats.transcodes.fetch_add(1, Ordering::Relaxed); @@ -476,12 +657,14 @@ impl ImageTranscodePort for ImageTranscodeService { async fn get_transcoded( &self, file_id: &str, + source_hash: Option<&str>, original_content: Bytes, original_mime: &str, target_format: PortOutputFormat, ) -> Result<(Bytes, String, bool), DomainError> { self.get_transcoded( file_id, + source_hash, original_content, original_mime, target_format.into(), diff --git a/src/infrastructure/services/satellites_consistency_service.rs b/src/infrastructure/services/satellites_consistency_service.rs index f54baf97..99259263 100644 --- a/src/infrastructure/services/satellites_consistency_service.rs +++ b/src/infrastructure/services/satellites_consistency_service.rs @@ -92,7 +92,11 @@ struct DerivedRow { source_hash: String, kind: String, variant: String, - blob_hash: String, + /// `None` on a NEGATIVE row — the derivation was attempted and is + /// known not to be worth storing for this content (a transcode that + /// came out larger, an undecodable source). Those rows point at + /// nothing on purpose and must not be read as dangling. + blob_hash: Option, source_exists: bool, artifact_exists: bool, } @@ -132,8 +136,16 @@ impl SatellitesConsistencyCheck { "SELECT d.source_hash, d.kind, d.variant, d.blob_hash, ", blob_exists!("d.source_hash"), " AS source_exists, ", + // A NEGATIVE row (NULL blob_hash) has no artifact BY DESIGN, so it + // counts as satisfied. Without this it reads as dangling: SQL + // comparison against NULL is NULL, so `EXISTS` is false, and every + // "this content is not worth transcoding" verdict would be reported + // as `data_loss`. The check has to be here rather than in the Rust + // arm below, so the column means "this row is in the state it + // should be" for both row shapes. + "(d.blob_hash IS NULL OR ", blob_exists!("d.blob_hash"), - " AS artifact_exists + ") AS artifact_exists FROM storage.content_derived_blobs d WHERE ($1::text IS NULL OR (d.source_hash, d.kind, d.variant) > ($1::text, $2::text, $3::text)) From 8fabbfad9eb7c8e899848b20ffd373c5cd3fb987 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sat, 29 Aug 2026 14:55:55 +0200 Subject: [PATCH 02/13] test(transcode): a fixture the WebP encoder cannot shrink MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The transcode negative path — "the result came out larger, serve the original and remember that" — had no test because no synthetic image reaches it. Measured against the real encoder: flat colour goes 4780 → 186 bytes, a diagonal gradient 24852 → 102, and uniform RGBA noise still loses by ~242 bytes at every size, a margin constant in absolute terms and so one that never flips. Grayscale does not help either; WebP's subtract-green transform handles R=G=B. Two things have to be true at once and only real content does both. The encoder is the `image` crate's own minimal VP8L writer, not libwebp, so it wins only where redundancy is extreme enough for any encoder to find it. And the original has to be near PNG-optimal, which a screenshot from a real capture tool is: a 2x Retina UI is long identical runs, flat panels and sharp edges — precisely what PNG's scanline filters plus zlib were built for. So the fixture is a real OxiCloud screenshot (emails masked by overtyping rather than block-filling, which would have added back the flat redundancy the property depends on; re-verified negative after masking, 556180 -> 511124 bytes). `fixture_premise` pins both halves of what tests/api/transcode_cache.hurl will assume — this one negative, red-image.png positive. Without the guard a future encoder bump would silently turn the negative half of that scenario into a second positive test: still passing, no longer checking what it was written to check. Worth recording for whenever libwebp replaces this encoder: most of these screenshots would likely flip to positive, which leaves every stored negative row a stale verdict. An encoder change has to purge them. Co-Authored-By: Claude Opus 5 (1M context) --- .../services/image_transcode_service.rs | 59 ++++++++++++++++++ tests/fixtures/negative-cache-transcode.png | Bin 0 -> 511124 bytes 2 files changed, 59 insertions(+) create mode 100644 tests/fixtures/negative-cache-transcode.png diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs index 02be73d9..ad422393 100644 --- a/src/infrastructure/services/image_transcode_service.rs +++ b/src/infrastructure/services/image_transcode_service.rs @@ -606,6 +606,65 @@ impl ImageTranscodeService { // ─── CPU-bound transcoding (runs on rayon, never on Tokio) ─────────────────── +#[cfg(test)] +mod fixture_premise { + //! Pins the property `tests/api/transcode_cache.hurl` is built on: one + //! fixture WebP shrinks, one it does not. + //! + //! The negative half was hard to come by and the reason is worth + //! recording. Synthetic images do not reproduce it — flat colour goes + //! 4780 → 186 bytes, a gradient 24852 → 102, and even uniform RGBA + //! noise still loses by ~242 bytes at any size, a margin that is + //! constant in absolute terms and so never flips. + //! + //! Two things have to be true at once, and only real content does + //! both. The encoder here is the `image` crate's own minimal VP8L + //! writer, not libwebp — it does none of libwebp's search over + //! predictors, colour transforms and Huffman groups — so it only wins + //! where redundancy is extreme enough that any encoder finds it. And + //! the original has to be near PNG-optimal, which a screenshot from a + //! real capture tool is: a 2× Retina UI is long identical runs, flat + //! panels and sharp edges, exactly what PNG's scanline filters plus + //! zlib were designed around. + //! + //! So the negative verdict this service persists is partly a property + //! of THIS encoder, not of the content. Swapping in libwebp would + //! likely flip most of these to positive and leave the stored negative + //! rows stale — an encoder change has to purge them. + + use super::*; + + fn webp_len(path: &str) -> (usize, usize) { + let png = std::fs::read(path).expect("fixture present"); + let webp = + transcode_image_blocking(&Bytes::from(png.clone()), "image/png", OutputFormat::WebP) + .expect("fixture decodes"); + (png.len(), webp.len()) + } + + /// If this ever fails, the hurl scenario's negative half has silently + /// become a second positive test — it would still pass while checking + /// nothing it was written to check. + #[test] + fn screenshot_fixture_is_a_genuine_negative() { + let (png, webp) = webp_len("tests/fixtures/negative-cache-transcode.png"); + assert!( + webp >= png, + "negative-cache-transcode.png no longer defeats the WebP encoder: \ + png={png} webp={webp}" + ); + } + + #[test] + fn flat_colour_fixture_is_a_genuine_positive() { + let (png, webp) = webp_len("tests/fixtures/red-image.png"); + assert!( + webp < png, + "red-image.png stopped shrinking: png={png} webp={webp}" + ); + } +} + /// Perform actual image transcoding. This is a pure CPU function — safe to call /// from `rayon::spawn` or `spawn_blocking`. fn transcode_image_blocking( diff --git a/tests/fixtures/negative-cache-transcode.png b/tests/fixtures/negative-cache-transcode.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e64dc89c9c12e98b2598a58f9cf589b5cf68ae GIT binary patch literal 511124 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�Q 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¬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

5c8Jn3^nqCGy#IqySHHSK!)80vXnN;Dp#qgG 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

i! zt{8KFf7wf>}n`=Y~PP#_=(3pQCz#H1K7**1$b0m;BYw?j2HC zE-LftjXk6$76DV7^nH7a8x;mI@O*oc;d-pC-b^xuQO9HF%~TwJ_x+PGchG5>^TJD) z7n+(cVmGI624ubT|7=wXv%fe~SYQ|`(KJ$5JEaw~DH0a|73)-#)w}UPrwc)OvP|E? zsYmlWQMDY0ell??NgR96;ZJg;x!YioWj)y> zJ(wzNx2v}PBsGrXbFj8qus}m+$VO+mI;A4_cMUGps#@e-Hab=Kz=5g!@lF;ZNI|{b zY>vckUTJ^lmQ#e2nba+=@s{=X-wrD(pWiHF>x}G)pB+w8g`V%k3qLi`j>xYYlhmBn z*AVgvY(mVl)oZU0Yzicpn1xrJF}dIcHq2SRTWi!0;Jbj`^89i<(Oshxv@+|y{Mbg@ zl)I|+Z8?91`8?M`x$0q_+&wcLz2oLL4tB=@ngcb4v-@l3Z~9ZrpX5D!72$%2Yy0?l z&`E!{G^_#EASA7prWSsn=R=gtP66$IagQntNDHi?tx15XkACcaft+_Jw0ftAy+2#K zq(*EYt@mj~_S>2d7#2>O?`}G)EQT|eCa`;*#2g@~FDG$cB3Fixx>v^;Eha5DDKu_C z3ym-@5N&nk4Q@U~wfeA;)ino=ygnvvC70bP>e~%FPc2B9(uF*CQu8yF=$JVrS}xLB z<1j@LCY54J%%WbGj2Di_b0^9fbqeupy3h|U7Z2LUMrGLi>tu=ZPm&eY})lG5t1?Aq@p%=z!{f~UszrTt1r?&BjUs# z4Z`29l2NQ(DD_%=;QkeeSP3s{k%aC-?*+TRWL(u4|&jYZtP~nw6P|RVQc?=vmj0p9Vaz6t!P^vL4(DOuTdqdP{rHn^Mxp=uw zh@=rFqoY;?#A6JjSrSS*<*kU*x&8GNEwz65X2*07FMbX6#kZ%+d)j7{%F-0kR!wd{ zc1Q+7rajV(4y8g{xCWEz--y~#aIjpNQ34rcHLHpFt#_K;`tlYi_>ySxz5=!L;AL9( zRk@)>9k_$jcKV`zYvM-%D!2{7+=oES<@QFDdg?@iM1mv&PfL-lbWt?ES2F0GYmZJ& zBjV3xt60XDb(fCgtnZd>{R!;G#VbVywEAPF3-Qn3v7T0L>CP_5yk0@ zjFUz#BYWhezEe<6@7N*FQx2qk_5w_C#Tric;0x!m5l8N7)eQtIi`#hn3Ld}QTkEtU<-E^>-x8*~7%yE~A?|TVYP?CCLc|OWCF%zx8yhG8Hz#2+{ebq*;3(`t#C@uu5`Kz z?;!&tFvs(q=H`0xSG$7C5g9~Iue!)b(9q9u`~V97t%MKR)eOSkS39Ak5+hCQVYytR zmCrY|UIZ<0y0y{0@ZBf;xcI)^pMMW~#Ft<>%X|5OcFG$9!q?IhKtpUG8b=$_@^NOT z)|x?cnz0w0w9MX0+8(@Q)<+nSe#YiSogepUZups_GQylqwmuefriJLf{H@w7b8xU9 zvp?uk1Uj{VxdwgCPV?g{r1{4izMDVA-`{<4C?@(Fp^tu()znQ%%`3N^W$PWrWaJAL zQUjNJ5z}__Bk$OaErwU*+JC_-;)mxXkL*JIu(U{H$x0>Kw z!)gw?;q+?Pot=*uODvNgWf=-%(b0LZv3J<9h!RO3SK2H|Mi7SC>3?BkP|{X%v#M|L z3Oal7#lZykzk-ZEhaO@+beWNo3i1jcWI$>kTUxSOb*LsrJJ6MsJ{Z4%=`$zpEJ+ME zKWIbrK7sC{Cn}#`2=*U8%k&|95&?NO9Itz4V^0g0zzrSy3DsM!M0VgEf@u5(sR-Iz zrhD;#M?CeRkBSVIjF!Nr#a#SKcl22eI`T@3i zk8k1~2YkJr_d1^)77!+N4v%TqSvvKra+kJO^|}6*CJCNp-)XVe+9CLT@KQgwBTlBi zC6D^Evbuk-g5Q;bm}DqpPr-=3h_#aIM3K~~2at>Qa#?_SgBOrQ_5mDN&~+J0?fBH# zhdlyPVcpy>Ip0$~YC}xtobtP2Vm--ozCk7T;D(>>vo^j4o;2xE9s!#U0nGqMTpW?b z{iV);na`La^WnEs(3a_VNO!0sahK^Vy|^At{req$x<5~zVC4sMfb1*W49e!El|nh|Mo%W4^W1Nxt$FLm$+leU%cKa0;9d5ZQS#VRF0IEk~EIoZ$H)ddcG3` z72b)A-;Ffa{rKQtg7&xD@<-|6HzfA+`#K0Ko0so$;~v8mJARL5=)Jt|aJc>;CJxQO zrlywsBk(x^iChKzMajlrJk$?Gf~H`Y3|bJBZp-~&#i8j)Z)mtU_~+%2f3arz`ozJ& z;*-zeIR?6Z-0t?39>x3YrY}T>dR-AWAO6EZU&wje%^a47_fxF>s};fE@{5(SnuC5X z=@mx^aZ@&rJq?F?C7irsbQQ|3-P_0d^Pw%q(y9G&I_s}Jgbh&Udw1%Yuo5EX1zrrF zvB}j-x9tbd19J0<#zVV~YuO*z%^z3xhki2+?tcFtvs<$1a&xzrEEA>ej>LMR-;ac{ zdi}^j&+ZD4;RFtvfrC4OYkl!Q^q(>Nd${=1O8KG4UQ4}>_tE&X_k*q$y~3yw(nohi z_7qWvmp|u{15vTJR@`oArjY>YC)9nXXUqoL7 zI(XKG&^7&~`TYE3fLFzk6vTP!?8XO7_s3ZgZYLU0o|ReIB~fN~@=H4Md%~n)o-+VIc_x}yR|0y#53#|hFLD}_NO;$jL z)ipf$7ro53rTM+cs6BS=ecYVP6VVQ@hlJT6!MskV!rvIxpVT!Q10c?Ae^&VVsfB0} zCPTS4UmE@8$8~Ke_^*5&+W7SE+fyGM3H_K0xP12~1^e@x{MUE4iCupz zT0&_u)d&&Ip1zR1sJ-a5L)?!!Crn*eJ|R;pt&qNvYu0J;?4RuRAKO$FAl6y-z@}h) z83gS9cm61RG(SwCx9Gs}>OG<_3JJK>(w}EOUn|fyB|&@5mc%d2EvD~#8}J+~74u*e zHTKsZ{)FIq9HqNwx*|=U8uUZwz2Bx%{({7dg`yV@>Y0}})!z9OT<&}L5ey zC+Ls71P5QXY{f4`p3q$W#~uG1e_fY> zxsK*!{`W4?pG6KWRjh4z%t_UnE1TYKh@UmEHug)Uz*2#_;Hvov4rT%@9U!%_LUkoExzx=#5`>(VG<2RcM+8-v5 z4MJ&W2$AMv+`~p&yn4Sxbn_uo&*^*A+i~v{?nLDqw=NU6cmkYNzo5eUV!w&-Mxo_{ zKZ&ru*p<#_$zRe3n&&i&5*a+aDZ(=fYmb=KHV zLj7nWe=gBoYd^(0#0n=+e*SA%?MwWE{NqUp4Tljb)Y=;h9<$7xas8lws$m)Ae{cC&Z>2*PJ`+!ujXh)l0w>-h2aun+CEXMvbv*u6762+I0fG!)z- zdK)n&FZlOJ<{{`;w8pWn261CcYes1Ex6Vt8-7HPmgbj>N#5_vsDs?@h_=pd|BV}_r zbKnyjBD8-y@zG#oe6iYW@NLd-TO($Lu0*@Arx+cFp~d$Ezm6ag^LluIsrIBEi2i-N z0M$c>ZBl%k7ZOSF6_du!S8w3Zc=+g1L5|L_2)5-HG<$v;NRP*%mu=_Y2O&DR(DR%set@Rl`hg@cl3Lk zFnh;sp;Yfe29ideah)CI_5PmgMJK~TS9*Rgw|p4O%K85>_8ve{Wn0_ujN*_KL!#G#Q#qBPfzVat6tvp~($RM#(uf4KzV=&N+Vv=g$A$duQ%HR##cn zsq*Zz_g;IgXFV%y^n!%kzamHX8j2*OII~l4OwwxhW@rQV2)Zpg=`=cF_%yuyQd1*?N5x*6YbfFsl$D)* zh?JkL`}=LI33xB|PMw-Z>A>LD8RulT%%lJvTjg=8DXvA%JPVWhy}koS#SB^uvR;cv z_lWEI-GzqmtncYsgaarnrTZc^s90A1xqK-V4>@ z&SUPb-+#fRzwrQWM9bZhYG+Ffa>RCvzP&qZK}x$kik%{k#c$p*X|alTKE-7w&QX1t z-ecqm!e(|7&KE^&;He%Kms)lx8{QSUJKtV`u$CwCKK;r9cU>%##?sflg$y*ix0H0U zUEip{-0yz~Nc!$Wsqncbg6II_;)Ap;|Sx0To zwukn{QGA4n9%|U>{oOem0AcIpZ=cg>)_)Sk{Y_ZT3>7JJbf^y)q2TXY;`S`&%_e7yHEVW z(%n5=ADz9nucEC&lmBgqzV@v{ZU6K3<}Yu)p{K%r1IVyz#uCsB!ML>n8Ial4^=hA{ zCRHK`;@CsTRqFR42yvtRe>mh4+wqt+SK+^e4InT^T6tqT)Wb7QmkT($Cg%dNDV%wik;`H{l zkPceA)XF~Xehu82GWze)-d(F(_wI$tNaUwAI@u%_6+}cf)x2rzAUOI(noy|yKtfp9 zBCK?|i9k?Qn@H&NApJQ#qp)gFu444ULe^_-!&eld_FX}Ghm-P3F~{2JP;!u*C&T9* zPOCbHRuTBs%deXzylN5atMwjMgML9g-0#Nsw2%`qnidomF7;&vNWKJ<_Rf}8RFzI~ zIkO($a^-&O^5vG$yv}9c1VU9+`LTzghc@@!49#+FDRK2=fcPH2;)2Tn7a$?6y+Kl-ZBB8T#RD-axCp^Dh?O)bQP70i^r; z_c%Jxo^I*3jyI9x2Z^eBrrl~Ii9ngzrvk!8jg;aD>)LQSR%dWKsQ)Mxe}-Y(_EKWc z!O^tNK7sCx%4bSu;o@ttAy0Vs+N5;lw1n|1gRr}{tufAaIN=y;_qK_a|DH@7;JS6V z#I=$_>K~r^^cE_rw?<95;8QHo!;pwD90UB=M*O$3 za+6V8&=T^@T~OB{3%S4%Iph^W4XpTSnc=G9n+8W=67!0y1aNnAiQrv~ zGtOU$8flz1&-e!}z{77_i=5Zx^ySD)IYfG@jYM4M-vgELU-s#MXuxQSmm4MPs zj#g~^k{Y(@1L6om8dCE?sGVLIhb!9wt~5^jvW^cFJ{)(H`E_h7U@)_M;Ye4*xjkJ# zhLNz^A=|(JvZ*j$W*s-PAM!4$Cu8ri_!P>;rWTy7ZAFbjaeUbSAG|!^M;~BAQx=!j zDD+akRA%3Xj;R|uS|~*oh8*GY%PVOE!d%2#0pZt(zX!952Qa zq2w$rXNWYzo}$3(_ky!(mNHDkyWV137jq2n=FHoC7D^`Aq!}0+7+AG|l`2Y1=`)(S zOd^qoqSro{^qrGwrN$)$sm>O6U%rf_#}{Qi1cSL(Ry?bYF57A0`=v4`H5S+2>E#={n zNrX?GE1Vb{J+u@0d(dV5Xut@=KZStVVG3?ymBdtEgkYH-`u5(tkJ5@2Zg+|zK<9k8RC$HC;-r~@+ObhbDye=k z=bro;p%{Bkdhz`aux^Y?SX0;fawq$|`?gdudzv-s!3+CFfx2%irqmbDlWq#!BXmEX z`~3Jd6Rd=tHcrir`c6zajX zH0t-v%a6C0$m6;WgCA;*4pOdMC-7NK(tu_l{0GxSA=I>0Q*|^oLVsV_@+;N}23g44 z3LYAr1syF;nIMLc-CB(Zs8E&Au?E-?tn5%YvY_PHsZqt)JCPBjso#?zNKfa0yuhB{ zUzFUW7j$Y7IqLa{WB5T*lSpR^C|_B^c+Wh;?$S6atgeBPoEAf<&ho<~&8#h+j$Hhv#Dz|joVlGY#R zvzdOkKY}&4M1-2~I-WP)G#j_+Q}%1oOd7jO7H!%BTQ&D`dHLetY-oM^1RTqeupE~^ zyjFlh)v_JJ#J7mr~A7ll1cv<2FvA3W}|pHYB+|LRB># zNn+o&YU)0$qq>qkwj5ja8`K9^MlB%hn(WAzTNSI^_JffFT=L>$4DD6cMBw)+$Ag#~ z%S0Ao6tN%Hrz3lI@4&BS@2zKFG(iv!gCuUhKkQtQi=u0Ejm^sXr103e?!;G5M3kMmj_qMxB^wl-?1`+1 z;oNS!a%vXlaH@zhuk-A=fnPmrNN)@~J*vGR@pWog@G~rZLStE4tOJW%)z!||wV*49 zr`|MchQ3RSm(Rwc;ivABH)LJ&W%EVT1<8q5)3*Q4b~pR^<@lxd?{+Oq7#Y$qzj+5U zn_a1y2=zOK0MwM;=T++{m_x;82)Dv)9&EdAgbBB8O2-Chr z<4KHX2~Qc;{6q^{LrtwKGhBQzSWo;gF#HJUxuQMqdY;LcYQqqz#(;?z(_tchg?O8? z@|thv^0>W79&~VSpR<=tkki1@FLE3?VpwmPRPcP&mK?%gq(`ReN;=gj5A8V2w=l3` za6s+>X|r9b;@2^Gj<$xOQyxd%!%Jttr@M>#%ZHI)^>^&PH$v;@&g1Oc z5foW64$^4$0?iaO_EnmpI7Y}#WUF9Qu9@{cMgim*^BF72GBz>;t;ED!0u(BqDc5j` z*{$2@*lr5z7M5GR&MP=g6jRlvht5D|Hb7y-&6h)}L=G(hj+y8Jfy1U*6PVoO=1FP9 zJ{wd3T{xY;_fovrsIaPmT0|pLN~%Gpw68E9HdUhDmt3@Wr!aBmt)6~=LjRpn+evoj zkKl+10xs{oynsStOltc=uu>|_PQhx1Jz^R=JaIe3e!0)$ku`bJ=!)=sBC?m4#BDfO z+ORnQM##Fp;RV*F{Z5<^CMgaFj&Fcwy8yq!U6|k|yS2cM)T+8oV5B2dM z756Sv;}gGBWtwV0;>cAhn03AxZ#)B!U+&4bDRS8HB$eUDSXk9U!C)Qar*&xALV%U` zl{Sk5*vv-P`!v$(^isDwqx0l^KYgEqAwo-z+bwEU2Om;AG_CU+lxeE z>mkQ0`Tc^Z5A9#MOhcly3wx?^;U>po^IA2{Ta9ODI!viz(kd!FX`yUVtqJ9OV@i-W ze(%>7&ITB_;{ed5^LFq!Xe8pWGdJzHHLQvRb08xF+x$0jI)6Os7}Sg>I`;C!qA|Lk zj8Rwr7w2?I4KM%}+cOvBcfh;`Vl)H!_W9%JK^96VZb5Jk}R7B)3Hc4464! z?o$meKtrWSAQ_j@4KWTuUt)%Lkb~+PHtplsBLfNByBFobW!D35w5uRdh2F}*71D=jIp3Gk{T|JSICO3U3j-IepA89p zlU*i34Rs_s$sf+g@Qx(qcHBYE`2>CF(L(lfJ$1-^6~)u$a~MtVe#`C9O#9?Jqx7AU z^AIC-TJI&R&Qy`sElh8TNaxu?vdxw;_;pz~(#tpYcdRnb1MtbrY>!thTR@9Tl zyo$x|Xk|Jk!>2iD_d`4!qxMUL`nFCEi>11et(7NXwS^y`L3a3cl@mB7Rift=tY;(7 zBO{l*t{iqJwa2d}dEn>C`NO6|LyO!`S>!Fdx)+-g`9r(cr@yBY&TO~XN1VtFJOGLq z6)>jVf$HE|nSMEMf2gp?;30-ep=!2h*l}>t;5Ct~PHEG(%g%2=mc<_|yDQI|;~xJb zO&)Rg==X%MHMu+!(CdXYsS?MaV9!!0j+T1Q8b(ob6zYtfyVoSdU038FA5-#c1CdOJ z%U}REzs-bsYr>iU+3#1szMCHLO5|N8$D-<1VIli_-&`&U=-n6Bg7nD5}N~g+0nkcCT6EY>le;l?_NP* zp4XV-aJTl59d$ogU<)qPpuAVD`l1tan@3W~mP_qUyB}d&5-&_<{Rz}}q7`?!^JF)o zJ(1p_E(|URF6g;VlPzpe%S)U-7-MHMJnTw>R4RF1753`|$(~zqOwi8wOR^iJdfwa*tAU`*Bmmrm}N1 z9>sPW|Bs9YA4U56Y!1l2@>@1V%mzh5hMUyo^v^(n+TJ}~0fnHm&({T+Fci38;LK@%Kel1B99j#}r{rD}=&=;a`DseXI z4KX8ho*i(RE0}>-P;sIskGiu{j=Kx%t-2l5{=zh&Ctm06vAj|&y6CFo>G~Oy491ws zNFqm_Vd3G&Mt1|2;&%LRKDUr~!mo$_D? zv`IAem~GW+W_k9>Q7xU@j!_a-L=;Q8xMx+}`AN8E97;o}AR8y;DZ7pkh8aLX%{>0X z4to~oJcWuo_sHGWlbaD9{{2!zwna*>RXA&Q_BZZ%z+C}iuJ2EqXa@-Q(@px}j93_c z`2d~}rDpVH6I9;9)yHjL>~JnOBHA2VlPcX3^7Yk@Lq(xUhZ+2&yteer`{FJAV2Lp9 z;IL=2Y0ykG;HNIgD$t+`dm{E$XU^h7C`jE{RZDCPXT%|2Jw(PvIticCXu9a5dJ^Bn zTgRxBztyo!R@Gn0D8Qkcm$vD9TfUQELZzy1V?dznRCiXor~U#O{FRI)j^jug)?8CH z$e#ronj9S2yT<3!!S>fAFwZtxm^4`5hFhS`_pl(_~^qj@#ns?s$Vq zI05t%HNYAaV7UTihU}}hxe7p60Pw5Y*TggX$Z5%gd!KF;!J3}SrrvrR`F1>v>hBZa zf5oDcd^C)upk7Bt$!s?Trv;MW^{H4Wp=nx&zHT)QKT* z8DAc$qjkg-;?lwDD?)T^>MEh%`>>6Q<8xK=IjfF_%si?uCI`(!k3u3WpLV#>hEcwo z5Wv*)GWGnNV%-!jCM_Wiv$l5x6RSJs=&`G*Idve_Thn)Gn3!0X6y@Zjv|XmybiH?Z z)}z-Z9?o1no{vs^SWMoTHt1>X)lᬰQ1#nm_va?M*#rl=xR9 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⋙o$^(WY$jMf#JKa%1^NK2g6@JJZILW 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 Ud1w2p=YXH`6Lkfsyy?6D0fgXpEdT%j literal 0 HcmV?d00001 From f4e47bad6d73a1793ea4a68b1e4cb7de5b8e8a44 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sat, 29 Aug 2026 23:50:58 +0200 Subject: [PATCH 03/13] test(transcode): prove the transcode is computed once per content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds `GET /api/admin/transcode/stats` and a hurl scenario that uses it to assert both halves of the caching contract. The endpoint exists because the property was previously unobservable. `derived_blob_copy.hurl` records the same limitation for thumbnails: stored blob, RAM cache and a fresh re-render return identical bytes with identical status, so no HTTP-level assertion can tell them apart. Counters can. `transcodes` is work done; `cache_hits` and `disk_hits` are work avoided, and a rising `transcodes` against a flat `disk_hits` is exactly what a broken derived tier looks like from outside. Each case uploads the same bytes as TWO distinct files. Re-fetching one file would only prove moka works — that cache is keyed `{file_id}:{ext}`. A second file with identical content is a guaranteed memory miss but the same content hash, so avoiding a transcode there can only be the content-keyed tier answering. That is the whole point of keying derivations by content rather than by file, and this is the first test that can see it. The negative half is the one the row exists for: without it the server re-runs a full decode + encode of a half-megabyte screenshot for every file sharing that content, on every request, to discard the result each time. Assertions capture-then-compare rather than computing deltas — hurl has no arithmetic in predicates, and pinning the exact prior value is stricter anyway, since a transcode triggered from anywhere shows up. Absolute values are never asserted: other scenarios in the same run transcode too. Co-Authored-By: Claude Opus 5 (1M context) --- src/interfaces/api/handlers/admin_handler.rs | 46 +++ tests/api/run.sh | 1 + tests/api/transcode_cache.hurl | 310 +++++++++++++++++++ 3 files changed, 357 insertions(+) create mode 100644 tests/api/transcode_cache.hurl diff --git a/src/interfaces/api/handlers/admin_handler.rs b/src/interfaces/api/handlers/admin_handler.rs index 4e184929..10d62b36 100644 --- a/src/interfaces/api/handlers/admin_handler.rs +++ b/src/interfaces/api/handlers/admin_handler.rs @@ -159,6 +159,11 @@ pub fn admin_routes() -> Router> { // `/blob/{hash}`) stay at `/api/dedup/*`. .route("/dedup/stats", get(get_stats)) .route("/dedup/recalculate", post(recalculate_stats)) + // Transcode effectiveness. Nothing exposed these before, so there + // was no way to tell a served-from-cache response from one that + // re-ran the decode + encode — not from the outside, and not from + // a test either. + .route("/transcode/stats", get(get_transcode_stats)) // SMTP diagnostics .route("/smtp/info", get(get_smtp_info)) .route("/smtp/test", post(send_smtp_test)) @@ -2502,6 +2507,47 @@ pub async fn delete_drive_admin( /// /// Production endpoint, always on. Read-only, so no audit line — /// the standard admin-middleware auth check is enough. +/// `GET /api/admin/transcode/stats` — WebP transcode effectiveness. +/// +/// The four counters distinguish where a response came from, which is +/// otherwise invisible: `transcodes` is work actually done, while +/// `cache_hits` (in-memory, keyed by file id) and `disk_hits` (the +/// durable content-keyed tier, plus the legacy local cache) are work +/// avoided. A rising `transcodes` against a flat `disk_hits` means the +/// derived tier is not being consulted — which is exactly the +/// regression a migration can introduce silently. +/// +/// `bytes_saved` counts only successful transcodes; images the encoder +/// could not shrink contribute nothing to it and are remembered as +/// negative rows instead. +/// +/// Read-only, so no audit line — the admin middleware gate is enough. +#[utoipa::path( + get, + path = "/api/admin/transcode/stats", + responses( + (status = 200, description = "Transcode statistics"), + (status = 401, description = "Unauthorized"), + (status = 403, description = "Admin required"), + ), + security(("bearerAuth" = [])), + tag = "admin" +)] +pub async fn get_transcode_stats(State(state): State>) -> impl IntoResponse { + let s = state.core.image_transcode_service.get_stats().await; + ( + StatusCode::OK, + Json(serde_json::json!({ + "cache_hits": s.cache_hits, + "disk_hits": s.disk_hits, + "transcodes": s.transcodes, + "bytes_saved": s.bytes_saved, + "transcode_errors": s.transcode_errors, + })), + ) + .into_response() +} + #[utoipa::path( get, path = "/api/admin/jobs", diff --git a/tests/api/run.sh b/tests/api/run.sh index 75d89c34..f829274d 100755 --- a/tests/api/run.sh +++ b/tests/api/run.sh @@ -169,6 +169,7 @@ hurl --variables-file "$API_DIR/test.env" --file-root "$REPO_ROOT/tests" --test "$API_DIR/derived_blob_copy.hurl" \ "$API_DIR/thumbnail_etag_content_keyed.hurl" \ "$API_DIR/attached_thumbnail_copy.hurl" \ + "$API_DIR/transcode_cache.hurl" \ "$API_DIR/dedup_admin_gate.hurl" \ "$API_DIR/admin_jobs.hurl" \ "$API_DIR/recoverable_jobs.hurl" \ diff --git a/tests/api/transcode_cache.hurl b/tests/api/transcode_cache.hurl new file mode 100644 index 00000000..da05581c --- /dev/null +++ b/tests/api/transcode_cache.hurl @@ -0,0 +1,310 @@ +# ============================================================= +# OxiCloud – Transcode caching: positive and negative +# +# Pins that a WebP transcode is computed ONCE per distinct content and +# then answered from the derived tier, in both directions: +# +# * positive — WebP is smaller, so the bytes are stored and reused +# * negative — WebP came out larger, so the VERDICT is stored and the +# decode + encode is not repeated +# +# ## Why this can assert what the thumbnail tests could not +# +# `derived_blob_copy.hurl` documents that thumbnail tier selection is +# invisible over HTTP: stored blob, RAM cache and a fresh re-render all +# return identical bytes. Transcodes are the same — but +# `GET /api/admin/transcode/stats` now exposes the counters, so "was +# this computed or served" becomes observable from outside the process. +# `transcodes` is work done; `cache_hits` (RAM, keyed by file id) and +# `disk_hits` (the durable content-keyed tier) are work avoided. +# +# ## Why each case uploads the same bytes twice +# +# The in-memory cache is keyed `{file_id}:{ext}`, so re-fetching the SAME +# file proves only that moka works. Uploading identical content as a +# SECOND file gives a different file id and therefore a guaranteed memory +# miss — but the same content hash. If the second fetch still avoids a +# transcode, only the content-keyed tier can have answered it. That is +# precisely what the migration bought, and it is unobservable any other +# way. +# +# ## Fixtures +# +# `red-image.png` shrinks (4780 → 186 bytes). `negative-cache-transcode.png` +# does not — a real screenshot, which is the only thing that defeats this +# encoder; synthetic images all come out positive. Both properties are +# pinned by `image_transcode_service::fixture_premise`, so if an encoder +# bump ever flips one, that unit test fails loudly instead of this +# scenario quietly testing nothing. +# +# Prerequisites: setup.hurl must have run (admin user exists). +# +# Run: +# hurl --variables-file tests/api/test.env --file-root tests \ +# --test tests/api/transcode_cache.hurl +# ============================================================= + + +# ───────────────────────────────────────────────────────────── +# Step 1 – Login +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/auth/login +Content-Type: application/json +{ + "username": "{{username}}", + "password": "{{password}}" +} + +HTTP 200 +[Captures] +token: jsonpath "$.access_token" + + +# ───────────────────────────────────────────────────────────── +# Step 2 – Working folder +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/folders +Authorization: Bearer {{token}} +Content-Type: application/json +{ + "name": "hurl-transcode-cache" +} + +HTTP 201 +[Captures] +folder_id: jsonpath "$.id" + + +# ───────────────────────────────────────────────────────────── +# Step 3 – Baseline counters. +# +# Absolute values are meaningless here — earlier scenarios in the same +# run transcode images too. Everything below is asserted as a DELTA +# from this point, which is also why this file must not assume it runs +# first. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/admin/transcode/stats +Authorization: Bearer {{token}} + +HTTP 200 +[Captures] +base_transcodes: jsonpath "$.transcodes" +base_disk_hits: jsonpath "$.disk_hits" + + +# ═════════════════════════════════════════════════════════════ +# POSITIVE CASE — WebP is smaller +# ═════════════════════════════════════════════════════════════ + +# ───────────────────────────────────────────────────────────── +# Step 4 – Upload a shrinkable image +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/files/upload +Authorization: Bearer {{token}} +[MultipartFormData] +folder_id: {{folder_id}} +file: file,fixtures/red-image.png; image/png + +HTTP 201 +[Captures] +pos_a_id: jsonpath "$.id" +pos_hash: jsonpath "$.content_hash" + + +# ───────────────────────────────────────────────────────────── +# Step 5 – Fetch it as a WebP-capable client. +# +# `Accept: image/webp` is what selects the transcode path; +# `BrowserCapabilities::from_accept_header` looks for exactly this. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/files/{{pos_a_id}}/content +Authorization: Bearer {{token}} +Accept: image/webp,image/png,*/* + +HTTP 200 +[Asserts] +header "Content-Type" contains "image/webp" + + +# ───────────────────────────────────────────────────────────── +# Step 6 – That was work actually done, not a cache hit. +# +# Captured rather than computed: hurl has no arithmetic in predicates, +# and pinning the exact value here is stronger anyway — the later steps +# assert equality against it, so any transcode from any source shows up. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/admin/transcode/stats +Authorization: Bearer {{token}} + +HTTP 200 +[Captures] +after_positive: jsonpath "$.transcodes" +[Asserts] +jsonpath "$.transcodes" > {{base_transcodes}} + + +# ───────────────────────────────────────────────────────────── +# Step 7 – The SAME bytes uploaded as a second, distinct file. +# +# Same content hash, different file id. Asserting the hash matches is +# what makes the next step meaningful: if these two files did not share +# content, a second transcode would be correct rather than a regression. +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/files/upload +Authorization: Bearer {{token}} +[MultipartFormData] +folder_id: {{folder_id}} +file: file,fixtures/red-image.png; image/png + +HTTP 201 +[Captures] +pos_b_id: jsonpath "$.id" +[Asserts] +jsonpath "$.content_hash" == "{{pos_hash}}" +jsonpath "$.id" != "{{pos_a_id}}" + + +# ───────────────────────────────────────────────────────────── +# Step 8 – Fetching the second file still yields WebP. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/files/{{pos_b_id}}/content +Authorization: Bearer {{token}} +Accept: image/webp,image/png,*/* + +HTTP 200 +[Asserts] +header "Content-Type" contains "image/webp" + + +# ───────────────────────────────────────────────────────────── +# Step 9 – …WITHOUT a second transcode. +# +# The memory cache could not have served this: it is keyed by file id +# and this is a different file. Only the content-keyed derived tier +# answers here, which is the whole point of keying derivations by +# content rather than by file. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/admin/transcode/stats +Authorization: Bearer {{token}} + +HTTP 200 +[Asserts] +jsonpath "$.transcodes" == {{after_positive}} +jsonpath "$.disk_hits" > {{base_disk_hits}} + + +# ═════════════════════════════════════════════════════════════ +# NEGATIVE CASE — WebP comes out larger +# ═════════════════════════════════════════════════════════════ + +# ───────────────────────────────────────────────────────────── +# Step 10 – Upload an image the encoder cannot shrink +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/files/upload +Authorization: Bearer {{token}} +[MultipartFormData] +folder_id: {{folder_id}} +file: file,fixtures/negative-cache-transcode.png; image/png + +HTTP 201 +[Captures] +neg_a_id: jsonpath "$.id" +neg_hash: jsonpath "$.content_hash" + + +# ───────────────────────────────────────────────────────────── +# Step 11 – A WebP-capable client gets the ORIGINAL back. +# +# Not a failure: transcoding to something larger would cost the client +# bandwidth, so the service serves the PNG and remembers why. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/files/{{neg_a_id}}/content +Authorization: Bearer {{token}} +Accept: image/webp,image/png,*/* + +HTTP 200 +[Asserts] +header "Content-Type" contains "image/png" + + +# ───────────────────────────────────────────────────────────── +# Step 12 – The attempt still cost one decode + encode. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/admin/transcode/stats +Authorization: Bearer {{token}} + +HTTP 200 +[Captures] +after_negative: jsonpath "$.transcodes" +[Asserts] +jsonpath "$.transcodes" > {{after_positive}} + + +# ───────────────────────────────────────────────────────────── +# Step 13 – Same bytes again, as a distinct file. +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/files/upload +Authorization: Bearer {{token}} +[MultipartFormData] +folder_id: {{folder_id}} +file: file,fixtures/negative-cache-transcode.png; image/png + +HTTP 201 +[Captures] +neg_b_id: jsonpath "$.id" +[Asserts] +jsonpath "$.content_hash" == "{{neg_hash}}" +jsonpath "$.id" != "{{neg_a_id}}" + + +# ───────────────────────────────────────────────────────────── +# Step 14 – Original again, as expected. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/files/{{neg_b_id}}/content +Authorization: Bearer {{token}} +Accept: image/webp,image/png,*/* + +HTTP 200 +[Asserts] +header "Content-Type" contains "image/png" + + +# ───────────────────────────────────────────────────────────── +# Step 15 – …and the verdict was NOT recomputed. +# +# This is the assertion the negative row exists for. Without it the +# server re-runs a full decode + encode of a half-megabyte screenshot on +# every request for every file sharing that content, only to throw the +# result away each time. A counter that moved here would mean the +# negative row was not written, not read, or not keyed by content. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/admin/transcode/stats +Authorization: Bearer {{token}} + +HTTP 200 +[Asserts] +jsonpath "$.transcodes" == {{after_negative}} + + +# ───────────────────────────────────────────────────────────── +# Step 16 – Teardown. Hurl files share one database, so a folder left +# behind changes what later scenarios see. +# ───────────────────────────────────────────────────────────── +DELETE {{base_url}}/api/folders/{{folder_id}} +Authorization: Bearer {{token}} + +HTTP 204 + + +GET {{base_url}}/api/trash +Authorization: Bearer {{token}} + +HTTP 200 +[Captures] +trash_id: jsonpath "$.items[?(@.resource.id == '{{folder_id}}')].resource.id" + + +DELETE {{base_url}}/api/trash/{{trash_id}} +Authorization: Bearer {{token}} + +HTTP 200 From 7705fca3af774918ff99416cea815e04a20b927d Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 13:40:16 +0200 Subject: [PATCH 04/13] feat(transcode): count the decodes that pay nothing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Writing the hurl scenario surfaced a gap: a transcode that comes out larger than the original runs a full decode + encode and increments no counter at all. `transcodes` is bumped only on the success path, beside `bytes_saved`, so the most expensive failure mode was invisible — a multi-megapixel image decoded and re-encoded on every request, for every file sharing that content, producing nothing. That is precisely the cost the persisted negative verdict exists to stop paying, and it could not be measured before or after. `not_beneficial` counts it, kept separate from `transcodes` because conflating "work done" with "work that paid off" would hide exactly what an operator needs to see. It is also what lets the hurl scenario assert the negative half: the first fetch increments it, the second — a distinct file with identical content — leaves it untouched, which is the negative row being read rather than the verdict recomputed. Assertions are exact equality against captured values throughout, no `>` or `<`. A "greater than" would pass if a counter moved for the wrong reason; equality against the prior reading catches any transcode from any source, including one this scenario did not intend to cause. Also fixes two URLs the first runs caught: file download is `GET /api/files/{id}`, not `/content`, and the trash listing is `/api/trash/resources`. And the duplicate uploads go to a second folder — re-uploading the same filename into the same folder returns the EXISTING file id, which would have made both halves of every "two files, one content" pair the same row and left the scenario asserting nothing. Co-Authored-By: Claude Opus 5 (1M context) --- .../services/image_transcode_service.rs | 16 +++++ src/interfaces/api/handlers/admin_handler.rs | 4 ++ tests/api/transcode_cache.hurl | 64 +++++++++++++++---- 3 files changed, 71 insertions(+), 13 deletions(-) diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs index ad422393..1c99732f 100644 --- a/src/infrastructure/services/image_transcode_service.rs +++ b/src/infrastructure/services/image_transcode_service.rs @@ -112,6 +112,16 @@ struct AtomicTranscodeStats { transcodes: AtomicU64, bytes_saved: AtomicU64, transcode_errors: AtomicU64, + /// Decodes + encodes that produced something LARGER than the original. + /// + /// Counted separately because `transcodes` means "work that paid off" + /// — it is incremented only on the success path, alongside + /// `bytes_saved`. Without this counter the most expensive failure mode + /// is invisible: the full decode and re-encode of a multi-megapixel + /// image, repeated for every file sharing that content, producing + /// nothing. That is precisely the cost the persisted negative verdict + /// exists to eliminate, so it needs to be measurable before and after. + not_beneficial: AtomicU64, } /// Snapshot of transcoding statistics @@ -122,6 +132,7 @@ pub struct TranscodeStats { pub transcodes: u64, pub bytes_saved: u64, pub transcode_errors: u64, + pub not_beneficial: u64, } impl AtomicTranscodeStats { @@ -132,6 +143,7 @@ impl AtomicTranscodeStats { transcodes: self.transcodes.load(Ordering::Relaxed), bytes_saved: self.bytes_saved.load(Ordering::Relaxed), transcode_errors: self.transcode_errors.load(Ordering::Relaxed), + not_beneficial: self.not_beneficial.load(Ordering::Relaxed), } } } @@ -433,6 +445,10 @@ impl ImageTranscodeService { let transcoded_size = transcoded_bytes.len(); if transcoded_size >= original_size { + // Counted here, not with `transcodes` — the work happened but + // paid nothing, and conflating the two would hide the cost this + // whole negative-verdict mechanism exists to stop paying. + self.stats.not_beneficial.fetch_add(1, Ordering::Relaxed); tracing::debug!( "⚠️ Transcode not beneficial for {}: {} -> {} bytes", file_id, diff --git a/src/interfaces/api/handlers/admin_handler.rs b/src/interfaces/api/handlers/admin_handler.rs index 10d62b36..455f672f 100644 --- a/src/interfaces/api/handlers/admin_handler.rs +++ b/src/interfaces/api/handlers/admin_handler.rs @@ -2543,6 +2543,10 @@ pub async fn get_transcode_stats(State(state): State>) -> impl Int "transcodes": s.transcodes, "bytes_saved": s.bytes_saved, "transcode_errors": s.transcode_errors, + // Decodes that produced something larger. Work done for no + // gain — the thing the stored negative verdict prevents + // repeating, and invisible before this counter existed. + "not_beneficial": s.not_beneficial, })), ) .into_response() diff --git a/tests/api/transcode_cache.hurl b/tests/api/transcode_cache.hurl index da05581c..887f02c3 100644 --- a/tests/api/transcode_cache.hurl +++ b/tests/api/transcode_cache.hurl @@ -75,6 +75,26 @@ HTTP 201 folder_id: jsonpath "$.id" +# ───────────────────────────────────────────────────────────── +# Step 2b – A second folder, for the duplicate uploads. +# +# Re-uploading the same filename into the SAME folder overwrites the +# existing file and returns its id, so both halves of a "two distinct +# files, one content" pair would be the same row and the test would +# assert nothing. A second folder keeps the name free. +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/folders +Authorization: Bearer {{token}} +Content-Type: application/json +{ + "name": "hurl-transcode-cache-dup" +} + +HTTP 201 +[Captures] +folder_dup_id: jsonpath "$.id" + + # ───────────────────────────────────────────────────────────── # Step 3 – Baseline counters. # @@ -89,7 +109,7 @@ Authorization: Bearer {{token}} HTTP 200 [Captures] base_transcodes: jsonpath "$.transcodes" -base_disk_hits: jsonpath "$.disk_hits" +base_not_beneficial: jsonpath "$.not_beneficial" # ═════════════════════════════════════════════════════════════ @@ -117,7 +137,7 @@ pos_hash: jsonpath "$.content_hash" # `Accept: image/webp` is what selects the transcode path; # `BrowserCapabilities::from_accept_header` looks for exactly this. # ───────────────────────────────────────────────────────────── -GET {{base_url}}/api/files/{{pos_a_id}}/content +GET {{base_url}}/api/files/{{pos_a_id}} Authorization: Bearer {{token}} Accept: image/webp,image/png,*/* @@ -139,8 +159,9 @@ Authorization: Bearer {{token}} HTTP 200 [Captures] after_positive: jsonpath "$.transcodes" +after_positive_disk: jsonpath "$.disk_hits" [Asserts] -jsonpath "$.transcodes" > {{base_transcodes}} +jsonpath "$.not_beneficial" == {{base_not_beneficial}} # ───────────────────────────────────────────────────────────── @@ -153,7 +174,7 @@ jsonpath "$.transcodes" > {{base_transcodes}} POST {{base_url}}/api/files/upload Authorization: Bearer {{token}} [MultipartFormData] -folder_id: {{folder_id}} +folder_id: {{folder_dup_id}} file: file,fixtures/red-image.png; image/png HTTP 201 @@ -167,7 +188,7 @@ jsonpath "$.id" != "{{pos_a_id}}" # ───────────────────────────────────────────────────────────── # Step 8 – Fetching the second file still yields WebP. # ───────────────────────────────────────────────────────────── -GET {{base_url}}/api/files/{{pos_b_id}}/content +GET {{base_url}}/api/files/{{pos_b_id}} Authorization: Bearer {{token}} Accept: image/webp,image/png,*/* @@ -190,7 +211,8 @@ Authorization: Bearer {{token}} HTTP 200 [Asserts] jsonpath "$.transcodes" == {{after_positive}} -jsonpath "$.disk_hits" > {{base_disk_hits}} +jsonpath "$.not_beneficial" == {{base_not_beneficial}} +jsonpath "$.disk_hits" != {{after_positive_disk}} # ═════════════════════════════════════════════════════════════ @@ -218,7 +240,7 @@ neg_hash: jsonpath "$.content_hash" # Not a failure: transcoding to something larger would cost the client # bandwidth, so the service serves the PNG and remembers why. # ───────────────────────────────────────────────────────────── -GET {{base_url}}/api/files/{{neg_a_id}}/content +GET {{base_url}}/api/files/{{neg_a_id}} Authorization: Bearer {{token}} Accept: image/webp,image/png,*/* @@ -235,9 +257,11 @@ Authorization: Bearer {{token}} HTTP 200 [Captures] -after_negative: jsonpath "$.transcodes" +after_negative: jsonpath "$.not_beneficial" [Asserts] -jsonpath "$.transcodes" > {{after_positive}} +# The decode + encode ran and produced nothing usable, which is counted +# separately from `transcodes` — that only counts work that paid off. +jsonpath "$.transcodes" == {{after_positive}} # ───────────────────────────────────────────────────────────── @@ -246,7 +270,7 @@ jsonpath "$.transcodes" > {{after_positive}} POST {{base_url}}/api/files/upload Authorization: Bearer {{token}} [MultipartFormData] -folder_id: {{folder_id}} +folder_id: {{folder_dup_id}} file: file,fixtures/negative-cache-transcode.png; image/png HTTP 201 @@ -260,7 +284,7 @@ jsonpath "$.id" != "{{neg_a_id}}" # ───────────────────────────────────────────────────────────── # Step 14 – Original again, as expected. # ───────────────────────────────────────────────────────────── -GET {{base_url}}/api/files/{{neg_b_id}}/content +GET {{base_url}}/api/files/{{neg_b_id}} Authorization: Bearer {{token}} Accept: image/webp,image/png,*/* @@ -283,7 +307,8 @@ Authorization: Bearer {{token}} HTTP 200 [Asserts] -jsonpath "$.transcodes" == {{after_negative}} +jsonpath "$.not_beneficial" == {{after_negative}} +jsonpath "$.transcodes" == {{after_positive}} # ───────────────────────────────────────────────────────────── @@ -296,15 +321,28 @@ Authorization: Bearer {{token}} HTTP 204 -GET {{base_url}}/api/trash +DELETE {{base_url}}/api/folders/{{folder_dup_id}} +Authorization: Bearer {{token}} + +HTTP 204 + + +GET {{base_url}}/api/trash/resources Authorization: Bearer {{token}} HTTP 200 [Captures] trash_id: jsonpath "$.items[?(@.resource.id == '{{folder_id}}')].resource.id" +trash_dup_id: jsonpath "$.items[?(@.resource.id == '{{folder_dup_id}}')].resource.id" DELETE {{base_url}}/api/trash/{{trash_id}} Authorization: Bearer {{token}} HTTP 200 + + +DELETE {{base_url}}/api/trash/{{trash_dup_id}} +Authorization: Bearer {{token}} + +HTTP 200 From 0e09cb81ff3c067f204615215ec70a542811aa32 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 15:06:29 +0200 Subject: [PATCH 05/13] feat(transcode): transcode_import drains .transcoded/, re-keying as it goes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The twin of thumb_derived_import, with the difference that shapes the whole job: the legacy tree is keyed by FILE (`{file_id}.webp`) while the destination is keyed by CONTENT. Thumbnail sidecars were already named by blob hash, so importing them was a move; every entry here has to be resolved through storage.files first. That re-keying is the point rather than bookkeeping. A sandbox with five .skip markers had three of them naming the same image, so the file-keyed tree stored one verdict three times. After the import it is one row, and any future upload of those bytes inherits it instead of paying for the decision again. Both artifact kinds are claimed by one walk: `{id}.webp` becomes a derived Blob, `{id}.webp.skip` becomes a negative row. They share a source file and a cursor, so splitting them into two passes would be two chances for the pair to disagree about what had been handled. `.skip` is matched BEFORE `.webp` — the shorter suffix matches a marker too, and getting that backwards would read a zero-byte file and store it as the transcode of its source, then serve it to clients. There is a test. Entries whose file is gone cannot be re-keyed at all, so they are reported and, under repair, deleted: unimportable by definition, and a run that keeps rediscovering them never reports zero, so the gate for removing the directory never opens. Deletion reuses verify_and_unlink, so a cached transcode is removed only after its stored replacement reads back byte-identical. Directory removal follows the same rule as .thumbnails/ — delete, and only rename aside if a non-cache file is in the way. The batch checkpoint is a shared helper rather than inline at both exits of the loop body. The first draft duplicated it and dropped the future on the skip path without awaiting: the entry counted toward the batch, the cursor never advanced, and a resumed run would have rewalked everything it had already handled. Co-Authored-By: Claude Opus 5 (1M context) --- src/common/di.rs | 18 + src/infrastructure/services/mod.rs | 1 + .../services/transcode_import_service.rs | 560 ++++++++++++++++++ 3 files changed, 579 insertions(+) create mode 100644 src/infrastructure/services/transcode_import_service.rs diff --git a/src/common/di.rs b/src/common/di.rs index 73e98ee1..8daa9324 100644 --- a/src/common/di.rs +++ b/src/common/di.rs @@ -1505,6 +1505,24 @@ impl AppServiceFactory { .register_recoverable_job(&core.job_registry, &job_store_provider_dyn) .await; + // Step 7 migration tenant: drains `.transcoded/` the same way the + // thumbnail imports drain `.thumbnails/`, with one extra step — + // the legacy tree is keyed by FILE (`{file_id}.webp`) while the + // destination is keyed by CONTENT, so every entry is re-keyed + // through `storage.files` on the way in. Entries naming the same + // content collapse into one row, which is the saving this migration + // exists for; a sandbox with five `.skip` markers had three of them + // describing one image. + let _ = Arc::new( + crate::infrastructure::services::transcode_import_service::TranscodeImport::new( + std::path::Path::new(&self.storage_path).join(".transcoded"), + core.dedup_service.clone(), + maintenance_pool.clone(), + ), + ) + .register_recoverable_job(&core.job_registry, &job_store_provider_dyn) + .await; + // Both satellite tables, checked for mappings whose Blob is gone. // Nothing else can: a row whose SOURCE was reaped still holds a valid // reference to a real artifact with a correct refcount, so every diff --git a/src/infrastructure/services/mod.rs b/src/infrastructure/services/mod.rs index 4b75ac4c..b872a0bb 100644 --- a/src/infrastructure/services/mod.rs +++ b/src/infrastructure/services/mod.rs @@ -64,6 +64,7 @@ pub mod thumb_derived_import_service; pub mod thumbnail_service; #[cfg(test)] mod thumbnail_service_test; +pub mod transcode_import_service; pub mod trash_cleanup_service; pub mod tree_etag_flush_service; pub mod webdav_dead_property_store; diff --git a/src/infrastructure/services/transcode_import_service.rs b/src/infrastructure/services/transcode_import_service.rs new file mode 100644 index 00000000..83c29d38 --- /dev/null +++ b/src/infrastructure/services/transcode_import_service.rs @@ -0,0 +1,560 @@ +//! Step 7 migration tenant: drains `.transcoded/` into the derived tier. +//! +//! The twin of `thumb_derived_import`, with one difference that shapes the +//! whole job: **the legacy tree is keyed by file, the destination by +//! content.** Thumbnail sidecars were already named by blob hash, so their +//! import was a move. These are named `{file_id}.webp`, so every entry has +//! to be re-keyed through `storage.files` before it can be stored. +//! +//! That re-keying is not bookkeeping — it is the point. A sandbox with five +//! `.skip` markers had three of them naming the same content, so the +//! file-keyed tree held three copies of one verdict. After the import that +//! is a single row, and any future upload of those bytes inherits it +//! instead of paying for the decision again. +//! +//! ### Two artifact kinds, one walk +//! +//! * `{file_id}.webp` — a cached transcode. Imported as a derived Blob. +//! * `{file_id}.webp.skip` — a zero-byte marker meaning "WebP came out +//! larger for this file". Imported as a NEGATIVE row (NULL `blob_hash`), +//! so the verdict survives the deletion of the directory holding it. +//! +//! Both are claimed by the same walk because they share a source file and +//! a cursor; splitting them would mean two passes over one directory and +//! two chances for the pair to disagree about what has been handled. +//! +//! ### What is deliberately not imported +//! +//! Entries whose file is gone. The destination row is keyed by content +//! hash, which is resolved *through* `storage.files` — no file, no hash, +//! nothing to key by. Under `repair` these are deleted, because they are +//! unimportable by definition and a run that keeps rediscovering them +//! never reports zero, so the gate for removing the directory never opens. + +use std::path::PathBuf; +use std::sync::Arc; + +use async_trait::async_trait; +use bytes::Bytes; +use sqlx::PgPool; +use tokio::fs; + +use crate::infrastructure::scheduler::{ + JobRegistry, JobRunArgs, JobStore, JobStoreProvider, Mutates, RecoverableJobHandler, + RunOutcome, RunStatus, record_or_log, +}; +use crate::infrastructure::services::dedup_service::DedupService; +use crate::infrastructure::services::thumb_derived_import_service::audit_sidecar_deleted; + +pub const TRANSCODE_IMPORT_JOB_NAME: &str = "transcode_import"; + +/// `content_derived_blobs.kind` for everything this job writes. Must match +/// `ImageTranscodeService::DERIVED_KIND`, or the import would file its rows +/// where the read path does not look. +const DERIVED_KIND: &str = "transcode"; + +/// The only variant this job handles. `.transcoded/` has exactly one +/// subdirectory today; a second output format would add a directory and a +/// variant together, and this walk would grow a loop rather than a branch. +const VARIANT_WEBP: &str = "webp"; + +/// Files handled between checkpoints. Each is a read plus, at most, a blob +/// write — deliberately smaller than a pure-DB sweep's page. +const BATCH_SIZE: usize = 100; + +pub struct TranscodeImport { + /// `{storage_path}/.transcoded`, matching `ImageTranscodeService::new`. + transcoded_root: PathBuf, + dedup: Arc, + /// Needed for the re-keying: file id → content hash. The thumbnail + /// imports have no equivalent because their sidecars were already + /// content-named. + pool: Arc, +} + +impl TranscodeImport { + pub fn new(transcoded_root: PathBuf, dedup: Arc, pool: Arc) -> Self { + Self { + transcoded_root, + dedup, + pool, + } + } + + pub async fn register_recoverable_job( + self: Arc, + registry: &JobRegistry, + provider: &Arc, + ) -> Arc { + // Daily, matching the thumbnail imports: idempotent and resumable, + // so periodic is safe, and a migration nobody remembers to trigger + // never finishes. The tick imports but does not delete — `repair` + // defaults false. + registry + .register_recoverable_job( + self.clone(), + provider.clone(), + Some(std::time::Duration::from_secs(24 * 3600)), + ) + .await; + self + } + + /// The `webp/` subdirectory, where both artifact kinds live. + fn variant_dir(&self) -> PathBuf { + self.transcoded_root.join(VARIANT_WEBP) + } + + /// Sorted entry names, so the cursor totally orders the traversal. + /// + /// Returns both `{id}.webp` and `{id}.webp.skip`; the caller decides + /// which is which. Anything else is ignored rather than reported — the + /// directory is a local cache and has never promised to hold only our + /// files. + async fn entry_names(dir: &std::path::Path) -> Vec { + let Ok(mut entries) = fs::read_dir(dir).await else { + return Vec::new(); + }; + let mut names = Vec::new(); + while let Ok(Some(entry)) = entries.next_entry().await { + if let Some(name) = entry.file_name().to_str() + && parse_entry(name).is_some() + { + names.push(name.to_string()); + } + } + names.sort(); + names + } + + /// Resolve a file id to the BLAKE3 of its content. + /// + /// `None` means the file is gone — which is the unimportable case, not + /// an error: the destination is keyed by content, and a deleted file + /// has no content to key by. + async fn content_hash_of(&self, file_id: &str) -> Option { + sqlx::query_as::<_, (String,)>( + "SELECT blob_hash FROM storage.files WHERE id = $1::uuid AND blob_hash IS NOT NULL", + ) + .bind(file_id) + .fetch_optional(self.pool.as_ref()) + .await + .ok() + .flatten() + .map(|(h,)| h) + } +} + +/// Checkpoint once a batch has accumulated, resetting the counter. +/// +/// Returns `Some(RunOutcome::Failed)` when the store write fails, for the +/// caller to return. Shared by both exits of the loop body so the cursor +/// advances identically whether an entry was imported or skipped — the +/// alternative is two copies of this, which is how the first draft ended +/// up dropping a future and silently never checkpointing on one path. +async fn checkpoint_if_due( + store: &dyn JobStore, + name: &str, + since_checkpoint: &mut usize, +) -> Option { + if *since_checkpoint < BATCH_SIZE { + return None; + } + let scanned = *since_checkpoint as u64; + *since_checkpoint = 0; + match store.checkpoint(name.as_bytes().to_vec(), scanned).await { + Ok(()) => None, + Err(e) => Some(RunOutcome::Failed { + message: format!("checkpoint: {e}"), + }), + } +} + +/// What a `.transcoded/webp/` entry names. +/// +/// Returns the file id and whether it is a negative marker. Anything not +/// matching either shape is not ours. +fn parse_entry(name: &str) -> Option<(&str, bool)> { + if let Some(id) = name.strip_suffix(".webp.skip") { + return (!id.is_empty()).then_some((id, true)); + } + if let Some(id) = name.strip_suffix(".webp") { + return (!id.is_empty()).then_some((id, false)); + } + None +} + +#[async_trait] +impl RecoverableJobHandler for TranscodeImport { + fn name(&self) -> &str { + TRANSCODE_IMPORT_JOB_NAME + } + + fn description(&self) -> &'static str { + "Migrates cached WebP transcodes out of the legacy .transcoded/ \ + directory into content-addressed blob storage, re-keying each one \ + from its file id to its content hash. Entries for identical \ + content collapse into a single row, so the same image cached under \ + several files stops being stored several times. Zero-byte .skip \ + markers become negative rows, preserving the verdict that a file \ + is not worth transcoding." + } + + fn mutates(&self) -> Mutates { + Mutates::Always + } + + fn repair_description(&self) -> Option<&'static str> { + Some( + "Also DELETES each cached transcode once its replacement has \ + been read back and compared byte for byte, and removes the \ + directory when empty. Entries whose file no longer exists are \ + deleted without a readback — they cannot be re-keyed and \ + nothing can reference them again. Irreversible, though a \ + transcode is a pure function of its source: anything deleted \ + in error is recomputed on the next request.", + ) + } + + async fn count_total(&self) -> Option { + Some(Self::entry_names(&self.variant_dir()).await.len() as u64) + } + + async fn run_resumable( + &self, + store: &dyn JobStore, + args: &JobRunArgs, + resume_cursor: Option>, + ) -> RunOutcome { + // Cursor is the entry name. One directory, sorted, so the name + // alone totally orders the walk — unlike the thumbnail imports, + // which need `{size}/{name}` to span three directories. + let cursor: Option = match resume_cursor { + None => None, + Some(b) if b.is_empty() => None, + Some(b) => match String::from_utf8(b) { + Ok(s) => Some(s), + Err(e) => { + return RunOutcome::Failed { + message: format!("invalid cursor: not valid UTF-8: {e}"), + }; + } + }, + }; + + let delete_imported = args.repair; + let dir = self.variant_dir(); + + let mut imported = 0u64; + let mut negatives = 0u64; + let mut already = 0u64; + let mut file_gone = 0u64; + let mut deleted = 0u64; + let mut unverified = 0u64; + let mut failed = 0u64; + let mut since_checkpoint = 0usize; + + for name in Self::entry_names(&dir).await { + if let Some(c) = &cursor + && name.as_str() <= c.as_str() + { + continue; + } + + match store.status().await { + Ok(RunStatus::CancelRequested) => { + return RunOutcome::Paused { + cursor: name.into_bytes(), + }; + } + Ok(_) => {} + Err(e) => { + return RunOutcome::Failed { + message: format!("status poll: {e}"), + }; + } + } + + let Some((file_id, is_negative)) = parse_entry(&name) else { + continue; + }; + let path = dir.join(&name); + + // Re-key. This is the step the thumbnail imports do not have. + let Some(source_hash) = self.content_hash_of(file_id).await else { + file_gone += 1; + let mut removed = false; + if delete_imported && fs::remove_file(&path).await.is_ok() { + deleted += 1; + removed = true; + audit_sidecar_deleted( + TRANSCODE_IMPORT_JOB_NAME, + "file_gone", + file_id, + "-", + &path, + ); + } + record_or_log( + store, + TRANSCODE_IMPORT_JOB_NAME, + "transcode_file_gone", + "anomaly", + None, + serde_json::json!({ + "path": name, + "file_id": file_id, + "deleted": removed, + "note": "no storage.files row, so the entry cannot be re-keyed to a \ + content hash; unimportable and unreachable", + }), + ) + .await; + // Falls through to the shared checkpoint at the end of the + // loop rather than duplicating it here. An earlier draft + // did duplicate it and dropped the future without + // awaiting — the entry counted toward the batch, the + // cursor never advanced, and a resumed run would have + // rewalked everything already handled. + since_checkpoint += 1; + if let Some(failure) = checkpoint_if_due(store, &name, &mut since_checkpoint).await + { + return failure; + } + continue; + }; + + if is_negative { + // A verdict, not bytes. `store_derived_negative` is + // ON CONFLICT DO NOTHING, so the three markers that named + // one piece of content in the sandbox collapse here rather + // than fighting over the row. + match self + .dedup + .store_derived_negative(&source_hash, DERIVED_KIND, VARIANT_WEBP) + .await + { + Ok(()) => { + negatives += 1; + if delete_imported && fs::remove_file(&path).await.is_ok() { + deleted += 1; + audit_sidecar_deleted( + TRANSCODE_IMPORT_JOB_NAME, + "negative_imported", + file_id, + "-", + &path, + ); + } + } + Err(e) => { + failed += 1; + tracing::warn!( + target: "oxicloud::dedup", + event = "transcode_import.negative_failed", + file_id = %file_id, + source_hash = %source_hash, + error = %e, + "failed to record negative transcode row; entry kept" + ); + } + } + } else if self + .dedup + .find_derived_blob(&source_hash, DERIVED_KIND, VARIANT_WEBP) + .await + .is_some() + { + // Already imported — by an earlier run, or by another file + // sharing this content. Checked BEFORE storing so a re-run + // does not release and retake the reference. + already += 1; + if delete_imported { + let existing = self + .dedup + .find_derived_blob(&source_hash, DERIVED_KIND, VARIANT_WEBP) + .await; + if let Some(r) = existing { + if crate::infrastructure::services::thumb_derived_import_service::ThumbDerivedImport::verify_and_unlink( + &self.dedup, + TRANSCODE_IMPORT_JOB_NAME, + &source_hash, + &r.blob_hash, + &path, + ) + .await + { + deleted += 1; + } else { + unverified += 1; + record_or_log( + store, + TRANSCODE_IMPORT_JOB_NAME, + "transcode_delete_unverified", + "anomaly", + None, + serde_json::json!({ + "path": name, + "file_id": file_id, + "source_hash": source_hash, + "note": "stored transcode did not read back identical; \ + cached copy kept", + }), + ) + .await; + } + } + } + } else { + match fs::read(&path).await { + Ok(data) => { + match self + .dedup + .store_derived_blob( + &source_hash, + DERIVED_KIND, + VARIANT_WEBP, + "image/webp", + Bytes::from(data), + ) + .await + { + Ok(stored_hash) => { + imported += 1; + if delete_imported { + if crate::infrastructure::services::thumb_derived_import_service::ThumbDerivedImport::verify_and_unlink( + &self.dedup, + TRANSCODE_IMPORT_JOB_NAME, + &source_hash, + &stored_hash, + &path, + ) + .await + { + deleted += 1; + } else { + unverified += 1; + } + } + } + Err(e) => { + failed += 1; + tracing::warn!( + target: "oxicloud::dedup", + event = "transcode_import.store_failed", + file_id = %file_id, + source_hash = %source_hash, + error = %e, + "failed to store derived transcode; entry kept" + ); + } + } + } + Err(e) => { + failed += 1; + tracing::warn!( + target: "oxicloud::dedup", + event = "transcode_import.read_failed", + path = %path.display(), + error = %e, + "failed to read cached transcode; entry kept" + ); + } + } + } + + since_checkpoint += 1; + if let Some(failure) = checkpoint_if_due(store, &name, &mut since_checkpoint).await { + return failure; + } + } + + // Remove the tree once drained. Deletion first, rename only if a + // non-cache file is in the way — same rule as `.thumbnails/`, and + // for the same reason: absence is what the read path tests, and a + // stray `.DS_Store` must not keep the fallback alive forever. + if delete_imported { + let _ = fs::remove_dir(&dir).await; + match fs::remove_dir(&self.transcoded_root).await { + Ok(()) => tracing::info!( + target: "oxicloud::dedup", + event = "transcode_import.root_removed", + run_id = %store.run_id(), + path = %self.transcoded_root.display(), + "🧹 legacy transcode directory removed" + ), + Err(_) => { + let parked = self.transcoded_root.with_file_name(".transcoded.migrated"); + match fs::rename(&self.transcoded_root, &parked).await { + Ok(()) => tracing::info!( + target: "oxicloud::dedup", + event = "transcode_import.root_parked", + run_id = %store.run_id(), + to = %parked.display(), + "🧹 legacy transcode directory could not be removed (a non-cache \ + file remains) — moved aside instead" + ), + Err(e) => tracing::warn!( + target: "oxicloud::dedup", + event = "transcode_import.root_kept", + run_id = %store.run_id(), + reason = %e, + "legacy transcode directory neither removed nor moved aside" + ), + } + } + } + } + + tracing::info!( + target: "oxicloud::dedup", + event = "transcode_import.completed", + run_id = %store.run_id(), + imported = imported, + negatives = negatives, + already_present = already, + file_gone = file_gone, + deleted = deleted, + unverified = unverified, + failed = failed, + "transcode_import: {imported} imported, {negatives} negative verdict(s), \ + {already} already present, {file_gone} unimportable, {deleted} deleted, \ + {unverified} kept unverified, {failed} failed" + ); + + RunOutcome::completed_with(serde_json::json!({ + "imported": imported, + "negatives": negatives, + "already_present": already, + "file_gone": file_gone, + "deleted": deleted, + "unverified": unverified, + "failed": failed, + })) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// The walk claims both artifact kinds and nothing else. + /// + /// `.webp.skip` must be tested BEFORE `.webp`, or the shorter suffix + /// matches first and every marker imports as if it were a cached + /// transcode — reading a zero-byte file and storing it as the + /// transcode of its source, which would then be served to clients. + #[test] + fn entry_names_are_parsed_by_longest_suffix_first() { + let id = "3f2b1c00-1111-2222-3333-444455556666"; + + assert_eq!(parse_entry(&format!("{id}.webp")), Some((id, false))); + assert_eq!(parse_entry(&format!("{id}.webp.skip")), Some((id, true))); + + // Not ours: no id, wrong extension, or a bare marker. + assert_eq!(parse_entry(".webp"), None); + assert_eq!(parse_entry(".webp.skip"), None); + assert_eq!(parse_entry(&format!("{id}.jpg")), None); + assert_eq!(parse_entry(".DS_Store"), None); + } +} From 71f227b737e8741f9bc3da79b9b72b55a3723ec3 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 18:22:18 +0200 Subject: [PATCH 06/13] feat(transcode): the local cache disables itself, and drains at boot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Completes the pattern the thumbnail migration established, for `.transcoded/`. `initialize` no longer creates the tree. Creating it at boot is exactly what kept `.thumbnails/` alive across restarts — the import removed it, the next boot put it back, and the absence the read path gates on was unreachable by construction. The write path already calls `create_dir_all` on the parent before writing, so eager creation achieved nothing except defeating the drain. It now probes instead: one `stat`, cached for the process lifetime, and the local-cache reads short-circuit on a relaxed atomic load when the tree is gone. Fails open, so a service built without `initialize` behaves as before. One difference from the thumbnail tiers, and it is not a stalled migration: callers with no content hash — external mounts — cannot use the content-keyed tier at all, so they still read and write here. On an install without such mounts the directory drains once and stays gone; on one with them it persists, correctly. `transcode_import?repair=true` joins the startup defaults on the same terms as the thumbnail imports, and with the weakest safety argument needed of the three: a transcode is a pure function of its source, so anything deleted in error is recomputed on the next request. The `default_startup_jobs` test failed on the change rather than being updated silently, which is what it is for. Co-Authored-By: Claude Opus 5 (1M context) --- docs/config/env.md | 2 +- docs/plan/job-registry.md | 2 +- example.env | 2 +- src/common/config.rs | 20 +++++- .../services/image_transcode_service.rs | 61 ++++++++++++++++--- 5 files changed, 74 insertions(+), 13 deletions(-) diff --git a/docs/config/env.md b/docs/config/env.md index 7ddee4f7..0d1e02a8 100644 --- a/docs/config/env.md +++ b/docs/config/env.md @@ -18,7 +18,7 @@ Most runtime variables use the `OXICLOUD_` prefix. A few build-time or allocator | `OXICLOUD_CHUNK_DIR` | `{STORAGE_PATH}/.uploads` | Root directory for chunked-upload sessions (REST + NextCloud). Direct (non-chunked) uploads stream straight into the blob store and need no spool directory. Placement guidance: see [Storage Fine Tuning](./storage-fine-tuning.md). | | `OXICLOUD_REUSE_PORT` | `false` | Enable `SO_REUSEPORT` so multiple processes can share the same port. **Disabled by default** — a second accidental instance will fail with "address already in use". Enable only for deliberate multi-worker setups (process supervisor, rolling restart). Not supported on Windows. | | `OXICLOUD_METRICS_LISTEN` | (unset) | Prometheus `/metrics` listener address (e.g. `127.0.0.1:9090`, IPv6 allowed as `[::1]:9090`). **Unset = disabled**: no `/metrics` endpoint is bound and no metrics recorder is installed (zero runtime cost). When set, a separate HTTP listener on this address serves the text-format scrape. **Deliberately NOT merged into the main API** — no auth, CSRF, or DPoP layer in front. Bind to loopback or a private interface unless you intend to expose metrics publicly. Starter counters: `oxicloud_dpop_verify_failed_total{reason}`, `oxicloud_dpop_proof_missing_total`, `oxicloud_dpop_header_missing_on_bound_session_total`, `oxicloud_dpop_replay_detected_total`, `oxicloud_dpop_nonce_challenges_issued_total`. | -| `OXICLOUD_STARTUP_JOBS` | `thumb_derived_import?repair=true,thumb_attached_import?repair=true` | Background jobs dispatched once at boot, comma-separated, each `name` or `name?flag=true` using the same syntax as `POST /api/admin/jobs/{name}/trigger`. Flags: `force`, `deep`, `repair`, `storage`. **The default migrates thumbnails out of the legacy `.thumbnails/` directory and deletes the originals**, so the migration completes without anyone triggering it from the admin panel; each sidecar is read back through the normal stack before it is unlinked, and every deletion is audited. An explicit value **replaces** the default; set it empty (`OXICLOUD_STARTUP_JOBS=`) to disable startup jobs, or to `thumb_derived_import,thumb_attached_import` to import without deleting. **Non-blocking** — readiness never waits on a job; entries run sequentially in the background. **Fail-fast** — an unknown job name or flag panics at boot, because a silently-dropped entry means a migration that never runs. A run interrupted by a restart resumes from its cursor on the next boot, so a long migration finishes across restarts. Safe to leave at the default: the jobs are idempotent, and once drained a run does nothing. See [Thumbnail Migration](./thumbnail-migration.md) for the upgrade runbook. | +| `OXICLOUD_STARTUP_JOBS` | `thumb_derived_import?repair=true,thumb_attached_import?repair=true,transcode_import?repair=true` | Background jobs dispatched once at boot, comma-separated, each `name` or `name?flag=true` using the same syntax as `POST /api/admin/jobs/{name}/trigger`. Flags: `force`, `deep`, `repair`, `storage`. **The default migrates thumbnails out of the legacy `.thumbnails/` directory and deletes the originals**, so the migration completes without anyone triggering it from the admin panel; each sidecar is read back through the normal stack before it is unlinked, and every deletion is audited. An explicit value **replaces** the default; set it empty (`OXICLOUD_STARTUP_JOBS=`) to disable startup jobs, or to `thumb_derived_import,thumb_attached_import` to import without deleting. **Non-blocking** — readiness never waits on a job; entries run sequentially in the background. **Fail-fast** — an unknown job name or flag panics at boot, because a silently-dropped entry means a migration that never runs. A run interrupted by a restart resumes from its cursor on the next boot, so a long migration finishes across restarts. Safe to leave at the default: the jobs are idempotent, and once drained a run does nothing. See [Thumbnail Migration](./thumbnail-migration.md) for the upgrade runbook. | ## Database diff --git a/docs/plan/job-registry.md b/docs/plan/job-registry.md index b9845953..dda8a884 100644 --- a/docs/plan/job-registry.md +++ b/docs/plan/job-registry.md @@ -746,7 +746,7 @@ optionally with the same query syntax the admin trigger URL uses. **The default is both migration jobs, in repair mode:** ``` -OXICLOUD_STARTUP_JOBS=thumb_derived_import?repair=true,thumb_attached_import?repair=true +OXICLOUD_STARTUP_JOBS=thumb_derived_import?repair=true,thumb_attached_import?repair=true,transcode_import?repair=true ``` An explicit value replaces that list; an empty value disables startup diff --git a/example.env b/example.env index 9fa80904..69de5230 100644 --- a/example.env +++ b/example.env @@ -62,7 +62,7 @@ OXICLOUD_SERVER_HOST=0.0.0.0 # storage). # # DEFAULT (applied when this variable is unset): -# thumb_derived_import?repair=true,thumb_attached_import?repair=true +# thumb_derived_import?repair=true,thumb_attached_import?repair=true,transcode_import?repair=true # # Those two migrate thumbnails out of the legacy .thumbnails/ directory # into blob storage and then delete the originals, so the migration diff --git a/src/common/config.rs b/src/common/config.rs index 31f4ac94..67001e03 100644 --- a/src/common/config.rs +++ b/src/common/config.rs @@ -2401,8 +2401,15 @@ fn parse_startup_job(raw: &str) -> Result { /// Set `OXICLOUD_STARTUP_JOBS=` (empty) to disable startup jobs /// entirely; any explicit value replaces this list rather than adding /// to it. -const DEFAULT_STARTUP_JOBS: &str = - "thumb_derived_import?repair=true,thumb_attached_import?repair=true"; +/// `transcode_import` joins them for the same reason and on the same +/// terms. Its artifacts are the most disposable of the three — a +/// transcode is a pure function of its source, so anything deleted in +/// error is recomputed on the next request — and its `.skip` markers +/// collapse to one row per distinct content, which is the saving that +/// only happens once the import runs. +const DEFAULT_STARTUP_JOBS: &str = "thumb_derived_import?repair=true,\ + thumb_attached_import?repair=true,\ + transcode_import?repair=true"; /// Parse the whole `OXICLOUD_STARTUP_JOBS` value. Empty → no startup /// jobs (an explicit opt-out); unset → [`DEFAULT_STARTUP_JOBS`]. @@ -3999,7 +4006,14 @@ mod tests { fn default_startup_jobs_drain_both_thumbnail_tiers() { let jobs = AppConfig::default().startup_jobs; let names: Vec<&str> = jobs.iter().map(|j| j.name.as_str()).collect(); - assert_eq!(names, ["thumb_derived_import", "thumb_attached_import"]); + assert_eq!( + names, + [ + "thumb_derived_import", + "thumb_attached_import", + "transcode_import" + ] + ); assert!(jobs.iter().all(|j| j.args.repair)); assert!(jobs.iter().all(|j| !j.args.deep && !j.args.force)); } diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs index 1c99732f..12cc6300 100644 --- a/src/infrastructure/services/image_transcode_service.rs +++ b/src/infrastructure/services/image_transcode_service.rs @@ -16,7 +16,7 @@ use bytes::Bytes; use image::ImageFormat; use std::path::{Path, PathBuf}; -use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use std::sync::{Arc, OnceLock}; use tokio::fs; @@ -173,6 +173,15 @@ pub struct ImageTranscodeService { /// `OnceLock` rather than a `Mutex`: set exactly once at boot, read on /// every request, never replaced. dedup: OnceLock>, + /// Whether `.transcoded/` still exists, probed once by + /// [`Self::initialize`]. `false` short-circuits the local-cache reads + /// without a syscall. + /// + /// Starts `true` so a service constructed without `initialize` (tests) + /// behaves as before. Failing open is the safe direction: the wrong + /// value costs syscalls, the opposite would hide cached entries that + /// are still there. + legacy_cache: AtomicBool, } impl ImageTranscodeService { @@ -203,6 +212,7 @@ impl ImageTranscodeService { memory_cache, stats: Arc::new(AtomicTranscodeStats::default()), dedup: OnceLock::new(), + legacy_cache: AtomicBool::new(true), } } @@ -234,16 +244,52 @@ impl ImageTranscodeService { /// absence that `transcode_import` works toward unreachable, which is /// exactly the bug that kept `.thumbnails/` alive across restarts. pub async fn initialize(&self) -> std::io::Result<()> { - fs::create_dir_all(&self.cache_dir).await?; - fs::create_dir_all(self.cache_dir.join("webp")).await?; + // Probes, does NOT create. + // + // Creating the tree at boot is what kept `.thumbnails/` alive across + // restarts: the import removed it, the next boot put it back, and + // the absence the read path gates on was unreachable by + // construction. The write path below already calls `create_dir_all` + // on the parent before writing, so nothing needs it created eagerly + // — the only thing eager creation achieved was defeating the drain. + // + // One `stat` on the root, cached for the process lifetime. It can + // only be stale in the harmless direction: a drain completing + // mid-life leaves the flag true until restart, costing the same + // failed opens as before. It never goes false while entries remain, + // because only `transcode_import` removes the tree and it removes + // the whole thing at once. + let present = fs::metadata(&self.cache_dir).await.is_ok(); + self.legacy_cache.store(present, Ordering::Relaxed); + tracing::info!( - "🖼️ Image transcode service initialized (rayon pool: {} threads, cache dir: {:?})", + "🖼️ Image transcode service initialized (rayon pool: {} threads)", transcode_thread_count(), - self.cache_dir ); + if present { + tracing::info!( + target: "oxicloud::transcode", + event = "transcode.legacy_cache_present", + path = ?self.cache_dir, + "legacy transcode cache present — reads fall back to it. Run \ + transcode_import with ?repair=true to drain it." + ); + } Ok(()) } + /// Whether the legacy local cache is worth touching. + /// + /// Unlike the thumbnail tiers this may legitimately never reach `false`: + /// callers with no content hash (external mounts) cannot use the + /// content-keyed tier at all, so they still read and write here. On an + /// install without such mounts the directory drains once and stays + /// gone; on one with them it persists, and that is correct rather than + /// a stalled migration. + fn legacy_cache_active(&self) -> bool { + self.legacy_cache.load(Ordering::Relaxed) + } + /// Check if a mime type can be transcoded. /// /// JPEG is deliberately excluded: the `image` crate's WebP encoder is @@ -402,7 +448,7 @@ impl ImageTranscodeService { // // Drained by `transcode_import`; kept as a fallback until it is gone. let cache_path = self.get_cache_path(file_id, target_format); - if tokio::fs::try_exists(&cache_path).await.unwrap_or(false) { + if self.legacy_cache_active() && tokio::fs::try_exists(&cache_path).await.unwrap_or(false) { match fs::read(&cache_path).await { Ok(data) => { self.stats.disk_hits.fetch_add(1, Ordering::Relaxed); @@ -417,7 +463,8 @@ impl ImageTranscodeService { // ── Negative verdict persisted on disk (survives restarts) ── let skip_marker = self.get_skip_marker_path(file_id, target_format); - if tokio::fs::try_exists(&skip_marker).await.unwrap_or(false) { + if self.legacy_cache_active() && tokio::fs::try_exists(&skip_marker).await.unwrap_or(false) + { self.stats.disk_hits.fetch_add(1, Ordering::Relaxed); tracing::debug!("💾 Transcode negative disk marker HIT: {}", file_id); return Ok(Bytes::new()); From af753a0397306b8891dc68d8ee7cbde2e538e950 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 19:14:28 +0200 Subject: [PATCH 07/13] test(transcode): pin transcode_import's contract and empty-tree run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Covers the job's surface: that it is registered, declares the metadata the admin panel switches on (`mutates: always`, recoverable, a repair description), and that a run against a drained tree completes cleanly with zeroed counters. It deliberately does NOT cover the re-keying, which is the part that matters most. That needs `.transcoded/webp/` entries on disk before the run, and nothing reachable over HTTP can create them — since the write path moved to the derived tier, only hash-less callers still write there, and hurl cannot place files in the server's storage directory. The migration is validated by a snapshot restore instead, the way the thumbnail one was; the file says so rather than implying coverage it does not have. The empty-tree assertions still earn their place. A drained tree is what every run after the first sees, so it is the overwhelming majority of this job's lifetime, and "does nothing, quietly" is a real property: the thumbnail teardown warned `could not be removed / No such file or directory` on every boot after its migration finished — warning about success forever — and that was caught by eye, not by a test. Counters are asserted as exact zeros, since finding work in a directory the API cannot populate is the shape a re-keying bug would take. Co-Authored-By: Claude Opus 5 (1M context) --- tests/api/run.sh | 1 + tests/api/transcode_import.hurl | 148 ++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 tests/api/transcode_import.hurl diff --git a/tests/api/run.sh b/tests/api/run.sh index f829274d..1c483ea1 100755 --- a/tests/api/run.sh +++ b/tests/api/run.sh @@ -170,6 +170,7 @@ hurl --variables-file "$API_DIR/test.env" --file-root "$REPO_ROOT/tests" --test "$API_DIR/thumbnail_etag_content_keyed.hurl" \ "$API_DIR/attached_thumbnail_copy.hurl" \ "$API_DIR/transcode_cache.hurl" \ + "$API_DIR/transcode_import.hurl" \ "$API_DIR/dedup_admin_gate.hurl" \ "$API_DIR/admin_jobs.hurl" \ "$API_DIR/recoverable_jobs.hurl" \ diff --git a/tests/api/transcode_import.hurl b/tests/api/transcode_import.hurl new file mode 100644 index 00000000..9ac9d0ea --- /dev/null +++ b/tests/api/transcode_import.hurl @@ -0,0 +1,148 @@ +# ============================================================= +# OxiCloud – transcode_import: registration, contract, empty-tree run +# +# ## What this covers, and what it deliberately does not +# +# It covers the job's SURFACE: that it is registered, that it declares +# the metadata the admin panel switches on, and that a run against an +# already-drained tree completes cleanly with zeroed counters rather +# than erroring or reporting phantom work. +# +# It does NOT cover the re-keying — the part that matters most, where +# `{file_id}.webp` is resolved through `storage.files` to a content +# hash, and several entries naming the same content collapse into one +# row. That needs `.transcoded/webp/` entries on disk before the run, +# and nothing reachable over HTTP can create them: since the write path +# moved to the derived tier, only callers with no content hash +# (external mounts) still write there, and hurl cannot place files in +# the server's storage directory either. +# +# So the migration itself is validated by a snapshot restore against a +# populated `.transcoded/`, the same way the thumbnail migration was — +# an exercise that found three bugs the test suite did not. This file +# guards the contract that surrounds it; it is not a substitute. +# +# The empty-tree assertions are still worth having. A drained tree is +# the steady state of every install after the first boot, so this is +# what the job does on the overwhelming majority of its runs, and +# "does nothing, quietly, forever" is a real property — the thumbnail +# equivalent warned on every boot for exactly this case until it was +# caught by eye. +# +# Prerequisites: setup.hurl must have run (admin user exists). +# +# Run: +# hurl --variables-file tests/api/test.env --file-root tests \ +# --test tests/api/transcode_import.hurl +# ============================================================= + + +# ───────────────────────────────────────────────────────────── +# Step 1 – Login +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/auth/login +Content-Type: application/json +{ + "username": "{{username}}", + "password": "{{password}}" +} + +HTTP 200 +[Captures] +token: jsonpath "$.access_token" + + +# ───────────────────────────────────────────────────────────── +# Step 2 – The job is registered, and declares itself correctly. +# +# The admin panel keys its read-only badge and its repair toggle off +# these three fields, so a job that stops declaring them degrades the +# UI silently: `mutates` wrong means a destructive job renders as safe, +# and a missing `repair_description` removes the only way to reach the +# deletion from the interface. +# +# `always` because a plain run inserts rows and writes blobs — the +# repair flag adds deletion on top, which is why the two are +# independent rather than one implying the other. +# ───────────────────────────────────────────────────────────── +GET {{base_url}}/api/admin/jobs +Authorization: Bearer {{token}} + +HTTP 200 +[Asserts] +jsonpath "$[*].name" contains "transcode_import" +jsonpath "$[?(@.name=='transcode_import')].mutates" == "always" +jsonpath "$[?(@.name=='transcode_import')].recoverable" == true + + +# ───────────────────────────────────────────────────────────── +# Step 3 – A discovery-only run over a drained tree. +# +# No `?repair=true`: the default must import without deleting, which is +# what the daily-tick and the no-silent-auto-repair rule both depend +# on. Counters are asserted to exact zeros rather than "exists" — a +# non-zero here would mean the job found work in a directory the API +# cannot have put anything into, which is the shape a re-keying bug +# would take. +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/admin/jobs/transcode_import/trigger +Authorization: Bearer {{token}} + +HTTP 200 +[Asserts] +jsonpath "$.ok" == true +jsonpath "$.outcome.outcome" == "ok" +jsonpath "$.outcome.extra.completed" == true +jsonpath "$.outcome.extra.extra_stats.imported" == 0 +jsonpath "$.outcome.extra.extra_stats.negatives" == 0 +jsonpath "$.outcome.extra.extra_stats.file_gone" == 0 +jsonpath "$.outcome.extra.extra_stats.deleted" == 0 +jsonpath "$.outcome.extra.extra_stats.failed" == 0 +jsonpath "$.outcome.extra.extra_stats.unverified" == 0 +# A clean run raises no findings. `file_gone` entries are recorded as +# anomalies, so a non-zero count here would contradict the zero above. +jsonpath "$.outcome.extra.finding_count" == 0 + + +# ───────────────────────────────────────────────────────────── +# Step 4 – The same run under `?repair=true`. +# +# On a drained tree this must be indistinguishable from the run above: +# nothing to import, nothing to delete, and — the part worth pinning — +# no complaint about the directory being absent. The thumbnail teardown +# warned `could not be removed / No such file or directory` on every +# boot after its migration finished, warning about success forever. +# Absence is the end state, not a failure, and the job has to treat it +# that way because this is what every run after the first looks like. +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/admin/jobs/transcode_import/trigger?repair=true +Authorization: Bearer {{token}} + +HTTP 200 +[Asserts] +jsonpath "$.ok" == true +jsonpath "$.outcome.outcome" == "ok" +jsonpath "$.outcome.extra.extra_stats.imported" == 0 +jsonpath "$.outcome.extra.extra_stats.negatives" == 0 +jsonpath "$.outcome.extra.extra_stats.deleted" == 0 +jsonpath "$.outcome.extra.extra_stats.failed" == 0 +jsonpath "$.outcome.extra.finding_count" == 0 + + +# ───────────────────────────────────────────────────────────── +# Step 5 – Idempotence. +# +# The job is registered as a daily tick AND named in +# OXICLOUD_STARTUP_JOBS, so on a long-lived install it runs +# unattended, repeatedly, forever. Re-running must stay a no-op — +# anything that accumulated across runs would accumulate unattended. +# ───────────────────────────────────────────────────────────── +POST {{base_url}}/api/admin/jobs/transcode_import/trigger +Authorization: Bearer {{token}} + +HTTP 200 +[Asserts] +jsonpath "$.outcome.outcome" == "ok" +jsonpath "$.outcome.extra.extra_stats.imported" == 0 +jsonpath "$.outcome.extra.extra_stats.negatives" == 0 +jsonpath "$.outcome.extra.finding_count" == 0 From bf2f0dc2b2f82b64318dc9858b876dcf9c6dad5a Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 19:25:06 +0200 Subject: [PATCH 08/13] fix(transcode): store the derived blob before returning, not after MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fire-and-forget raced its own purpose. A second request for the SAME content arriving before the spawned write landed found no row, re-ran the full decode + encode, and stored the identical blob again. Keying derivations by content exists so identical content is derived once — a write that has not landed yet cannot deliver that, and the window is milliseconds wide exactly when it matters most, a page loading many images at once. Caught by transcode_cache.hurl, which asserts a second distinct file with identical bytes does not re-transcode: `transcodes: 2` where 1 was expected, `disk_hits: 0` where the derived tier should have answered. It had been passing on timing luck. The cost of awaiting is bounded. This path has just spent a full decode and re-encode, so one blob write beside it is marginal, and it only runs on a genuine miss — every subsequent request for that content is served from the row. The negative verdict was already awaited, which is why only the positive half of the scenario failed. Co-Authored-By: Claude Opus 5 (1M context) --- .../services/image_transcode_service.rs | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs index 12cc6300..b361b973 100644 --- a/src/infrastructure/services/image_transcode_service.rs +++ b/src/infrastructure/services/image_transcode_service.rs @@ -569,22 +569,36 @@ impl ImageTranscodeService { let variant = target_format.extension().to_string(); let mime = target_format.mime_type().to_string(); let bytes = transcoded_bytes.clone(); - // Fire-and-forget, as the disk write was: the bytes are - // already on their way to the client, and a storage hiccup - // should cost a re-derive later rather than this response. - tokio::spawn(async move { - if let Err(e) = dedup - .store_derived_blob(&hash, Self::DERIVED_KIND, &variant, &mime, bytes) - .await - { - tracing::warn!( - target: "oxicloud::transcode", - source_hash = %hash, - error = %e, - "failed to store derived transcode; it will be recomputed" - ); - } - }); + // Awaited, NOT spawned. + // + // Fire-and-forget looked free — the bytes are already on + // their way to the client — but it raced its own purpose. A + // second request for the SAME content arriving before the + // spawn lands finds no row, re-runs the whole decode + + // encode, and stores the identical blob again. The point of + // keying by content is that identical content is derived + // once; a write that has not landed yet cannot deliver + // that, and the window is milliseconds wide precisely when + // it matters most (a page loading many images at once). + // + // Caught by `transcode_cache.hurl`, which asserts the second + // distinct file with identical bytes does not re-transcode + // — it had been passing on timing luck. + // + // The cost is bounded: this path has just spent a full + // decode and re-encode, so one blob write is marginal + // beside it, and it only runs on a genuine miss. + if let Err(e) = dedup + .store_derived_blob(&hash, Self::DERIVED_KIND, &variant, &mime, bytes) + .await + { + tracing::warn!( + target: "oxicloud::transcode", + source_hash = %hash, + error = %e, + "failed to store derived transcode; it will be recomputed" + ); + } } None => { let cache_path_clone = cache_path.clone(); From 10c362a94a1709258bf0a2dfe0dc35142b9c74c1 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 19:41:41 +0200 Subject: [PATCH 09/13] fix(jobs): flush the checkpoint tail, so progress reflects reality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All three import jobs only checkpointed on a full batch, so the remainder after the last one was never counted. A run shorter than BATCH_SIZE never checkpointed at all: `scanned_count` stayed 0 against a known `total_rows`, and the admin progress bar sat at zero for the whole run and finished there. Seen on a transcode_import run over 20 entries — 13 imported, 5 negatives, 2 already present, progress 0/20 throughout. The thumbnail imports had it too, just less visibly: a 105-file run reported `scanned_count: 100`, losing the tail rather than all of it. Cursor-wise the final checkpoint is a no-op — the walk is finished, so nothing resumes from it — but the scanned delta is what the progress display reads, and it has to include the last partial batch. Co-Authored-By: Claude Opus 5 (1M context) --- .../services/thumb_attached_import_service.rs | 12 +++++++++ .../services/thumb_derived_import_service.rs | 13 ++++++++++ .../services/transcode_import_service.rs | 26 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/infrastructure/services/thumb_attached_import_service.rs b/src/infrastructure/services/thumb_attached_import_service.rs index 14748df6..92917d55 100644 --- a/src/infrastructure/services/thumb_attached_import_service.rs +++ b/src/infrastructure/services/thumb_attached_import_service.rs @@ -476,6 +476,18 @@ impl RecoverableJobHandler for ThumbAttachedImport { } } + // Flush the tail — see the derived twin. The loop only checkpoints + // on a full batch, so the remainder went uncounted: a 105-file run + // reported `scanned_count: 100`, and a run shorter than one batch + // reported zero and left the progress bar at zero throughout. + if since_checkpoint > 0 + && let Err(e) = store.checkpoint(Vec::new(), since_checkpoint as u64).await + { + return RunOutcome::Failed { + message: format!("final checkpoint: {e}"), + }; + } + // Both jobs attempt the teardown, and it no-ops unless the tree is // drained of files EITHER of them claims. Without this, whichever // job runs last leaves an empty `.thumbnails/` behind until the diff --git a/src/infrastructure/services/thumb_derived_import_service.rs b/src/infrastructure/services/thumb_derived_import_service.rs index 490f272a..37e67200 100644 --- a/src/infrastructure/services/thumb_derived_import_service.rs +++ b/src/infrastructure/services/thumb_derived_import_service.rs @@ -734,6 +734,19 @@ impl RecoverableJobHandler for ThumbDerivedImport { } } + // Flush the tail. The loop only checkpoints on a full batch, so the + // remainder after the last one was never counted — a run of fewer + // than BATCH_SIZE files reported `scanned_count: 0` against a known + // total and left the admin progress bar at zero for its whole life. + // Same fix in both imports and in transcode_import. + if since_checkpoint > 0 + && let Err(e) = store.checkpoint(Vec::new(), since_checkpoint as u64).await + { + return RunOutcome::Failed { + message: format!("final checkpoint: {e}"), + }; + } + // Remove the size directories once genuinely empty, because ABSENCE // is what step 10e gates the fallback removal on — not emptiness. // Empty is momentary: an on-demand render can repopulate it the next diff --git a/src/infrastructure/services/transcode_import_service.rs b/src/infrastructure/services/transcode_import_service.rs index 83c29d38..27c6963d 100644 --- a/src/infrastructure/services/transcode_import_service.rs +++ b/src/infrastructure/services/transcode_import_service.rs @@ -253,6 +253,8 @@ impl RecoverableJobHandler for TranscodeImport { let mut unverified = 0u64; let mut failed = 0u64; let mut since_checkpoint = 0usize; + // Last entry visited, for the tail flush below. + let mut last_name: Option = None; for name in Self::entry_names(&dir).await { if let Some(c) = &cursor @@ -464,11 +466,35 @@ impl RecoverableJobHandler for TranscodeImport { } since_checkpoint += 1; + last_name = Some(name.clone()); if let Some(failure) = checkpoint_if_due(store, &name, &mut since_checkpoint).await { return failure; } } + // Flush the tail. + // + // `checkpoint_if_due` only fires on a full batch, so a run shorter + // than BATCH_SIZE never checkpointed at all and reported + // `scanned_count: 0` against a known `total_rows` — the admin + // progress bar sat at zero through the whole run and finished + // there. Longer runs were wrong too, just less visibly: the + // remainder after the last full batch was never counted. + // + // Cursor-wise this is a no-op — the walk is finished, so nothing + // will resume from it — but the scanned delta is what the progress + // display reads, and it has to include the last partial batch. + if since_checkpoint > 0 + && let Some(name) = last_name + && let Err(e) = store + .checkpoint(name.into_bytes(), since_checkpoint as u64) + .await + { + return RunOutcome::Failed { + message: format!("final checkpoint: {e}"), + }; + } + // Remove the tree once drained. Deletion first, rename only if a // non-cache file is in the way — same rule as `.thumbnails/`, and // for the same reason: absence is what the read path tests, and a From 67032d9afacf63e058fab46e1712cc85e2bcd193 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 21:58:33 +0200 Subject: [PATCH 10/13] fix(transcode): transcode_import is on-demand, like its thumbnail twins It was still registered on a 24h tick while the thumbnail imports moved to on-demand. The same reasoning applies and I missed it: the boot run in repair mode is the migration, nothing writes to that tree any more so the tail cannot grow afterwards, and a tick could not finish the job regardless because ticks never pass `repair`. Once drained it was a `read_dir` returning nothing, daily, forever. Co-Authored-By: Claude Opus 5 (1M context) --- .../services/transcode_import_service.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/infrastructure/services/transcode_import_service.rs b/src/infrastructure/services/transcode_import_service.rs index 27c6963d..e1464c54 100644 --- a/src/infrastructure/services/transcode_import_service.rs +++ b/src/infrastructure/services/transcode_import_service.rs @@ -86,16 +86,14 @@ impl TranscodeImport { registry: &JobRegistry, provider: &Arc, ) -> Arc { - // Daily, matching the thumbnail imports: idempotent and resumable, - // so periodic is safe, and a migration nobody remembers to trigger - // never finishes. The tick imports but does not delete — `repair` - // defaults false. + // On-demand, matching the thumbnail imports. The boot run in repair + // mode IS the migration: nothing writes a hash-keyed entry here any + // more, so the tail cannot grow after startup, and a periodic tick + // could not finish the job anyway because ticks never pass + // `repair`. Once drained it would be a `read_dir` returning + // nothing, every day, forever. registry - .register_recoverable_job( - self.clone(), - provider.clone(), - Some(std::time::Duration::from_secs(24 * 3600)), - ) + .register_recoverable_job(self.clone(), provider.clone(), None) .await; self } From 63820c3c26df451c21472955773c9e7fea1df6e3 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 20:11:23 +0200 Subject: [PATCH 11/13] feat(jobs): the engine binds a run to the flags it started with MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `run_or_resume` now records `JobRunArgs` in `params` on a Fresh open and restores them on Resume, passing the restored args to the handler rather than whatever the resuming caller supplied. Two problems, and the engine is the only place both are guaranteed. **A resumed run must not change mode.** Handlers read `args` on every call, so a paused `?repair=true` import resumed by a plain trigger silently continued as import-only: the deletion half never finished and nothing reported it. `?deep=true` had the same hole — a paused bit-rot scan resumed shallow while still presenting as the run that started deep. `blobs_consistency` and `manifests_consistency` had hand-rolled this for their own two flags; the three import jobs had not, and fixing it per-handler means every future job remembering. **The run row should say what it did.** For a destructive job, "did this run delete anything?" is answerable only from `params`, which is what an operator reads afterwards. Before this, a repair run and a discovery run were indistinguishable in the history. Deliberately not overridable on resume: adding `?repair=true` to a resume would apply it to the remaining entries only, producing a run that half-deleted. Cancel and start fresh is the honest way to change your mind. A missing key reads as false/None, so a run paused before this existed resumes under-acting rather than deleting under a flag nobody gave it. Failure to record the flags fails the run instead of guessing — acting under unrecorded flags is the one thing worth refusing for jobs that delete. The flag list is hardcoded here. Letting each job declare its own parameters — name, type, default — is the better shape and is its own change. Co-Authored-By: Claude Opus 5 (1M context) --- src/infrastructure/scheduler/recoverable.rs | 93 ++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/src/infrastructure/scheduler/recoverable.rs b/src/infrastructure/scheduler/recoverable.rs index e5546682..99df9b55 100644 --- a/src/infrastructure/scheduler/recoverable.rs +++ b/src/infrastructure/scheduler/recoverable.rs @@ -199,6 +199,63 @@ impl RunOutcome { } } +/// Write `JobRunArgs` to `params` on a Fresh run, or read them back on a +/// Resumed one. +/// +/// Returns the args the handler should actually use. On resume that is +/// whatever the original run recorded, NOT what the resuming caller +/// passed — see the call site in [`run_or_resume`] for why changing mode +/// mid-run is refused. +/// +/// Every flag is stored as a string, matching the `params` convention the +/// progress fields already use, and each is read back independently: a run +/// paused before this existed simply has no keys, and each missing one +/// falls back to `false` / `None`. That is the safe direction — a resumed +/// legacy run under-acts rather than deleting under a flag nobody gave it. +async fn persist_or_restore_args( + store: &dyn JobStore, + args: &JobRunArgs, + is_fresh: bool, +) -> Result { + const FLAGS: [&str; 3] = ["force", "deep", "repair"]; + + if is_fresh { + for (key, value) in FLAGS.iter().zip([args.force, args.deep, args.repair]) { + let v = if value { "true" } else { "false" }; + store + .set_string_param(key, v) + .await + .map_err(|e| format!("persist `{key}` to params: {e}"))?; + } + // `storage` is absent rather than empty when unset, so a run that + // did not scope itself does not grow a key claiming it did. + if let Some(name) = &args.storage { + store + .set_string_param("storage", name) + .await + .map_err(|e| format!("persist `storage` to params: {e}"))?; + } + return Ok(args.clone()); + } + + let mut restored = JobRunArgs::default(); + for (key, slot) in FLAGS.iter().zip([ + &mut restored.force, + &mut restored.deep, + &mut restored.repair, + ]) { + *slot = match store.get_string_param(key).await { + Ok(v) => v.as_deref() == Some("true"), + Err(e) => return Err(format!("read `{key}` from params: {e}")), + }; + } + restored.storage = store + .get_string_param("storage") + .await + .map_err(|e| format!("read `storage` from params: {e}"))?; + Ok(restored) +} + // ─── Traits — implementor + port ──────────────────────────────────────────── /// The implementor-facing contract for a long-running, restart-tolerant @@ -797,10 +854,44 @@ pub async fn run_or_resume( } } + // Bind the run to the flags it started with. + // + // A Fresh run records its `JobRunArgs` in `params`; a Resumed run reads + // them back and runs with THOSE, ignoring whatever the resuming caller + // passed. Two reasons, and the engine is the only place both are + // guaranteed: + // + // **A resumed run must not change mode.** Handlers read `args` on every + // call, so a paused `?repair=true` import resumed by a plain trigger + // silently continued as import-only — the deletion half never finished + // and nothing said so. The same held for `?deep=true`: a paused bit-rot + // scan resumed shallow while still reporting as the run that started + // deep. Fixing it per-handler meant every job remembering, and three of + // them did not. + // + // **The run row should say what it did.** For a destructive job, "did + // this run delete anything?" is answerable only from `params`, and that + // is what an operator reads afterwards. + // + // Deliberately NOT overridable on resume. Adding `?repair=true` to a + // resume would apply it to the remaining entries only, producing a run + // that half-deleted — the honest way to change your mind is to cancel + // and start fresh. + let args = match persist_or_restore_args(&*store, args, is_fresh).await { + Ok(effective) => effective, + Err(e) => { + // Fail the run rather than guess. Proceeding would mean acting + // under flags nothing recorded, which for the jobs that delete + // is the one thing worth refusing. + log_terminal_write_err("mark_failed", run_id, store.mark_failed(&e).await); + return JobOutcome::err(e); + } + }; + // Dispatch. Terminal writes to `jobs.recoverable_runs` happen // here (NOT in the handler) so the row always ends in a state // that matches what the handler returned. - let outcome = job.run_resumable(&*store, args, resume_cursor).await; + let outcome = job.run_resumable(&*store, &args, resume_cursor).await; // Fetch the terminal run summary so we can surface aggregate // stats (finding_count, scanned_count) on the outer JobOutcome From 4baee0a1fb42f795eea8a0e1652554e5bcce704b Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 22:20:47 +0200 Subject: [PATCH 12/13] feat(transcode): key the memory cache by content, not by file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The durable tier has been content-keyed since it was introduced — `content_derived_blobs(source_hash, kind, variant)` — but the moka cache in front of it was still `{file_id}:{ext}`, so the layer closest to the request used the wrong axis while the layer behind it used the right one. That was legacy shape, and I had defended it in a comment as "deliberate: per-request-path and short-lived", which was a rationalisation rather than a reason. Ed asked why, and there is no why. Transcoding is a pure function of the source bytes. Under file keying, two files with identical content held two RAM entries for identical bytes, and the second file was a guaranteed miss that fell through to a DB lookup plus a blob read to fetch what was already in memory under another key. Now keyed by content hash when the caller has one, by file id only when it does not — the same `content` / `external` split `ThumbnailCacheKey` already makes, and for the same reason: hash-less callers (external mounts) have no content identity to key on. Prefixed `c:` / `f:` so the namespaces stay disjoint; a hash and a UUID cannot collide in practice, but "in practice" is how a file ends up served another file's bytes. `invalidate` now clears only the file-keyed entry. Dropping content entries there would be wrong, not merely wasteful: one file's content changing says nothing about the other files sharing the old bytes, and evicting theirs would make one user's edit cost everyone else a re-transcode. Content entries need no eviction — new content is a new hash, so the old key is never consulted again. transcode_cache.hurl updated to match, and its header corrected: the second file is now a RAM hit rather than a derived-tier read, so that scenario can no longer isolate the durable tier. It says so, and points at satellites_consistency and a restart as what covers it instead. Co-Authored-By: Claude Opus 5 (1M context) --- .../services/image_transcode_service.rs | 45 ++++++++++++++++--- tests/api/transcode_cache.hurl | 32 +++++++++---- 2 files changed, 62 insertions(+), 15 deletions(-) diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs index b361b973..6b2e6a62 100644 --- a/src/infrastructure/services/image_transcode_service.rs +++ b/src/infrastructure/services/image_transcode_service.rs @@ -234,6 +234,31 @@ impl ImageTranscodeService { /// The `content_derived_blobs.kind` for everything this service writes. const DERIVED_KIND: &'static str = "transcode"; + /// Memory-cache key: by CONTENT when the caller supplied a hash, by + /// file id only when it could not. + /// + /// Transcoding is a pure function of the source bytes, so file keying + /// was always the wrong axis for this cache — it just predated the + /// content-keyed tier. Two files with identical content held two + /// entries for identical bytes, and the second file missed RAM and + /// paid a DB lookup plus a blob read to fetch what was already in + /// memory under another key. + /// + /// The `c:` / `f:` prefixes keep the two namespaces disjoint. A + /// 64-hex hash and a UUID cannot collide in practice, but relying on + /// "in practice" for a cache key is how a file ends up served another + /// file's bytes. + /// + /// Same shape as `ThumbnailCacheKey`'s `content` / `external` split, + /// for the same reason: hash-less callers (external mounts) have no + /// content identity to key on, so they keep the per-file entry. + fn cache_key(source_hash: Option<&str>, file_id: &str, format: OutputFormat) -> String { + match source_hash { + Some(hash) => format!("c:{}:{}", hash, format.extension()), + None => format!("f:{}:{}", file_id, format.extension()), + } + } + /// Initialize the service. /// /// Still creates the local cache directories, because this service DOES @@ -329,12 +354,7 @@ impl ImageTranscodeService { original_mime: &str, target_format: OutputFormat, ) -> Result<(Bytes, String, bool), String> { - // Keyed by file_id, not content hash. Deliberate: this cache is - // per-request-path and short-lived (10 min TTL), and the file id is - // what the caller has in hand on every request. The DURABLE tier - // below is content-keyed, which is where dedup across identical - // files actually pays. - let cache_key = format!("{}:{}", file_id, target_format.extension()); + let cache_key = Self::cache_key(source_hash, file_id, target_format); // ── 1. Fast path: moka memory cache (lock-free read) ── // An empty-Bytes entry is the negative sentinel: "transcoding this @@ -650,7 +670,18 @@ impl ImageTranscodeService { /// Invalidate cached transcodes for a file pub async fn invalidate(&self, file_id: &str) { - let cache_key = format!("{}:{}", file_id, OutputFormat::WebP.extension()); + // Only the FILE-keyed entry, deliberately. + // + // Content-keyed entries must not be dropped here: this file's + // content changing says nothing about the other files sharing the + // old bytes, and evicting theirs would make one user's edit cost + // everyone else a re-transcode. They need no eviction anyway — + // new content is a new hash, so the old key is simply never + // consulted again, and moka's TTL reclaims it. + // + // What remains here is the fallback entry for hash-less callers, + // plus the legacy on-disk pair, which are genuinely per-file. + let cache_key = Self::cache_key(None, file_id, OutputFormat::WebP); self.memory_cache.invalidate(&cache_key).await; let cache_path = self.get_cache_path(file_id, OutputFormat::WebP); diff --git a/tests/api/transcode_cache.hurl b/tests/api/transcode_cache.hurl index 887f02c3..466a21f6 100644 --- a/tests/api/transcode_cache.hurl +++ b/tests/api/transcode_cache.hurl @@ -20,13 +20,20 @@ # # ## Why each case uploads the same bytes twice # -# The in-memory cache is keyed `{file_id}:{ext}`, so re-fetching the SAME -# file proves only that moka works. Uploading identical content as a -# SECOND file gives a different file id and therefore a guaranteed memory -# miss — but the same content hash. If the second fetch still avoids a -# transcode, only the content-keyed tier can have answered it. That is -# precisely what the migration bought, and it is unobservable any other -# way. +# Re-fetching the SAME file proves only that a cache exists. Uploading +# identical content as a SECOND file gives a different file id but the +# same content hash, which is the case that distinguishes content keying +# from file keying — and both caches here are now content-keyed. +# +# So the assertion is that the second file costs NO transcode, and is +# served from RAM. Under the previous file-keyed memory cache it was a +# guaranteed RAM miss: two entries for identical bytes, and a DB lookup +# plus a blob read to fetch what was already in memory under another key. +# +# What this can no longer isolate is the DURABLE tier, because the RAM +# cache now answers first for anything within one process lifetime. +# That tier is covered instead by `satellites_consistency` (every row +# points at a live blob) and by a restart, which hurl cannot perform. # # ## Fixtures # @@ -160,6 +167,7 @@ HTTP 200 [Captures] after_positive: jsonpath "$.transcodes" after_positive_disk: jsonpath "$.disk_hits" +after_positive_ram: jsonpath "$.cache_hits" [Asserts] jsonpath "$.not_beneficial" == {{base_not_beneficial}} @@ -210,9 +218,17 @@ Authorization: Bearer {{token}} HTTP 200 [Asserts] +# The property that matters, whichever tier answered: identical content is +# transcoded ONCE, however many files carry it. jsonpath "$.transcodes" == {{after_positive}} jsonpath "$.not_beneficial" == {{base_not_beneficial}} -jsonpath "$.disk_hits" != {{after_positive_disk}} +# Served from RAM, and that is the point of the memory cache being keyed by +# CONTENT rather than by file id. Under file keying this second file was a +# guaranteed RAM miss that fell through to a DB lookup plus a blob read to +# fetch bytes already in memory under another key — `disk_hits` moved and +# `cache_hits` did not. Now it is the other way round. +jsonpath "$.cache_hits" != {{after_positive_ram}} +jsonpath "$.disk_hits" == {{after_positive_disk}} # ═════════════════════════════════════════════════════════════ From ba6fe49c7112cca997a28e7b8cf1738394cb2711 Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 30 Aug 2026 22:24:11 +0200 Subject: [PATCH 13/13] docs(plan): mark step 7 done, with what landed beyond the original scope MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The plan still said "Scoped 2026-08-27, not started" for work that is complete and validated against S3 — the first thing a reviewer reads, describing the PR as unwritten. Records the two pieces that were not in the original scoping: the memory cache moving to content keying (it was still file-keyed, so identical content held two RAM entries), and the engine binding a run to the flags it started with. Also that `.transcoded/` legitimately persists where external mounts exist, since hash-less callers have no content identity — absence is only expected elsewhere. Co-Authored-By: Claude Opus 5 (1M context) --- docs/plan/derived-blobs.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/plan/derived-blobs.md b/docs/plan/derived-blobs.md index d3133f94..705be5d3 100644 --- a/docs/plan/derived-blobs.md +++ b/docs/plan/derived-blobs.md @@ -1409,7 +1409,25 @@ hardcoded SQL). New sources bolt on independently. after, step 5 lands at scale; per-row HEADs do not survive a 4× row count. 7. **`ImageTranscodeService`** — same shape, `kind = 'transcode'`, - no new table. **Scoped 2026-08-27, not started.** The service does + no new table. **Done 2026-08-30**, validated on a snapshot restore + against S3: 13 cached transcodes imported, 5 `.skip` markers + collapsing to 3 negative rows (three of them named the same content), + `file_gone` exercised with a synthetic id, and every deletion + preceded by a byte-for-byte readback. + + Two things landed beyond the three pieces below. The memory cache is + now keyed by content as well, not just the durable tier — it was + still `{file_id}:{ext}`, so identical content held two RAM entries + and the second file missed. And `run_or_resume` binds a run to the + flags it started with, so a paused `?repair=true` import can no + longer resume as import-only. + + Still local-disk, deliberately: hash-less callers (external mounts) + have no content identity, so they keep `.transcoded/` and it will + not disappear on installs that have them. Absence is only expected + elsewhere. + + *Original scoping, for the record.* The service does not currently write the derived tier at all, which is the same gap `persist_rendered` closed for thumbnails, and it must be closed before `transcode_import` can converge.