fix(rls): 收斂 API DB access context
All checks were successful
Code Review / ai-code-review (push) Successful in 21s
CD Pipeline / tests (push) Successful in 1m20s
CD Pipeline / build-and-deploy (push) Successful in 4m15s
CD Pipeline / post-deploy-checks (push) Successful in 1m58s

This commit is contained in:
Your Name
2026-05-12 19:55:13 +08:00
parent 33c0577e93
commit ff30c61c4c
16 changed files with 327 additions and 55 deletions

View File

@@ -21,7 +21,7 @@ from typing import Any
import structlog
from src.core.redis_client import get_redis, get_worker_redis, init_worker_redis_pool
from src.db.base import get_session_factory
from src.db.base import get_db_context
from src.models.aider import AiderEventIn
from src.repositories.aider_event_repository import AiderEventRepository
from src.services.aider_event_service import build_signal_data, should_create_incident
@@ -123,7 +123,7 @@ class AiderEventProcessor:
self, stream_key: str, msg_id: Any, data: dict, _session_factory=None
) -> None:
"""處理單筆 messageparse → (maybe) incident → DB write → ACK。
_session_factory: 可注入測試用 factory,預設使用 get_session_factory()
_session_factory: 可注入測試用 factoryproduction 預設使用 get_db_context() 設定 RLS context
"""
try:
raw = data.get(b"payload") or data.get("payload")
@@ -151,14 +151,22 @@ class AiderEventProcessor:
# 不中斷 — 即使 incident 失敗event 仍要持久化
try:
session_factory = _session_factory or get_session_factory()
async with session_factory() as session:
repo = AiderEventRepository(session)
await repo.insert(
session_id=ev.session_id, ts=ev.ts, type_=ev.type,
host=ev.host, payload=ev.payload, incident_id=incident_id,
)
await session.commit()
if _session_factory is None:
async with get_db_context() as session:
repo = AiderEventRepository(session)
await repo.insert(
session_id=ev.session_id, ts=ev.ts, type_=ev.type,
host=ev.host, payload=ev.payload, incident_id=incident_id,
)
else:
session_factory = _session_factory
async with session_factory() as session:
repo = AiderEventRepository(session)
await repo.insert(
session_id=ev.session_id, ts=ev.ts, type_=ev.type,
host=ev.host, payload=ev.payload, incident_id=incident_id,
)
await session.commit()
except Exception:
logger.exception("aider_processor_db_write_failed",
session_id=ev.session_id)