Fix crash caused by opening an empty DB in readonly mode
Summary: This diff fixes a crash found when an empty database is opened in readonly mode. We now check the number of levels before we open the DB as a compacted DB. Test Plan: DBTest.EmptyCompactedDB Reviewers: igor, sdong Reviewed By: sdong Subscribers: dhruba, leveldb Differential Revision: https://reviews.facebook.net/D36327
This commit is contained in:
parent
51c8133a72
commit
d0695f3e26
@ -12270,6 +12270,17 @@ TEST_F(DBTest, TestLogCleanup) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DBTest, EmptyCompactedDB) {
|
||||
Options options;
|
||||
options.max_open_files = -1;
|
||||
options = CurrentOptions(options);
|
||||
Close();
|
||||
ASSERT_OK(ReadOnlyReopen(options));
|
||||
Status s = Put("new", "value");
|
||||
ASSERT_TRUE(s.IsNotSupported());
|
||||
Close();
|
||||
}
|
||||
|
||||
} // namespace rocksdb
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
@ -107,6 +107,9 @@ Status CompactedDBImpl::Init(const Options& options) {
|
||||
version_ = cfd_->GetSuperVersion()->current;
|
||||
user_comparator_ = cfd_->user_comparator();
|
||||
auto* vstorage = version_->storage_info();
|
||||
if (vstorage->num_non_empty_levels() == 0) {
|
||||
return Status::NotSupported("no file exists");
|
||||
}
|
||||
const LevelFilesBrief& l0 = vstorage->LevelFilesBrief(0);
|
||||
// L0 should not have files
|
||||
if (l0.num_files > 1) {
|
||||
|
Loading…
Reference in New Issue
Block a user