Gabriel39 commented on PR #65868:
URL: https://github.com/apache/doris/pull/65868#issuecomment-5100112026

   检查了当前新增的 13 个 Paimon write regression suites。覆盖相比之前明显增加:基础 
INSERT/OVERWRITE、append/PK、merge engine、bucket modes、primitive/complex 
types、changelog、compaction、schema change、失败后原子性都有 case;最新 External Regression 中 
11 个 suite 通过,2 个 suite 失败。
   
   但对照 Issue 中“failure, retry, rollback correctness”的目标,当前覆盖仍不完整,建议补充以下场景:
   
   ### P0:事务 exactly-once 与真实故障注入
   
   现有 transaction regression 主要验证正常 commit、数据校验失败和 snapshot 数量;commit 
retry/reconcile 主要是 Mockito unit test。需要端到端覆盖:
   
   - 多 writer `prepareCommit` 完成后、FE commit 前失败/取消;
   - Paimon 已成功 commit,但响应丢失或 FE 超时,使用相同 transaction/commit message 重试;
   - FE leader restart/failover、BE fragment retry、某个 fragment 失败而其他 fragment 
已产生文件;
   - INSERT OVERWRITE 在上述故障点下的 rollback;
   - 验证结果不能只看行数:还要检查 snapshot 数量、无重复数据、旧 snapshot 不被误删,以及未提交 data/manifest 文件得到 
cleanup。
   
   ### P1:并发与冲突
   
   - 两个 Doris session 并发 INSERT 同一表/同一分区及不同分区;
   - 并发 INSERT OVERWRITE 同一分区;
   - Doris 与 Spark/Flink 并发写同一 Paimon 表;
   - commit conflict/retry 后验证无丢行、无重复 snapshot、最终结果与 Paimon reader 一致。
   
   ### P1:partition/overwrite 边界
   
   - 保留并修复当前失败的 custom default partition + NULL case;
   - 多级分区中 static partial overwrite,组合 NULL、空串、字面量 `"null"`、特殊字符和不同分区类型;
   - dynamic overwrite 同时覆盖多个分区,并验证未命中的分区、物理 partition metadata 和 snapshot;
   - failed overwrite 后检查 orphan files,而不只是行数和 snapshot count。
   
   ### P1:HMS/REST catalog 完整语义
   
   当前 HMS/REST case 只有 CREATE + 基础 append/PK happy path。至少补跑并覆盖:
   
   - INSERT OVERWRITE(全表、static、dynamic)、失败 rollback;
   - schema evolution 后立即读写;
   - dynamic bucket / merge engine;
   - catalog refresh/reopen 后继续写;
   - Doris 写入后由 Spark/Paimon reader 校验,而不只由 Doris 自读。
   
   ### P1:JNI/BE 单测覆盖
   
   当前 BE 增量行覆盖率只有 `3.62% (16/442)`,C++ test 只覆盖 backend factory 
选择;`PaimonJniWriterTest` 主要覆盖 classloader 恢复,`PaimonArrowConverterTest` 只有 
timestamp 用例。建议补:
   
   - C++ writer/backend 的 open/write/prepareCommit/abort/close、错误传播、payload 
framing、多 block 和资源释放;
   - Java Arrow converter 的 ARRAY/MAP/STRUCT/BINARY、递归 NULL、DECIMAL 边界及非法类型;
   - JNI writer 的真实 open→write→prepareCommit→abort/close 生命周期、dynamic 
bucket/global index、compaction/changelog 分支。
   
   ### P2:已知边界与规模
   
   - 恢复 omitted column + Paimon default value 的 case(当前被 TODO 注释);
   - key-dynamic 高基数、多分区、多次 transaction、writer/进程重建后的 global index 恢复;同时记录 Java 
heap 和文件数;
   - 大数据量、多 bucket、多 partition 下的吞吐和 small-file 数量;
   - compaction/changelog 在失败、重试、跨分区和重启后的正确性。
   
   此外 FE coverage gate 当前还因模块重命名后仍引用旧 `paimon-scanner.jar` 路径而失败。建议修复 coverage 
脚本并让 BE/FE coverage gate 正常通过后再判断单测覆盖是否达标。
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to