Skip to content

Commit bfbdd30

Browse files
authored
Connect timeout propagated through pool (dotnet#4270)
1 parent 045adc5 commit bfbdd30

29 files changed

Lines changed: 1757 additions & 268 deletions

Directory.Packages.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,14 @@
124124

125125
<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))">
126126
<PackageVersion Include="Microsoft.Bcl.Cryptography" Version="9.0.13" />
127+
<PackageVersion Include="Microsoft.Bcl.TimeProvider" Version="9.0.16" />
127128
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="9.0.13" />
128129
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="9.0.13" />
129130
</ItemGroup>
130131

131132
<ItemGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))">
132133
<PackageVersion Include="Microsoft.Bcl.Cryptography" Version="8.0.0" />
134+
<PackageVersion Include="Microsoft.Bcl.TimeProvider" Version="8.0.1" />
133135
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="8.0.1" />
134136
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="8.0.1" />
135137
</ItemGroup>

src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@
289289
<Reference Include="System.Transactions" />
290290

291291
<PackageReference Include="Microsoft.Bcl.Cryptography" />
292+
<PackageReference Include="Microsoft.Bcl.TimeProvider" />
292293
<PackageReference Include="Microsoft.Data.SqlClient.SNI" ExcludeAssets="compile" />
293294
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
294295
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" />

src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.nuspec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
<dependencies>
3838
<group targetFramework="net462">
3939
<dependency id="Microsoft.Bcl.Cryptography" version="8.0.0" />
40+
<dependency id="Microsoft.Bcl.TimeProvider" version="8.0.1" />
4041
<dependency id="Microsoft.Data.SqlClient.Extensions.Abstractions" version="$AbstractionsPackageVersion$" />
4142
<dependency id="Microsoft.Data.SqlClient.Internal.Logging" version="$LoggingPackageVersion$" />
4243
<dependency id="Microsoft.Data.SqlClient.SNI" version="6.0.2" />
@@ -79,6 +80,7 @@
7980
</group>
8081
<group targetFramework="netstandard2.0">
8182
<dependency id="Microsoft.Bcl.Cryptography" version="8.0.0" />
83+
<dependency id="Microsoft.Bcl.TimeProvider" version="8.0.1" />
8284
<dependency id="Microsoft.Data.SqlClient.Extensions.Abstractions" version="$AbstractionsPackageVersion$" />
8385
<dependency id="Microsoft.Data.SqlClient.Internal.Logging" version="$LoggingPackageVersion$" />
8486
<dependency id="Microsoft.Data.SqlClient.SNI.runtime" version="6.0.2" exclude="Compile" />

src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ protected internal override Task<DataTable> GetSchemaAsync(
6262
internal override bool TryOpenConnection(
6363
DbConnection outerConnection,
6464
SqlConnectionFactory connectionFactory,
65-
TaskCompletionSource<DbConnectionInternal> retry) =>
66-
TryOpenConnectionInternal(outerConnection, connectionFactory, retry);
65+
TaskCompletionSource<DbConnectionInternal> retry,
66+
TimeoutTimer timeout) =>
67+
TryOpenConnectionInternal(outerConnection, connectionFactory, retry, timeout);
6768

6869
/// <inheritdoc/>
6970
internal override void ResetConnection() => throw ADP.ClosedConnectionError();
@@ -78,7 +79,8 @@ protected DbConnectionBusy(ConnectionState state) : base(state, true, false)
7879
internal override bool TryOpenConnection(
7980
DbConnection outerConnection,
8081
SqlConnectionFactory connectionFactory,
81-
TaskCompletionSource<DbConnectionInternal> retry)
82+
TaskCompletionSource<DbConnectionInternal> retry,
83+
TimeoutTimer timeout)
8284
=> throw ADP.ConnectionAlreadyOpen(State);
8385
}
8486

