Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rotate compaction output at user key boundary
so that keys with same user key will not spread over multiple tables in same level, level 1 or above. Level compaction, except for level-0, don't pick overlapping tables. So if we produce overlapping tables in user key level, it is possible that file with newer version user key got picked and compacted to next level. Now, the invariant that Version::Get depends on is broken, Version::Get is broken. The vulnerability of this approach is that a malicious client can retain a snapshhot and do large number of writes to same key, which can cause huge sorted table generated. LevelDB is a library that embedded in other application. I think it should be the application's responsibility to keep snapshhot from malicious clients. Picking overlapping tables in all level compactions is another approach to solve this problem. I think this approach may violate the algorithm this implementation implies.
- Loading branch information