Skip to content

fix(verification): 增强受限网络下的验证链路可靠性(API 重试、Runner JDK 17 与 JVM user.home 固定) #134

Description

@pwd11

问题

在受限网络环境(github.com:443 间歇性断流、响应被截断)下实测验证链路存在三类可靠性问题:

1. GitHub API 客户端没有瞬时错误重试

GitHubClient._request 使用 urllib.request.urlopen 单次请求:api.github.com 大响应(约 750KB,如 open pull requests 列表)间歇性被截断,抛 http.client.IncompleteRead,导致 gate/adopt 在竞争工作检测处随机失败,重跑一次又成功。GET 请求幂等,应支持有限次数退避重试;POST/PATCH 非幂等,保持不重试。

2. Runner 镜像缺少 JDK 17,且构建下载易失败

  • 目标仓库需要 Java 17(例如 Spring Boot 3 项目),当前镜像只有 Temurin 8,verify 无法运行
  • Dockerfile 构建依赖 github.com 大文件下载(Temurin 100MB+),无重试,受限网络下 exit 18 中断整层构建
  • 修复方向:apt 安装 openjdk-17-jdk-headless 并符号链接为 /opt/java/temurin-17(保留 8 为默认);Maven 发行版改用 TUNA 镜像(SHA512 校验不变);所有 curl 加 --retry

3. 容器内 JVM user.home 解析为 "?",Maven 缓存丢失

容器以 host uid 运行且镜像内无对应 passwd 条目时,JDK 的 user.home 解析为字面量 "?",Maven 本地仓库落到工作区下 ?/.m2,随沙箱销毁;bootstrap 联网下载的全部依赖在断网 verify 阶段全部失效。修复方向:verifier 在容器环境注入 JAVA_TOOL_OPTIONS=-Duser.home=/reposteward-env/home(持久卷),并补充测试。

验收标准

  • uv run python -m unittest discover -s tests 全绿(含新增重试与 env 注入测试)
  • uvx ruff check .uvx ruff format --check . 通过
  • 使用新镜像对 DataAgent 仓库完成一次 adopt 全流程(bootstrap 联网 + 断网 verify 通过)作为证据

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions