fix open failure with empty wal

Summary: Closes https://github.com/facebook/rocksdb/pull/1490

Differential Revision: D4158821

Pulled By: IslamAbdelRahman

fbshipit-source-id: 59b73f4
This commit is contained in:
Andrew Kryczka 2016-11-09 22:10:06 -08:00 committed by Facebook Github Bot
parent 4e20c5da20
commit c90fef88b1
2 changed files with 11 additions and 1 deletions

View File

@ -941,6 +941,12 @@ TEST_F(ColumnFamilyTest, CrashAfterFlush) {
db_options_.env = env_; db_options_.env = env_;
} }
TEST_F(ColumnFamilyTest, OpenNonexistentColumnFamily) {
ASSERT_OK(TryOpen({"default"}));
Close();
ASSERT_TRUE(TryOpen({"default", "dne"}).IsInvalidArgument());
}
#ifndef ROCKSDB_LITE // WaitForFlush() is not supported #ifndef ROCKSDB_LITE // WaitForFlush() is not supported
// Makes sure that obsolete log files get deleted // Makes sure that obsolete log files get deleted
TEST_F(ColumnFamilyTest, DifferentWriteBufferSizes) { TEST_F(ColumnFamilyTest, DifferentWriteBufferSizes) {

View File

@ -1688,6 +1688,9 @@ Status DBImpl::RecoverLogFiles(const std::vector<uint64_t>& log_numbers,
} }
} }
// True if there's any data in the WALs; if not, we can skip re-processing
// them later
bool data_seen = false;
if (!read_only) { if (!read_only) {
// no need to refcount since client still doesn't have access // no need to refcount since client still doesn't have access
// to the DB and can not drop column families while we iterate // to the DB and can not drop column families while we iterate
@ -1723,6 +1726,7 @@ Status DBImpl::RecoverLogFiles(const std::vector<uint64_t>& log_numbers,
cfd->CreateNewMemtable(*cfd->GetLatestMutableCFOptions(), cfd->CreateNewMemtable(*cfd->GetLatestMutableCFOptions(),
versions_->LastSequence()); versions_->LastSequence());
} }
data_seen = true;
} }
// write MANIFEST with update // write MANIFEST with update
@ -1748,7 +1752,7 @@ Status DBImpl::RecoverLogFiles(const std::vector<uint64_t>& log_numbers,
} }
} }
if (!flushed) { if (data_seen && !flushed) {
// Mark these as alive so they'll be considered for deletion later by // Mark these as alive so they'll be considered for deletion later by
// FindObsoleteFiles() // FindObsoleteFiles()
for (auto log_number : log_numbers) { for (auto log_number : log_numbers) {