MySqlConnector icon indicating copy to clipboard operation
MySqlConnector copied to clipboard

ServerSession is not connected, this happens when I do a high-concurrency sql query

Open Zhu-Zi opened this issue 7 years ago • 3 comments
trafficstars

This is my codes:

public static MySqlConnection GetMySqlConnection(string connectionString, bool open = false, bool convertZeroDatetime = false, bool allowZeroDatetime = false)
{
       var csb = new MySqlConnectionStringBuilder(connectionString)
       {
            AllowZeroDateTime = allowZeroDatetime,
            ConvertZeroDateTime = convertZeroDatetime
       };
       var conn = new MySqlConnection(csb.ConnectionString);
       if (open) conn.Open();
       return conn;
}
using (var conn = GetMySqlConnection(connStr, true, false, false))
{
    try
    {
        var sql = "SELECT * FROM TABLENAME";
        var info = conn.Query<KlineResponseModel>(sql);

        if (info.Count() > 0)
        {
            result = info.ToList();
        }
    }
        catch (Exception ex)
        {
            throw ex;
        }

        conn.Close();
        conn.Dispose();
}

When I use multithreading to call the second piece of code, the program will throw "ServerSession is not connected" after a period of execution.

Zhu-Zi avatar Oct 31 '18 05:10 Zhu-Zi

What is the full call stack in the exception?

bgrainger avatar Oct 31 '18 05:10 bgrainger

What is the full call stack in the exception?

   at MySqlConnector.Core.ServerSession.VerifyConnected() in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 665
   at MySqlConnector.Core.ServerSession.ReceiveReplyAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 610
--- End of stack trace from previous location where exception was thrown ---
   at MySqlConnector.Core.ServerSession.TryAsyncContinuation(Task`1 task) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 1154
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
   at MySqlConnector.Core.ResultSet.<ScanRowAsync>g__ScanRowAsyncAwaited|9_0(Task`1 payloadTask, Row row_, CancellationToken token) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 223
   at MySqlConnector.Core.ResultSet.ReadAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 181
   at MySqlConnector.Core.ResultSet.ReadEntireAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 167
   at MySql.Data.MySqlClient.MySqlDataReader.NextResultAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 56
   at MySql.Data.MySqlClient.MySqlDataReader.DoClose() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 430
   at MySql.Data.MySqlClient.MySqlDataReader.Dispose(Boolean disposing) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 294
   at System.Data.Common.DbDataReader.Dispose()
   at Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, CommandDefinition command, Type effectiveType)+<>m__Finally1() in C:\projects\dapper\Dapper\SqlMapper.cs:line 1129
   at Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, CommandDefinition command, Type effectiveType)+System.IDisposable.Dispose()
   at Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, CommandDefinition command, Type effectiveType)+MoveNext() in C:\projects\dapper\Dapper\SqlMapper.cs:line 1132
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in C:\projects\dapper\Dapper\SqlMapper.cs:line 723
   at NewRTService.Helper.MySQLHelper.GetKlineDataBySymbol(String connStr, String tableName, String exchangeTradeCoinId) in D:\Code\Company\GitLab\QuantLab.BitCoin\QuantLab.BitCoin.NewRTService\QuantLab.BitCoin.NewRTService\NewRTService\Helper\MySQLHelper.cs:line 252
line 252 is "var info = conn.Query<KlineResponseModel>(sql);"

Zhu-Zi avatar Oct 31 '18 06:10 Zhu-Zi

@Zhu-Zi Did you ever figure this out? If so, how?

sander1095 avatar Nov 04 '21 13:11 sander1095

Closing error reported on a very old version of the library without a consistent repro.

bgrainger avatar Dec 23 '22 18:12 bgrainger