fix: avoid leveled compaction crash when recovering from manifest (#63)
* Fix: Avoid leveled copaction crash when recovering from manifest * Also sort SSTs in manifest recovery * Add `in_recovery` flag to `apply_compaction_result` - Don't sort the SSTs inside `apply_compaction_result` if in recovery
This commit is contained in:
@@ -73,10 +73,11 @@ impl CompactionController {
|
||||
snapshot: &LsmStorageState,
|
||||
task: &CompactionTask,
|
||||
output: &[usize],
|
||||
in_recovery: bool,
|
||||
) -> (LsmStorageState, Vec<usize>) {
|
||||
match (self, task) {
|
||||
(CompactionController::Leveled(ctrl), CompactionTask::Leveled(task)) => {
|
||||
ctrl.apply_compaction_result(snapshot, task, output)
|
||||
ctrl.apply_compaction_result(snapshot, task, output, in_recovery)
|
||||
}
|
||||
(CompactionController::Simple(ctrl), CompactionTask::Simple(task)) => {
|
||||
ctrl.apply_compaction_result(snapshot, task, output)
|
||||
@@ -381,7 +382,8 @@ impl LsmStorageInner {
|
||||
}
|
||||
let (mut snapshot, files_to_remove) = self
|
||||
.compaction_controller
|
||||
.apply_compaction_result(&snapshot, &task, &output);
|
||||
.apply_compaction_result(&snapshot, &task, &output, false);
|
||||
|
||||
let mut ssts_to_remove = Vec::with_capacity(files_to_remove.len());
|
||||
for file_to_remove in &files_to_remove {
|
||||
let result = snapshot.sstables.remove(file_to_remove);
|
||||
|
||||
Reference in New Issue
Block a user