Skip to content

fix(agent-api):修复增加分析任务请求幂等性问题 - #44

Merged
Heyflyingpig merged 1 commit into
developfrom
fix(agent-api)/request-idempotency
Aug 5, 2026
Merged

fix(agent-api):修复增加分析任务请求幂等性问题#44
Heyflyingpig merged 1 commit into
developfrom
fix(agent-api)/request-idempotency

Conversation

@Heyflyingpig

Copy link
Copy Markdown
Owner

服务端增加请求幂等性

app/agent/job_service.py 中增加:

  • 强制校验 Idempotency-Key,长度为 16 到 128 位。
  • 用户 ID + Idempotency-Key 查找历史 job。
  • session_idmessage 生成 HMAC-SHA256 请求指纹。
  • 同一个幂等键、请求参数相同:返回原 job。
  • 同一个幂等键、请求参数不同:抛出冲突。
  • 幂等键查询、会话锁定、job 插入在同一个 MySQL 事务中完成。
  • 并发插入触发唯一键冲突时,重新读取已经提交的原 job。

这样可以保证:

第一次请求:
创建 job-A -> 返回 202

客户端没有收到响应,再次使用同一个 key:
读取 job-A -> 返回 200,不创建 job-B

同一个 key 但修改消息:
返回 409,不允许复用

API 层增加协议处理

app/agent/routes.py 中:

  • 缺少或非法 Idempotency-Key:返回 400
  • 同 key 不同请求参数:返回 409
  • 重放同一个请求:返回原 job,并设置 existing: true

数据库结构变更

新增迁移:

f9a0b1c2d3e4_add_agent_job_idempotency.py

增加:

analysis_jobs.idempotency_key VARCHAR(128) NULL
analysis_jobs.request_fingerprint CHAR(64) NULL
UNIQUE (user_id, idempotency_key)

字段允许为空,是为了兼容已经存在的历史 job。历史 job 不会被删除,也不会被强行补造幂等键。

同时更新了:

  • app/db.py:启动 readiness 检查。
  • Database/inspection.py:完整性检查。
  • Database/deep_audit.py:deep audit 结构检查。
  1. 前端增加重试支持

app/static/js/script.js 中:

  • 每次逻辑发送生成一个安全 UUID。
  • 网络异常、响应解析失败或 5xx 时最多重试一次。
  • 重试始终复用同一个 Idempotency-Key
  • 4xx 不自动重试,避免错误请求重复发送。
  1. 测试和文档

新增请求幂等测试:

tests/unit/agent/test_job_idempotency.py

覆盖:

  • 相同 key 和相同参数返回原 job。
  • 相同 key 和不同参数返回冲突。
  • 新 job 正确保存幂等字段。
  • 并发唯一键冲突后正确读取原 job。

同时更新了 API 测试、迁移静态测试、AGENTS.mdREADME/开发日志.md

当前验证结果

已通过:

Docker 单元测试:239 passed
聚焦测试:62 passed
迁移静态测试:15 passed
Python 语法检查:通过
JavaScript 语法检查:通过
git diff --check:通过
Alembic migration head:f9a0b1c2d3e4

@Heyflyingpig Heyflyingpig self-assigned this Aug 5, 2026
@Heyflyingpig Heyflyingpig linked an issue Aug 5, 2026 that may be closed by this pull request
@Heyflyingpig
Heyflyingpig merged commit 00e99be into develop Aug 5, 2026
3 checks passed
@Heyflyingpig
Heyflyingpig deleted the fix(agent-api)/request-idempotency branch August 11, 2026 03:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(agent-api):增加创建分析任务请求幂等性

1 participant