mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 08:02:02 +00:00
Merge pull request #42071 from evillique/new-http-compression-methods
Add new HTTP compression methods
This commit is contained in:
commit
54ec6a5047
@ -11,6 +11,7 @@ RUN apt-get update -y \
|
|||||||
apt-get install --yes --no-install-recommends \
|
apt-get install --yes --no-install-recommends \
|
||||||
awscli \
|
awscli \
|
||||||
brotli \
|
brotli \
|
||||||
|
lz4 \
|
||||||
expect \
|
expect \
|
||||||
golang \
|
golang \
|
||||||
lsof \
|
lsof \
|
||||||
|
@ -55,6 +55,30 @@ std::string toContentEncodingName(CompressionMethod method)
|
|||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CompressionMethod chooseHTTPCompressionMethod(const std::string & list)
|
||||||
|
{
|
||||||
|
/// The compression methods are ordered from most to least preferred.
|
||||||
|
|
||||||
|
if (std::string::npos != list.find("zstd"))
|
||||||
|
return CompressionMethod::Zstd;
|
||||||
|
else if (std::string::npos != list.find("br"))
|
||||||
|
return CompressionMethod::Brotli;
|
||||||
|
else if (std::string::npos != list.find("lz4"))
|
||||||
|
return CompressionMethod::Lz4;
|
||||||
|
else if (std::string::npos != list.find("snappy"))
|
||||||
|
return CompressionMethod::Snappy;
|
||||||
|
else if (std::string::npos != list.find("gzip"))
|
||||||
|
return CompressionMethod::Gzip;
|
||||||
|
else if (std::string::npos != list.find("deflate"))
|
||||||
|
return CompressionMethod::Zlib;
|
||||||
|
else if (std::string::npos != list.find("xz"))
|
||||||
|
return CompressionMethod::Xz;
|
||||||
|
else if (std::string::npos != list.find("bz2"))
|
||||||
|
return CompressionMethod::Bzip2;
|
||||||
|
else
|
||||||
|
return CompressionMethod::None;
|
||||||
|
}
|
||||||
|
|
||||||
CompressionMethod chooseCompressionMethod(const std::string & path, const std::string & hint)
|
CompressionMethod chooseCompressionMethod(const std::string & path, const std::string & hint)
|
||||||
{
|
{
|
||||||
std::string file_extension;
|
std::string file_extension;
|
||||||
|
@ -46,6 +46,10 @@ std::string toContentEncodingName(CompressionMethod method);
|
|||||||
*/
|
*/
|
||||||
CompressionMethod chooseCompressionMethod(const std::string & path, const std::string & hint);
|
CompressionMethod chooseCompressionMethod(const std::string & path, const std::string & hint);
|
||||||
|
|
||||||
|
/** Choose a compression method from HTTP header list of supported compression methods.
|
||||||
|
*/
|
||||||
|
CompressionMethod chooseHTTPCompressionMethod(const std::string & list);
|
||||||
|
|
||||||
/// Get a range of the valid compression levels for the compression method.
|
/// Get a range of the valid compression levels for the compression method.
|
||||||
std::pair<uint64_t, uint64_t> getCompressionLevelRange(const CompressionMethod & method);
|
std::pair<uint64_t, uint64_t> getCompressionLevelRange(const CompressionMethod & method);
|
||||||
|
|
||||||
|
@ -542,22 +542,7 @@ void HTTPHandler::processQuery(
|
|||||||
CompressionMethod http_response_compression_method = CompressionMethod::None;
|
CompressionMethod http_response_compression_method = CompressionMethod::None;
|
||||||
|
|
||||||
if (!http_response_compression_methods.empty())
|
if (!http_response_compression_methods.empty())
|
||||||
{
|
http_response_compression_method = chooseHTTPCompressionMethod(http_response_compression_methods);
|
||||||
/// If client supports brotli - it's preferred.
|
|
||||||
/// Both gzip and deflate are supported. If the client supports both, gzip is preferred.
|
|
||||||
/// NOTE parsing of the list of methods is slightly incorrect.
|
|
||||||
|
|
||||||
if (std::string::npos != http_response_compression_methods.find("br"))
|
|
||||||
http_response_compression_method = CompressionMethod::Brotli;
|
|
||||||
else if (std::string::npos != http_response_compression_methods.find("gzip"))
|
|
||||||
http_response_compression_method = CompressionMethod::Gzip;
|
|
||||||
else if (std::string::npos != http_response_compression_methods.find("deflate"))
|
|
||||||
http_response_compression_method = CompressionMethod::Zlib;
|
|
||||||
else if (std::string::npos != http_response_compression_methods.find("xz"))
|
|
||||||
http_response_compression_method = CompressionMethod::Xz;
|
|
||||||
else if (std::string::npos != http_response_compression_methods.find("zstd"))
|
|
||||||
http_response_compression_method = CompressionMethod::Zstd;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool client_supports_http_compression = http_response_compression_method != CompressionMethod::None;
|
bool client_supports_http_compression = http_response_compression_method != CompressionMethod::None;
|
||||||
|
|
||||||
|
@ -41,18 +41,7 @@ responseWriteBuffer(HTTPServerRequest & request, HTTPServerResponse & response,
|
|||||||
CompressionMethod http_response_compression_method = CompressionMethod::None;
|
CompressionMethod http_response_compression_method = CompressionMethod::None;
|
||||||
|
|
||||||
if (!http_response_compression_methods.empty())
|
if (!http_response_compression_methods.empty())
|
||||||
{
|
http_response_compression_method = chooseHTTPCompressionMethod(http_response_compression_methods);
|
||||||
/// If client supports brotli - it's preferred.
|
|
||||||
/// Both gzip and deflate are supported. If the client supports both, gzip is preferred.
|
|
||||||
/// NOTE parsing of the list of methods is slightly incorrect.
|
|
||||||
|
|
||||||
if (std::string::npos != http_response_compression_methods.find("br"))
|
|
||||||
http_response_compression_method = CompressionMethod::Brotli;
|
|
||||||
else if (std::string::npos != http_response_compression_methods.find("gzip"))
|
|
||||||
http_response_compression_method = CompressionMethod::Gzip;
|
|
||||||
else if (std::string::npos != http_response_compression_methods.find("deflate"))
|
|
||||||
http_response_compression_method = CompressionMethod::Zlib;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool client_supports_http_compression = http_response_compression_method != CompressionMethod::None;
|
bool client_supports_http_compression = http_response_compression_method != CompressionMethod::None;
|
||||||
|
|
||||||
|
@ -78,17 +78,44 @@
|
|||||||
7
|
7
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
< Content-Encoding: gzip
|
< Content-Encoding: gzip
|
||||||
< Content-Encoding: deflate
|
< Content-Encoding: deflate
|
||||||
< Content-Encoding: gzip
|
< Content-Encoding: gzip
|
||||||
< Content-Encoding: br
|
< Content-Encoding: br
|
||||||
< Content-Encoding: xz
|
< Content-Encoding: xz
|
||||||
< Content-Encoding: zstd
|
< Content-Encoding: zstd
|
||||||
|
< Content-Encoding: lz4
|
||||||
|
< Content-Encoding: bz2
|
||||||
|
< Content-Encoding: snappy
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
Hello, world
|
||||||
|
Hello, world
|
||||||
Hello, world
|
Hello, world
|
||||||
Hello, world
|
Hello, world
|
||||||
Hello, world
|
Hello, world
|
||||||
|
@ -18,6 +18,8 @@ ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-
|
|||||||
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: br' -d 'SELECT number FROM system.numbers LIMIT 10' | brotli -d;
|
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: br' -d 'SELECT number FROM system.numbers LIMIT 10' | brotli -d;
|
||||||
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: xz' -d 'SELECT number FROM system.numbers LIMIT 10' | xz -d;
|
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: xz' -d 'SELECT number FROM system.numbers LIMIT 10' | xz -d;
|
||||||
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: zstd' -d 'SELECT number FROM system.numbers LIMIT 10' | zstd -d;
|
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: zstd' -d 'SELECT number FROM system.numbers LIMIT 10' | zstd -d;
|
||||||
|
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: lz4' -d 'SELECT number FROM system.numbers LIMIT 10' | lz4 -d;
|
||||||
|
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: bz2' -d 'SELECT number FROM system.numbers LIMIT 10' | bzip2 -d;
|
||||||
|
|
||||||
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: gzip' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: gzip' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
@ -27,18 +29,25 @@ ${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept
|
|||||||
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: br' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: br' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: xz' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: xz' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: zstd' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: zstd' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: lz4' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: bz2' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
|
${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: snappy' -d 'SELECT number FROM system.numbers LIMIT 10' 2>&1 | grep --text '< Content-Encoding';
|
||||||
|
|
||||||
echo "SELECT 1" | ${CLICKHOUSE_CURL} -sS --data-binary @- "${CLICKHOUSE_URL}";
|
echo "SELECT 1" | ${CLICKHOUSE_CURL} -sS --data-binary @- "${CLICKHOUSE_URL}";
|
||||||
echo "SELECT 1" | gzip -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: gzip' "${CLICKHOUSE_URL}";
|
echo "SELECT 1" | gzip -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: gzip' "${CLICKHOUSE_URL}";
|
||||||
echo "SELECT 1" | brotli | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: br' "${CLICKHOUSE_URL}";
|
echo "SELECT 1" | brotli | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: br' "${CLICKHOUSE_URL}";
|
||||||
echo "SELECT 1" | xz -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: xz' "${CLICKHOUSE_URL}";
|
echo "SELECT 1" | xz -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: xz' "${CLICKHOUSE_URL}";
|
||||||
echo "SELECT 1" | zstd -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: zstd' "${CLICKHOUSE_URL}";
|
echo "SELECT 1" | zstd -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: zstd' "${CLICKHOUSE_URL}";
|
||||||
|
echo "SELECT 1" | lz4 -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: lz4' "${CLICKHOUSE_URL}";
|
||||||
|
echo "SELECT 1" | bzip2 -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: bz2' "${CLICKHOUSE_URL}";
|
||||||
|
|
||||||
echo "'Hello, world'" | ${CLICKHOUSE_CURL} -sS --data-binary @- "${CLICKHOUSE_URL}&query=SELECT";
|
echo "'Hello, world'" | ${CLICKHOUSE_CURL} -sS --data-binary @- "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
echo "'Hello, world'" | gzip -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: gzip' "${CLICKHOUSE_URL}&query=SELECT";
|
echo "'Hello, world'" | gzip -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: gzip' "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
echo "'Hello, world'" | brotli | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: br' "${CLICKHOUSE_URL}&query=SELECT";
|
echo "'Hello, world'" | brotli | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: br' "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
echo "'Hello, world'" | xz -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: xz' "${CLICKHOUSE_URL}&query=SELECT";
|
echo "'Hello, world'" | xz -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: xz' "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
echo "'Hello, world'" | zstd -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: zstd' "${CLICKHOUSE_URL}&query=SELECT";
|
echo "'Hello, world'" | zstd -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: zstd' "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
|
echo "'Hello, world'" | lz4 -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: lz4' "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
|
echo "'Hello, world'" | bzip2 -c | ${CLICKHOUSE_CURL} -sS --data-binary @- -H 'Content-Encoding: bz2' "${CLICKHOUSE_URL}&query=SELECT";
|
||||||
|
|
||||||
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: gzip' -d 'SELECT number FROM system.numbers LIMIT 0' | wc -c;
|
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&enable_http_compression=1" -H 'Accept-Encoding: gzip' -d 'SELECT number FROM system.numbers LIMIT 0' | wc -c;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user