mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
fix
This commit is contained in:
parent
fb3574d2cf
commit
3457b68dcc
@ -654,8 +654,9 @@ void LocalServer::processConfig()
|
|||||||
|
|
||||||
if (!config().has("only-system-tables"))
|
if (!config().has("only-system-tables"))
|
||||||
{
|
{
|
||||||
DatabaseCatalog::instance().startupBackgroundCleanup();
|
DatabaseCatalog::instance().createBackgroundTasks();
|
||||||
loadMetadata(global_context);
|
loadMetadata(global_context);
|
||||||
|
DatabaseCatalog::instance().startupBackgroundCleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// For ClickHouse local if path is not set the loader will be disabled.
|
/// For ClickHouse local if path is not set the loader will be disabled.
|
||||||
|
@ -1656,11 +1656,12 @@ try
|
|||||||
/// that may execute DROP before loadMarkedAsDroppedTables() in background,
|
/// that may execute DROP before loadMarkedAsDroppedTables() in background,
|
||||||
/// and so loadMarkedAsDroppedTables() will find it and try to add, and UUID will overlap.
|
/// and so loadMarkedAsDroppedTables() will find it and try to add, and UUID will overlap.
|
||||||
database_catalog.loadMarkedAsDroppedTables();
|
database_catalog.loadMarkedAsDroppedTables();
|
||||||
database_catalog.startupBackgroundCleanup();
|
database_catalog.createBackgroundTasks();
|
||||||
/// Then, load remaining databases
|
/// Then, load remaining databases
|
||||||
loadMetadata(global_context, default_database);
|
loadMetadata(global_context, default_database);
|
||||||
convertDatabasesEnginesIfNeed(global_context);
|
convertDatabasesEnginesIfNeed(global_context);
|
||||||
startupSystemTables();
|
startupSystemTables();
|
||||||
|
database_catalog.startupBackgroundCleanup();
|
||||||
/// After loading validate that default database exists
|
/// After loading validate that default database exists
|
||||||
database_catalog.assertDatabaseExists(default_database);
|
database_catalog.assertDatabaseExists(default_database);
|
||||||
/// Load user-defined SQL functions.
|
/// Load user-defined SQL functions.
|
||||||
|
@ -152,20 +152,30 @@ void DatabaseCatalog::initializeAndLoadTemporaryDatabase()
|
|||||||
attachDatabase(TEMPORARY_DATABASE, db_for_temporary_and_external_tables);
|
attachDatabase(TEMPORARY_DATABASE, db_for_temporary_and_external_tables);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseCatalog::startupBackgroundCleanup()
|
void DatabaseCatalog::createBackgroundTasks()
|
||||||
{
|
{
|
||||||
|
/// It has to be done before databases are loaded (to avoid a race condition on initalization)
|
||||||
if (Context::getGlobalContextInstance()->getApplicationType() == Context::ApplicationType::SERVER && unused_dir_cleanup_period_sec)
|
if (Context::getGlobalContextInstance()->getApplicationType() == Context::ApplicationType::SERVER && unused_dir_cleanup_period_sec)
|
||||||
{
|
{
|
||||||
auto cleanup_task_holder
|
auto cleanup_task_holder
|
||||||
= getContext()->getSchedulePool().createTask("DatabaseCatalog", [this]() { this->cleanupStoreDirectoryTask(); });
|
= getContext()->getSchedulePool().createTask("DatabaseCatalog", [this]() { this->cleanupStoreDirectoryTask(); });
|
||||||
cleanup_task = std::make_unique<BackgroundSchedulePoolTaskHolder>(std::move(cleanup_task_holder));
|
cleanup_task = std::make_unique<BackgroundSchedulePoolTaskHolder>(std::move(cleanup_task_holder));
|
||||||
|
}
|
||||||
|
|
||||||
|
auto task_holder = getContext()->getSchedulePool().createTask("DatabaseCatalog", [this](){ this->dropTableDataTask(); });
|
||||||
|
drop_task = std::make_unique<BackgroundSchedulePoolTaskHolder>(std::move(task_holder));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatabaseCatalog::startupBackgroundCleanup()
|
||||||
|
{
|
||||||
|
/// And it has to be done after all databases are loaded, otherwise cleanup_task may remove something that should not be removed
|
||||||
|
if (cleanup_task)
|
||||||
|
{
|
||||||
(*cleanup_task)->activate();
|
(*cleanup_task)->activate();
|
||||||
/// Do not start task immediately on server startup, it's not urgent.
|
/// Do not start task immediately on server startup, it's not urgent.
|
||||||
(*cleanup_task)->scheduleAfter(unused_dir_hide_timeout_sec * 1000);
|
(*cleanup_task)->scheduleAfter(unused_dir_hide_timeout_sec * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto task_holder = getContext()->getSchedulePool().createTask("DatabaseCatalog", [this](){ this->dropTableDataTask(); });
|
|
||||||
drop_task = std::make_unique<BackgroundSchedulePoolTaskHolder>(std::move(task_holder));
|
|
||||||
(*drop_task)->activate();
|
(*drop_task)->activate();
|
||||||
std::lock_guard lock{tables_marked_dropped_mutex};
|
std::lock_guard lock{tables_marked_dropped_mutex};
|
||||||
if (!tables_marked_dropped.empty())
|
if (!tables_marked_dropped.empty())
|
||||||
|
@ -135,6 +135,7 @@ public:
|
|||||||
static DatabaseCatalog & instance();
|
static DatabaseCatalog & instance();
|
||||||
static void shutdown();
|
static void shutdown();
|
||||||
|
|
||||||
|
void createBackgroundTasks();
|
||||||
void initializeAndLoadTemporaryDatabase();
|
void initializeAndLoadTemporaryDatabase();
|
||||||
void startupBackgroundCleanup();
|
void startupBackgroundCleanup();
|
||||||
void loadMarkedAsDroppedTables();
|
void loadMarkedAsDroppedTables();
|
||||||
|
Loading…
Reference in New Issue
Block a user