fix swallowed error for file deletion consistency check (#6809)
Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/6809 Reviewed By: pdillinger Differential Revision: D21411971 Pulled By: ajkr fbshipit-source-id: 900b6b0370b76e9a3e5e03f968e2ac1bbaab73b8
This commit is contained in:
parent
ecf1499609
commit
33087a2881
@ -2,6 +2,7 @@
|
|||||||
## 6.9.4 (04/30/2020)
|
## 6.9.4 (04/30/2020)
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
* Fix a bug caused by overwrite the status with io status in block based table builder when writing data blocks. If status stores the error message (e.g., failure of verify block compression), the bug will make the io status overwrite the status.
|
* Fix a bug caused by overwrite the status with io status in block based table builder when writing data blocks. If status stores the error message (e.g., failure of verify block compression), the bug will make the io status overwrite the status.
|
||||||
|
* Fix `force_consistency_checks=true` use cases to not swallow errors returned by `CheckConsistencyForDeletes()`, which can expose internal bugs like multiple compactions involving a single file.
|
||||||
|
|
||||||
## 6.9.3 (04/28/2020)
|
## 6.9.3 (04/28/2020)
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
@ -441,7 +441,10 @@ class VersionBuilder::Rep {
|
|||||||
const auto number = del_file.second;
|
const auto number = del_file.second;
|
||||||
if (level < num_levels_) {
|
if (level < num_levels_) {
|
||||||
levels_[level].deleted_files.insert(number);
|
levels_[level].deleted_files.insert(number);
|
||||||
CheckConsistencyForDeletes(edit, number, level);
|
s = CheckConsistencyForDeletes(edit, number, level);
|
||||||
|
if (!s.ok()) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
auto exising = levels_[level].added_files.find(number);
|
auto exising = levels_[level].added_files.find(number);
|
||||||
if (exising != levels_[level].added_files.end()) {
|
if (exising != levels_[level].added_files.end()) {
|
||||||
|
@ -792,6 +792,36 @@ TEST_F(VersionBuilderTest, CheckConsistencyForBlobFilesAllGarbage) {
|
|||||||
UnrefFilesInVersion(&new_vstorage);
|
UnrefFilesInVersion(&new_vstorage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(VersionBuilderTest, CheckConsistencyForFileDeletedTwice) {
|
||||||
|
Add(0, 1U, "150", "200", 100U);
|
||||||
|
UpdateVersionStorageInfo();
|
||||||
|
|
||||||
|
VersionEdit version_edit;
|
||||||
|
version_edit.DeleteFile(0, 1U);
|
||||||
|
|
||||||
|
EnvOptions env_options;
|
||||||
|
constexpr TableCache* table_cache = nullptr;
|
||||||
|
constexpr VersionSet* version_set = nullptr;
|
||||||
|
|
||||||
|
VersionBuilder version_builder(env_options, &ioptions_, table_cache,
|
||||||
|
&vstorage_, version_set);
|
||||||
|
VersionStorageInfo new_vstorage(&icmp_, ucmp_, options_.num_levels,
|
||||||
|
kCompactionStyleLevel, nullptr,
|
||||||
|
true /* force_consistency_checks */);
|
||||||
|
ASSERT_OK(version_builder.Apply(&version_edit));
|
||||||
|
ASSERT_OK(version_builder.SaveTo(&new_vstorage));
|
||||||
|
|
||||||
|
VersionBuilder version_builder2(env_options, &ioptions_, table_cache,
|
||||||
|
&new_vstorage, version_set);
|
||||||
|
VersionStorageInfo new_vstorage2(&icmp_, ucmp_, options_.num_levels,
|
||||||
|
kCompactionStyleLevel, nullptr,
|
||||||
|
true /* force_consistency_checks */);
|
||||||
|
ASSERT_NOK(version_builder2.Apply(&version_edit));
|
||||||
|
|
||||||
|
UnrefFilesInVersion(&new_vstorage);
|
||||||
|
UnrefFilesInVersion(&new_vstorage2);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(VersionBuilderTest, EstimatedActiveKeys) {
|
TEST_F(VersionBuilderTest, EstimatedActiveKeys) {
|
||||||
const uint32_t kTotalSamples = 20;
|
const uint32_t kTotalSamples = 20;
|
||||||
const uint32_t kNumLevels = 5;
|
const uint32_t kNumLevels = 5;
|
||||||
|
Loading…
Reference in New Issue
Block a user