OpenAtomFoundation / pikiwidb

a high-performance, large-capacity, multi-tenant, data-persistent, strong data consistency based on raft, Redis-compatible elastic KV data storage system based on RocksDB
BSD 3-Clause "New" or "Revised" License
194 stars 63 forks source link

Two bugs about the log-index-and-sequence-number queue #306

Closed longfar-ncy closed 3 months ago

longfar-ncy commented 3 months ago

Is this a regression?

Yes

Description

  1. 每个 Storage 实例有 n 个 Redis 对象,每个 Redis 中有一个 rocksdb 实例。我们在每个 Redis 当中维护了所有列族落盘数据对应的 raft log index 和 rocksdb sequence number 与 raft log index 映射关系的队列。在调用快照时,会找到所有列族中最落后的日志索引,截断 raft 日志。虽然我们有机制保证,如果一个列族数据落后过多,我们会主动flush这个列族;但不能避免如果一个列族一直没有新的数据,那就没有办法更新它的落盘进度(日志索引),就会导致在截断 raft 日志时,一直都会使用这个最小的 log index,从而导致 raft 日志堆积过多的问题。
  2. 在截断日志时,通过每个 Redis 对象中维护的列族进度获取所有列族最落后进度,去截断 raft 日志是不合适的,因为一个 Storage 下可能有多个 Redis 对象;当前 Redis 对象的最落后进度,不代表所有 Redis 中所有列族的最落后进度,因而可能丢掉一些数据。

Please provide a link to a minimal reproduction of the bug

No response

Screenshots or videos

images

Please provide the version you discovered this bug in (check about page for version information)

No response

Anything else?

No response

longfar-ncy commented 3 months ago

https://github.com/OpenAtomFoundation/pikiwidb/pull/303