diff --git a/dbms/src/Storages/Page/PageFile.cpp b/dbms/src/Storages/Page/PageFile.cpp index 57205fa3bf6..dcc35e4349d 100644 --- a/dbms/src/Storages/Page/PageFile.cpp +++ b/dbms/src/Storages/Page/PageFile.cpp @@ -860,6 +860,7 @@ PageFile::recover(const String & parent_path, const FileProviderPtr & file_provi LOG_INFO(log, "Broken page without data file, ignored: " + pf.dataPath()); return {{}, Type::Invalid}; } + return {pf, Type::Formal}; } else if (ss[0] == folder_prefix_checkpoint) @@ -870,7 +871,6 @@ PageFile::recover(const String & parent_path, const FileProviderPtr & file_provi LOG_INFO(log, "Broken page without meta file, ignored: " + pf.metaPath()); return {{}, Type::Invalid}; } - pf.type = Type::Checkpoint; return {pf, Type::Checkpoint}; } diff --git a/dbms/src/Storages/Page/PageStorage.cpp b/dbms/src/Storages/Page/PageStorage.cpp index 3e276ca6956..ed105d97a3a 100644 --- a/dbms/src/Storages/Page/PageStorage.cpp +++ b/dbms/src/Storages/Page/PageStorage.cpp @@ -181,20 +181,22 @@ PageFileSet PageStorage::listAllPageFiles(const FileProviderPtr & file_provi if (!option.ignore_checkpoint) page_files.insert(page_file); } - else + else if (page_file_type == PageFile::Type::Temp) { - // For Temp and Invalid if (option.remove_tmp_files) { - if (page_file_type == PageFile::Type::Temp) - { - page_file.deleteEncryptionInfo(); - } - // Remove temp and invalid file. + page_file.deleteEncryptionInfo(); + // Remove temp files. if (Poco::File file(directory + "/" + name); file.exists()) file.remove(true); } } + else + { + // Remove invalid files. + if (Poco::File file(directory + "/" + name); option.remove_invalid_files && file.exists()) + file.remove(true); + } } } @@ -250,8 +252,9 @@ void PageStorage::restore() #ifdef PAGE_STORAGE_UTIL_DEBUGGGING opt.remove_tmp_files = false; #endif - opt.ignore_legacy = false; - opt.ignore_checkpoint = false; + opt.ignore_legacy = false; + opt.ignore_checkpoint = false; + opt.remove_invalid_files = true; PageFileSet page_files = PageStorage::listAllPageFiles(file_provider, delegator, page_file_log, opt); /// Restore current version from both formal and legacy page files @@ -834,9 +837,10 @@ void PageStorage::drop() ListPageFilesOption opt; opt.ignore_checkpoint = false; - opt.ignore_legacy = false; - opt.remove_tmp_files = false; - auto page_files = PageStorage::listAllPageFiles(file_provider, delegator, page_file_log, opt); + opt.ignore_legacy = false; + opt.remove_tmp_files = false; + opt.remove_invalid_files = false; + auto page_files = PageStorage::listAllPageFiles(file_provider, delegator, page_file_log, opt); for (const auto & page_file : page_files) { @@ -972,7 +976,8 @@ bool PageStorage::gc(bool not_skip, const WriteLimiterPtr & write_limiter, const } ListPageFilesOption opt; opt.remove_tmp_files = true; - auto page_files = PageStorage::listAllPageFiles(file_provider, delegator, page_file_log, opt); + opt.remove_invalid_files = false; + auto page_files = PageStorage::listAllPageFiles(file_provider, delegator, page_file_log, opt); if (unlikely(page_files.empty())) { // In case the directory are removed by accident diff --git a/dbms/src/Storages/Page/PageStorage.h b/dbms/src/Storages/Page/PageStorage.h index 6607d0fd59a..5d99d40b5e2 100644 --- a/dbms/src/Storages/Page/PageStorage.h +++ b/dbms/src/Storages/Page/PageStorage.h @@ -86,6 +86,7 @@ class PageStorage : private boost::noncopyable bool remove_tmp_files = false; bool ignore_legacy = false; bool ignore_checkpoint = false; + bool remove_invalid_files = false; }; using VersionedPageEntries = PageEntriesVersionSetWithDelta;