#7958·rustfs

分页列表中有错误的 EOF: gather_results 从后置过滤计数中推断完成状态,而不是从生产者停止原因中推断

作者: HateTM创建于 2026年9月17日更新于 2026年9月17日
标签S-reproducing

页:1

#7049(2026-09-03合并)的后续行动,它确定了更广泛的一个症状 pagination bug (“ scan dir” ) 在一个之后释放出一个较后类型的兄弟姐妹条目 递归子目录扫描达到极限).

在审查该公关时,提出了一个更深层次的、仍然悬而未决的问题: 磁盘侧式制作人( ' Local Disk:: scan dir') 从未发出信号 * 为什么* 它停止了 发送条目——无论它是否用尽了自己的页面/每盘限制,或 真正到达了树的尽头。 “结果” (crates/ecstore/src/store/list objects.rs')目前推断完成性 纯粹从intries.len () QQ 选择.limit ' 是否自己被击中; 当输入通道不发生这种情况就关闭时,就无条件关闭 GatherResults State:: inputClosed' with err = Some(不预期)', 文件中的每个呼叫站点都读取“ disk has more = m错误.is noone() ” 作为"没有更多的数据, 没有截断"。

影响

每盘扫描限制(per disk limit' = opt.limit + 4 + opt.limit / 16'), ~ 6.25% 头室,见“SetDisks:list path” 大小为* 决赛* 候选数,而不是*raw*扫描入场数。 当大比例 将原始条目过滤出下游(删除标记,不匹配) 前缀/标记跳过,目录条目——测量出一份生产报告 ~62%被过滤),每盘扫描可以将极限用完后深入 a 树下,将关闭它的信道,而以 'gather-成果'为报喜者, 虽然大多数真正的对象树从未存在过, 扫描 这造成无声的永久数据丢失 列表对象V2'(结构上相同的代码路径由其他 列表- 家庭 APIs ).

报告的生产情况: 大于 ~117M 物体的递归性清单 在部署7049后, " MaxKeys " 标志继续下降。

最小复制量

所附:repro.diff'——添加到 crates/ecstore/src/store/list objects.rs'现有测试模块 (`list path gather results reports false eof when producer stops at its own limit after huavy filtering'后).

它为“ gather- 结果” 20 个被完全过滤的原始条目提供素材 (去掉标记,`包含'删除:虚假')然后关闭频道—— 准备一个每盘“scan-dir”的电话,它打入了自己的极限 在一个更大的树下 它从来没有完成行走。 “结果” 返回“GatherResults State:: 输入关闭”并加上“err = Some(意外)”: 一种自信的、无与伦比的、

(d9c3eee,标签为`1.0.1-审查3', 2026-09-17: (英语).

货物测试 - p struffs- ecstore - lib list  path gather results reports false eof - -- 不抓取

运行一个测试
测试存储 : list object:: test:: list path gather results reports false eof  when Producer stops at its own limit after hivy filtering...

建议的固定方向

磁盘侧制片人应该明确表示"我因为被击中而停止了" 我自己的极限" 独立于过滤器后输入数,所以 “生成结果”可以 . . . . . . .