fix: error_logs.path VARCHAR(500) → TEXT — 서버 응답 불가 해결
멀티 티커 요청 URL이 500자를 초과하면서 error_logs INSERT가 StringDataRightTruncationError로 실패, 미들웨어에서 매 에러 응답마다 DB rollback 대기가 발생해 서버가 응답 불가 수준으로 느려졌음 (2562회 반복). - error_logs.path: String(500) → Text (model + migration j1b2c3d4e5f6) - request_logs.path: String(500) → Text (model + migration i0a1b2c3d4e5) - docker-compose: alembic/ + alembic.ini 볼륨 마운트 추가 (이전에는 컨테이너 내부에만 있어 마이그레이션 적용 불가) - middleware: 요청마다 찍히던 logger.info → logger.debug 로 변경 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
5bcba8632c
commit
409966a478
@ -0,0 +1,37 @@
|
|||||||
|
"""fix request_log path column to TEXT
|
||||||
|
|
||||||
|
Revision ID: i0a1b2c3d4e5
|
||||||
|
Revises: h9b0c1d2e3f4
|
||||||
|
Create Date: 2026-04-13
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
revision: str = "i0a1b2c3d4e5"
|
||||||
|
down_revision: Union[str, Sequence[str], None] = "h9b0c1d2e3f4"
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
# path stores the full URL (path + query string) and can exceed 500 chars
|
||||||
|
# for multi-ticker requests — widen to TEXT
|
||||||
|
op.alter_column(
|
||||||
|
"request_logs",
|
||||||
|
"path",
|
||||||
|
existing_type=sa.String(500),
|
||||||
|
type_=sa.Text(),
|
||||||
|
existing_nullable=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
op.alter_column(
|
||||||
|
"request_logs",
|
||||||
|
"path",
|
||||||
|
existing_type=sa.Text(),
|
||||||
|
type_=sa.String(500),
|
||||||
|
existing_nullable=True,
|
||||||
|
)
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
"""fix error_log path column to TEXT
|
||||||
|
|
||||||
|
Revision ID: j1b2c3d4e5f6
|
||||||
|
Revises: i0a1b2c3d4e5
|
||||||
|
Create Date: 2026-04-14
|
||||||
|
|
||||||
|
error_logs.path was VARCHAR(500), causing StringDataRightTruncationError
|
||||||
|
for multi-ticker requests whose URLs exceed 500 chars. This blocked every
|
||||||
|
error log INSERT and added rollback latency to each error response.
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
revision: str = "j1b2c3d4e5f6"
|
||||||
|
down_revision: Union[str, Sequence[str], None] = "i0a1b2c3d4e5"
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
op.alter_column(
|
||||||
|
"error_logs",
|
||||||
|
"path",
|
||||||
|
existing_type=sa.String(500),
|
||||||
|
type_=sa.Text(),
|
||||||
|
existing_nullable=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
op.alter_column(
|
||||||
|
"error_logs",
|
||||||
|
"path",
|
||||||
|
existing_type=sa.Text(),
|
||||||
|
type_=sa.String(500),
|
||||||
|
existing_nullable=True,
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue