aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/eventlog/eventlog_int.h
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2022-11-30 23:47:12 +0300
committerqrort <qrort@yandex-team.com>2022-11-30 23:47:12 +0300
commit22f8ae0e3f5d68b92aecccdf96c1d841a0334311 (patch)
treebffa27765faf54126ad44bcafa89fadecb7a73d7 /library/cpp/eventlog/eventlog_int.h
parent332b99e2173f0425444abb759eebcb2fafaa9209 (diff)
downloadydb-22f8ae0e3f5d68b92aecccdf96c1d841a0334311.tar.gz
validate canons without yatest_common
Diffstat (limited to 'library/cpp/eventlog/eventlog_int.h')
-rw-r--r--library/cpp/eventlog/eventlog_int.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/library/cpp/eventlog/eventlog_int.h b/library/cpp/eventlog/eventlog_int.h
new file mode 100644
index 00000000000..eb00fecfab6
--- /dev/null
+++ b/library/cpp/eventlog/eventlog_int.h
@@ -0,0 +1,72 @@
+#pragma once
+
+#include <util/stream/output.h>
+#include <util/generic/maybe.h>
+#include <util/generic/utility.h>
+#include <util/generic/yexception.h>
+#include <util/ysaveload.h>
+
+using TEventClass = ui32;
+using TEventLogFormat = ui32;
+using TEventTimestamp = ui64;
+
+constexpr TStringBuf COMPRESSED_LOG_FRAME_SYNC_DATA =
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xfe\x00\x00\xff\xff\x00\x00\xff\xff\x00"
+ "\x00\xff\xff\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\xff"
+ "\xff\x00\x00\xff\xff\x00\x00\xff"sv;
+
+static_assert(COMPRESSED_LOG_FRAME_SYNC_DATA.size() == 64);
+
+/*
+ * Коды форматов логов. Форматом лога считается формат служебных
+ * структур лога. К примеру формат заголовка, наличие компрессии, и т.д.
+ * Имеет значение только 1 младший байт.
+ */
+
+enum EEventLogFormat : TEventLogFormat {
+ // Формат версии 1. Используется компрессор LZQ.
+ COMPRESSED_LOG_FORMAT_V1 = 1,
+
+ // Формат версии 2. Используется компрессор ZLIB. Добавлены CRC заголовка и данных,
+ // поле типа компрессора.
+ COMPRESSED_LOG_FORMAT_V2 = 2,
+
+ // Формат версии 3. Используется компрессор ZLIB. В начинке фреймов перед каждым событием добавлен его размер.
+ COMPRESSED_LOG_FORMAT_V3 = 3,
+
+ // Lz4hc codec + zlib
+ COMPRESSED_LOG_FORMAT_V4 = 4 /* "zlib_lz4" */,
+
+ // zstd
+ COMPRESSED_LOG_FORMAT_V5 = 5 /* "zstd" */,
+};
+
+TMaybe<TEventLogFormat> ParseEventLogFormat(TStringBuf str);
+
+#pragma pack(push, 1)
+
+struct TCompressedFrameBaseHeader {
+ TEventLogFormat Format;
+ ui32 Length; // Длина остатка фрейма в байтах, после этого заголовка
+ ui32 FrameId;
+};
+
+struct TCompressedFrameHeader {
+ TEventTimestamp StartTimestamp;
+ TEventTimestamp EndTimestamp;
+ ui32 UncompressedDatalen; // Длина данных, которые были закомпрессированы
+ ui32 PayloadChecksum; // В логе версии 1 поле не используется
+};
+
+struct TCompressedFrameHeader2: public TCompressedFrameHeader {
+ ui8 CompressorVersion; // Сейчас не используется
+ ui32 HeaderChecksum;
+};
+
+#pragma pack(pop)
+
+Y_DECLARE_PODTYPE(TCompressedFrameBaseHeader);
+Y_DECLARE_PODTYPE(TCompressedFrameHeader);
+Y_DECLARE_PODTYPE(TCompressedFrameHeader2);