88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
"""Add outbox delivery state, retry and lease tracking.
|
|
|
|
Revision ID: 0007_outbox_delivery_state
|
|
Revises: 0006_reevaluate_child_lineage
|
|
Create Date: 2026-08-28
|
|
|
|
"""
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision: str = "0007_outbox_delivery_state"
|
|
down_revision: str | None = "0006_reevaluate_child_lineage"
|
|
branch_labels: str | None = None
|
|
depends_on: str | None = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column(
|
|
"delivery_status",
|
|
sa.String(length=32),
|
|
nullable=False,
|
|
server_default="pending",
|
|
),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column(
|
|
"attempt_count",
|
|
sa.Integer(),
|
|
nullable=False,
|
|
server_default="0",
|
|
),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("next_attempt_at", sa.DateTime(timezone=True), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("last_attempt_at", sa.DateTime(timezone=True), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("delivered_at", sa.DateTime(timezone=True), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("lease_expires_at", sa.DateTime(timezone=True), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("claim_token", sa.String(length=36), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("last_error_code", sa.String(length=64), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("last_error_detail", sa.String(length=2000), nullable=True),
|
|
)
|
|
op.add_column(
|
|
"outbox_events",
|
|
sa.Column("last_http_status", sa.Integer(), nullable=True),
|
|
)
|
|
op.create_index(
|
|
"ix_outbox_events_delivery_claim",
|
|
"outbox_events",
|
|
["delivery_status", "next_attempt_at"],
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("ix_outbox_events_delivery_claim", table_name="outbox_events")
|
|
op.drop_column("outbox_events", "last_http_status")
|
|
op.drop_column("outbox_events", "last_error_detail")
|
|
op.drop_column("outbox_events", "last_error_code")
|
|
op.drop_column("outbox_events", "lease_expires_at")
|
|
op.drop_column("outbox_events", "claim_token")
|
|
op.drop_column("outbox_events", "delivered_at")
|
|
op.drop_column("outbox_events", "last_attempt_at")
|
|
op.drop_column("outbox_events", "next_attempt_at")
|
|
op.drop_column("outbox_events", "attempt_count")
|
|
op.drop_column("outbox_events", "delivery_status")
|