71727faab4
resolve_blob_hash() used to invalidate the cache entry immediately after the first read, forcing every subsequent request for the same file into a PG round-trip (~2-4 ms each). This is especially costly for video Range Requests (50+ seeks = 49 unnecessary queries). Fix: - Remove self.hash_cache.invalidate(file_id) from resolve_blob_hash - Add self.hash_cache.insert() on the slow path so even requests that skip get_file() populate the cache for future reads - This is safe: blob_hash is content-addressed (SHA-256), immutable - moka TTI (30 s) + max_capacity (10 000) prevent unbounded growth - Update 3 unit tests to verify persistent-cache semantics