An adventure in writing compatible systems
9 months ago
- #Rust
- #Database
- #SQLite
- Turso是对SQLite的Rust语言重写版本,在保持完全兼容性的同时新增了变更数据捕获(CDC)、并发写入和加密等特性。
- 发现了一个令人惊讶的兼容性问题:当插入超过1GB数据时会导致SQLite的完整性检查失败。
- 虽然团队大量使用了确定性模拟测试(DST),但最初未能发现该问题,因为故障注入导致测试数据库从未达到1GB规模。
- 在改进模拟器允许数据库突破1GB限制后,数据损坏问题开始稳定复现。
- 调查发现SQLite在数据达到1GB时会插入特殊页面,而Turso未正确处理这一机制从而导致损坏。
- 团队高产成员Nikita Sivukhin通过研读SQLite源码获知这一特殊页面的存在,最终定位问题根源。
- 在理解这一未公开行为后团队实施了修复,该案例凸显了重写复杂系统面临的挑战。