mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 17:41:59 +00:00
Sending progress in HTTP headers (continued) [#CLICKHOUSE-32].
This commit is contained in:
parent
4aa90e908d
commit
48ae82e1c7
@ -14,6 +14,7 @@
|
||||
#include <DB/IO/ZlibDeflatingWriteBuffer.h>
|
||||
#include <DB/IO/HTTPCommon.h>
|
||||
#include <DB/Common/NetException.h>
|
||||
#include <DB/Common/Stopwatch.h>
|
||||
#include <DB/Core/Progress.h>
|
||||
|
||||
|
||||
@ -56,6 +57,8 @@ private:
|
||||
bool body_started_sending = false; /// If true, you could not add any headers.
|
||||
|
||||
Progress accumulated_progress;
|
||||
size_t send_progress_interval_ms = 100;
|
||||
Stopwatch progress_watch;
|
||||
|
||||
std::mutex mutex; /// progress callback could be called from different threads.
|
||||
|
||||
@ -143,18 +146,23 @@ public:
|
||||
if (body_started_sending)
|
||||
return;
|
||||
|
||||
/// Send all common headers before our special progress headers.
|
||||
startSendHeaders();
|
||||
|
||||
accumulated_progress.incrementPiecewiseAtomically(progress);
|
||||
|
||||
std::string progress_string;
|
||||
if (progress_watch.elapsed() >= send_progress_interval_ms * 1000000)
|
||||
{
|
||||
WriteBufferFromString progress_string_writer(progress_string);
|
||||
accumulated_progress.writeJSON(progress_string_writer);
|
||||
}
|
||||
progress_watch.restart();
|
||||
|
||||
*response_header_ostr << "X-ClickHouse-Progress: " << progress_string << "\r\n" << std::flush;
|
||||
/// Send all common headers before our special progress headers.
|
||||
startSendHeaders();
|
||||
|
||||
std::string progress_string;
|
||||
{
|
||||
WriteBufferFromString progress_string_writer(progress_string);
|
||||
accumulated_progress.writeJSON(progress_string_writer);
|
||||
}
|
||||
|
||||
*response_header_ostr << "X-ClickHouse-Progress: " << progress_string << "\r\n" << std::flush;
|
||||
}
|
||||
}
|
||||
|
||||
/// Send at least HTTP headers if no data has been sent yet.
|
||||
@ -187,6 +195,13 @@ public:
|
||||
add_cors_header = enable_cors;
|
||||
}
|
||||
|
||||
/// Don't send HTTP headers with progress more frequently.
|
||||
void setSendProgressInterval(size_t send_progress_interval_ms_)
|
||||
{
|
||||
send_progress_interval_ms = send_progress_interval_ms_;
|
||||
}
|
||||
|
||||
|
||||
~WriteBufferFromHTTPServerResponse()
|
||||
{
|
||||
if (!offset())
|
||||
|
@ -237,7 +237,10 @@ struct Settings
|
||||
M(SettingUInt64, output_format_pretty_max_rows, 10000) \
|
||||
\
|
||||
/** Use client timezone for interpreting DateTime string values, instead of adopting server timezone. */ \
|
||||
M(SettingBool, use_client_time_zone, false)
|
||||
M(SettingBool, use_client_time_zone, false) \
|
||||
\
|
||||
/** Do not send HTTP headers X-ClickHouse-Progress more frequently than at each specified interval. */ \
|
||||
M(SettingUInt64, http_headers_progress_interval_ms, 100) \
|
||||
|
||||
/// Всевозможные ограничения на выполнение запроса.
|
||||
Limits limits;
|
||||
|
@ -229,6 +229,8 @@ void HTTPHandler::processQuery(
|
||||
if (client_supports_http_compression)
|
||||
used_output.out->setCompressionLevel(context.getSettingsRef().http_zlib_compression_level);
|
||||
|
||||
used_output.out->setSendProgressInterval(context.getSettingsRef().http_headers_progress_interval_ms);
|
||||
|
||||
/// If 'http_native_compression_disable_checksumming_on_decompress' setting is turned on,
|
||||
/// checksums of client data compressed with internal algorithm are not checked.
|
||||
if (in_post_compressed && context.getSettingsRef().http_native_compression_disable_checksumming_on_decompress)
|
||||
|
Loading…
Reference in New Issue
Block a user