mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
177 lines
5.3 KiB
C++
177 lines
5.3 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <chrono>
|
||
|
#include <optional>
|
||
|
#include <Poco/Util/XMLConfiguration.h>
|
||
|
#include <Poco/Logger.h>
|
||
|
#include <Poco/ConsoleChannel.h>
|
||
|
#include <Poco/FormattingChannel.h>
|
||
|
#include <Poco/PatternFormatter.h>
|
||
|
#include <Poco/UUIDGenerator.h>
|
||
|
#include <Poco/File.h>
|
||
|
#include <Poco/Process.h>
|
||
|
#include <Poco/FileChannel.h>
|
||
|
#include <Poco/SplitterChannel.h>
|
||
|
#include <Poco/Util/HelpFormatter.h>
|
||
|
#include <boost/algorithm/string.hpp>
|
||
|
#include <common/logger_useful.h>
|
||
|
#include <Common/ThreadPool.h>
|
||
|
#include <Common/Exception.h>
|
||
|
#include <Common/ZooKeeper/ZooKeeper.h>
|
||
|
#include <Common/ZooKeeper/KeeperException.h>
|
||
|
#include <Common/getFQDNOrHostName.h>
|
||
|
#include <Common/isLocalAddress.h>
|
||
|
#include <Common/typeid_cast.h>
|
||
|
#include <Common/ClickHouseRevision.h>
|
||
|
#include <Common/formatReadable.h>
|
||
|
#include <Common/DNSResolver.h>
|
||
|
#include <Common/CurrentThread.h>
|
||
|
#include <Common/escapeForFileName.h>
|
||
|
#include <Common/getNumberOfPhysicalCPUCores.h>
|
||
|
#include <Common/ThreadStatus.h>
|
||
|
#include <Client/Connection.h>
|
||
|
#include <Interpreters/Context.h>
|
||
|
#include <Interpreters/InterpreterFactory.h>
|
||
|
#include <Interpreters/InterpreterExistsQuery.h>
|
||
|
#include <Interpreters/InterpreterShowCreateQuery.h>
|
||
|
#include <Interpreters/InterpreterDropQuery.h>
|
||
|
#include <Interpreters/InterpreterCreateQuery.h>
|
||
|
#include <Columns/ColumnString.h>
|
||
|
#include <Columns/ColumnsNumber.h>
|
||
|
#include <DataTypes/DataTypeString.h>
|
||
|
#include <Parsers/ParserCreateQuery.h>
|
||
|
#include <Parsers/parseQuery.h>
|
||
|
#include <Parsers/ParserQuery.h>
|
||
|
#include <Parsers/ASTCreateQuery.h>
|
||
|
#include <Parsers/queryToString.h>
|
||
|
#include <Parsers/ASTDropQuery.h>
|
||
|
#include <Parsers/ASTLiteral.h>
|
||
|
#include <Parsers/ASTExpressionList.h>
|
||
|
#include <Formats/FormatSettings.h>
|
||
|
#include <DataStreams/RemoteBlockInputStream.h>
|
||
|
#include <DataStreams/SquashingBlockInputStream.h>
|
||
|
#include <DataStreams/AsynchronousBlockInputStream.h>
|
||
|
#include <DataStreams/copyData.h>
|
||
|
#include <DataStreams/NullBlockOutputStream.h>
|
||
|
#include <IO/ConnectionTimeouts.h>
|
||
|
#include <IO/Operators.h>
|
||
|
#include <IO/ReadBufferFromString.h>
|
||
|
#include <IO/ReadBufferFromFile.h>
|
||
|
#include <Functions/registerFunctions.h>
|
||
|
#include <TableFunctions/registerTableFunctions.h>
|
||
|
#include <AggregateFunctions/registerAggregateFunctions.h>
|
||
|
#include <Storages/registerStorages.h>
|
||
|
#include <Storages/StorageDistributed.h>
|
||
|
#include <Dictionaries/registerDictionaries.h>
|
||
|
#include <Disks/registerDisks.h>
|
||
|
#include <Databases/DatabaseMemory.h>
|
||
|
#include <Common/StatusFile.h>
|
||
|
|
||
|
#include "Aliases.h"
|
||
|
|
||
|
namespace DB {
|
||
|
|
||
|
namespace ErrorCodes
|
||
|
{
|
||
|
extern const int NO_ZOOKEEPER;
|
||
|
extern const int BAD_ARGUMENTS;
|
||
|
extern const int UNKNOWN_TABLE;
|
||
|
extern const int UNFINISHED;
|
||
|
extern const int UNKNOWN_ELEMENT_IN_CONFIG;
|
||
|
}
|
||
|
|
||
|
|
||
|
[[maybe_unused]] ConfigurationPtr getConfigurationFromXMLString(const std::string &xml_data);
|
||
|
|
||
|
[[maybe_unused]] String getQuotedTable(const String &database, const String &table);
|
||
|
|
||
|
[[maybe_unused]] String getQuotedTable(const DatabaseAndTableName &db_and_table);
|
||
|
|
||
|
|
||
|
enum class TaskState {
|
||
|
Started = 0,
|
||
|
Finished,
|
||
|
Unknown
|
||
|
};
|
||
|
|
||
|
/// Used to mark status of shard partition tasks
|
||
|
struct TaskStateWithOwner {
|
||
|
TaskStateWithOwner() = default;
|
||
|
|
||
|
TaskStateWithOwner(TaskState state_, const String &owner_) : state(state_), owner(owner_) {}
|
||
|
|
||
|
TaskState state{TaskState::Unknown};
|
||
|
String owner;
|
||
|
|
||
|
static String getData(TaskState state, const String &owner) {
|
||
|
return TaskStateWithOwner(state, owner).toString();
|
||
|
}
|
||
|
|
||
|
String toString() {
|
||
|
WriteBufferFromOwnString wb;
|
||
|
wb << static_cast<UInt32>(state) << "\n" << escape << owner;
|
||
|
return wb.str();
|
||
|
}
|
||
|
|
||
|
static TaskStateWithOwner fromString(const String &data) {
|
||
|
ReadBufferFromString rb(data);
|
||
|
TaskStateWithOwner res;
|
||
|
UInt32 state;
|
||
|
|
||
|
rb >> state >> "\n" >> escape >> res.owner;
|
||
|
|
||
|
if (state >= static_cast<int>(TaskState::Unknown))
|
||
|
throw Exception("Unknown state " + data, ErrorCodes::LOGICAL_ERROR);
|
||
|
|
||
|
res.state = static_cast<TaskState>(state);
|
||
|
return res;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
struct ShardPriority
|
||
|
{
|
||
|
UInt8 is_remote = 1;
|
||
|
size_t hostname_difference = 0;
|
||
|
UInt8 random = 0;
|
||
|
|
||
|
static bool greaterPriority(const ShardPriority ¤t, const ShardPriority &other) {
|
||
|
return std::forward_as_tuple(current.is_remote, current.hostname_difference, current.random)
|
||
|
< std::forward_as_tuple(other.is_remote, other.hostname_difference, other.random);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/// Execution status of a task
|
||
|
enum class PartitionTaskStatus
|
||
|
{
|
||
|
Active,
|
||
|
Finished,
|
||
|
Error,
|
||
|
};
|
||
|
|
||
|
|
||
|
struct MultiTransactionInfo {
|
||
|
int32_t code;
|
||
|
Coordination::Requests requests;
|
||
|
Coordination::Responses responses;
|
||
|
};
|
||
|
|
||
|
// Creates AST representing 'ENGINE = Distributed(cluster, db, table, [sharding_key])
|
||
|
[[maybe_unused]] std::shared_ptr<ASTStorage> createASTStorageDistributed(
|
||
|
const String &cluster_name, const String &database, const String &table,
|
||
|
const ASTPtr &sharding_key_ast = nullptr);
|
||
|
|
||
|
|
||
|
[[maybe_unused]] BlockInputStreamPtr squashStreamIntoOneBlock(const BlockInputStreamPtr &stream);
|
||
|
|
||
|
[[maybe_unused]] Block getBlockWithAllStreamData(const BlockInputStreamPtr &stream);
|
||
|
|
||
|
[[maybe_unused]] bool isExtendedDefinitionStorage(const ASTPtr &storage_ast);
|
||
|
|
||
|
[[maybe_unused]] ASTPtr extractPartitionKey(const ASTPtr &storage_ast);
|
||
|
|
||
|
[[maybe_unused]] ShardPriority getReplicasPriority(const Cluster::Addresses & replicas, const std::string & local_hostname, UInt8 random);
|
||
|
|
||
|
}
|