@@ -119,13 +121,15 @@ internal override void CloseConnection(DbConnection owningObject, SqlConnectionF
119121
internal override bool TryReplaceConnection(
120122
DbConnection outerConnection,
121123
SqlConnectionFactory connectionFactory,
122-
TaskCompletionSource<DbConnectionInternal> retry) =>
123-
TryOpenConnection(outerConnection, connectionFactory, retry);
124+
TaskCompletionSource<DbConnectionInternal> retry,
125+
TimeoutTimer timeout) =>
126+
TryOpenConnection(outerConnection, connectionFactory, retry, timeout);
124127

125128
internal override bool TryOpenConnection(
126129
DbConnection outerConnection,
127130
SqlConnectionFactory connectionFactory,
128-
TaskCompletionSource<DbConnectionInternal> retry)
131+
TaskCompletionSource<DbConnectionInternal> retry,
132+
TimeoutTimer timeout)
129133
{
130134
if (retry == null || !retry.Task.IsCompleted)
131135
{
@@ -173,7 +177,8 @@ private DbConnectionClosedPreviouslyOpened() : base(ConnectionState.Closed, true
173177
internal override bool TryReplaceConnection(
174178
DbConnection outerConnection,
175179
SqlConnectionFactory connectionFactory,
176-
TaskCompletionSource<DbConnectionInternal> retry) =>
177-
TryOpenConnection(outerConnection, connectionFactory, retry);
180+
TaskCompletionSource<DbConnectionInternal> retry,
181+
TimeoutTimer timeout) =>
182+
TryOpenConnection(outerConnection, connectionFactory, retry, timeout);
178183
}
179184
}

src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -686,14 +686,6 @@ internal void MakePooledConnection(IDbConnectionPool connectionPool)
686686
Pool = connectionPool;
687687
}
688688

689-
internal virtual void OpenConnection(DbConnection outerConnection, SqlConnectionFactory connectionFactory)
690-
{
691-
if (!TryOpenConnection(outerConnection, connectionFactory, null))
692-
{
693-
throw ADP.InternalError(ADP.InternalErrorCode.SynchronousConnectReturnedPending);
694-
}
695-
}
696-
697689
internal void PostPop(DbConnection newOwner)
698690
{
699691
// Called by IDbConnectionPool right after it pulls this from its pool, we take this
@@ -800,15 +792,17 @@ internal void SetInStasis()
800792
internal virtual bool TryOpenConnection(
801793
DbConnection outerConnection,
802794
SqlConnectionFactory connectionFactory,
803-
TaskCompletionSource<DbConnectionInternal> retry)
795+
TaskCompletionSource<DbConnectionInternal> retry,
796+
TimeoutTimer timeout)
804797
{
805798
throw ADP.ConnectionAlreadyOpen(State);
806799
}
807800

808801
internal virtual bool TryReplaceConnection(
809802
DbConnection outerConnection,
810803
SqlConnectionFactory connectionFactory,
811-
TaskCompletionSource<DbConnectionInternal> retry)
804+
TaskCompletionSource<DbConnectionInternal> retry,
805+
TimeoutTimer timeout)
812806
{
813807
throw ADP.MethodNotImplemented();
814808
}
@@ -910,7 +904,8 @@ protected virtual void ReleaseAdditionalLocksForClose(bool lockToken)
910904
protected bool TryOpenConnectionInternal(
911905
DbConnection outerConnection,
912906
SqlConnectionFactory connectionFactory,
913-
TaskCompletionSource<DbConnectionInternal> retry)
907+
TaskCompletionSource<DbConnectionInternal> retry,
908+
TimeoutTimer timeout)
914909
{
915910
// ?->Connecting: prevent set_ConnectionString during Open
916911
if (connectionFactory.SetInnerConnectionFrom(outerConnection, DbConnectionClosedConnecting.SingletonInstance, this))
@@ -919,7 +914,7 @@ protected bool TryOpenConnectionInternal(
919914
try
920915
{
921916
connectionFactory.PermissionDemand(outerConnection);
922-
if (!connectionFactory.TryGetConnection(outerConnection, retry, this, out openConnection))
917+
if (!connectionFactory.TryGetConnection(outerConnection, retry, this, timeout, out openConnection))
923918
{
924919
return false;
925920
}

0 commit comments

Comments
 (0)