diff --git a/db/db_impl.cc b/db/db_impl.cc index 88e358416..5ee92759d 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -4939,8 +4939,9 @@ Status DestroyDB(const std::string& dbname, const Options& options) { if (result.ok()) { uint64_t number; FileType type; + InfoLogPrefix info_log_prefix(!options.db_log_dir.empty(), dbname); for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && + if (ParseFileName(filenames[i], &number, info_log_prefix.prefix, &type) && type != kDBLockFile) { // Lock file will be deleted at end Status del; if (type == kMetaDatabase) { diff --git a/db/db_test.cc b/db/db_test.cc index c3dbaabaa..5702f7798 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -6076,13 +6076,28 @@ TEST(DBTest, PurgeInfoLogs) { int info_log_count = 0; for (std::string file : files) { if (file.find("LOG") != std::string::npos) { - if (mode == 1) { - env_->DeleteFile(options.db_log_dir + "/" + file); - } info_log_count++; } } ASSERT_EQ(5, info_log_count); + + Destroy(&options); + // For mode (1), test DestoryDB() to delete all the logs under DB dir. + // For mode (2), no info log file should have been put under DB dir. + std::vector db_files; + env_->GetChildren(dbname_, &db_files); + for (std::string file : db_files) { + ASSERT_TRUE(file.find("LOG") == std::string::npos); + } + + if (mode == 1) { + // Cleaning up + env_->GetChildren(options.db_log_dir, &files); + for (std::string file : files) { + env_->DeleteFile(options.db_log_dir + "/" + file); + } + env_->DeleteDir(options.db_log_dir); + } } }