Sync only completed writes

Should be a final remaining fix to EC + non-capacitor (non-immediate-commit) write hangs :).

First it was breaking non-EC ("instantly stable") writes because they sometimes
complete out of order which was leading to the following error:

terminate called after throwing an instance of 'std::runtime_error'
  what():  BUG: Unexpected dirty_entry 1000000000001:29480000 v65540 unstable state during flush: 0x151

But it is easily fixed by scanning previous and next dirty_entries in mark_stable.
This commit is contained in:
Vitaliy Filippov
2024-01-27 15:17:22 +03:00
parent 1c322b33ed
commit 1cec62d25d
6 changed files with 41 additions and 17 deletions
+1
View File
@@ -162,6 +162,7 @@ void blockstore_impl_t::mark_rolled_back(const obj_ver_id & ov)
unstable_writes.erase(unstab_it);
else
unstab_it->second = max_unstable;
unstable_count_changed = true;
}
}
}