提交 3816a8ae 编写于 作者: A alexey-milovidov 提交者: GitHub

Merge pull request #837 from yandex/CLICKHOUSE-3044

Remove tmp part directories on server start. [#CLICKHOUSE-3044]
......@@ -472,7 +472,7 @@ static bool isOldPartDirectory(Poco::File & directory, time_t threshold)
}
void MergeTreeData::clearOldTemporaryDirectories()
void MergeTreeData::clearOldTemporaryDirectories(ssize_t custom_directories_lifetime_seconds)
{
/// If the method is already called from another thread, then we don't need to do anything.
std::unique_lock<std::mutex> lock(clear_old_temporary_directories_mutex, std::defer_lock);
......@@ -480,6 +480,9 @@ void MergeTreeData::clearOldTemporaryDirectories()
return;
time_t current_time = time(0);
ssize_t deadline = (custom_directories_lifetime_seconds >= 0)
? current_time - custom_directories_lifetime_seconds
: current_time - settings.temporary_directories_lifetime;
/// Delete temporary directories older than a day.
Poco::DirectoryIterator end;
......@@ -491,7 +494,7 @@ void MergeTreeData::clearOldTemporaryDirectories()
try
{
if (tmp_dir.isDirectory() && isOldPartDirectory(tmp_dir, current_time - settings.temporary_directories_lifetime))
if (tmp_dir.isDirectory() && isOldPartDirectory(tmp_dir, deadline))
{
LOG_WARNING(log, "Removing temporary directory " << full_path << it.name());
Poco::File(full_path + it.name()).remove(true);
......
......@@ -354,7 +354,9 @@ public:
/// Delete irrelevant parts.
void clearOldParts();
void clearOldTemporaryDirectories();
/// Deleate all directories which names begin with "tmp"
/// Set non-negative parameter value to override MergeTreeSettings temporary_directories_lifetime
void clearOldTemporaryDirectories(ssize_t custom_directories_lifetime_seconds = -1);
/// After the call to dropAllData() no method can be called.
/// Deletes the data directory and flushes the uncompressed blocks cache and the marks cache.
......
......@@ -57,7 +57,11 @@ StorageMergeTree::StorageMergeTree(
{
data.loadDataParts(has_force_restore_data_flag);
data.clearOldParts();
data.clearOldTemporaryDirectories();
/// Temporary directories contain unfinalized results of Merges (after forced restart)
/// and don't allow to reinitialize them, so delete each of them immediately
data.clearOldTemporaryDirectories(0);
increment.set(data.getMaxDataPartIndex());
}
......
......@@ -289,6 +289,10 @@ StorageReplicatedMergeTree::StorageReplicatedMergeTree(
{
checkTableStructure(skip_sanity_checks, true);
checkParts(skip_sanity_checks);
/// Temporary directories contain unfinalized results of Merges or Fetches (after forced restart)
/// and don't allow to reinitialize them, so delete each of them immediately
data.clearOldTemporaryDirectories(0);
}
createNewZooKeeperNodes();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册