fix: background jobs and lifespan must use BYPASSRLS sessions
All code that runs outside a request context (APScheduler jobs, lifespan startup) has no app.current_account_id set, so the app-role session returns 0 rows from every RLS-protected table. Changed to _admin_session_factory (BYPASSRLS) in: - knowledge_flywheel_scheduler.py — queries ai_sessions - psa_retry_scheduler.py — queries psa_post_log - retention_cleanup.py — queries assistant_chats - scheduler.py (_fire_maintenance_schedule, _cleanup_expired_ai_conversations) - main.py (archive_stale_ai_sessions, _process_notification_retries, load_all_schedules at startup) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ async def _fire_maintenance_schedule(schedule_id: str) -> None:
|
|||||||
"""Create batch sessions for a scheduled maintenance run."""
|
"""Create batch sessions for a scheduled maintenance run."""
|
||||||
# Import all models first to ensure SQLAlchemy mapper relationships resolve
|
# Import all models first to ensure SQLAlchemy mapper relationships resolve
|
||||||
import app.models # noqa: F401
|
import app.models # noqa: F401
|
||||||
from app.core.database import async_session_maker
|
from app.core.admin_database import _admin_session_factory as async_session_maker
|
||||||
from app.models.maintenance_schedule import MaintenanceSchedule
|
from app.models.maintenance_schedule import MaintenanceSchedule
|
||||||
from app.models.session import Session
|
from app.models.session import Session
|
||||||
from app.models.target_list import TargetList
|
from app.models.target_list import TargetList
|
||||||
@@ -118,7 +118,7 @@ async def _fire_maintenance_schedule(schedule_id: str) -> None:
|
|||||||
async def _cleanup_expired_ai_conversations() -> None:
|
async def _cleanup_expired_ai_conversations() -> None:
|
||||||
"""Delete expired AI wizard conversations."""
|
"""Delete expired AI wizard conversations."""
|
||||||
import app.models # noqa: F401
|
import app.models # noqa: F401
|
||||||
from app.core.database import async_session_maker
|
from app.core.admin_database import _admin_session_factory as async_session_maker
|
||||||
from app.models.ai_conversation import AIConversation
|
from app.models.ai_conversation import AIConversation
|
||||||
|
|
||||||
async with async_session_maker() as db:
|
async with async_session_maker() as db:
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ if settings.SENTRY_DSN:
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
from app.core.database import init_db, async_session_maker
|
from app.core.database import init_db
|
||||||
|
from app.core.admin_database import _admin_session_factory as async_session_maker
|
||||||
from app.core.logging_config import setup_logging
|
from app.core.logging_config import setup_logging
|
||||||
from app.core.middleware import RequestLoggingMiddleware, ErrorLoggingMiddleware
|
from app.core.middleware import RequestLoggingMiddleware, ErrorLoggingMiddleware
|
||||||
from app.core.security_headers import SecurityHeadersMiddleware
|
from app.core.security_headers import SecurityHeadersMiddleware
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import logging
|
|||||||
|
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
from app.core.database import async_session_maker
|
from app.core.admin_database import _admin_session_factory as async_session_maker
|
||||||
from app.models.ai_session import AISession
|
from app.models.ai_session import AISession
|
||||||
from app.services.knowledge_flywheel import analyze_session
|
from app.services.knowledge_flywheel import analyze_session
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from datetime import datetime, timezone
|
|||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.core.database import async_session_maker
|
from app.core.admin_database import _admin_session_factory as async_session_maker
|
||||||
from app.models.psa_post_log import PsaPostLog
|
from app.models.psa_post_log import PsaPostLog
|
||||||
from app.services.psa_documentation_service import retry_failed_push
|
from app.services.psa_documentation_service import retry_failed_push
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from datetime import datetime, timezone, timedelta
|
|||||||
|
|
||||||
from sqlalchemy import select, delete, func
|
from sqlalchemy import select, delete, func
|
||||||
|
|
||||||
from app.core.database import async_session_maker
|
from app.core.admin_database import _admin_session_factory as async_session_maker
|
||||||
from app.models.account import Account
|
from app.models.account import Account
|
||||||
from app.models.assistant_chat import AssistantChat
|
from app.models.assistant_chat import AssistantChat
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user