0022_run_inputs.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import sqlalchemy as sa
  2. from alembic import op
  3. from sqlalchemy.dialects import mysql
  4. revision = "0022_run_inputs"
  5. down_revision = "0021_billing_statements"
  6. branch_labels = None
  7. depends_on = None
  8. def upgrade():
  9. op.add_column("agent_runs", sa.Column("version", mysql.BIGINT(unsigned=True),
  10. nullable=False, server_default="1"))
  11. op.alter_column("agent_runs", "version", server_default=None,
  12. existing_type=mysql.BIGINT(unsigned=True))
  13. op.add_column("agent_runs", sa.Column("waiting", sa.JSON(), nullable=True))
  14. op.drop_constraint(op.f("ck_agent_runs_status"), "agent_runs", type_="check")
  15. op.create_check_constraint("status", "agent_runs",
  16. "status IN ('QUEUED','RUNNING','WAITING_USER','COMPLETED','FAILED','CANCELLED')")
  17. # 每次等待只能接受一份有效输入,输入收据与运行恢复使用同一事务。
  18. op.create_table(
  19. "run_input_events",
  20. sa.Column("id", mysql.BINARY(16), primary_key=True),
  21. sa.Column("tenant_id", mysql.BINARY(16), nullable=False),
  22. sa.Column("run_id", mysql.BINARY(16), nullable=False),
  23. sa.Column("actor_id", mysql.BINARY(16), nullable=False),
  24. sa.Column("interrupt_id", mysql.BINARY(16), nullable=False),
  25. sa.Column("request_key", sa.String(64, collation="utf8mb4_bin"), nullable=False),
  26. sa.Column("request_hash", mysql.BINARY(32), nullable=False),
  27. sa.Column("payload", sa.JSON(), nullable=False),
  28. sa.Column("result_version", mysql.BIGINT(unsigned=True), nullable=False),
  29. sa.Column("created_at", mysql.DATETIME(fsp=6), nullable=False),
  30. sa.ForeignKeyConstraint(["tenant_id", "run_id"], ["agent_runs.tenant_id", "agent_runs.id"]),
  31. sa.UniqueConstraint("tenant_id", "run_id", "request_key", name="uq_run_input_request"),
  32. sa.UniqueConstraint("tenant_id", "run_id", "interrupt_id", name="uq_run_input_wait"),
  33. )
  34. def downgrade():
  35. op.drop_table("run_input_events")
  36. op.drop_constraint(op.f("ck_agent_runs_status"), "agent_runs", type_="check")
  37. op.create_check_constraint("status", "agent_runs",
  38. "status IN ('QUEUED','RUNNING','COMPLETED','FAILED','CANCELLED')")
  39. op.drop_column("agent_runs", "waiting")
  40. op.drop_column("agent_runs", "version")