Skip to content

git仓库执行SQL审核报错 #3220

@LordofAvernus

Description

@LordofAvernus

版本信息(Version)

  • 版本:4.2508.0
  • 紧急程度:中

问题描述(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)

  1. 使用客户端配置 git 地址、用户名、密码,进入“git审核”相关功能页。
  2. 点击“验证连接”(该步骤可成功)。
  3. 点击“审核”,触发代码侧执行克隆仓库并进行后续审核。
  4. 观察审核阶段报错 504,提示卡在 git-upload-pack 请求。

问题原因

问题根本原因

  • 审核阶段触发实际仓库克隆/拉取数据,克隆过程中向 git 服务端发起 git-upload-pack 请求,因克隆耗时过长导致中间网关/代理超时,返回 504
  • “验证连接”与“审核”耗时差异巨大:
    • 验证连接:只拉取远端引用列表(轻量操作),不会下载仓库对象和历史数据。
    • 审核:执行完整克隆(重操作),在大仓库/高延迟/带宽不足情况下更容易触发网关超时。

代码实现问题(缺少浅克隆/超时控制)

  • 克隆实现位于 sqle-ee/sqle/api/controller/v1/configuration.goCloneGitRepository
    • 该函数中使用 git.PlainCloneContext(ctx, directory, false, cloneOpts)
    • cloneOpts := &git.CloneOptions{ ... } 当前只设置了 URLReferenceName(可选)AuthInsecureSkipTLS未设置浅克隆深度 Depth,导致默认行为可能下载更多历史对象,克隆耗时明显增加。
  • 方案建议中提到的 go-git 支持 CloneOptions.Depth,可通过设置浅克隆降低克隆数据量,从而降低 504 风险。

解决方案

方案一(推荐):浅克隆,降低克隆数据量

  • sqle-ee/sqle/api/controller/v1/configuration.goCloneGitRepository 中,cloneOpts := &git.CloneOptions{...} 初始化后、调用 git.PlainCloneContext 之前增加浅克隆配置:
    • 设置 cloneOpts.Depth = 1
  • 同时建议在传入 branch != "" 的场景下设置 cloneOpts.SingleBranch = true(可选但建议),确保只拉取指定分支的相关内容,进一步减少抓取范围。

方案二(备选):调整网络/网关超时

  • 如果无法立即改代码,可检查客户环境中:
    • Git 服务器前置网关/代理的超时配置
    • 网络带宽与延迟
  • 但该方案依赖环境能力,且对不同仓库规模不稳定。

变更影响面

受影响的模块或功能

  • Git 审核功能的“审核”阶段(实际克隆行为):
    • CloneGitRepository 的克隆范围从“可能拉取更多历史”变为“浅克隆(Depth=1)”
  • “验证连接”功能行为基本不变(仍是轻量列引用列表)

外部引用的潜在问题或风险

  • 审核逻辑是否依赖 Git 历史:
    • 浅克隆仅保证拉取最近提交(Depth=1)相关内容,若后续审核需要依赖历史提交/变更记录/特定历史文件,可能出现审核结果不完整。
  • 业务一致性风险:
    • 若审核只读取仓库当前分支的文件内容(当前工作区),Depth=1 通常足够;若需要历史则需评估是否需要更大的 Depth。

版本兼容性

  • 接口层无参数变更:
    • GET/POST 入参、鉴权方式不变
  • 行为层变更为克隆策略调整:
    • 需要在 POC 大仓库场景验证 504 是否消失、审核内容是否保持一致

测试建议

  • 使用客户提供的同一 Git 地址复测:
    • 在仓库较大、网络延迟较高情况下确认“审核不再 504”
  • 回归测试点:
    • 指定 branch 审核:确保只拉取目标分支内容,审核结果正确
    • 不指定 branch(走默认行为):浅克隆仍能成功获取目标文件
  • 边界测试:
    • 仓库对象/历史非常大的场景
    • 网络抖动情况下的稳定性(观察克隆耗时与错误率)

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions