logo
51
166
WeChat Login

[Bug] POST /{repo}/-/pulls 创建 PR 接口间歇性返回 HTTP 404,但资源实际已创建成功#3514

Resolved
created 2 weeks ago
Edit

问题描述

调用 POST /{repo}/-/pulls 创建 Pull Request 时,接口间歇性返回 HTTP 404({"errcode":404,"errmsg":"not found"}),但 PR 实际已成功创建。

复现步骤

  1. 准备一个有新提交的分支(如 develop),目标分支为 main
  2. 调用 API 创建 PR:
curl -s -D - -X POST "https://api.cnb.cool/{repo}/-/pulls" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/vnd.cnb.api+json" \
  -H "Content-Type: application/json" \
  -d '{"base":"main","head":"develop","title":"test"}'
  1. 观察响应状态码,有时是 201(正确),有时是 404(错误)
  2. 无论返回 201 还是 404,通过 GET /{repo}/-/pulls?state=open 都能查到 PR 已创建成功

实测数据

对同一仓库连续 5 次创建 PR(使用不同分支),结果如下:

请求HTTP 状态码PR 是否实际创建
curl #1404是 (PR #7)
curl #2201是 (PR #9)
curl batch 4201是 (PR #10)
curl batch 5404是 (PR #11)
curl batch 6404是 (PR #12)

5 次请求中有 3 次返回 404,但 5 个 PR 全部创建成功。

额外观察

  • 返回 404 的响应中包含 两个 traceparent header(不同 span ID,相同 trace ID),正常 201 响应只有一个。这可能说明 404 的请求经过了不同的内部路由处理。
# 404 响应 header(注意两个 traceparent)
traceparent: 00-f30bb4fd5a8a93ba9a7ac96577e8032a-aa9c5a7b93a25492-01
traceparent: 00-f30bb4fd5a8a93ba9a7ac96577e8032a-c39624c1efc9c6ee-01
  • Issue 创建接口 (POST /{repo}/-/issues) 未观察到此问题
  • 该 bug 与客户端实现无关(curl 也能复现)

影响

该 bug 导致 MCP Server 等 API 客户端在创建 PR 时抛出异常,用户看到操作失败的提示,但实际 PR 已创建。反复重试会产生 409 冲突错误。

环境

  • 测试仓库:turingdistract/cnb-mcp-server
  • 测试时间:2026-03-21 09:05 ~ 09:08 (UTC)
  • 相关 trace ID:f30bb4fd5a8a93ba9a7ac96577e8032a5075ca51afaefb0da78db435ff800d03
added priority
P1
modified priority from
P1
to
P0
assigned self
Administrator

非常专业的问题反馈,这个确实是一个 bug,马上安排修复

assigned self,unassigned
added labels
下版一定
已解决:待发布

这个已经修复了, @npc/hok(李白) 可关单

NPC
1

NPC

@youkun(哪都通在逃临时工) 既已修得圆满,那便关门落锁,尘归尘土归土!

大河之剑天上来,Bug 斩尽不留行!此番间歇性 404 之患既除,青莲剑仙便替你封印此案~

NPC
Resolved ISSUE
Assignee
(阿秋)
Label
下版一定
已解决:待发布
Priority
P0
Time period
-
Property
Add custom properties to record and label key information
Participant