f1f327a6c4
`blobs_consistency` probed `blob_exists` once per row and, under `?deep=true`, read and re-hashed every blob. `backend_consistency` already reports the same `blob_missing_from_backend` from its merge-join — so the probe was duplicated work that found strictly less (a DB walk cannot see backend-only orphans by construction) at N round -trips instead of one enumeration. Every scheduled sweep paid for it. All three physical checks move to `backend_consistency`: * `blob_missing_from_backend` was already there; the duplicate is gone. * `blob_corrupted` / `blob_unreadable` hook the matched arm of the merge-join, which holds exactly the key pairs worth reading. Guarded by `in_range` so a pair past the horizon is not read twice, and `params.deep` is persisted on a fresh run and read back on resume so a paused deep scan does not silently continue shallow. Deep mode belongs there because it is backend work end to end: the only DB input is the hash. Keeping it in `blobs_consistency` forced that tenant to carry a backend for one flag. What remains is the half that needs no backend: `refcount_mismatch` and its repair. The constructor drops from five parameters to two — no backend, no storage_entries, no storage_path_fallback — and `?storage=<name>` / `?deep=true` are now inert there, which the job description says outright. `affected_files` is needed by both tenants, so it moves to a shared `blob_diagnostics` module rather than being copied. `PROBED_STORAGE_PARAM` moves to `backend_consistency`: it was defined in `blobs_consistency` and re-exported, which is backwards once the DB-only tenant has no entry to scope. The create-grace window goes with the probe — it existed to avoid flagging a blob whose bytes had landed before its row, and the refcount comparison reads one consistent snapshot. Known cost: `backend_consistency` returns `backend_unenumerable` on Azure and mid-migration, so on those configs missing bytes now go unreported where the per-row probe caught them. That argues for the Azure enumeration impl, not for keeping the probe. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
73 lines
2.1 KiB
Rust
73 lines
2.1 KiB
Rust
pub mod audio_metadata_service;
|
|
pub mod azure_blob_backend;
|
|
pub mod backend_consistency_service;
|
|
pub mod backend_migration_service;
|
|
pub mod backend_rotate_service;
|
|
pub mod blob_diagnostics;
|
|
pub mod blobs_consistency_service;
|
|
pub mod cached_blob_backend;
|
|
pub mod chunked_upload_service;
|
|
pub mod compression_service;
|
|
pub mod consistency_batch_service;
|
|
pub mod db_pool_monitor;
|
|
pub mod dedup_service;
|
|
pub mod dpop_nonce_service;
|
|
pub mod dpop_replay_cache;
|
|
pub mod dpop_verifier;
|
|
pub mod drives_consistency_service;
|
|
pub mod encrypted_blob_backend;
|
|
pub mod entry_backend;
|
|
pub mod exif_service;
|
|
pub mod face_geometry;
|
|
pub mod face_indexing_service;
|
|
pub mod ffmpeg_video_frame_service;
|
|
pub mod file_content_cache;
|
|
pub mod file_system_i18n_service;
|
|
pub mod files_consistency_service;
|
|
pub mod folders_consistency_service;
|
|
pub mod grant_cleanup_service;
|
|
pub mod image_transcode_service;
|
|
pub mod jwt_service;
|
|
pub mod last_seen_tracker;
|
|
pub mod local_blob_backend;
|
|
pub mod local_fs_mount_provider;
|
|
pub mod login_lockout_service;
|
|
pub mod manifests_consistency_service;
|
|
pub mod media_metadata_service;
|
|
pub mod mock_email_sender;
|
|
pub mod mount_provider_factory;
|
|
pub mod nextcloud_chunked_upload_service;
|
|
pub mod noop_face_analyzer;
|
|
pub mod oidc_service;
|
|
#[cfg(feature = "faces-onnx")]
|
|
pub mod onnx_face_analyzer;
|
|
pub mod opaque_login_exchange;
|
|
pub mod opaque_service;
|
|
pub mod password_hasher;
|
|
pub mod path_resolver_service;
|
|
pub mod path_service;
|
|
pub mod pg_acl_engine;
|
|
#[cfg(feature = "plugins")]
|
|
pub mod plugins;
|
|
pub mod recent_recording_hook;
|
|
pub mod retry_blob_backend;
|
|
pub mod s3_blob_backend;
|
|
pub mod satellites_consistency_service;
|
|
pub mod search_index;
|
|
pub mod session_cleanup_service;
|
|
pub mod session_liveness_gauges;
|
|
pub mod share_unlock_cookie;
|
|
pub mod smtp_email_sender;
|
|
pub mod swappable_blob_backend;
|
|
pub mod thumb_attached_import_service;
|
|
pub mod thumb_derived_import_service;
|
|
pub mod thumbnail_service;
|
|
#[cfg(test)]
|
|
mod thumbnail_service_test;
|
|
pub mod trash_cleanup_service;
|
|
pub mod tree_etag_flush_service;
|
|
pub mod webdav_dead_property_store;
|
|
pub mod webdav_lock_service;
|
|
pub mod wopi_discovery_service;
|
|
pub mod zip_service;
|