Skip to content

Commit a96461d

Browse files
ajkrfacebook-github-bot
authored andcommitted
fix swallowed error for file deletion consistency check (facebook#6809)
Summary: Pull Request resolved: facebook#6809 Reviewed By: pdillinger Differential Revision: D21411971 Pulled By: ajkr fbshipit-source-id: 900b6b0370b76e9a3e5e03f968e2ac1bbaab73b8
1 parent 2f1700c commit a96461d

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

db/version_builder.cc

+4-1
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,10 @@ class VersionBuilder::Rep {
466466
const auto number = del_file.second;
467467
if (level < num_levels_) {
468468
levels_[level].deleted_files.insert(number);
469-
CheckConsistencyForDeletes(edit, number, level);
469+
s = CheckConsistencyForDeletes(edit, number, level);
470+
if (!s.ok()) {
471+
return s;
472+
}
470473

471474
auto exising = levels_[level].added_files.find(number);
472475
if (exising != levels_[level].added_files.end()) {

db/version_builder_test.cc

+30
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,36 @@ TEST_F(VersionBuilderTest, CheckConsistencyForBlobFilesAllGarbage) {
839839
UnrefFilesInVersion(&new_vstorage);
840840
}
841841

842+
TEST_F(VersionBuilderTest, CheckConsistencyForFileDeletedTwice) {
843+
Add(0, 1U, "150", "200", 100U);
844+
UpdateVersionStorageInfo();
845+
846+
VersionEdit version_edit;
847+
version_edit.DeleteFile(0, 1U);
848+
849+
EnvOptions env_options;
850+
constexpr TableCache* table_cache = nullptr;
851+
constexpr VersionSet* version_set = nullptr;
852+
853+
VersionBuilder version_builder(env_options, &ioptions_, table_cache,
854+
&vstorage_, version_set);
855+
VersionStorageInfo new_vstorage(&icmp_, ucmp_, options_.num_levels,
856+
kCompactionStyleLevel, nullptr,
857+
true /* force_consistency_checks */);
858+
ASSERT_OK(version_builder.Apply(&version_edit));
859+
ASSERT_OK(version_builder.SaveTo(&new_vstorage));
860+
861+
VersionBuilder version_builder2(env_options, &ioptions_, table_cache,
862+
&new_vstorage, version_set);
863+
VersionStorageInfo new_vstorage2(&icmp_, ucmp_, options_.num_levels,
864+
kCompactionStyleLevel, nullptr,
865+
true /* force_consistency_checks */);
866+
ASSERT_NOK(version_builder2.Apply(&version_edit));
867+
868+
UnrefFilesInVersion(&new_vstorage);
869+
UnrefFilesInVersion(&new_vstorage2);
870+
}
871+
842872
TEST_F(VersionBuilderTest, EstimatedActiveKeys) {
843873
const uint32_t kTotalSamples = 20;
844874
const uint32_t kNumLevels = 5;

0 commit comments

Comments
 (0)