summaryrefslogtreecommitdiffstats
path: root/library/cpp/monlib/encode
diff options
context:
space:
mode:
authorvvminashkin <[email protected]>2025-09-01 13:19:45 +0300
committervvminashkin <[email protected]>2025-09-01 13:37:50 +0300
commitd5c732f136c153c49ae5c22be4d767a05a2ace6e (patch)
tree333b98f28995889c3d838948199e2991a773159f /library/cpp/monlib/encode
parent423ef10e91de827a44cf8f2b36146bddd0c97549 (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.cpp15
-rw-r--r--library/cpp/monlib/encode/format.h10
-rw-r--r--library/cpp/monlib/encode/format_ut.cpp42
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,