BlockIO InterpreterSystemQuery::execute() { auto & query = typeid_cast<ASTSystemQuery &>(*query_ptr); using Type = ASTSystemQuery::Type; switch (query.type) { case Type::SHUTDOWN: if (kill(0, SIGTERM)) throwFromErrno("System call kill(0, SIGTERM) failed", ErrorCodes::CANNOT_KILL); break; case Type::KILL: if (kill(0, SIGKILL)) throwFromErrno("System call kill(0, SIGKILL) failed", ErrorCodes::CANNOT_KILL); break; case Type::DROP_DNS_CACHE: DNSCache::instance().drop(); /// Reinitialize clusters to update their resolved_addresses context.reloadClusterConfig(); break; case Type::DROP_MARK_CACHE: context.dropMarkCache(); break; case Type::DROP_UNCOMPRESSED_CACHE: context.dropUncompressedCache(); break; case Type::RELOAD_DICTIONARY: context.getExternalDictionaries().reloadDictionary(query.target_dictionary); break; case Type::RELOAD_DICTIONARIES: { auto status = getOverallExecutionStatusOfCommands( [&] { context.getExternalDictionaries().reload(); }, [&] { context.getEmbeddedDictionaries().reload(); } ); if (status.code != 0) throw Exception(status.message, status.code); break; } case Type::STOP_LISTEN_QUERIES: case Type::START_LISTEN_QUERIES: case Type::RESTART_REPLICAS: case Type::SYNC_REPLICA: case Type::STOP_MERGES: case Type::START_MERGES: case Type::STOP_REPLICATION_QUEUES: case Type::START_REPLICATION_QUEUES: throw Exception(String(ASTSystemQuery::typeToString(query.type)) + " is not supported yet", ErrorCodes::NOT_IMPLEMENTED); default: throw Exception("Unknown type of SYSTEM query", ErrorCodes::BAD_ARGUMENTS); } return BlockIO(); }
BlockIO InterpreterSystemQuery::execute() { auto & query = typeid_cast<ASTSystemQuery &>(*query_ptr); using Type = ASTSystemQuery::Type; /// Use global context with fresh system profile settings Context system_context = context.getGlobalContext(); system_context.setSetting("profile", context.getSystemProfileName()); /// Make canonical query for simpler processing if (!query.target_table.empty() && query.target_database.empty()) query.target_database = context.getCurrentDatabase(); switch (query.type) { case Type::SHUTDOWN: if (kill(0, SIGTERM)) throwFromErrno("System call kill(0, SIGTERM) failed", ErrorCodes::CANNOT_KILL); break; case Type::KILL: if (kill(0, SIGKILL)) throwFromErrno("System call kill(0, SIGKILL) failed", ErrorCodes::CANNOT_KILL); break; case Type::DROP_DNS_CACHE: DNSResolver::instance().dropCache(); /// Reinitialize clusters to update their resolved_addresses system_context.reloadClusterConfig(); break; case Type::DROP_MARK_CACHE: system_context.dropMarkCache(); break; case Type::DROP_UNCOMPRESSED_CACHE: system_context.dropUncompressedCache(); break; case Type::RELOAD_DICTIONARY: system_context.getExternalDictionaries().reloadDictionary(query.target_dictionary); break; case Type::RELOAD_DICTIONARIES: { auto status = getOverallExecutionStatusOfCommands( [&] { system_context.getExternalDictionaries().reload(); }, [&] { system_context.getEmbeddedDictionaries().reload(); } ); if (status.code != 0) throw Exception(status.message, status.code); break; } case Type::RELOAD_EMBEDDED_DICTIONARIES: system_context.getEmbeddedDictionaries().reload(); break; case Type::RELOAD_CONFIG: system_context.reloadConfig(); break; case Type::STOP_MERGES: startStopAction(context, query, ActionLocks::PartsMerge, false); break; case Type::START_MERGES: startStopAction(context, query, ActionLocks::PartsMerge, true); break; case Type::STOP_FETCHES: startStopAction(context, query, ActionLocks::PartsFetch, false); break; case Type::START_FETCHES: startStopAction(context, query, ActionLocks::PartsFetch, true); break; case Type::STOP_REPLICATED_SENDS: startStopAction(context, query, ActionLocks::PartsSend, false); break; case Type::START_REPLICATEDS_SENDS: startStopAction(context, query, ActionLocks::PartsSend, false); break; case Type::STOP_REPLICATION_QUEUES: startStopAction(context, query, ActionLocks::ReplicationQueue, false); break; case Type::START_REPLICATION_QUEUES: startStopAction(context, query, ActionLocks::ReplicationQueue, true); break; case Type::SYNC_REPLICA: syncReplica(query); break; case Type::RESTART_REPLICAS: restartReplicas(system_context); break; case Type::RESTART_REPLICA: if (!tryRestartReplica(query.target_database, query.target_table, system_context)) throw Exception("There is no " + query.target_database + "." + query.target_table + " replicated table", ErrorCodes::BAD_ARGUMENTS); break; case Type::STOP_LISTEN_QUERIES: case Type::START_LISTEN_QUERIES: throw Exception(String(ASTSystemQuery::typeToString(query.type)) + " is not supported yet", ErrorCodes::NOT_IMPLEMENTED); default: throw Exception("Unknown type of SYSTEM query", ErrorCodes::BAD_ARGUMENTS); } return BlockIO(); }