mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
dbms: fixed segfault when query was cancelled while merging aggregate states in calculation of TOTALS [#METR-14654].
This commit is contained in:
parent
8d6862fe9a
commit
66156f5085
@ -39,6 +39,9 @@ public:
|
||||
* Реализация по-умолчанию берёт их из себя или из первого дочернего источника, в котором они есть.
|
||||
* Переопределённый метод может провести некоторые вычисления. Например, применить выражение к totals дочернего источника.
|
||||
* Тотальных значений может не быть - тогда возвращается пустой блок.
|
||||
*
|
||||
* Вызывайте этот метод только после получения всех данных с помощью read,
|
||||
* иначе будут проблемы, если какие-то данные в это же время вычисляются в другом потоке.
|
||||
*/
|
||||
virtual const Block & getTotals();
|
||||
|
||||
|
@ -301,10 +301,14 @@ void TCPHandler::processOrdinaryQuery()
|
||||
}
|
||||
}
|
||||
|
||||
/// Если закончились данные, то отправим данные профайлинга и тотальные значения до
|
||||
/// последнего нулевого блока, чтобы иметь возможность использовать
|
||||
/// эту информацию в выводе суффикса output stream'а
|
||||
if (!block)
|
||||
/** Если закончились данные, то отправим данные профайлинга и тотальные значения до
|
||||
* последнего нулевого блока, чтобы иметь возможность использовать
|
||||
* эту информацию в выводе суффикса output stream'а.
|
||||
* Если запрос был прерван, то вызывать методы sendTotals и другие нельзя,
|
||||
* потому что мы прочитали ещё не все данные, и в это время могут производиться какие-то
|
||||
* вычисления в других потоках.
|
||||
*/
|
||||
if (!block && !isQueryCancelled())
|
||||
{
|
||||
sendTotals();
|
||||
sendExtremes();
|
||||
|
Loading…
Reference in New Issue
Block a user