fix(rls): 收斂 API DB access context
This commit is contained in:
@@ -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:
|
||||
"""處理單筆 message:parse → (maybe) incident → DB write → ACK。
|
||||
_session_factory: 可注入測試用 factory,預設使用 get_session_factory()。
|
||||
_session_factory: 可注入測試用 factory;production 預設使用 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)
|
||||
|
||||
Reference in New Issue
Block a user