fix: isolate startup steps so repair scan always runs
This commit is contained in:
@@ -232,46 +232,58 @@ async def lifespan(_application: FastAPI):
|
|||||||
if settings.anime_directory:
|
if settings.anime_directory:
|
||||||
# Perform initial setup if needed
|
# Perform initial setup if needed
|
||||||
await perform_initial_setup()
|
await perform_initial_setup()
|
||||||
|
|
||||||
# Get anime service for later use
|
# Get anime service and load series — isolated so a missing
|
||||||
from src.server.utils.dependencies import get_anime_service
|
# directory doesn't abort the rest of the startup sequence
|
||||||
anime_service = get_anime_service()
|
try:
|
||||||
|
from src.server.utils.dependencies import get_anime_service
|
||||||
# Always load series from database into memory on startup
|
anime_service = get_anime_service()
|
||||||
logger.info("Loading series from database into memory...")
|
|
||||||
await anime_service._load_series_from_db()
|
# Always load series from database into memory on startup
|
||||||
logger.info("Series loaded from database into memory")
|
logger.info("Loading series from database into memory...")
|
||||||
|
await anime_service._load_series_from_db()
|
||||||
|
logger.info("Series loaded from database into memory")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(
|
||||||
|
"Could not load series into memory (directory may not "
|
||||||
|
"exist yet): %s", e
|
||||||
|
)
|
||||||
|
|
||||||
# Run NFO scan only on first run (if configured)
|
# Run NFO scan only on first run (if configured)
|
||||||
await perform_nfo_scan_if_needed()
|
await perform_nfo_scan_if_needed()
|
||||||
|
|
||||||
# Now initialize download service (will use data from database)
|
# Initialize download service
|
||||||
from src.server.utils.dependencies import get_download_service
|
|
||||||
download_service = get_download_service()
|
|
||||||
await download_service.initialize()
|
|
||||||
initialized['services'] = True
|
|
||||||
logger.info("Download service initialized and queue restored")
|
|
||||||
|
|
||||||
# Initialize background loader service
|
|
||||||
from src.server.utils.dependencies import get_background_loader_service
|
|
||||||
|
|
||||||
background_loader = get_background_loader_service()
|
|
||||||
await background_loader.start()
|
|
||||||
initialized['background_loader'] = True
|
|
||||||
logger.info("Background loader service started")
|
|
||||||
|
|
||||||
# Initialize and start scheduler service
|
|
||||||
from src.server.services.scheduler_service import get_scheduler_service
|
|
||||||
|
|
||||||
scheduler_service = get_scheduler_service()
|
|
||||||
try:
|
try:
|
||||||
|
from src.server.utils.dependencies import get_download_service
|
||||||
|
download_service = get_download_service()
|
||||||
|
await download_service.initialize()
|
||||||
|
initialized['services'] = True
|
||||||
|
logger.info("Download service initialized and queue restored")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning("Failed to initialize download service: %s", e)
|
||||||
|
|
||||||
|
# Initialize background loader service
|
||||||
|
background_loader = None
|
||||||
|
try:
|
||||||
|
from src.server.utils.dependencies import get_background_loader_service
|
||||||
|
background_loader = get_background_loader_service()
|
||||||
|
await background_loader.start()
|
||||||
|
initialized['background_loader'] = True
|
||||||
|
logger.info("Background loader service started")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning("Failed to start background loader service: %s", e)
|
||||||
|
|
||||||
|
# Initialize and start scheduler service
|
||||||
|
try:
|
||||||
|
from src.server.services.scheduler_service import get_scheduler_service
|
||||||
|
scheduler_service = get_scheduler_service()
|
||||||
await scheduler_service.start()
|
await scheduler_service.start()
|
||||||
initialized['scheduler'] = True
|
initialized['scheduler'] = True
|
||||||
logger.info("Scheduler service started")
|
logger.info("Scheduler service started")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("Failed to start scheduler service: %s", e)
|
logger.warning("Failed to start scheduler service: %s", e)
|
||||||
# Continue - scheduler is optional
|
# Continue - scheduler is optional
|
||||||
|
|
||||||
# Run media scan only on first run
|
# Run media scan only on first run
|
||||||
await perform_media_scan_if_needed(background_loader)
|
await perform_media_scan_if_needed(background_loader)
|
||||||
|
|
||||||
@@ -286,10 +298,8 @@ async def lifespan(_application: FastAPI):
|
|||||||
except (OSError, RuntimeError, ValueError) as e:
|
except (OSError, RuntimeError, ValueError) as e:
|
||||||
logger.warning("Failed to initialize services: %s", e)
|
logger.warning("Failed to initialize services: %s", e)
|
||||||
# Continue startup - services can be initialized later
|
# Continue startup - services can be initialized later
|
||||||
except Exception as e: # includes HTTPException from get_anime_service
|
except Exception as e:
|
||||||
logger.warning(
|
logger.warning("Unexpected error during startup initialization: %s", e)
|
||||||
"Failed to initialize services (anime directory may not exist): %s", e
|
|
||||||
)
|
|
||||||
# Continue startup - services can be configured/initialized later
|
# Continue startup - services can be configured/initialized later
|
||||||
|
|
||||||
logger.info("FastAPI application started successfully")
|
logger.info("FastAPI application started successfully")
|
||||||
|
|||||||
Reference in New Issue
Block a user