|
@ -388,12 +388,17 @@ Status DBImpl::InstallCompactionResults(CompactionState* compact) { |
|
|
|
|
|
|
|
|
在该样例中将`kNumLevels`设置为`3`可以保证(同时Assert确认正确性)最后一层中存在数据,我们的实现仍然可以通过测试: |
|
|
在该样例中将`kNumLevels`设置为`3`可以保证(同时Assert确认正确性)最后一层中存在数据,我们的实现仍然可以通过测试: |
|
|
|
|
|
|
|
|
![LastLevelCompaction](img/test3_pass.png) |
|
|
|
|
|
|
|
|
> main分支中为原始配置,即kNumLevels = 7, 其层数过大,导致要测试最底层含有数据非常耗时,因此我们在其他分支中提供了kNumLevels = 3配置的实现用于测试 |
|
|
|
|
|
|
|
|
|
|
|
`light_ver`分支:正确的合并实现,能通过测试 |
|
|
|
|
|
|
|
|
|
|
|
![LastLevelCompaction](img/test3_succ.png) |
|
|
|
|
|
|
|
|
而采用上述直接添加一层循环并且跳过最底层避免崩溃的方法则无法通过测试: |
|
|
而采用上述直接添加一层循环并且跳过最底层避免崩溃的方法则无法通过测试: |
|
|
|
|
|
|
|
|
|
|
|
`naive_version`分支:简单增加一层循环并跳过最底层合并,无法清除最底层过期数据,因此无法通过测试 |
|
|
|
|
|
|
|
|
在该样例中将`kNumLevels`设置为3并 |
|
|
|
|
|
|
|
|
![LastLevelCompactionFail](img/test3_failure.png) |
|
|
|
|
|
|
|
|
最后,展示三个测试样例一起运行的结果: |
|
|
最后,展示三个测试样例一起运行的结果: |
|
|
|
|
|
|
|
|