Исключение сброса Cassandra: существующее соединение было принудительно закрыто удаленным хостом - PullRequest
3 голосов
/ 09 декабря 2011

Я столкнулся с проблемой при вставке большого значения в столбец, значение byte[] длина 25130744 (преобразована из DataSet в byte[]) и дает мне исключение: IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

Кто-нибудь знает причину? Маленькие значения столбца работают нормально. Существуют ли ограничения на размер данных или время ожидания запроса на сервере Aquiles или Cassandra?

Cassandra version: 1.0.2, Aquiles version: 1.0, .NET Framework 4.0

Вот подробная информация:

Server Error in '/test' Application.

An existing connection was forcibly closed by the remote host

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Source Error: 


Line 482: public void recv_insert()
Line 483: {
Line 484: TMessage msg = iprot_.ReadMessageBegin();
Line 485: if (msg.Type == TMessageType.Exception) {
Line 486: TApplicationException x = TApplicationException.Read(iprot_);

Source File: D:\codeplex\Aquiles\trunk\Aquiles.Cassandra10\Apache\Cassandra\Cassandra.cs Line: 484 

Stack Trace: 


[SocketException (0x2746): An existing connection was forcibly closed by the remote host]
System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +245

[IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.]
System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +7768653
Thrift.Transport.TStreamTransport.Read(Byte[] buf, Int32 off, Int32 len) in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Transport\TStreamTransport.cs:84
Thrift.Transport.TTransport.ReadAll(Byte[] buf, Int32 off, Int32 len) in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Transport\TTransport.cs:54
Thrift.Transport.TFramedTransport.ReadFrame() in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Transport\TFramedTransport.cs:90
Thrift.Transport.TFramedTransport.Read(Byte[] buf, Int32 off, Int32 len) in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Transport\TFramedTransport.cs:83
Thrift.Transport.TTransport.ReadAll(Byte[] buf, Int32 off, Int32 len) in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Transport\TTransport.cs:54
Thrift.Protocol.TBinaryProtocol.ReadI32() in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Protocol\TBinaryProtocol.cs:338
Thrift.Protocol.TBinaryProtocol.ReadMessageBegin() in d:\thrift-0.6.0\thrift-0.6.0\lib\csharp\src\Protocol\TBinaryProtocol.cs:220
Apache.Cassandra.Client.recv_insert() in D:\codeplex\Aquiles\trunk\Aquiles.Cassandra10\Apache\Cassandra\Cassandra.cs:484
DataAccessLib.CassandraAccess.<>c__DisplayClass28.<InsertCommand>b__27(Client client) in C:\TestProject\Class1.cs:746

[ExecutionBlockException: Exception 'Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.' during executing command. See inner exception for further details.]
Aquiles.Core.Cluster.Impl.DefaultCluster.Execute(Delegate executionBlock, String keyspaceName, ConnectionConfig overrideConnectionConfig) in D:\codeplex\Aquiles\trunk\Aquiles.Core\Cluster\Impl\DefaultCluster.cs:191

1 Ответ

3 голосов
/ 10 декабря 2011

В cassandra.yaml есть настройка, управляющая максимальным размером сообщения.По умолчанию это 16 мегабайт.

thrift_max_message_length_in_mb: 16

Вы можете обновить эту настройку для отправки больших сообщений.Помните, что этот параметр применяется ко всему сообщению, включая некоторые накладные расходы, поэтому вам нужно будет установить его выше, чем фактический размер отправляемого столбца.

Теоретически вы можете увеличить этот параметр до гигабайтного диапазона., но это почти наверняка не очень хорошая идея.Все экономное сообщение должно будет поместиться в памяти, и параметры тайм-аута rpc по умолчанию также могут быть изменены.

Я бы посоветовал разбить ваш столбец на меньшие вложенные столбцы, а не увеличивать его.

...