Skip to content

[Bug]: SQL 动态 S3 导入在 Region 未显式设置时失败 #30528

Closed

Description

@Ariznawlll

问题

MatrixOne main 的稳定性测试在通过 SQL 动态 S3 文件服务读取 TPCC 数据时,HeadObject endpoint 解析失败:

resolve endpoint: endpoint rule error, Invalid region: region was not a valid DNS name

同一套 S3 配置在旧 commit 55a019f0b03db197a06c6cfc6bcf8b3e0c68cd32 可正常加载;新 commit d3563c7dcf04890f75c681716e86fdab5c3bbb3c 的稳定性 run 中,10 张 TPCC 表均在数据准备阶段报上述错误,负载测试未能开始。

环境与证据

初步代码定位

回归疑似由 18d5335ee330bb7e3bd3a893bf81044120884021(统一 SQL 文件访问权限)引入:SQL 动态 provider 路径改用 explicitAWSConfig,Region 只取 args.Region;此前 config.LoadDefaultConfig 还会从运行环境读取 AWS_REGION。当 SQL 参数未显式提供 Region 时,新路径可能将空 Region 传给 AWS SDK,导致在请求到达 S3 前就失败。

请确认是否应在不恢复默认凭证发现的前提下,为动态 S3 配置保留 Region 环境变量/默认值兼容,并补充 Region 缺省场景的回归测试。

当前证据为一轮新版本失败(同轮 10 张表均复现)和一轮旧版本通过对照;尚未完成独立 3 轮重复验证。

