ClickHouse/dbms/include/DB/Storages/MergeTree/ReplicatedMergeTreeLogEntry.h

108 lines
4.6 KiB
C
Raw Normal View History

2014-10-15 01:22:06 +00:00
#pragma once
2015-10-05 01:35:28 +00:00
#include <DB/Common/Exception.h>
2014-10-15 01:22:06 +00:00
#include <DB/Core/Types.h>
#include <DB/IO/WriteHelpers.h>
2014-10-15 01:22:06 +00:00
#include <mutex>
#include <condition_variable>
struct Stat;
2014-10-15 01:22:06 +00:00
namespace DB
{
class ReadBuffer;
class WriteBuffer;
2016-01-10 04:43:30 +00:00
class ReplicatedMergeTreeQueue;
2014-10-15 01:22:06 +00:00
namespace ErrorCodes
{
extern const int LOGICAL_ERROR;
extern const int UNKNOWN_FORMAT_VERSION;
extern const int CANNOT_PARSE_TEXT;
}
2014-10-15 01:22:06 +00:00
/// Запись о том, что нужно сделать. Только данные (их можно копировать).
struct ReplicatedMergeTreeLogEntryData
2014-10-15 01:22:06 +00:00
{
enum Type
{
EMPTY, /// Не используется.
2014-10-15 01:22:06 +00:00
GET_PART, /// Получить кусок с другой реплики.
MERGE_PARTS, /// Слить куски.
DROP_RANGE, /// Удалить куски в указанном месяце в указанном диапазоне номеров.
ATTACH_PART, /// Перенести кусок из директории detached или unreplicated.
};
String typeToString() const
{
switch (type)
{
case ReplicatedMergeTreeLogEntryData::GET_PART: return "GET_PART";
case ReplicatedMergeTreeLogEntryData::MERGE_PARTS: return "MERGE_PARTS";
case ReplicatedMergeTreeLogEntryData::DROP_RANGE: return "DROP_RANGE";
case ReplicatedMergeTreeLogEntryData::ATTACH_PART: return "ATTACH_PART";
default:
throw Exception("Unknown log entry type: " + DB::toString(type), ErrorCodes::LOGICAL_ERROR);
}
}
2014-10-15 01:22:06 +00:00
String znode_name;
Type type = EMPTY;
2014-10-15 01:22:06 +00:00
String source_replica; /// Пустая строка значит, что эта запись была добавлена сразу в очередь, а не скопирована из лога.
/// Имя куска, получающегося в результате.
/// Для DROP_RANGE имя несуществующего куска. Нужно удалить все куски, покрытые им.
String new_part_name;
String block_id; /// Для кусков нулевого уровня - идентификатор блока для дедупликации (имя ноды в /blocks/).
2014-10-15 01:22:06 +00:00
Strings parts_to_merge;
/// Для DROP_RANGE, true значит, что куски нужно не удалить, а перенести в директорию detached.
bool detach = false;
/// Для ATTACH_PART имя куска в директории detached или unreplicated.
String source_part_name;
/// Нужно переносить из директории unreplicated, а не detached.
bool attach_unreplicated = false;
2014-10-15 01:22:06 +00:00
2016-01-10 04:43:30 +00:00
/// Доступ под queue_mutex, см. ReplicatedMergeTreeQueue.
bool currently_executing = false; /// Выполняется ли действие сейчас.
/// Эти несколько полей имеют лишь информационный характер (для просмотра пользователем с помощью системных таблиц).
2016-01-10 04:43:30 +00:00
/// Доступ под queue_mutex, см. ReplicatedMergeTreeQueue.
size_t num_tries = 0; /// Количество попыток выполнить действие (с момента старта сервера; включая выполняющееся).
2016-01-10 04:43:30 +00:00
std::exception_ptr exception; /// Последний эксепшен, в случае безуспешной попытки выполнить действие.
time_t last_attempt_time = 0; /// Время начала последней попытки выполнить действие.
size_t num_postponed = 0; /// Количество раз, когда действие было отложено.
String postpone_reason; /// Причина, по которой действие было отложено, если оно отложено.
time_t last_postpone_time = 0; /// Время последнего раза, когда действие было отложено.
2014-10-15 01:22:06 +00:00
2014-11-08 23:55:24 +00:00
/// Время создания или время копирования из общего лога в очередь конкретной реплики.
time_t create_time = 0;
/// Величина кворума (для GET_PART) - ненулевое значение при включенной кворумной записи.
size_t quorum = 0;
};
struct ReplicatedMergeTreeLogEntry : ReplicatedMergeTreeLogEntryData
{
typedef Poco::SharedPtr<ReplicatedMergeTreeLogEntry> Ptr;
std::condition_variable execution_complete; /// Пробуждается когда currently_executing становится false.
2014-11-08 23:55:24 +00:00
2014-10-15 01:22:06 +00:00
void writeText(WriteBuffer & out) const;
void readText(ReadBuffer & in);
String toString() const;
static Ptr parse(const String & s, const Stat & stat);
2014-10-15 01:22:06 +00:00
};
}