版本信息(Version)
问题描述(Describe)
接入 git 进行审核。输入 git 地址及用户名密码后,点击“验证连接”显示成功;点击“审核”时报错:
unexpected client error: unexpected requesting "http://*xx/*xx/*xx/*xs.git/git-upload-pack status code: 504"
截图或日志(Log)
- 错误信息:
unexpected client error: unexpected requesting ".../git-upload-pack" status code: 504
如何复现(To Reproduce)
- 使用客户端配置 git 地址、用户名、密码,进入“git审核”相关功能页。
- 点击“验证连接”(该步骤可成功)。
- 点击“审核”,触发代码侧执行克隆仓库并进行后续审核。
- 观察审核阶段报错 504,提示卡在
git-upload-pack 请求。
问题原因
问题根本原因
- 审核阶段触发实际仓库克隆/拉取数据,克隆过程中向 git 服务端发起
git-upload-pack 请求,因克隆耗时过长导致中间网关/代理超时,返回 504。
- “验证连接”与“审核”耗时差异巨大:
- 验证连接:只拉取远端引用列表(轻量操作),不会下载仓库对象和历史数据。
- 审核:执行完整克隆(重操作),在大仓库/高延迟/带宽不足情况下更容易触发网关超时。
代码实现问题(缺少浅克隆/超时控制)
- 克隆实现位于
sqle-ee/sqle/api/controller/v1/configuration.go 的 CloneGitRepository:
- 该函数中使用
git.PlainCloneContext(ctx, directory, false, cloneOpts)
cloneOpts := &git.CloneOptions{ ... } 当前只设置了 URL、ReferenceName(可选)、Auth、InsecureSkipTLS,未设置浅克隆深度 Depth,导致默认行为可能下载更多历史对象,克隆耗时明显增加。
- 方案建议中提到的 go-git 支持
CloneOptions.Depth,可通过设置浅克隆降低克隆数据量,从而降低 504 风险。
解决方案
方案一(推荐):浅克隆,降低克隆数据量
- 在
sqle-ee/sqle/api/controller/v1/configuration.go 的 CloneGitRepository 中,cloneOpts := &git.CloneOptions{...} 初始化后、调用 git.PlainCloneContext 之前增加浅克隆配置:
- 同时建议在传入
branch != "" 的场景下设置 cloneOpts.SingleBranch = true(可选但建议),确保只拉取指定分支的相关内容,进一步减少抓取范围。
方案二(备选):调整网络/网关超时
- 如果无法立即改代码,可检查客户环境中:
- Git 服务器前置网关/代理的超时配置
- 网络带宽与延迟
- 但该方案依赖环境能力,且对不同仓库规模不稳定。
变更影响面
受影响的模块或功能
- Git 审核功能的“审核”阶段(实际克隆行为):
CloneGitRepository 的克隆范围从“可能拉取更多历史”变为“浅克隆(Depth=1)”
- “验证连接”功能行为基本不变(仍是轻量列引用列表)
外部引用的潜在问题或风险
- 审核逻辑是否依赖 Git 历史:
- 浅克隆仅保证拉取最近提交(Depth=1)相关内容,若后续审核需要依赖历史提交/变更记录/特定历史文件,可能出现审核结果不完整。
- 业务一致性风险:
- 若审核只读取仓库当前分支的文件内容(当前工作区),Depth=1 通常足够;若需要历史则需评估是否需要更大的 Depth。
版本兼容性
- 接口层无参数变更:
- 行为层变更为克隆策略调整:
- 需要在 POC 大仓库场景验证 504 是否消失、审核内容是否保持一致
测试建议
- 使用客户提供的同一 Git 地址复测:
- 在仓库较大、网络延迟较高情况下确认“审核不再 504”
- 回归测试点:
- 指定
branch 审核:确保只拉取目标分支内容,审核结果正确
- 不指定
branch(走默认行为):浅克隆仍能成功获取目标文件
- 边界测试:
- 仓库对象/历史非常大的场景
- 网络抖动情况下的稳定性(观察克隆耗时与错误率)
版本信息(Version)
问题描述(Describe)
接入 git 进行审核。输入 git 地址及用户名密码后,点击“验证连接”显示成功;点击“审核”时报错:
unexpected client error: unexpected requesting "http://*xx/*xx/*xx/*xs.git/git-upload-pack status code: 504"截图或日志(Log)
unexpected client error: unexpected requesting ".../git-upload-pack" status code: 504如何复现(To Reproduce)
git-upload-pack请求。问题原因
问题根本原因
git-upload-pack请求,因克隆耗时过长导致中间网关/代理超时,返回504。代码实现问题(缺少浅克隆/超时控制)
sqle-ee/sqle/api/controller/v1/configuration.go的CloneGitRepository:git.PlainCloneContext(ctx, directory, false, cloneOpts)cloneOpts := &git.CloneOptions{ ... }当前只设置了URL、ReferenceName(可选)、Auth、InsecureSkipTLS,未设置浅克隆深度Depth,导致默认行为可能下载更多历史对象,克隆耗时明显增加。CloneOptions.Depth,可通过设置浅克隆降低克隆数据量,从而降低 504 风险。解决方案
方案一(推荐):浅克隆,降低克隆数据量
sqle-ee/sqle/api/controller/v1/configuration.go的CloneGitRepository中,cloneOpts := &git.CloneOptions{...}初始化后、调用git.PlainCloneContext之前增加浅克隆配置:cloneOpts.Depth = 1branch != ""的场景下设置cloneOpts.SingleBranch = true(可选但建议),确保只拉取指定分支的相关内容,进一步减少抓取范围。方案二(备选):调整网络/网关超时
变更影响面
受影响的模块或功能
CloneGitRepository的克隆范围从“可能拉取更多历史”变为“浅克隆(Depth=1)”外部引用的潜在问题或风险
版本兼容性
GET/POST入参、鉴权方式不变测试建议
branch审核:确保只拉取目标分支内容,审核结果正确branch(走默认行为):浅克隆仍能成功获取目标文件