dbms: cancelling of remote/distributed queries [#CONV-2944].

This commit is contained in:
Alexey Milovidov 2012-10-16 17:32:59 +00:00
parent 41c04b36d8
commit 7f4d9e188c

View File

@ -14,7 +14,7 @@ class RemoteBlockInputStream : public IProfilingBlockInputStream
{
public:
RemoteBlockInputStream(Connection & connection_, const String & query_, QueryProcessingStage::Enum stage_ = QueryProcessingStage::Complete)
: connection(connection_), query(query_), stage(stage_), sent_query(false), finished(false)
: connection(connection_), query(query_), stage(stage_), sent_query(false), finished(false), cancelled(false)
{
}
@ -28,6 +28,17 @@ public:
while (true)
{
/// Периодически (каждую секунду) проверяем, не запрошено ли прервать запрос.
while (!cancelled && !connection.poll(1000000))
{
if (is_cancelled_callback && is_cancelled_callback())
{
/// Если да - запросим удалённый сервер тоже прервать запрос.
cancelled = true;
connection.sendCancel();
}
}
Connection::Packet packet = connection.receivePacket();
switch (packet.type)
@ -106,6 +117,7 @@ private:
bool sent_query;
bool finished;
bool cancelled;
};
}