This commit is contained in:
Alexey Milovidov 2016-04-19 00:38:06 +03:00
parent f2357d50b5
commit c6722da2b2
2 changed files with 17 additions and 3 deletions

View File

@ -494,6 +494,8 @@ private:
/// Используется, чтобы не выполнять одновременно функцию grabOldParts.
std::mutex grab_old_parts_mutex;
/// То же самое для clearOldTemporaryDirectories.
std::mutex clear_old_temporary_directories_mutex;
/** Для каждого шарда множество шардированных кусков.
*/

View File

@ -371,6 +371,11 @@ void MergeTreeData::loadDataParts(bool skip_sanity_checks)
void MergeTreeData::clearOldTemporaryDirectories()
{
/// Если метод уже вызван из другого потока, то можно ничего не делать.
std::unique_lock<std::mutex> lock(clear_old_temporary_directories_mutex, std::defer_lock);
if (!lock.try_lock())
return;
/// Удаляем временные директории старше суток.
Poco::DirectoryIterator end;
for (Poco::DirectoryIterator it{full_path}; it != end; ++it)
@ -379,10 +384,17 @@ void MergeTreeData::clearOldTemporaryDirectories()
{
Poco::File tmp_dir(full_path + it.name());
if (tmp_dir.isDirectory() && tmp_dir.getLastModified().epochTime() + 86400 < time(0))
try
{
LOG_WARNING(log, "Removing temporary directory " << full_path << it.name());
Poco::File(full_path + it.name()).remove(true);
if (tmp_dir.isDirectory() && tmp_dir.getLastModified().epochTime() + 86400 < time(0))
{
LOG_WARNING(log, "Removing temporary directory " << full_path << it.name());
Poco::File(full_path + it.name()).remove(true);
}
}
catch (const Poco::FileNotFoundException &)
{
/// Ничего не делаем, если файл уже удалён.
}
}
}