Fix cache file serving after cache_manager integration
- Update get_cached endpoint to check cache_manager first, then legacy - Update get_cached_mp4 endpoint similarly - Make cache_file() create symlink in legacy location for backward compat Fixes issue where newly cached outputs weren't being served because they were stored in new location but served from legacy location. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
36
server.py
36
server.py
@@ -161,8 +161,21 @@ def cache_file(source: Path, node_type: str = "output") -> str:
|
|||||||
Copy file to cache using L1CacheManager, return content hash.
|
Copy file to cache using L1CacheManager, return content hash.
|
||||||
|
|
||||||
Uses artdag's Cache internally for proper tracking.
|
Uses artdag's Cache internally for proper tracking.
|
||||||
|
Also creates a symlink in legacy location for backward compatibility.
|
||||||
"""
|
"""
|
||||||
cached = cache_manager.put(source, node_type=node_type)
|
cached = cache_manager.put(source, node_type=node_type)
|
||||||
|
|
||||||
|
# Create symlink in legacy location for backward compatibility
|
||||||
|
legacy_path = CACHE_DIR / cached.content_hash
|
||||||
|
if not legacy_path.exists():
|
||||||
|
try:
|
||||||
|
legacy_path.symlink_to(cached.path)
|
||||||
|
except (OSError, FileExistsError):
|
||||||
|
# Symlink failed, try copy
|
||||||
|
import shutil
|
||||||
|
if not legacy_path.exists():
|
||||||
|
shutil.copy2(cached.path, legacy_path)
|
||||||
|
|
||||||
return cached.content_hash
|
return cached.content_hash
|
||||||
|
|
||||||
|
|
||||||
@@ -754,9 +767,16 @@ async def list_runs(request: Request, page: int = 1, limit: int = 20):
|
|||||||
@app.get("/cache/{content_hash}")
|
@app.get("/cache/{content_hash}")
|
||||||
async def get_cached(content_hash: str):
|
async def get_cached(content_hash: str):
|
||||||
"""Get cached content by hash."""
|
"""Get cached content by hash."""
|
||||||
cache_path = CACHE_DIR / content_hash
|
# Try cache_manager first (new location)
|
||||||
|
cache_path = cache_manager.get_by_content_hash(content_hash)
|
||||||
|
|
||||||
if not cache_path.exists():
|
# Fallback to legacy location
|
||||||
|
if not cache_path:
|
||||||
|
legacy_path = CACHE_DIR / content_hash
|
||||||
|
if legacy_path.exists():
|
||||||
|
cache_path = legacy_path
|
||||||
|
|
||||||
|
if not cache_path or not cache_path.exists():
|
||||||
raise HTTPException(404, f"Content {content_hash} not in cache")
|
raise HTTPException(404, f"Content {content_hash} not in cache")
|
||||||
|
|
||||||
return FileResponse(cache_path)
|
return FileResponse(cache_path)
|
||||||
@@ -765,10 +785,18 @@ async def get_cached(content_hash: str):
|
|||||||
@app.get("/cache/{content_hash}/mp4")
|
@app.get("/cache/{content_hash}/mp4")
|
||||||
async def get_cached_mp4(content_hash: str):
|
async def get_cached_mp4(content_hash: str):
|
||||||
"""Get cached content as MP4 (transcodes MKV on first request, caches result)."""
|
"""Get cached content as MP4 (transcodes MKV on first request, caches result)."""
|
||||||
cache_path = CACHE_DIR / content_hash
|
# Try cache_manager first (new location)
|
||||||
|
cache_path = cache_manager.get_by_content_hash(content_hash)
|
||||||
|
|
||||||
|
# Fallback to legacy location
|
||||||
|
if not cache_path:
|
||||||
|
legacy_path = CACHE_DIR / content_hash
|
||||||
|
if legacy_path.exists():
|
||||||
|
cache_path = legacy_path
|
||||||
|
|
||||||
mp4_path = CACHE_DIR / f"{content_hash}.mp4"
|
mp4_path = CACHE_DIR / f"{content_hash}.mp4"
|
||||||
|
|
||||||
if not cache_path.exists():
|
if not cache_path or not cache_path.exists():
|
||||||
raise HTTPException(404, f"Content {content_hash} not in cache")
|
raise HTTPException(404, f"Content {content_hash} not in cache")
|
||||||
|
|
||||||
# If MP4 already cached, serve it
|
# If MP4 already cached, serve it
|
||||||
|
|||||||
Reference in New Issue
Block a user