Files
greptimedb/remote-dyn-filter-task-06-validation.md
2026-05-18 16:54:56 +08:00

59 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Task 06 - 端到端验证与回归基线
## 任务目标
建立 remote dyn filter 的功能、一致性、可靠性和性能验证矩阵,证明该机制在带来 pruning 收益的同时,不会因异常路径破坏查询正确性。
## 主要落点
- `tests/`
- `tests-integration/`
- 分布式 query / datanode / region 相关测试目录
- 基准或 benchmark 脚本目录
## 前置依赖
- Task 01-05 完成最小可用实现。
## 实现范围
1. 功能测试:
- distributed hash join小 build side 对大 probe side 产生远端 pruning
- 无法序列化表达式时自动降级且结果正确
- 初始 remote read 与后续 dyn filter update 使用同一个 `remote_query_id + filter_id` 逻辑 identity并稳定绑定到对应 subscriber scan 集合
2. 一致性测试:
- update 乱序
- 重复 epoch
- complete marker 早到 / 晚到
- 仅部分 region 收到 update
- `remote_query_id` / `filter_id` 缺失或关联键不完整时安全降级,不串线到其他 query state
- datanode 本地 `is_used()` 类 eager cleanup 与 frontend unregister / TTL 兜底不会互相打架或造成误删
3. 可靠性测试:
- frontend 中途停止发送
- datanode 重启或 scan 提前结束
- query cancel 后状态释放
4. 性能验证:
- 高频小 update 与低频批量 update 对比
- 不同 `IN` cardinality 阈值收益曲线
5. 建立回归基线,为后续 Phase 2/3 演进提供对照数据。
## 推荐子步骤
1. 先补最小集成测试,证明“能工作且失败不影响结果”。
2. 再补乱序 / 幂等 / 清理类单测,把状态机语义锁住。
3. 最后增加 benchmark 或 profiling 脚本,比较不同更新策略的控制面开销。
4. 为日志和 metrics 增加断言,确保观测口径不会回归。
## 验收标准
- 至少一个 distributed join 集成测试证明远端 pruning 生效。
- 所有异常路径测试都证明查询结果仍然正确。
- 状态机相关测试覆盖乱序、重复、complete marker、超时回收。
- 有可重复运行的性能对照基线,能支撑是否继续推进 stream/batch 演进。
## 风险与注意点
- 只测 happy path 没有意义remote dyn filter 的价值在于异常时也必须安全退化。
- 性能测试必须同时看收益和控制面成本,不能只看扫描量下降。
- Phase 2/3 若没有基线,后续优化很难判断是真提升还是只是在搬移开销。