分页游标要继承未推进实体的位置
缺陷形态
nextState 只写入本页返回了行的那几个实体:
- 实体 A 第 1 页就取完了 → 本页返回 0 行 → A 没有边界 → 若 next cursor 不含 A 的位置,A 就被重置到起点。
- 后续页里 A 又从头返回一遍。数据看起来"没丢",但增量同步变成重复同步。
正确做法
paginateEntities(..., positions):
- 以输入的 positions 为基线;
- 本页返回了边界行的实体 → 覆盖为新的边界;
- 没返回边界(耗尽/无数据)的实体 → 保留输入里的位置。
这样最终 hasMore = false 的那次 cursor 仍包含全部实体的已知位置。
配套测试
- 不对称多页(不同实体在不同页耗尽);
- 最终增量 cursor 的回归断言;
- 首屏从 epoch 开始时,"从未有过数据的实体"没有位置是正确行为,不是丢位置。
相关
- 重试分三层不要整体重跑 —— 同族:局部状态不要被整体重算覆盖
- 两条写入路径要用内容判重 —— 同一目的:防重复下发
- INSERT OR IGNORE会让旧行不更新 —— 增量状态被写坏的另一形态
- 同一状态的多个副本必然漂移
- 乐观并发要先查后改会双赢