diff options
author | vvminashkin <[email protected]> | 2025-09-01 13:19:45 +0300 |
---|---|---|
committer | vvminashkin <[email protected]> | 2025-09-01 13:37:50 +0300 |
commit | d5c732f136c153c49ae5c22be4d767a05a2ace6e (patch) | |
tree | 333b98f28995889c3d838948199e2991a773159f /library/cpp/monlib/encode | |
parent | 423ef10e91de827a44cf8f2b36146bddd0c97549 (diff) |
[fetcher] use lz4 encoding
[fetcher] use lz4 encoding
commit_hash:e29504c1f68be2a5d138dbba0ed461b2f2568b97
Diffstat (limited to 'library/cpp/monlib/encode')
-rw-r--r-- | library/cpp/monlib/encode/format.cpp | 15 | ||||
-rw-r--r-- | library/cpp/monlib/encode/format.h | 10 | ||||
-rw-r--r-- | library/cpp/monlib/encode/format_ut.cpp | 42 |
3 files changed, 67 insertions, 0 deletions
diff --git a/library/cpp/monlib/encode/format.cpp b/library/cpp/monlib/encode/format.cpp index 63f9932aad2..dbcc2411f46 100644 --- a/library/cpp/monlib/encode/format.cpp +++ b/library/cpp/monlib/encode/format.cpp @@ -97,6 +97,21 @@ namespace NMonitoring { return CompressionFromHeader(value); } + ECompression FastestCompressionFromAcceptEncodingHeader(TStringBuf value) { + if (value.empty()) { + return ECompression::UNKNOWN; + } + + for (const auto& it : StringSplitter(value).Split(',').SkipEmpty()) { + TStringBuf token = StripString(it.Token()); + if (AsciiEqualsIgnoreCase(token, NFormatContentEncoding::LZ4)) { + return ECompression::LZ4; + } + } + + return CompressionFromAcceptEncodingHeader(value); + } + TStringBuf ContentEncodingByCompression(ECompression compression) { switch (compression) { case ECompression::IDENTITY: diff --git a/library/cpp/monlib/encode/format.h b/library/cpp/monlib/encode/format.h index d363945ec3d..08c59e192d9 100644 --- a/library/cpp/monlib/encode/format.h +++ b/library/cpp/monlib/encode/format.h @@ -152,6 +152,16 @@ namespace NMonitoring { ECompression CompressionFromAcceptEncodingHeader(TStringBuf value); /** + * Matches fasters compression algorithm by the given "Accept-Encoding" + * header value. Currently fastest accepted algorithm is lz4. If lz4 is not + * found in header fallbacks to CompressionFromAcceptEncodingHeader + * + * @param value value of the "Accept-Encoding" header. + * @return fastest accepted compression algorithm + */ + ECompression FastestCompressionFromAcceptEncodingHeader(TStringBuf value); + + /** * Matches compression algorithm by the given "Content-Encoding" header value. * * @param value value of the "Accept-Encoding" header. diff --git a/library/cpp/monlib/encode/format_ut.cpp b/library/cpp/monlib/encode/format_ut.cpp index 644a36ee532..92bcddc86bb 100644 --- a/library/cpp/monlib/encode/format_ut.cpp +++ b/library/cpp/monlib/encode/format_ut.cpp @@ -122,6 +122,48 @@ Y_UNIT_TEST_SUITE(TFormatTest) { ECompression::LZ4); } + Y_UNIT_TEST(FastestAcceptEncodingHeader) { + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader(""), + ECompression::UNKNOWN); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("br"), + ECompression::UNKNOWN); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("identity"), + ECompression::IDENTITY); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("zlib"), + ECompression::ZLIB); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("lz4"), + ECompression::LZ4); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("zstd"), + ECompression::ZSTD); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("zstd, zlib"), + ECompression::ZSTD); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader(" ,, , zstd , zlib"), + ECompression::ZSTD); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("br, deflate,lz4, zlib"), + ECompression::LZ4); + + UNIT_ASSERT_EQUAL( + FastestCompressionFromAcceptEncodingHeader("zstd, zlib, lz4"), + ECompression::LZ4); + } + Y_UNIT_TEST(CompressionToStrFromStr) { const std::array<ECompression, 5> algs = {{ ECompression::UNKNOWN, |