mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Merge pull request #4369 from yandex/fix-race-condition-merge-tree-clear-old-temporary-directories
Fixed rare race condition on startup of non-replicated MergeTree tables: concurrent attempt to remove a temporary directory [#CLICKHOUSE-4296]
This commit is contained in:
commit
48280074c4
@ -53,7 +53,9 @@ public:
|
||||
return size;
|
||||
}
|
||||
|
||||
/// The task is started immediately.
|
||||
TaskHandle addTask(const Task & task);
|
||||
|
||||
void removeTask(const TaskHandle & task);
|
||||
|
||||
~BackgroundProcessingPool();
|
||||
|
@ -832,7 +832,7 @@ void MergeTreeData::clearOldTemporaryDirectories(ssize_t custom_directories_life
|
||||
Poco::DirectoryIterator end;
|
||||
for (Poco::DirectoryIterator it{full_path}; it != end; ++it)
|
||||
{
|
||||
if (startsWith(it.name(), "tmp"))
|
||||
if (startsWith(it.name(), "tmp_"))
|
||||
{
|
||||
Poco::File tmp_dir(full_path + it.name());
|
||||
|
||||
|
@ -87,13 +87,15 @@ StorageMergeTree::StorageMergeTree(
|
||||
|
||||
void StorageMergeTree::startup()
|
||||
{
|
||||
background_task_handle = background_pool.addTask([this] { return backgroundTask(); });
|
||||
|
||||
data.clearOldPartsFromFilesystem();
|
||||
|
||||
/// Temporary directories contain incomplete results of merges (after forced restart)
|
||||
/// and don't allow to reinitialize them, so delete each of them immediately
|
||||
data.clearOldTemporaryDirectories(0);
|
||||
|
||||
/// NOTE background task will also do the above cleanups periodically.
|
||||
time_after_previous_cleanup.restart();
|
||||
background_task_handle = background_pool.addTask([this] { return backgroundTask(); });
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user