mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Added setting 'http_native_compression_disable_checksumming_on_decompress' [#METR-20784].
This commit is contained in:
parent
f538e81c98
commit
42cb486bc1
@ -47,6 +47,10 @@ protected:
|
||||
void * fixed_size_padding = nullptr;
|
||||
#endif
|
||||
|
||||
/// Не проверять чексуммы.
|
||||
bool disable_checksum = false;
|
||||
|
||||
|
||||
/// Прочитать сжатые данные в compressed_buffer. Достать из их заголовка размер разжатых данных. Проверить чексумму.
|
||||
/// Возвращает количество прочитанных байт.
|
||||
size_t readCompressedData(size_t & size_decompressed, size_t & size_compressed_without_checksum)
|
||||
@ -101,7 +105,7 @@ protected:
|
||||
compressed_in->readStrict(&compressed_buffer[COMPRESSED_BLOCK_HEADER_SIZE], size_compressed - COMPRESSED_BLOCK_HEADER_SIZE);
|
||||
}
|
||||
|
||||
if (checksum != CityHash128(&compressed_buffer[0], size_compressed))
|
||||
if (!disable_checksum && checksum != CityHash128(&compressed_buffer[0], size_compressed))
|
||||
throw Exception("Checksum doesn't match: corrupted data.", ErrorCodes::CHECKSUM_DOESNT_MATCH);
|
||||
|
||||
return size_compressed + sizeof(checksum);
|
||||
@ -157,6 +161,15 @@ public:
|
||||
delete qlz_state;
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Не проверять чексуммы.
|
||||
* Может использоваться, например, в тех случаях, когда сжатые данные пишет клиент,
|
||||
* который не умеет вычислять чексуммы, и вместо этого заполняет их нулями или чем угодно.
|
||||
*/
|
||||
void disableChecksumming()
|
||||
{
|
||||
disable_checksum = true;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -199,6 +199,10 @@ struct Settings
|
||||
M(SettingBool, enable_http_compression, 0) \
|
||||
/** Уровень сжатия - используется, если клиент по HTTP сказал, что он понимает данные, сжатые методом gzip или deflate */ \
|
||||
M(SettingInt64, http_zlib_compression_level, 3) \
|
||||
\
|
||||
/** При разжатии данных POST от клиента, сжатых родным форматом, не проверять чексуммы */ \
|
||||
M(SettingBool, http_native_compression_disable_checksumming_on_decompress, 0) \
|
||||
\
|
||||
/** Таймаут в секундах */ \
|
||||
M(SettingUInt64, resharding_barrier_timeout, 300) \
|
||||
|
||||
|
@ -142,9 +142,13 @@ void HTTPHandler::processQuery(Poco::Net::HTTPServerRequest & request, Poco::Net
|
||||
|
||||
/// Также данные могут быть сжаты несовместимым алгоритмом для внутреннего использования - это определяется параметром query_string.
|
||||
SharedPtr<ReadBuffer> in_post_maybe_compressed;
|
||||
bool in_post_compressed = false;
|
||||
|
||||
if (parse<bool>(params.get("decompress", "0")))
|
||||
{
|
||||
in_post_maybe_compressed = new CompressedReadBuffer(*in_post);
|
||||
in_post_compressed = true;
|
||||
}
|
||||
else
|
||||
in_post_maybe_compressed = in_post;
|
||||
|
||||
@ -231,6 +235,10 @@ void HTTPHandler::processQuery(Poco::Net::HTTPServerRequest & request, Poco::Net
|
||||
if (client_supports_http_compression)
|
||||
used_output.out->setCompressionLevel(context.getSettingsRef().http_zlib_compression_level);
|
||||
|
||||
/// Возможно, что выставлена настройка - не проверять чексуммы при разжатии данных от клиента, сжатых родным форматом.
|
||||
if (in_post_compressed && context.getSettingsRef().http_native_compression_disable_checksumming_on_decompress)
|
||||
static_cast<CompressedReadBuffer &>(*in_post_maybe_compressed).disableChecksumming();
|
||||
|
||||
context.setInterface(Context::Interface::HTTP);
|
||||
|
||||
Context::HTTPMethod http_method = Context::HTTPMethod::UNKNOWN;
|
||||
|
@ -0,0 +1,2 @@
|
||||
1
|
||||
1
|
4
dbms/tests/queries/0_stateless/00322_disable_checksumming.sh
Executable file
4
dbms/tests/queries/0_stateless/00322_disable_checksumming.sh
Executable file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo -ne '\x50\x74\x32\xf2\x59\xe9\x8a\xdb\x37\xc6\x4a\xa7\xfb\x22\xc4\x39''\x82\x13\x00\x00\x00\x09\x00\x00\x00''\x90SELECT 1\n' | curl -sS 'http://localhost:8123/?decompress=1' --data-binary @-
|
||||
echo -ne 'xxxxxxxxxxxxxxxx''\x82\x13\x00\x00\x00\x09\x00\x00\x00''\x90SELECT 1\n' | curl -sS 'http://localhost:8123/?decompress=1&http_native_compression_disable_checksumming_on_decompress=1' --data-binary @-
|
Loading…
Reference in New Issue
Block a user