-
Notifications
You must be signed in to change notification settings - Fork 292
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for SqlConnectionOverrides for OpenAsync() API #2433
Add support for SqlConnectionOverrides for OpenAsync() API #2433
Conversation
src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs
Outdated
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Based on my current understanding, the existing default is to not apply transient fault handling for OpenAsync. This changes the default to applying transient fault handling.
It seems like there are two options if we want to make a change now:
- modify this change to retain the current default behavior
- do this change, but only apply it on a new (major?) version
However, given what we've learned about the slow, serial nature of OpenAsync, part of me feels like we should wait to do this change until general async performance is improved.
I would advocate for waiting.
@cheenamalhotra Could you wrap this up for the preview 1 with the outstanding comments? Generally, this looks good to me and I'd rather not pushing it to the next preview. |
# Conflicts: # doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml
/azp run |
Azure Pipelines successfully started running 1 pipeline(s). |
@@ -99,6 +99,9 @@ override protected DbConnectionInternal CreateConnection(DbConnectionOptions opt | |||
// NOTE: Retrieve <UserInstanceName> here. This user instance name will be used below to connect to the Sql Express User Instance. | |||
instanceName = sseConnection.InstanceName; | |||
|
|||
// Set future transient fault handling based on connection options | |||
sqlOwningConnection._applyTransientFaultHandling = opt != null && opt.ConnectRetryCount > 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This had to be moved here as in async flow, connection attempt happens on another thread and the value gets reset very quickly to be captured again when retry is attempted. So fail fast wasn't really working. This change makes sure the value gets reset after the login flow is complete.
cc @David-Engel for second set of eyes
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2433 +/- ##
==========================================
- Coverage 72.48% 72.44% -0.04%
==========================================
Files 288 288
Lines 59493 59497 +4
==========================================
- Hits 43122 43104 -18
- Misses 16371 16393 +22
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
As the name suggests, introduces new API:
Previously, we skipped addiing overrides to OpenAsync in PR #463 due to no transient fault handling, but with recent PR #1983 we now enable transient fault handling by default for
OpenAsync()
too.To support fail fast behavior in OpenAsync(), we need to allow passing
SqlConnectionOverrides
inOpenAsync()
too.Additional context:
dotnet/efcore#33399
#29