The MySqlConnection object always seem to return a State of open even when connection is lost. My code currently checks this before querying to attempt an auto-reconnect. This code worked fine with the older MySql.Data connector.
I'm sure I saw an issue which said this bug was fixed, but I'm still getting it in NuGet version 0.35.0.
Symptoms:
MySqlConnection.State is always Open even when connection is lost
How to trigger
Connect to MySQL then shutdown server while application is running, causing the connection to drop. Start up MySQL server again does not resolve issue as user code thinks state is still Open.
Stack Trace:
[mysql] System.Net.Sockets.SocketException (0x80004005): An existing connection was forcibly closed by the remote host
at MySqlConnector.Utilities.SocketAwaitable.GetResult() in C:\projects\mysqlconnector\src\MySqlConnector\Utilities\SocketAwaitable.cs:line 30
at MySqlConnector.Protocol.Serialization.SocketByteHandler.<<WriteBytesAsync>g__DoWriteBytesAsync|7_0>d.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\Serialization\SocketByteHandler.cs:line 105
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()
at MySqlConnector.Utilities.ValueTaskExtensions.<ContinueWith>d__0`2.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Utilities\ValueTaskExtensions.cs:line 8
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MySqlConnector.Core.ServerSession.TryAsyncContinuation(Task`1 task) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 999
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()
at MySqlConnector.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Core\TextCommandExecutor.cs:line 72
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
<omitted>
[api] GET /part -> OK
[mysql] System.InvalidOperationException: Expected state to be Connected but was Failed.
at MySqlConnector.Core.ServerSession.VerifyState(State state) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 1035
at MySqlConnector.Core.ServerSession.StartQuerying(MySqlCommand command) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 137
at MySqlConnector.Core.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext() in C:\projects\mysqlconnector\src\MySqlConnector\Core\TextCommandExecutor.cs:line 69
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
<omitted>
The MySqlConnection object always seem to return a State of open even when connection is lost. My code currently checks this before querying to attempt an auto-reconnect. This code worked fine with the older MySql.Data connector.
I'm sure I saw an issue which said this bug was fixed, but I'm still getting it in NuGet version 0.35.0.
Symptoms:
MySqlConnection.State is always Open even when connection is lost
How to trigger
Connect to MySQL then shutdown server while application is running, causing the connection to drop. Start up MySQL server again does not resolve issue as user code thinks state is still Open.
Stack Trace: