dbms: development [#CONV-2944].

This commit is contained in:
Alexey Milovidov 2012-10-20 06:40:55 +00:00
parent e35138b09d
commit 3f62b5bb2e
3 changed files with 16 additions and 3 deletions

View File

@ -102,6 +102,8 @@ public:
finish = true; finish = true;
cancel(); cancel();
// TODO: может быть, здесь может возникнуть блокировка, если очередь переполнена, и какой-нибудь из потоков попытается положить в неё блок.
for (ThreadsData::iterator it = threads_data.begin(); it != threads_data.end(); ++it) for (ThreadsData::iterator it = threads_data.begin(); it != threads_data.end(); ++it)
it->thread->join(); it->thread->join();

View File

@ -22,6 +22,9 @@ void Connection::connect()
{ {
try try
{ {
if (connected)
disconnect();
LOG_TRACE(log, "Connecting"); LOG_TRACE(log, "Connecting");
socket.connect(Poco::Net::SocketAddress(host, port), connect_timeout); socket.connect(Poco::Net::SocketAddress(host, port), connect_timeout);
@ -161,9 +164,6 @@ bool Connection::ping()
} }
catch (const Poco::Exception & e) catch (const Poco::Exception & e)
{ {
/// Закроем соединение, чтобы не было рассинхронизации.
disconnect();
LOG_TRACE(log, e.displayText()); LOG_TRACE(log, e.displayText());
return false; return false;
} }

View File

@ -166,7 +166,10 @@ void TCPHandler::processOrdinaryQuery()
break; break;
} }
else if (isQueryCancelled()) else if (isQueryCancelled())
{
async_in.cancel(); async_in.cancel();
break;
}
} }
sendData(block); sendData(block);
@ -263,6 +266,14 @@ bool TCPHandler::receivePacket()
out->next(); out->next();
break; break;
case Protocol::Client::Cancel:
/// Если пришёл запоздавший пакет Cancel, то игнорируем его.
break;
case Protocol::Client::Hello:
throw Exception("Unexpected packet " + String(Protocol::Client::toString(Protocol::Client::Enum(packet_type))) + " received from client",
ErrorCodes::UNEXPECTED_PACKET_FROM_CLIENT);
default: default:
throw Exception("Unknown packet from client", ErrorCodes::UNKNOWN_PACKET_FROM_CLIENT); throw Exception("Unknown packet from client", ErrorCodes::UNKNOWN_PACKET_FROM_CLIENT);
} }