Activity

  1. added this to the MO-202610 milestone on Oct 18, 2026
  2. added theissue type on Oct 18, 2026
  3. self-assigned this
    on Oct 18, 2026
  4. XuPeng-SH commented on Oct 18, 2026

    @XuPeng-SH
    Contributor

    continue20 独立功能验证(2026-10-19),修复 PR #30533。

    实测main完整SHA:2508ce7029b03e6bb3ac0bd8e66a994d12593664;Linux/amd64,Go1.27.1,CPU/CGo。复用同SHA的已构建原生产物并经仓库mo-cgo-test入口验证;隔离worktree,诊断测试通过Go overlay加入,未修改产品源代码。

    补充独立公开SQL实测:CN0/CN1分别通过LOAD DATA URL S3OPTION从本地HTTP S3协议fixture实际读取CSV,精确入库(1,alpha),(2,beta)。三种Region优先级均检查真实HTTP签名:AWS_REGION优先AWS_DEFAULT_REGION;AWS_REGION为空时回退AWS_DEFAULT_REGION;显式Region优先环境。每种场景各2个真实HEAD/GET请求,Authorization均使用caller-key而非设置的ambient-key,未恢复环境凭据发现。14个file-service根回归normal通过,覆盖拒绝、取消、角色失败不可回退、显式上游refresh;explicitAWSConfig函数语句覆盖100%。原TPCC稳定性部署和真实云S3未执行,不冒充原环境10表负载验收;保持已有测试指派。

    原始证据目录 /workspace/work/pr-audit-continue20:s3-public-expanded.log、s3-authority-normal.log;coverage/s3-authority.out,每组.exit均0。命令包括 .agents/skills/mo-dev/scripts/mo-cgo-test -p 1 -count=1 -v -timeout=10m ./pkg/sql/colexec/icebergdelete ./pkg/vm/engine/tae/blockio(normal含coverprofile,race另加-race);公开SQL为 MO_TEST_CLUSTER_TCP_ONLY=1 .agents/skills/mo-dev/scripts/mo-cgo-test -overlay=/workspace/work/pr-audit-continue20/public-overlay.json -p 1 -v -count=1 -timeout=15m -run '^TestAudit20PublicMatrix$' ./pkg/tests/issues,扩展S3与scalar警告各有独立选择和日志。具体命令/选择范围及覆盖文件随证据保留;没有把其他未选用例当成执行。

    保持现有测试指派。 本条不表示最近100个PR全部高覆盖实测完成。

  5. Ariznawlll commented on Oct 19, 2026

    @Ariznawlll
    CollaboratorAuthor

    测试版本

    • 官方 matrixorigin/matrixone main 完整 SHA:090b14fbb4c288819728f628e009311a11812e1f;执行前从官方远端更新并在隔离工作树构建,SELECT git_version() 返回 090b14fbb4。测试过程中 main 从先前的 308b6b8742d41ac4147165b7cf2aaff22034d483 前进到此 SHA,故已在新 SHA 上重新构建、重新部署并重跑以下 SQL 与 Go 验收。
    • 修复 PR #30533 已 MERGED;其 merge commit f11dd8c5d700f215922835f314ea18d32471f482 经 GitHub compare 确认为上述 main 的祖先。
    • 本机隔离部署:1 CN / 1 TN / 1 LogService,MySQL 协议端口 6001;同机独立 MinIO S3 兼容服务,MO 进程环境 AWS_REGION=us-east-1、AWS_DEFAULT_REGION=us-west-1;SQL 的 S3OPTION 不传 region,仅使用本地测试桶与测试凭据。测试日期:2026-10-19。

    原问题验证

    在上述 main 上,使用公开 SQL LOAD DATA URL s3option {...} 从本地 S3 兼容对象读取 CSV,S3OPTION 省略 region。使用普通 S3 provider 路径(不指定 provider=minio)分别加载到 3 张全新表:每轮均成功,逐表读取的实际值均为 (1,alpha),(2,beta),3/3。独立的 provider=minio 控制路径同样 3/3 返回相同两行。未再出现原先在 HeadObject 前的 Invalid region: region was not a valid DNS name。

    本轮验证的是原故障的 Region 缺省配置及真实 SQL→S3 HEAD/GET→入库链;未重跑原 129 稳定性环境的 10 张 TPCC 大表,也未使用真实云 S3,因此不把本机 2 行数据说成原规模压力或云端稳定性验收。原问题不是数据量阈值故障,而是在加载前因空 Region 解析失败;本轮以同一缺省条件验证修复分支。

    Happy Path 覆盖

    1. 普通 S3 provider、SQL 未指定 Region、AWS_REGION 已设置:3 张独立表各载入 2 行,实际结果每轮都是 (1,alpha),(2,beta),3/3。
    2. provider=minio 对照:另 3 张独立表同样每轮 2 行、值一致,3/3。
    3. 已合入的 TestSQLFileS3UsesEnvironmentRegionWhenNotSpecified / TestExplicitAWSConfigRegionFallback / TestSQLFileCredentialsDoNotDiscoverServerIdentity 在本轮完整 main 上 -count=3 PASS:覆盖 AWS_REGION 优先于 AWS_DEFAULT_REGION、前者为空时回退后者、SQL 显式 Region 优先,以及请求使用调用方凭据而非环境凭据。

    Unhappy Path 覆盖

    1. 指向不存在的对象:LOAD DATA 返回 20301: the file does not exist in load flow;目标表随后 COUNT(*)=0,没有部分写入。
    2. 提供错误的调用方访问凭据:LOAD DATA 返回访问密钥不存在错误;目标表随后 COUNT(*)=0,没有回退使用环境凭据或留下部分数据。
    3. 显式填写一个自定义 Region 的本地 MinIO 请求可成功;MinIO 允许该签名 Region,不能据此把它当作错误 Region 拒绝测试。Region 优先级由上述 Go 回归断言,本轮不虚构云 S3 的拒绝行为。

    白盒验证

    修复位于 SQL 动态文件服务的 explicitAWSConfig Region 选择路径;上述 3 个现有 Go 测试在本轮 main 上定向 -count=3 PASS。未做外部云凭据故障注入;本地错误对象和错误调用方凭据通过公开 SQL 验证。

    回归测试

    • MatrixOne 原有 SQL 文件访问 Go 回归 已直接断言原始 HeadObject 阻断点、Region 优先级及不发现环境凭据;本轮在完整 main 上定向 -count=3 PASS,pkg/fileservice 全包 -count=1 PASS。
    • 此前已在本任务 MOTR #247 加入 script/14_issue_regression/issue_30528_s3_region.py 与配对 out/issue_30528_s3_region.out:该 local-MinIO 真实 SQL LOAD 场景在当时官方 main 7b911aea687455af8788af07eb65952f1eda5796 定向 3/3,逐轮核对缺省 Region 入库的 3 行值、错误凭据拒绝和清理;无测试环境时明确 skip,不能把 skip 算 PASS。本轮没有重复追加该场景,另在最新 main 090b14fbb4c288819728f628e009311a11812e1f 手动重验真实 SQL 3/3。MOTR 完整 suite 与集成 CI 未运行。
    • PR #30533 CI 的 UT、SCA 和相关 BVT 通过;另一个 TKE check 的 BUILD MO DOCKER IMAGE 标为失败,本轮未调查归因,也没有将其称为通过。未运行完整 MOTR suite、原稳定性 TPCC 数据准备或真实云 S3 集成 CI。

    测试证据

    • 本轮实际 SQL 读取:普通 provider 三次和 MinIO provider 三次,各返回 1 alpha、2 beta;缺失对象错误后及错误凭据错误后目标表 COUNT(*) 均为 0。
    • 构建和测试均在隔离工作树,服务使用独立数据目录;仅删除本轮自建测试数据库后,information_schema.schemata 查询该库为 0。未修改主工作目录或共享环境。
    • Go 测试输出:定向 3 次与全 pkg/fileservice 运行均 ok;以上 PR/CI 及 MOTR select without from clause is not supported #247 场景链接可核对修复与回归断言。完整套件和原稳定性范围未执行,范围已如实列明。

    测试结论

    测试通过。

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

Metadata

Metadata

Assignees

Labels

kind/bugSomething isn't working

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions