From eb423fd4b816891135ac41f85279957cda022385 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 11:49:17 -0800 Subject: [PATCH 01/31] Add abstract class to define pool interface. --- .../src/Microsoft.Data.SqlClient.csproj | 3 + .../netfx/src/Microsoft.Data.SqlClient.csproj | 3 + .../Data/ProviderBase/DbConnectionPool.cs | 57 ++++----- .../Data/ProviderBase/IDbConnectionPool.cs | 110 ++++++++++++++++++ 4 files changed, 139 insertions(+), 34 deletions(-) create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index d2bdc92c05..ac4e16afb0 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -77,6 +77,9 @@ Microsoft\Data\ProviderBase\DbConnectionFactory.cs + + Microsoft\Data\ProviderBase\IDbConnectionPool.cs + Microsoft\Data\ProviderBase\DbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 10fb3ae21c..0d3eaa4b2e 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -265,6 +265,9 @@ Microsoft\Data\ProviderBase\DbConnectionInternal.cs + + Microsoft\Data\ProviderBase\IDbConnectionPool.cs + Microsoft\Data\ProviderBase\DbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs index 8a41b3d428..810a0ad385 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs @@ -20,7 +20,7 @@ namespace Microsoft.Data.ProviderBase { - internal sealed class DbConnectionPool + internal sealed class DbConnectionPool : IDbConnectionPool { private enum State { @@ -418,9 +418,6 @@ internal WaitHandle[] GetHandles(bool withCreate) private readonly List _objectList; private int _totalObjects; - private static int _objectTypeCount; // EventSource counter - internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); - // only created by DbConnectionPoolGroup.GetConnectionPool internal DbConnectionPool( DbConnectionFactory connectionFactory, @@ -474,17 +471,17 @@ private int CreationTimeout get { return PoolGroupOptions.CreationTimeout; } } - internal int Count + internal override int Count { get { return _totalObjects; } } - internal DbConnectionFactory ConnectionFactory + internal override DbConnectionFactory ConnectionFactory { get { return _connectionFactory; } } - internal bool ErrorOccurred + internal override bool ErrorOccurred { get { return _errorOccurred; } } @@ -494,7 +491,7 @@ private bool HasTransactionAffinity get { return PoolGroupOptions.HasTransactionAffinity; } } - internal TimeSpan LoadBalanceTimeout + internal override TimeSpan LoadBalanceTimeout { get { return PoolGroupOptions.LoadBalanceTimeout; } } @@ -522,12 +519,12 @@ private bool NeedToReplenish } } - internal DbConnectionPoolIdentity Identity + internal override DbConnectionPoolIdentity Identity { get { return _identity; } } - internal bool IsRunning + internal override bool IsRunning { get { return State.Running == _state; } } @@ -542,32 +539,24 @@ private int MinPoolSize get { return PoolGroupOptions.MinPoolSize; } } - internal int ObjectID - { - get - { - return _objectID; - } - } - #if NETFRAMEWORK - internal DbConnectionPoolCounters PerformanceCounters + internal override DbConnectionPoolCounters PerformanceCounters { get { return _connectionFactory.PerformanceCounters; } } #endif - internal DbConnectionPoolGroup PoolGroup + internal override DbConnectionPoolGroup PoolGroup { get { return _connectionPoolGroup; } } - internal DbConnectionPoolGroupOptions PoolGroupOptions + internal override DbConnectionPoolGroupOptions PoolGroupOptions { get { return _connectionPoolGroupOptions; } } - internal DbConnectionPoolProviderInfo ProviderInfo + internal override DbConnectionPoolProviderInfo ProviderInfo { get { return _connectionPoolProviderInfo; } } @@ -575,7 +564,7 @@ internal DbConnectionPoolProviderInfo ProviderInfo /// /// Return the pooled authentication contexts. /// - internal ConcurrentDictionary AuthenticationContexts + internal override ConcurrentDictionary AuthenticationContexts { get { @@ -583,7 +572,7 @@ internal ConcurrentDictionary {0}, Clearing.", ObjectID); DbConnectionInternal obj; @@ -1039,7 +1028,7 @@ private void DeactivateObject(DbConnectionInternal obj) Debug.Assert(rootTxn == true || returnToGeneralPool == true || destroyObject == true); } - internal void DestroyObject(DbConnectionInternal obj) + internal override void DestroyObject(DbConnectionInternal obj) { // A connection with a delegated transaction cannot be disposed of // until the delegated transaction has actually completed. Instead, @@ -1234,7 +1223,7 @@ private void WaitForPendingOpen() } while (_pendingOpens.TryPeek(out next)); } - internal bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection) + internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection) { uint waitForMultipleObjectsTimeout = 0; bool allowCreate = false; @@ -1516,7 +1505,7 @@ private void PrepareConnection(DbConnection owningObject, DbConnectionInternal o /// Options used to create the new connection /// Inner connection that will be replaced /// A new inner connection that is attached to the - internal DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) + internal override DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) { #if NETFRAMEWORK PerformanceCounters.SoftConnectsPerSecond.Increment(); @@ -1752,7 +1741,7 @@ private void PoolCreateRequest(object state) } } - internal void PutNewObject(DbConnectionInternal obj) + internal override void PutNewObject(DbConnectionInternal obj) { Debug.Assert(obj != null, "why are we adding a null object to the pool?"); @@ -1768,7 +1757,7 @@ internal void PutNewObject(DbConnectionInternal obj) } - internal void PutObject(DbConnectionInternal obj, object owningObject) + internal override void PutObject(DbConnectionInternal obj, object owningObject) { Debug.Assert(obj != null, "null obj?"); @@ -1800,7 +1789,7 @@ internal void PutObject(DbConnectionInternal obj, object owningObject) DeactivateObject(obj); } - internal void PutObjectFromTransactedPool(DbConnectionInternal obj) + internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) { Debug.Assert(obj != null, "null pooledObject?"); Debug.Assert(obj.EnlistedTransaction == null, "pooledObject is still enlisted?"); @@ -1907,7 +1896,7 @@ private bool ReclaimEmancipatedObjects() return emancipatedObjectFound; } - internal void Startup() + internal override void Startup() { SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, CleanupWait={1}", ObjectID, _cleanupWait); _cleanupTimer = CreateCleanupTimer(); @@ -1918,7 +1907,7 @@ internal void Startup() } } - internal void Shutdown() + internal override void Shutdown() { SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); _state = State.ShuttingDown; @@ -1936,7 +1925,7 @@ internal void Shutdown() // that is implemented inside DbConnectionPool. This method's counterpart (PutTransactedObject) should // only be called from DbConnectionPool.DeactivateObject and thus the plumbing to provide access to // other objects is unnecessary (hence the asymmetry of Ended but no Begin) - internal void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) + internal override void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) { Debug.Assert(transaction != null, "null transaction?"); Debug.Assert(transactedObject != null, "null transactedObject?"); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs new file mode 100644 index 0000000000..e5002f949d --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs @@ -0,0 +1,110 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Concurrent; +using System.Data.Common; +using System.Threading.Tasks; +using System.Transactions; +using Microsoft.Data.Common; + +namespace Microsoft.Data.ProviderBase +{ + internal abstract class IDbConnectionPool + { + private static int _objectTypeCount; // EventSource counter + internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); + + internal int ObjectID + { + get + { + return _objectID; + } + } + + internal abstract int Count + { + get; + } + + internal abstract DbConnectionFactory ConnectionFactory + { + get; + } + + internal abstract bool ErrorOccurred + { + get; + } + + internal abstract TimeSpan LoadBalanceTimeout + { + get; + } + + internal abstract DbConnectionPoolIdentity Identity + { + get; + } + + internal abstract bool IsRunning + { + get; + } + +#if NETFRAMEWORK + internal abstract DbConnectionPoolCounters PerformanceCounters + { + get; + } +#endif + internal abstract DbConnectionPoolGroup PoolGroup + { + get; + } + + internal abstract DbConnectionPoolGroupOptions PoolGroupOptions + { + get; + } + + internal abstract DbConnectionPoolProviderInfo ProviderInfo + { + get; + } + + internal abstract ConcurrentDictionary AuthenticationContexts + { + get; + } + + internal abstract bool UseLoadBalancing + { + get; + } + + internal abstract void Clear(); + + internal abstract void DestroyObject(DbConnectionInternal obj); + + internal abstract bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection); + + internal abstract DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection); + + internal abstract void PutNewObject(DbConnectionInternal obj); + + internal abstract void PutObject(DbConnectionInternal obj, object owningObject); + + internal abstract void PutObjectFromTransactedPool(DbConnectionInternal obj); + + internal abstract void Startup(); + + internal abstract void Shutdown(); + + internal abstract void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject); + + + } +} From 306efa56fac111e8e6ce0be644c6d54fc3e78706 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 13:32:47 -0800 Subject: [PATCH 02/31] Code cleanup --- .../Data/ProviderBase/DbConnectionPool.cs | 26 +++++++++---------- .../Data/ProviderBase/IDbConnectionPool.cs | 6 +++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs index 810a0ad385..1f8e61e7cc 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs @@ -9,8 +9,6 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; -using System.Runtime.ConstrainedExecution; -using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; @@ -362,17 +360,17 @@ internal WaitHandle[] GetHandles(bool withCreate) } } - private const int MAX_Q_SIZE = (int)0x00100000; + private const int MAX_Q_SIZE = 0x00100000; // The order of these is important; we want the WaitAny call to be signaled // for a free object before a creation signal. Only the index first signaled // object is returned from the WaitAny call. - private const int SEMAPHORE_HANDLE = (int)0x0; - private const int ERROR_HANDLE = (int)0x1; - private const int CREATION_HANDLE = (int)0x2; - private const int BOGUS_HANDLE = (int)0x3; + private const int SEMAPHORE_HANDLE = 0x0; + private const int ERROR_HANDLE = 0x1; + private const int CREATION_HANDLE = 0x2; + private const int BOGUS_HANDLE = 0x3; - private const int WAIT_ABANDONED = (int)0x80; + private const int WAIT_ABANDONED = 0x80; private const int ERROR_WAIT_DEFAULT = 5 * 1000; // 5 seconds @@ -511,7 +509,7 @@ private bool NeedToReplenish if (totalObjects < MinPoolSize) return true; - int freeObjects = (_stackNew.Count + _stackOld.Count); + int freeObjects = _stackNew.Count + _stackOld.Count; int waitingRequests = _waitCount; bool needToReplenish = (freeObjects < waitingRequests) || ((freeObjects == waitingRequests) && (totalObjects > 1)); @@ -606,7 +604,7 @@ private void CleanupCallback(object state) // Destroy free objects that put us above MinPoolSize from old stack. while (Count > MinPoolSize) - { + { // While above MinPoolSize... if (_waitHandles.PoolSemaphore.WaitOne(0, false)) { @@ -1429,17 +1427,17 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj } break; - case (WAIT_ABANDONED + SEMAPHORE_HANDLE): + case WAIT_ABANDONED + SEMAPHORE_HANDLE: SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Semaphore handle abandonded.", ObjectID); Interlocked.Decrement(ref _waitCount); throw new AbandonedMutexException(SEMAPHORE_HANDLE, _waitHandles.PoolSemaphore); - case (WAIT_ABANDONED + ERROR_HANDLE): + case WAIT_ABANDONED + ERROR_HANDLE: SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Error handle abandonded.", ObjectID); Interlocked.Decrement(ref _waitCount); throw new AbandonedMutexException(ERROR_HANDLE, _waitHandles.ErrorEvent); - case (WAIT_ABANDONED + CREATION_HANDLE): + case WAIT_ABANDONED + CREATION_HANDLE: SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creation handle abandoned.", ObjectID); Interlocked.Decrement(ref _waitCount); throw new AbandonedMutexException(CREATION_HANDLE, _waitHandles.CreationSemaphore); @@ -1561,7 +1559,7 @@ private DbConnectionInternal GetFromGeneralPool() PerformanceCounters.NumberOfFreeConnections.Decrement(); #endif } - return (obj); + return obj; } private DbConnectionInternal GetFromTransactedPool(out Transaction transaction) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs index e5002f949d..d335b92689 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs @@ -24,6 +24,7 @@ internal int ObjectID } } + #region Abstract Properties internal abstract int Count { get; @@ -84,7 +85,9 @@ internal abstract bool UseLoadBalancing { get; } + #endregion + #region Abstract Methods internal abstract void Clear(); internal abstract void DestroyObject(DbConnectionInternal obj); @@ -104,7 +107,6 @@ internal abstract bool UseLoadBalancing internal abstract void Shutdown(); internal abstract void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject); - - + #endregion } } From e2b96155d1cb2867dc55ec7e32c49051e03e5948 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 14:59:01 -0800 Subject: [PATCH 03/31] Refactoring pool state and cross-instance access. --- .../src/Microsoft.Data.SqlClient.csproj | 3 ++ .../netfx/src/Microsoft.Data.SqlClient.csproj | 3 ++ .../Data/ProviderBase/DbConnectionPool.cs | 50 ++++++------------- .../ProviderBase/DbConnectionPoolGroup.cs | 2 +- .../ProviderBase/DbConnectionPoolState.cs | 13 +++++ .../Data/ProviderBase/IDbConnectionPool.cs | 9 +++- 6 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index ac4e16afb0..7438ee903e 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -83,6 +83,9 @@ Microsoft\Data\ProviderBase\DbConnectionPool.cs + + Microsoft\Data\ProviderBase\DbConnectionPoolState.cs + Microsoft\Data\ProviderBase\DbConnectionInternal.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 0d3eaa4b2e..2d0f4fe50a 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -271,6 +271,9 @@ Microsoft\Data\ProviderBase\DbConnectionPool.cs + + Microsoft\Data\ProviderBase\DbConnectionPoolState.cs + Microsoft\Data\ProviderBase\DbConnectionPoolAuthenticationContext.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs index 1f8e61e7cc..fe78d13ea7 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs @@ -15,18 +15,12 @@ using System.Transactions; using Microsoft.Data.Common; using Microsoft.Data.SqlClient; +using static Microsoft.Data.ProviderBase.DbConnectionPoolState; namespace Microsoft.Data.ProviderBase { - internal sealed class DbConnectionPool : IDbConnectionPool + internal sealed class WaitHandleDbConnectionPool : DbConnectionPool { - private enum State - { - Initializing, - Running, - ShuttingDown, - } - // This class is a way to stash our cloned Tx key for later disposal when it's no longer needed. // We can't get at the key in the dictionary without enumerating entries, so we stash an extra // copy as part of the value. @@ -390,8 +384,6 @@ internal WaitHandle[] GetHandles(bool withCreate) /// private readonly ConcurrentDictionary _pooledDbAuthenticationContexts; - private State _state; - private readonly ConcurrentStack _stackOld = new ConcurrentStack(); private readonly ConcurrentStack _stackNew = new ConcurrentStack(); @@ -417,7 +409,7 @@ internal WaitHandle[] GetHandles(bool withCreate) private int _totalObjects; // only created by DbConnectionPoolGroup.GetConnectionPool - internal DbConnectionPool( + internal WaitHandleDbConnectionPool( DbConnectionFactory connectionFactory, DbConnectionPoolGroup connectionPoolGroup, DbConnectionPoolIdentity identity, @@ -430,7 +422,7 @@ internal DbConnectionPool( throw ADP.InternalError(ADP.InternalErrorCode.AttemptingToPoolOnRestrictedToken); } - _state = State.Initializing; + State = Initializing; lock (s_random) { @@ -457,7 +449,7 @@ internal DbConnectionPool( _transactedConnectionPool = new TransactedConnectionPool(this); _poolCreateRequest = new WaitCallback(PoolCreateRequest); // used by CleanupCallback - _state = State.Running; + State = Running; SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed.", ObjectID); //_cleanupTimer & QueuePoolCreateRequest is delayed until DbConnectionPoolGroup calls @@ -498,7 +490,7 @@ private bool NeedToReplenish { get { - if (State.Running != _state) // Don't allow connection create when not running. + if (State != Running) // Don't allow connection create when not running. return false; int totalObjects = Count; @@ -524,7 +516,7 @@ internal override DbConnectionPoolIdentity Identity internal override bool IsRunning { - get { return State.Running == _state; } + get { return State == Running; } } private int MaxPoolSize @@ -812,20 +804,6 @@ private DbConnectionInternal CreateObject(DbConnection owningObject, DbConnectio #endif } - // If the old connection belonged to another pool, we need to remove it from that - if (oldConnection != null) - { - var oldConnectionPool = oldConnection.Pool; - if (oldConnectionPool != null && oldConnectionPool != this) - { - Debug.Assert(oldConnectionPool._state == State.ShuttingDown, "Old connections pool should be shutting down"); - lock (oldConnectionPool._objectList) - { - oldConnectionPool._objectList.Remove(oldConnection); - oldConnectionPool._totalObjects = oldConnectionPool._objectList.Count; - } - } - } SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Added to pool.", ObjectID, newObj?.ObjectID); // Reset the error wait: @@ -913,7 +891,7 @@ private void DeactivateObject(DbConnectionInternal obj) { // NOTE: constructor should ensure that current state cannot be State.Initializing, so it can only // be State.Running or State.ShuttingDown - Debug.Assert(_state == State.Running || _state == State.ShuttingDown); + Debug.Assert(State == Running || State == ShuttingDown); lock (obj) { @@ -923,7 +901,7 @@ private void DeactivateObject(DbConnectionInternal obj) // transaction object will ensure that it is owned (not lost), // and it will be certain to put it back into the pool. - if (_state == State.ShuttingDown) + if (State == ShuttingDown) { if (obj.IsTransactionRoot) { @@ -1237,7 +1215,7 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio allowCreate = true; } - if (_state != State.Running) + if (State != Running) { SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, DbConnectionInternal State != Running.", ObjectID); connection = null; @@ -1615,7 +1593,7 @@ private void PoolCreateRequest(object state) long scopeID = SqlClientEventSource.Log.TryPoolerScopeEnterEvent(" {0}", ObjectID); try { - if (State.Running == _state) + if (State == Running) { // in case WaitForPendingOpen ever failed with no subsequent OpenAsync calls, // start it back up again @@ -1804,7 +1782,7 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) // done and all transactions are ended. SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Transaction has ended.", ObjectID, obj.ObjectID); - if (_state == State.Running && obj.CanBePooled) + if (State == Running && obj.CanBePooled) { PutNewObject(obj); } @@ -1817,7 +1795,7 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) private void QueuePoolCreateRequest() { - if (State.Running == _state) + if (State == Running) { // Make sure we're at quota by posting a callback to the threadpool. ThreadPool.QueueUserWorkItem(_poolCreateRequest); @@ -1908,7 +1886,7 @@ internal override void Startup() internal override void Shutdown() { SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); - _state = State.ShuttingDown; + State = ShuttingDown; // deactivate timer callbacks Timer t = _cleanupTimer; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs index 687ee095f3..86fce6b005 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs @@ -187,7 +187,7 @@ internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactor if (!_poolCollection.TryGetValue(currentIdentity, out pool)) { DbConnectionPoolProviderInfo connectionPoolProviderInfo = connectionFactory.CreateConnectionPoolProviderInfo(ConnectionOptions); - DbConnectionPool newPool = new(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); + DbConnectionPool newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); if (MarkPoolGroupAsActive()) { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs new file mode 100644 index 0000000000..9ce3f8faea --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.Data.ProviderBase +{ + internal enum DbConnectionPoolState + { + Initializing, + Running, + ShuttingDown, + } +} diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs index d335b92689..2f4a93abc4 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs @@ -11,7 +11,7 @@ namespace Microsoft.Data.ProviderBase { - internal abstract class IDbConnectionPool + internal abstract class DbConnectionPool { private static int _objectTypeCount; // EventSource counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); @@ -24,6 +24,13 @@ internal int ObjectID } } + private DbConnectionPoolState _state; + internal DbConnectionPoolState State + { + get => _state; + set => _state = value; + } + #region Abstract Properties internal abstract int Count { From ad1fa75dc2a9db3e813e5e4ee1ff7c764cbbc5b1 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 15:09:58 -0800 Subject: [PATCH 04/31] Rename files --- .../src/Microsoft.Data.SqlClient.csproj | 4 ++-- .../Data/SqlClient/SqlConnectionFactory.cs | 4 ++-- .../SqlClient/SqlInternalConnectionTds.cs | 4 ++-- .../netfx/src/Microsoft.Data.SqlClient.csproj | 4 ++-- .../Data/SqlClient/SqlConnectionFactory.cs | 4 ++-- .../SqlClient/SqlInternalConnectionTds.cs | 4 ++-- .../Data/ProviderBase/DbConnectionFactory.cs | 24 +++++++++---------- .../Data/ProviderBase/DbConnectionInternal.cs | 10 ++++---- .../ProviderBase/DbConnectionPoolGroup.cs | 24 +++++++++---------- .../Data/ProviderBase/IDbConnectionPool.cs | 2 +- ...nPool.cs => WaitHandleDbConnectionPool.cs} | 8 +++---- 11 files changed, 46 insertions(+), 46 deletions(-) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/{DbConnectionPool.cs => WaitHandleDbConnectionPool.cs} (99%) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 7438ee903e..478a594d2a 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -80,8 +80,8 @@ Microsoft\Data\ProviderBase\IDbConnectionPool.cs - - Microsoft\Data\ProviderBase\DbConnectionPool.cs + + Microsoft\Data\ProviderBase\WaitHandleDbConnectionPool.cs Microsoft\Data\ProviderBase\DbConnectionPoolState.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index dfa10c3b07..a88b8c7742 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -31,12 +31,12 @@ override public DbProviderFactory ProviderFactory } } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection) { return CreateConnection(options, poolKey, poolGroupProviderInfo, pool, owningConnection, userOptions: null); } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) { SqlConnectionString opt = (SqlConnectionString)options; SqlConnectionPoolKey key = (SqlConnectionPoolKey)poolKey; diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 9b65f20d6f..0fb9e8d361 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -211,7 +211,7 @@ internal bool IsDNSCachingBeforeRedirectSupported internal byte _tceVersionSupported; // The pool that this connection is associated with, if at all it is. - private DbConnectionPool _dbConnectionPool; + private IDbConnectionPool _dbConnectionPool; // This is used to preserve the authentication context object if we decide to cache it for subsequent connections in the same pool. // This will finally end up in _dbConnectionPool.AuthenticationContexts, but only after 1 successful login to SQL Server using this context. @@ -452,7 +452,7 @@ internal SqlInternalConnectionTds( SessionData reconnectSessionData = null, bool applyTransientFaultHandling = false, string accessToken = null, - DbConnectionPool pool = null, + IDbConnectionPool pool = null, Func> accessTokenCallback = null) : base(connectionOptions) diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 2d0f4fe50a..5e1319aeb9 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -268,8 +268,8 @@ Microsoft\Data\ProviderBase\IDbConnectionPool.cs - - Microsoft\Data\ProviderBase\DbConnectionPool.cs + + Microsoft\Data\ProviderBase\WaitHandleDbConnectionPool.cs Microsoft\Data\ProviderBase\DbConnectionPoolState.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index 755e2dd747..9bcc2e01bc 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -32,12 +32,12 @@ override public DbProviderFactory ProviderFactory } } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection) { return CreateConnection(options, poolKey, poolGroupProviderInfo, pool, owningConnection, userOptions: null); } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) { SqlConnectionString opt = (SqlConnectionString)options; SqlConnectionPoolKey key = (SqlConnectionPoolKey)poolKey; diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 5152e1ff50..2a4fffee83 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -213,7 +213,7 @@ internal bool IsDNSCachingBeforeRedirectSupported internal byte _tceVersionSupported; // The pool that this connection is associated with, if at all it is. - private DbConnectionPool _dbConnectionPool; + private IDbConnectionPool _dbConnectionPool; // This is used to preserve the authentication context object if we decide to cache it for subsequent connections in the same pool. // This will finally end up in _dbConnectionPool.AuthenticationContexts, but only after 1 successful login to SQL Server using this context. @@ -425,7 +425,7 @@ internal SqlInternalConnectionTds( bool redirectedUserInstance, SqlConnectionString userConnectionOptions = null, // NOTE: userConnectionOptions may be different to connectionOptions if the connection string has been expanded (see SqlConnectionString.Expand) SessionData reconnectSessionData = null, - DbConnectionPool pool = null, + IDbConnectionPool pool = null, string accessToken = null, bool applyTransientFaultHandling = false, Func _connectionPoolGroups; - private readonly List _poolsToRelease; + private readonly List _poolsToRelease; private readonly List _poolGroupsToRelease; private readonly Timer _pruningTimer; @@ -42,7 +42,7 @@ protected DbConnectionFactory(DbConnectionPoolCounters performanceCounters) { _performanceCounters = performanceCounters; _connectionPoolGroups = new Dictionary(); - _poolsToRelease = new List(); + _poolsToRelease = new List(); _poolGroupsToRelease = new List(); _pruningTimer = CreatePruningTimer(); } @@ -55,7 +55,7 @@ internal DbConnectionPoolCounters PerformanceCounters protected DbConnectionFactory() { _connectionPoolGroups = new Dictionary(); - _poolsToRelease = new List(); + _poolsToRelease = new List(); _poolGroupsToRelease = new List(); _pruningTimer = CreatePruningTimer(); } @@ -146,7 +146,7 @@ internal DbConnectionInternal CreateNonPooledConnection(DbConnection owningConne return newConnection; } - internal DbConnectionInternal CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) + internal DbConnectionInternal CreatePooledConnection(IDbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) { Debug.Assert(pool != null, "null pool?"); DbConnectionPoolGroupProviderInfo poolGroupProviderInfo = pool.PoolGroup.ProviderInfo; @@ -203,7 +203,7 @@ internal bool TryGetConnection(DbConnection owningConnection, TaskCompletionSour Debug.Assert(owningConnection != null, "null owningConnection?"); DbConnectionPoolGroup poolGroup; - DbConnectionPool connectionPool; + IDbConnectionPool connectionPool; connection = null; // Work around race condition with clearing the pool between GetConnectionPool obtaining pool @@ -405,7 +405,7 @@ private void TryGetConnectionCompletedContinuation(Task ta } } - private DbConnectionPool GetConnectionPool(DbConnection owningObject, DbConnectionPoolGroup connectionPoolGroup) + private IDbConnectionPool GetConnectionPool(DbConnection owningObject, DbConnectionPoolGroup connectionPoolGroup) { // if poolgroup is disabled, it will be replaced with a new entry @@ -436,7 +436,7 @@ private DbConnectionPool GetConnectionPool(DbConnection owningObject, DbConnecti Debug.Assert(connectionPoolGroup != null, "null connectionPoolGroup?"); SetConnectionPoolGroup(owningObject, connectionPoolGroup); } - DbConnectionPool connectionPool = connectionPoolGroup.GetConnectionPool(this); + IDbConnectionPool connectionPool = connectionPoolGroup.GetConnectionPool(this); return connectionPool; } @@ -567,8 +567,8 @@ private void PruneConnectionPoolGroups(object state) { if (0 != _poolsToRelease.Count) { - DbConnectionPool[] poolsToRelease = _poolsToRelease.ToArray(); - foreach (DbConnectionPool pool in poolsToRelease) + IDbConnectionPool[] poolsToRelease = _poolsToRelease.ToArray(); + foreach (IDbConnectionPool pool in poolsToRelease) { if (pool != null) { @@ -653,7 +653,7 @@ private void PruneConnectionPoolGroups(object state) } } - internal void QueuePoolForRelease(DbConnectionPool pool, bool clearing) + internal void QueuePoolForRelease(IDbConnectionPool pool, bool clearing) { // Queue the pool up for release -- we'll clear it out and dispose // of it as the last part of the pruning timer callback so we don't @@ -698,12 +698,12 @@ internal void QueuePoolGroupForRelease(DbConnectionPoolGroup poolGroup) #endif } - virtual protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + virtual protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) { return CreateConnection(options, poolKey, poolGroupProviderInfo, pool, owningConnection); } - abstract protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection); + abstract protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection); abstract protected DbConnectionOptions CreateConnectionOptions(string connectionString, DbConnectionOptions previous); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs index 9744b8db9b..235c869cb6 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs @@ -156,7 +156,7 @@ internal bool IsInPool /// /// The pooler that the connection came from (Pooled connections only) /// - internal DbConnectionPool Pool { get; private set; } + internal IDbConnectionPool Pool { get; private set; } public abstract string ServerVersion { get; } @@ -400,7 +400,7 @@ internal void CleanupConnectionOnTransactionCompletion(Transaction transaction) { DetachTransaction(transaction, false); - DbConnectionPool pool = Pool; + IDbConnectionPool pool = Pool; pool?.TransactionEnded(transaction, this); } @@ -461,7 +461,7 @@ internal virtual void CloseConnection(DbConnection owningObject, DbConnectionFac { PrepareForCloseConnection(); - DbConnectionPool connectionPool = Pool; + IDbConnectionPool connectionPool = Pool; // Detach from enlisted transactions that are no longer active on close DetachCurrentTransactionIfEnded(); @@ -585,7 +585,7 @@ internal virtual void DelegatedTransactionEnded() Deactivate(); // call it one more time just in case - DbConnectionPool pool = Pool; + IDbConnectionPool pool = Pool; if (pool == null) { @@ -741,7 +741,7 @@ internal void MakeNonPooledObject(DbConnection owningObject) /// Used by DbConnectionFactory to indicate that this object IS part of a connection pool. /// /// - internal void MakePooledConnection(DbConnectionPool connectionPool) + internal void MakePooledConnection(IDbConnectionPool connectionPool) { _createTime = DateTime.UtcNow; Pool = connectionPool; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs index 86fce6b005..b50095d294 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs @@ -34,7 +34,7 @@ sealed internal class DbConnectionPoolGroup private readonly DbConnectionOptions _connectionOptions; private readonly DbConnectionPoolKey _poolKey; private readonly DbConnectionPoolGroupOptions _poolGroupOptions; - private ConcurrentDictionary _poolCollection; + private ConcurrentDictionary _poolCollection; private int _state; // see PoolGroupState* below @@ -64,7 +64,7 @@ internal DbConnectionPoolGroup(DbConnectionOptions connectionOptions, DbConnecti // HybridDictionary does not create any sub-objects until add // so it is safe to use for non-pooled connection as long as // we check _poolGroupOptions first - _poolCollection = new ConcurrentDictionary(); + _poolCollection = new ConcurrentDictionary(); _state = PoolGroupStateActive; } @@ -113,22 +113,22 @@ internal int Clear() // will return the number of connections in the group after clearing has finished // First, note the old collection and create a new collection to be used - ConcurrentDictionary oldPoolCollection = null; + ConcurrentDictionary oldPoolCollection = null; lock (this) { if (_poolCollection.Count > 0) { oldPoolCollection = _poolCollection; - _poolCollection = new ConcurrentDictionary(); + _poolCollection = new ConcurrentDictionary(); } } // Then, if a new collection was created, release the pools from the old collection if (oldPoolCollection != null) { - foreach (KeyValuePair entry in oldPoolCollection) + foreach (KeyValuePair entry in oldPoolCollection) { - DbConnectionPool pool = entry.Value; + IDbConnectionPool pool = entry.Value; if (pool != null) { DbConnectionFactory connectionFactory = pool.ConnectionFactory; @@ -144,7 +144,7 @@ internal int Clear() return _poolCollection.Count; } - internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactory) + internal IDbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactory) { // When this method returns null it indicates that the connection // factory should not use pooling. @@ -152,7 +152,7 @@ internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactor // We don't support connection pooling on Win9x; // PoolGroupOptions will only be null when we're not supposed to pool // connections. - DbConnectionPool pool = null; + IDbConnectionPool pool = null; if (_poolGroupOptions != null) { #if NETFRAMEWORK @@ -187,7 +187,7 @@ internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactor if (!_poolCollection.TryGetValue(currentIdentity, out pool)) { DbConnectionPoolProviderInfo connectionPoolProviderInfo = connectionFactory.CreateConnectionPoolProviderInfo(ConnectionOptions); - DbConnectionPool newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); + IDbConnectionPool newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); if (MarkPoolGroupAsActive()) { @@ -257,11 +257,11 @@ internal bool Prune() { if (_poolCollection.Count > 0) { - var newPoolCollection = new ConcurrentDictionary(); + var newPoolCollection = new ConcurrentDictionary(); - foreach (KeyValuePair entry in _poolCollection) + foreach (KeyValuePair entry in _poolCollection) { - DbConnectionPool pool = entry.Value; + IDbConnectionPool pool = entry.Value; if (pool != null) { // Actually prune the pool if there are no connections in the pool and no errors occurred. diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs index 2f4a93abc4..5db709341e 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs @@ -11,7 +11,7 @@ namespace Microsoft.Data.ProviderBase { - internal abstract class DbConnectionPool + internal abstract class IDbConnectionPool { private static int _objectTypeCount; // EventSource counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs similarity index 99% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs index fe78d13ea7..e2fc35d20f 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs @@ -19,7 +19,7 @@ namespace Microsoft.Data.ProviderBase { - internal sealed class WaitHandleDbConnectionPool : DbConnectionPool + internal sealed class WaitHandleDbConnectionPool : IDbConnectionPool { // This class is a way to stash our cloned Tx key for later disposal when it's no longer needed. // We can't get at the key in the dictionary without enumerating entries, so we stash an extra @@ -60,12 +60,12 @@ private sealed class TransactedConnectionPool { Dictionary _transactedCxns; - DbConnectionPool _pool; + IDbConnectionPool _pool; private static int _objectTypeCount; // EventSource Counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); - internal TransactedConnectionPool(DbConnectionPool pool) + internal TransactedConnectionPool(IDbConnectionPool pool) { Debug.Assert(pool != null, "null pool?"); @@ -82,7 +82,7 @@ internal int ObjectID } } - internal DbConnectionPool Pool + internal IDbConnectionPool Pool { get { From 2cd3a581e7403e0b3c151484ecc59040c74fd01d Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 15:15:38 -0800 Subject: [PATCH 05/31] Rename abstract base back to DbConnectionPool --- .../src/Microsoft.Data.SqlClient.csproj | 4 ++-- .../Data/SqlClient/SqlConnectionFactory.cs | 4 ++-- .../SqlClient/SqlInternalConnectionTds.cs | 4 ++-- .../netfx/src/Microsoft.Data.SqlClient.csproj | 4 ++-- .../Data/SqlClient/SqlConnectionFactory.cs | 4 ++-- .../SqlClient/SqlInternalConnectionTds.cs | 4 ++-- .../Data/ProviderBase/DbConnectionFactory.cs | 24 +++++++++---------- .../Data/ProviderBase/DbConnectionInternal.cs | 10 ++++---- ...bConnectionPool.cs => DbConnectionPool.cs} | 2 +- .../ProviderBase/DbConnectionPoolGroup.cs | 24 +++++++++---------- .../WaitHandleDbConnectionPool.cs | 8 +++---- 11 files changed, 46 insertions(+), 46 deletions(-) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/{IDbConnectionPool.cs => DbConnectionPool.cs} (98%) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 478a594d2a..dda4ec2afe 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -77,8 +77,8 @@ Microsoft\Data\ProviderBase\DbConnectionFactory.cs - - Microsoft\Data\ProviderBase\IDbConnectionPool.cs + + Microsoft\Data\ProviderBase\DbConnectionPool.cs Microsoft\Data\ProviderBase\WaitHandleDbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index a88b8c7742..dfa10c3b07 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -31,12 +31,12 @@ override public DbProviderFactory ProviderFactory } } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) { return CreateConnection(options, poolKey, poolGroupProviderInfo, pool, owningConnection, userOptions: null); } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) { SqlConnectionString opt = (SqlConnectionString)options; SqlConnectionPoolKey key = (SqlConnectionPoolKey)poolKey; diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 0fb9e8d361..9b65f20d6f 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -211,7 +211,7 @@ internal bool IsDNSCachingBeforeRedirectSupported internal byte _tceVersionSupported; // The pool that this connection is associated with, if at all it is. - private IDbConnectionPool _dbConnectionPool; + private DbConnectionPool _dbConnectionPool; // This is used to preserve the authentication context object if we decide to cache it for subsequent connections in the same pool. // This will finally end up in _dbConnectionPool.AuthenticationContexts, but only after 1 successful login to SQL Server using this context. @@ -452,7 +452,7 @@ internal SqlInternalConnectionTds( SessionData reconnectSessionData = null, bool applyTransientFaultHandling = false, string accessToken = null, - IDbConnectionPool pool = null, + DbConnectionPool pool = null, Func> accessTokenCallback = null) : base(connectionOptions) diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 5e1319aeb9..907c154497 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -265,8 +265,8 @@ Microsoft\Data\ProviderBase\DbConnectionInternal.cs - - Microsoft\Data\ProviderBase\IDbConnectionPool.cs + + Microsoft\Data\ProviderBase\DbConnectionPool.cs Microsoft\Data\ProviderBase\WaitHandleDbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index 9bcc2e01bc..755e2dd747 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -32,12 +32,12 @@ override public DbProviderFactory ProviderFactory } } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) { return CreateConnection(options, poolKey, poolGroupProviderInfo, pool, owningConnection, userOptions: null); } - override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + override protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) { SqlConnectionString opt = (SqlConnectionString)options; SqlConnectionPoolKey key = (SqlConnectionPoolKey)poolKey; diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 2a4fffee83..5152e1ff50 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -213,7 +213,7 @@ internal bool IsDNSCachingBeforeRedirectSupported internal byte _tceVersionSupported; // The pool that this connection is associated with, if at all it is. - private IDbConnectionPool _dbConnectionPool; + private DbConnectionPool _dbConnectionPool; // This is used to preserve the authentication context object if we decide to cache it for subsequent connections in the same pool. // This will finally end up in _dbConnectionPool.AuthenticationContexts, but only after 1 successful login to SQL Server using this context. @@ -425,7 +425,7 @@ internal SqlInternalConnectionTds( bool redirectedUserInstance, SqlConnectionString userConnectionOptions = null, // NOTE: userConnectionOptions may be different to connectionOptions if the connection string has been expanded (see SqlConnectionString.Expand) SessionData reconnectSessionData = null, - IDbConnectionPool pool = null, + DbConnectionPool pool = null, string accessToken = null, bool applyTransientFaultHandling = false, Func _connectionPoolGroups; - private readonly List _poolsToRelease; + private readonly List _poolsToRelease; private readonly List _poolGroupsToRelease; private readonly Timer _pruningTimer; @@ -42,7 +42,7 @@ protected DbConnectionFactory(DbConnectionPoolCounters performanceCounters) { _performanceCounters = performanceCounters; _connectionPoolGroups = new Dictionary(); - _poolsToRelease = new List(); + _poolsToRelease = new List(); _poolGroupsToRelease = new List(); _pruningTimer = CreatePruningTimer(); } @@ -55,7 +55,7 @@ internal DbConnectionPoolCounters PerformanceCounters protected DbConnectionFactory() { _connectionPoolGroups = new Dictionary(); - _poolsToRelease = new List(); + _poolsToRelease = new List(); _poolGroupsToRelease = new List(); _pruningTimer = CreatePruningTimer(); } @@ -146,7 +146,7 @@ internal DbConnectionInternal CreateNonPooledConnection(DbConnection owningConne return newConnection; } - internal DbConnectionInternal CreatePooledConnection(IDbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) + internal DbConnectionInternal CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) { Debug.Assert(pool != null, "null pool?"); DbConnectionPoolGroupProviderInfo poolGroupProviderInfo = pool.PoolGroup.ProviderInfo; @@ -203,7 +203,7 @@ internal bool TryGetConnection(DbConnection owningConnection, TaskCompletionSour Debug.Assert(owningConnection != null, "null owningConnection?"); DbConnectionPoolGroup poolGroup; - IDbConnectionPool connectionPool; + DbConnectionPool connectionPool; connection = null; // Work around race condition with clearing the pool between GetConnectionPool obtaining pool @@ -405,7 +405,7 @@ private void TryGetConnectionCompletedContinuation(Task ta } } - private IDbConnectionPool GetConnectionPool(DbConnection owningObject, DbConnectionPoolGroup connectionPoolGroup) + private DbConnectionPool GetConnectionPool(DbConnection owningObject, DbConnectionPoolGroup connectionPoolGroup) { // if poolgroup is disabled, it will be replaced with a new entry @@ -436,7 +436,7 @@ private IDbConnectionPool GetConnectionPool(DbConnection owningObject, DbConnect Debug.Assert(connectionPoolGroup != null, "null connectionPoolGroup?"); SetConnectionPoolGroup(owningObject, connectionPoolGroup); } - IDbConnectionPool connectionPool = connectionPoolGroup.GetConnectionPool(this); + DbConnectionPool connectionPool = connectionPoolGroup.GetConnectionPool(this); return connectionPool; } @@ -567,8 +567,8 @@ private void PruneConnectionPoolGroups(object state) { if (0 != _poolsToRelease.Count) { - IDbConnectionPool[] poolsToRelease = _poolsToRelease.ToArray(); - foreach (IDbConnectionPool pool in poolsToRelease) + DbConnectionPool[] poolsToRelease = _poolsToRelease.ToArray(); + foreach (DbConnectionPool pool in poolsToRelease) { if (pool != null) { @@ -653,7 +653,7 @@ private void PruneConnectionPoolGroups(object state) } } - internal void QueuePoolForRelease(IDbConnectionPool pool, bool clearing) + internal void QueuePoolForRelease(DbConnectionPool pool, bool clearing) { // Queue the pool up for release -- we'll clear it out and dispose // of it as the last part of the pruning timer callback so we don't @@ -698,12 +698,12 @@ internal void QueuePoolGroupForRelease(DbConnectionPoolGroup poolGroup) #endif } - virtual protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + virtual protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) { return CreateConnection(options, poolKey, poolGroupProviderInfo, pool, owningConnection); } - abstract protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, IDbConnectionPool pool, DbConnection owningConnection); + abstract protected DbConnectionInternal CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection); abstract protected DbConnectionOptions CreateConnectionOptions(string connectionString, DbConnectionOptions previous); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs index 235c869cb6..9744b8db9b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs @@ -156,7 +156,7 @@ internal bool IsInPool /// /// The pooler that the connection came from (Pooled connections only) /// - internal IDbConnectionPool Pool { get; private set; } + internal DbConnectionPool Pool { get; private set; } public abstract string ServerVersion { get; } @@ -400,7 +400,7 @@ internal void CleanupConnectionOnTransactionCompletion(Transaction transaction) { DetachTransaction(transaction, false); - IDbConnectionPool pool = Pool; + DbConnectionPool pool = Pool; pool?.TransactionEnded(transaction, this); } @@ -461,7 +461,7 @@ internal virtual void CloseConnection(DbConnection owningObject, DbConnectionFac { PrepareForCloseConnection(); - IDbConnectionPool connectionPool = Pool; + DbConnectionPool connectionPool = Pool; // Detach from enlisted transactions that are no longer active on close DetachCurrentTransactionIfEnded(); @@ -585,7 +585,7 @@ internal virtual void DelegatedTransactionEnded() Deactivate(); // call it one more time just in case - IDbConnectionPool pool = Pool; + DbConnectionPool pool = Pool; if (pool == null) { @@ -741,7 +741,7 @@ internal void MakeNonPooledObject(DbConnection owningObject) /// Used by DbConnectionFactory to indicate that this object IS part of a connection pool. /// /// - internal void MakePooledConnection(IDbConnectionPool connectionPool) + internal void MakePooledConnection(DbConnectionPool connectionPool) { _createTime = DateTime.UtcNow; Pool = connectionPool; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs similarity index 98% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs index 5db709341e..2f4a93abc4 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/IDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs @@ -11,7 +11,7 @@ namespace Microsoft.Data.ProviderBase { - internal abstract class IDbConnectionPool + internal abstract class DbConnectionPool { private static int _objectTypeCount; // EventSource counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs index b50095d294..86fce6b005 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs @@ -34,7 +34,7 @@ sealed internal class DbConnectionPoolGroup private readonly DbConnectionOptions _connectionOptions; private readonly DbConnectionPoolKey _poolKey; private readonly DbConnectionPoolGroupOptions _poolGroupOptions; - private ConcurrentDictionary _poolCollection; + private ConcurrentDictionary _poolCollection; private int _state; // see PoolGroupState* below @@ -64,7 +64,7 @@ internal DbConnectionPoolGroup(DbConnectionOptions connectionOptions, DbConnecti // HybridDictionary does not create any sub-objects until add // so it is safe to use for non-pooled connection as long as // we check _poolGroupOptions first - _poolCollection = new ConcurrentDictionary(); + _poolCollection = new ConcurrentDictionary(); _state = PoolGroupStateActive; } @@ -113,22 +113,22 @@ internal int Clear() // will return the number of connections in the group after clearing has finished // First, note the old collection and create a new collection to be used - ConcurrentDictionary oldPoolCollection = null; + ConcurrentDictionary oldPoolCollection = null; lock (this) { if (_poolCollection.Count > 0) { oldPoolCollection = _poolCollection; - _poolCollection = new ConcurrentDictionary(); + _poolCollection = new ConcurrentDictionary(); } } // Then, if a new collection was created, release the pools from the old collection if (oldPoolCollection != null) { - foreach (KeyValuePair entry in oldPoolCollection) + foreach (KeyValuePair entry in oldPoolCollection) { - IDbConnectionPool pool = entry.Value; + DbConnectionPool pool = entry.Value; if (pool != null) { DbConnectionFactory connectionFactory = pool.ConnectionFactory; @@ -144,7 +144,7 @@ internal int Clear() return _poolCollection.Count; } - internal IDbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactory) + internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactory) { // When this method returns null it indicates that the connection // factory should not use pooling. @@ -152,7 +152,7 @@ internal IDbConnectionPool GetConnectionPool(DbConnectionFactory connectionFacto // We don't support connection pooling on Win9x; // PoolGroupOptions will only be null when we're not supposed to pool // connections. - IDbConnectionPool pool = null; + DbConnectionPool pool = null; if (_poolGroupOptions != null) { #if NETFRAMEWORK @@ -187,7 +187,7 @@ internal IDbConnectionPool GetConnectionPool(DbConnectionFactory connectionFacto if (!_poolCollection.TryGetValue(currentIdentity, out pool)) { DbConnectionPoolProviderInfo connectionPoolProviderInfo = connectionFactory.CreateConnectionPoolProviderInfo(ConnectionOptions); - IDbConnectionPool newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); + DbConnectionPool newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); if (MarkPoolGroupAsActive()) { @@ -257,11 +257,11 @@ internal bool Prune() { if (_poolCollection.Count > 0) { - var newPoolCollection = new ConcurrentDictionary(); + var newPoolCollection = new ConcurrentDictionary(); - foreach (KeyValuePair entry in _poolCollection) + foreach (KeyValuePair entry in _poolCollection) { - IDbConnectionPool pool = entry.Value; + DbConnectionPool pool = entry.Value; if (pool != null) { // Actually prune the pool if there are no connections in the pool and no errors occurred. diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs index e2fc35d20f..fe78d13ea7 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs @@ -19,7 +19,7 @@ namespace Microsoft.Data.ProviderBase { - internal sealed class WaitHandleDbConnectionPool : IDbConnectionPool + internal sealed class WaitHandleDbConnectionPool : DbConnectionPool { // This class is a way to stash our cloned Tx key for later disposal when it's no longer needed. // We can't get at the key in the dictionary without enumerating entries, so we stash an extra @@ -60,12 +60,12 @@ private sealed class TransactedConnectionPool { Dictionary _transactedCxns; - IDbConnectionPool _pool; + DbConnectionPool _pool; private static int _objectTypeCount; // EventSource Counter internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); - internal TransactedConnectionPool(IDbConnectionPool pool) + internal TransactedConnectionPool(DbConnectionPool pool) { Debug.Assert(pool != null, "null pool?"); @@ -82,7 +82,7 @@ internal int ObjectID } } - internal IDbConnectionPool Pool + internal DbConnectionPool Pool { get { From a99ca387a3852520a4d49b099c5b4223438dda1f Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 16:24:29 -0800 Subject: [PATCH 06/31] Reorganize pool files. --- .../src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs | 1 + .../src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs | 1 + .../src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs | 1 + .../ConnectionPool}/DbConnectionPool.cs | 3 ++- .../DbConnectionPoolAuthenticationContext.cs | 2 +- .../DbConnectionPoolAuthenticationContextKey.cs | 2 +- .../ConnectionPool}/DbConnectionPoolCounters.netfx.cs | 2 +- .../ConnectionPool}/DbConnectionPoolGroup.cs | 4 ++-- .../ConnectionPool}/DbConnectionPoolGroupProviderInfo.cs | 2 +- .../ConnectionPool}/DbConnectionPoolIdentity.Unix.cs | 2 +- .../ConnectionPool}/DbConnectionPoolIdentity.Windows.cs | 2 +- .../ConnectionPool}/DbConnectionPoolIdentity.cs | 2 +- .../ConnectionPool}/DbConnectionPoolKey.cs | 2 +- .../ConnectionPool}/DbConnectionPoolOptions.cs | 2 +- .../ConnectionPool}/DbConnectionPoolProviderInfo.cs | 2 +- .../ConnectionPool}/DbConnectionPoolState.cs | 2 +- .../SqlConnectionPoolGroupProviderInfo.cs | 3 +-- .../SqlClient/{ => ConnectionPool}/SqlConnectionPoolKey.cs | 2 +- .../{ => ConnectionPool}/SqlConnectionPoolProviderInfo.cs | 3 +-- .../ConnectionPool}/WaitHandleDbConnectionPool.cs | 6 +++--- .../src/Microsoft/Data/SqlClient/SqlDependency.cs | 2 +- .../src/Microsoft/Data/SqlClient/SqlDependencyListener.cs | 2 +- 22 files changed, 26 insertions(+), 24 deletions(-) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPool.cs (97%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolAuthenticationContext.cs (98%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolAuthenticationContextKey.cs (98%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolCounters.netfx.cs (99%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolGroup.cs (99%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolGroupProviderInfo.cs (91%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolIdentity.Unix.cs (88%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolIdentity.Windows.cs (97%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolIdentity.cs (98%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{Common => SqlClient/ConnectionPool}/DbConnectionPoolKey.cs (96%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolOptions.cs (97%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolProviderInfo.cs (84%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/DbConnectionPoolState.cs (86%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/{ => ConnectionPool}/SqlConnectionPoolGroupProviderInfo.cs (98%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/{ => ConnectionPool}/SqlConnectionPoolKey.cs (98%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/{ => ConnectionPool}/SqlConnectionPoolProviderInfo.cs (89%) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/{ProviderBase => SqlClient/ConnectionPool}/WaitHandleDbConnectionPool.cs (99%) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs index b25f9a2d3b..b8ada9b1bc 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Data.Common; +using Microsoft.Data.SqlClient.ConnectionPool; using System.Data; using System.Data.Common; using System.Diagnostics; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs index 0fdd85c4bf..0e60dd2138 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs @@ -11,6 +11,7 @@ using System.Threading.Tasks; using Microsoft.Data.Common; using Microsoft.Data.SqlClient; +using Microsoft.Data.SqlClient.ConnectionPool; namespace Microsoft.Data.ProviderBase { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs index 9744b8db9b..7268f00eea 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs @@ -11,6 +11,7 @@ using System.Transactions; using Microsoft.Data.Common; using Microsoft.Data.SqlClient; +using Microsoft.Data.SqlClient.ConnectionPool; #if NETFRAMEWORK using System.Runtime.ConstrainedExecution; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs similarity index 97% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs index 2f4a93abc4..1c9475d8f0 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs @@ -8,8 +8,9 @@ using System.Threading.Tasks; using System.Transactions; using Microsoft.Data.Common; +using Microsoft.Data.ProviderBase; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { internal abstract class DbConnectionPool { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolAuthenticationContext.cs similarity index 98% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolAuthenticationContext.cs index 29ac7fee31..71dbc3c714 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolAuthenticationContext.cs @@ -7,7 +7,7 @@ using System.Runtime.ConstrainedExecution; using System.Threading; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { /// /// Represents the context of an authentication attempt when using the new active directory based authentication mechanisms. diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolAuthenticationContextKey.cs similarity index 98% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolAuthenticationContextKey.cs index a6f15ca999..e12648b3d0 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolAuthenticationContextKey.cs @@ -5,7 +5,7 @@ using System; using System.Diagnostics; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { /// /// Represents the key of dbConnectionPoolAuthenticationContext. diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolCounters.netfx.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolCounters.netfx.cs similarity index 99% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolCounters.netfx.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolCounters.netfx.cs index 04b9e37a61..0eadb7f42c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolCounters.netfx.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolCounters.netfx.cs @@ -6,7 +6,7 @@ #if NETFRAMEWORK -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { using System; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs similarity index 99% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs index 86fce6b005..5aaa4fdcd7 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs @@ -4,13 +4,13 @@ using Microsoft.Data.Common; -using Microsoft.Data.SqlClient; +using Microsoft.Data.ProviderBase; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Threading; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { // set_ConnectionString calls DbConnectionFactory.GetConnectionPoolGroup // when not found a new pool entry is created and potentially added diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroupProviderInfo.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroupProviderInfo.cs similarity index 91% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroupProviderInfo.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroupProviderInfo.cs index 3eceb6d3e3..9ee83357bd 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolGroupProviderInfo.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroupProviderInfo.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { internal class DbConnectionPoolGroupProviderInfo { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.Unix.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.Unix.cs similarity index 88% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.Unix.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.Unix.cs index 95769c3e6c..3eadc8761a 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.Unix.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.Unix.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { partial class DbConnectionPoolIdentity { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.Windows.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.Windows.cs similarity index 97% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.Windows.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.Windows.cs index 62fbc34aed..175d4c8595 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.Windows.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.Windows.cs @@ -8,7 +8,7 @@ using System.Security.Principal; using Microsoft.Data.SqlClient; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { partial class DbConnectionPoolIdentity { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.cs similarity index 98% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.cs index e97f55a7ad..5716146a6b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolIdentity.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolIdentity.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { sealed internal partial class DbConnectionPoolIdentity { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/DbConnectionPoolKey.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolKey.cs similarity index 96% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/DbConnectionPoolKey.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolKey.cs index 7d2799289f..bfcd4cd2ef 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/DbConnectionPoolKey.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolKey.cs @@ -4,7 +4,7 @@ using System; -namespace Microsoft.Data.Common +namespace Microsoft.Data.SqlClient.ConnectionPool { // DbConnectionPoolKey: Base class implementation of a key to connection pool groups // Only connection string is used as a key diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolOptions.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolOptions.cs similarity index 97% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolOptions.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolOptions.cs index 866453432c..7adf8abdc2 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolOptions.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolOptions.cs @@ -4,7 +4,7 @@ using System; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { internal sealed class DbConnectionPoolGroupOptions { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolProviderInfo.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolProviderInfo.cs similarity index 84% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolProviderInfo.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolProviderInfo.cs index 5392795dff..1afeb473be 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolProviderInfo.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolProviderInfo.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { internal class DbConnectionPoolProviderInfo { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolState.cs similarity index 86% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolState.cs index 9ce3f8faea..1790e38a57 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionPoolState.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolState.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { internal enum DbConnectionPoolState { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolGroupProviderInfo.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs similarity index 98% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolGroupProviderInfo.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs index 47de649bbd..1fe1768c0a 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolGroupProviderInfo.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolGroupProviderInfo.cs @@ -3,9 +3,8 @@ // See the LICENSE file in the project root for more information. using System.Security; -using Microsoft.Data.ProviderBase; -namespace Microsoft.Data.SqlClient +namespace Microsoft.Data.SqlClient.ConnectionPool { internal sealed class SqlConnectionPoolGroupProviderInfo : DbConnectionPoolGroupProviderInfo { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolKey.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolKey.cs similarity index 98% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolKey.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolKey.cs index 04a0d32281..207c0a8e1a 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolKey.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolKey.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using Microsoft.Data.Common; -namespace Microsoft.Data.SqlClient +namespace Microsoft.Data.SqlClient.ConnectionPool { // SqlConnectionPoolKey: Implementation of a key to connection pool groups for specifically to be used for SqlConnection // Connection string and SqlCredential are used as a key diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolProviderInfo.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolProviderInfo.cs similarity index 89% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolProviderInfo.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolProviderInfo.cs index eee7550f5e..9c6df4d245 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionPoolProviderInfo.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/SqlConnectionPoolProviderInfo.cs @@ -2,9 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Data.ProviderBase; -namespace Microsoft.Data.SqlClient +namespace Microsoft.Data.SqlClient.ConnectionPool { internal sealed class SqlConnectionPoolProviderInfo : DbConnectionPoolProviderInfo { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs similarity index 99% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index fe78d13ea7..ef45fcfdc2 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -14,10 +14,10 @@ using System.Threading.Tasks; using System.Transactions; using Microsoft.Data.Common; -using Microsoft.Data.SqlClient; -using static Microsoft.Data.ProviderBase.DbConnectionPoolState; +using Microsoft.Data.ProviderBase; +using static Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolState; -namespace Microsoft.Data.ProviderBase +namespace Microsoft.Data.SqlClient.ConnectionPool { internal sealed class WaitHandleDbConnectionPool : DbConnectionPool { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependency.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependency.cs index 534d42f866..ea29930b24 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependency.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependency.cs @@ -18,8 +18,8 @@ using System.Threading; using System.Xml; using Microsoft.Data.Common; -using Microsoft.Data.ProviderBase; using Microsoft.Data.Sql; +using Microsoft.Data.SqlClient.ConnectionPool; namespace Microsoft.Data.SqlClient { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependencyListener.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependencyListener.cs index 9e3644a94c..0c2d4a005e 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependencyListener.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlDependencyListener.cs @@ -17,8 +17,8 @@ using System.Threading; using System.Xml; using Microsoft.Data.Common; -using Microsoft.Data.ProviderBase; using Microsoft.Data.SqlClient; +using Microsoft.Data.SqlClient.ConnectionPool; // This class is the process wide dependency dispatcher. It contains all connection listeners for the entire process and // receives notifications on those connections to dispatch to the corresponding AppDomain dispatcher to notify the From 7cbb50678051dfbb4f56bd9cbfe5fac18e823b00 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 4 Mar 2025 16:25:17 -0800 Subject: [PATCH 07/31] Fix imports --- .../src/Microsoft.Data.SqlClient.csproj | 76 +++++++++---------- .../Microsoft/Data/SqlClient/SqlConnection.cs | 1 + .../Data/SqlClient/SqlConnectionFactory.cs | 1 + .../Data/SqlClient/SqlConnectionHelper.cs | 1 + .../SqlClient/SqlInternalConnectionTds.cs | 1 + .../netfx/src/Microsoft.Data.SqlClient.csproj | 72 +++++++++--------- .../Microsoft/Data/SqlClient/SqlConnection.cs | 1 + .../Data/SqlClient/SqlConnectionFactory.cs | 1 + .../Data/SqlClient/SqlConnectionHelper.cs | 9 ++- .../SqlClient/SqlInternalConnectionTds.cs | 1 + 10 files changed, 86 insertions(+), 78 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index dda4ec2afe..b2763754c1 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -53,9 +53,6 @@ Microsoft\Data\Common\DbConnectionOptions.Common.cs - - Microsoft\Data\Common\DbConnectionPoolKey.cs - Microsoft\Data\Common\DbConnectionStringCommon.cs @@ -71,44 +68,56 @@ Microsoft\Data\OperationAbortedException.cs + + Microsoft\Data\ProviderBase\DbConnectionInternal.cs + Microsoft\Data\ProviderBase\DbConnectionClosed.cs Microsoft\Data\ProviderBase\DbConnectionFactory.cs - - Microsoft\Data\ProviderBase\DbConnectionPool.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPool.cs - - Microsoft\Data\ProviderBase\WaitHandleDbConnectionPool.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolAuthenticationContext.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolState.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolAuthenticationContextKey.cs - - Microsoft\Data\ProviderBase\DbConnectionInternal.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolGroup.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolAuthenticationContext.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolGroupProviderInfo.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolAuthenticationContextKey.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolIdentity.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolGroup.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolKey.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolGroupProviderInfo.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolOptions.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolIdentity.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolProviderInfo.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolOptions.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolState.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolProviderInfo.cs + + Microsoft\Data\SqlClient\ConnectionPool\WaitHandleDbConnectionPool.cs + + + Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolGroupProviderInfo.cs + + + Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolKey.cs + + + Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolProviderInfo.cs Microsoft\Data\ProviderBase\DbMetaDataFactory.cs @@ -422,15 +431,6 @@ Microsoft\Data\SqlClient\SqlConnectionEncryptOptionConverter.cs - - Microsoft\Data\SqlClient\SqlConnectionPoolGroupProviderInfo.cs - - - Microsoft\Data\SqlClient\SqlConnectionPoolKey.cs - - - Microsoft\Data\SqlClient\SqlConnectionPoolProviderInfo.cs - Microsoft\Data\SqlClient\SqlConnectionString.cs @@ -784,8 +784,8 @@ Microsoft\Data\Common\AdapterUtil.Windows.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolIdentity.Windows.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolIdentity.Windows.cs Microsoft\Data\Sql\SqlDataSourceEnumeratorNativeHelper.cs @@ -827,8 +827,8 @@ Microsoft\Data\Common\AdapterUtil.Unix.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolIdentity.Unix.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolIdentity.Unix.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs index 863996629e..059f18c596 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -19,6 +19,7 @@ using System.Threading.Tasks; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.ConnectionPool; using Microsoft.Data.SqlClient.Diagnostics; using Microsoft.SqlServer.Server; diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index dfa10c3b07..ca9bcc2cd9 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -8,6 +8,7 @@ using System.IO; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.ConnectionPool; namespace Microsoft.Data.SqlClient { diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs index aa8420d8bb..c8e782c0b3 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs @@ -10,6 +10,7 @@ using System.Transactions; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.ConnectionPool; namespace Microsoft.Data.SqlClient diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 9b65f20d6f..d128268185 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -17,6 +17,7 @@ using System.Transactions; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.ConnectionPool; using Microsoft.Identity.Client; namespace Microsoft.Data.SqlClient diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 907c154497..fe5c8234db 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -241,9 +241,6 @@ Microsoft\Data\Common\DbConnectionOptions.Common.cs - - Microsoft\Data\Common\DbConnectionPoolKey.cs - Microsoft\Data\Common\MultipartIdentifier.cs @@ -265,41 +262,53 @@ Microsoft\Data\ProviderBase\DbConnectionInternal.cs - - Microsoft\Data\ProviderBase\DbConnectionPool.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPool.cs + + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolAuthenticationContext.cs + + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolAuthenticationContextKey.cs + + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolCounters.netfx.cs + + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolGroup.cs - - Microsoft\Data\ProviderBase\WaitHandleDbConnectionPool.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolGroupProviderInfo.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolState.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolIdentity.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolAuthenticationContext.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolIdentity.Windows.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolAuthenticationContextKey.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolKey.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolCounters.netfx.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolOptions.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolGroup.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolProviderInfo.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolGroupProviderInfo.cs + + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPoolState.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolIdentity.cs + + Microsoft\Data\SqlClient\ConnectionPool\WaitHandleDbConnectionPool.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolIdentity.Windows.cs + + Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolGroupProviderInfo.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolOptions.cs + + Microsoft\Data\SqlClient\SqlConnectionPoolKey.cs - - Microsoft\Data\ProviderBase\DbConnectionPoolProviderInfo.cs + + Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolProviderInfo.cs Microsoft\Data\ProviderBase\DbMetaDataFactory.cs @@ -634,15 +643,6 @@ Microsoft\Data\SqlClient\SqlConnectionEncryptOptionConverter.cs - - Microsoft\Data\SqlClient\SqlConnectionPoolGroupProviderInfo.cs - - - Microsoft\Data\SqlClient\SqlConnectionPoolKey.cs - - - Microsoft\Data\SqlClient\SqlConnectionPoolProviderInfo.cs - Microsoft\Data\SqlClient\SqlConnectionString.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs index 931fb96640..1e56defff9 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -25,6 +25,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.ConnectionPool; using Microsoft.SqlServer.Server; [assembly: InternalsVisibleTo("System.Data.DataSetExtensions, PublicKey=" + Microsoft.Data.SqlClient.AssemblyRef.EcmaPublicKeyFull)] // DevDiv Bugs 92166 diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index 755e2dd747..9383b8e6af 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -12,6 +12,7 @@ using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; using Microsoft.Data.SqlClient.Server; +using Microsoft.Data.SqlClient.ConnectionPool; namespace Microsoft.Data.SqlClient { diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs index 54d31d5301..40a12d4976 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs @@ -12,6 +12,7 @@ namespace Microsoft.Data.SqlClient using System.Threading; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; + using Microsoft.Data.SqlClient.ConnectionPool; using System.Transactions; public sealed partial class SqlConnection : DbConnection @@ -79,7 +80,7 @@ internal DbConnectionOptions ConnectionOptions { get { - Microsoft.Data.ProviderBase.DbConnectionPoolGroup poolGroup = PoolGroup; + DbConnectionPoolGroup poolGroup = PoolGroup; return poolGroup != null ? poolGroup.ConnectionOptions : null; } } @@ -102,7 +103,7 @@ private void ConnectionString_Set(string value) private void ConnectionString_Set(DbConnectionPoolKey key) { DbConnectionOptions connectionOptions = null; - Microsoft.Data.ProviderBase.DbConnectionPoolGroup poolGroup = ConnectionFactory.GetConnectionPoolGroup(key, null, ref connectionOptions); + DbConnectionPoolGroup poolGroup = ConnectionFactory.GetConnectionPoolGroup(key, null, ref connectionOptions); DbConnectionInternal connectionInternal = InnerConnection; bool flag = connectionInternal.AllowSetConnectionString; if (flag) @@ -144,7 +145,7 @@ internal DbConnectionInternal InnerConnection } } - internal Microsoft.Data.ProviderBase.DbConnectionPoolGroup PoolGroup + internal DbConnectionPoolGroup PoolGroup { get { @@ -341,7 +342,7 @@ internal void PermissionDemand() { Debug.Assert(DbConnectionClosedConnecting.SingletonInstance == _innerConnection, "not connecting"); - Microsoft.Data.ProviderBase.DbConnectionPoolGroup poolGroup = PoolGroup; + DbConnectionPoolGroup poolGroup = PoolGroup; DbConnectionOptions connectionOptions = poolGroup != null ? poolGroup.ConnectionOptions : null; if (connectionOptions == null || connectionOptions.IsEmpty) { diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs index 5152e1ff50..7ad09dd3d5 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs @@ -17,6 +17,7 @@ using System.Threading.Tasks; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.ConnectionPool; using Microsoft.Identity.Client; using System.Transactions; From 3f434bfbabc472219e2ba47227fcd91478743fa3 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Wed, 5 Mar 2025 12:41:13 -0800 Subject: [PATCH 08/31] Fix pooling test reflection --- .../SystemDataInternals/ConnectionPoolHelper.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs index d7c5471427..e930f437e9 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs @@ -14,23 +14,24 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests.SystemDataInternals internal static class ConnectionPoolHelper { private static Assembly s_MicrosoftDotData = Assembly.Load(new AssemblyName(typeof(SqlConnection).GetTypeInfo().Assembly.FullName)); - private static Type s_dbConnectionPool = s_MicrosoftDotData.GetType("Microsoft.Data.ProviderBase.DbConnectionPool"); - private static Type s_dbConnectionPoolGroup = s_MicrosoftDotData.GetType("Microsoft.Data.ProviderBase.DbConnectionPoolGroup"); - private static Type s_dbConnectionPoolIdentity = s_MicrosoftDotData.GetType("Microsoft.Data.ProviderBase.DbConnectionPoolIdentity"); + private static Type s_dbConnectionPool = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPool"); + private static Type s_waitHandleDbConnectionPool = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.WaitHandleDbConnectionPool"); + private static Type s_dbConnectionPoolGroup = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolGroup"); + private static Type s_dbConnectionPoolIdentity = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolIdentity"); private static Type s_dbConnectionFactory = s_MicrosoftDotData.GetType("Microsoft.Data.ProviderBase.DbConnectionFactory"); private static Type s_sqlConnectionFactory = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.SqlConnectionFactory"); - private static Type s_dbConnectionPoolKey = s_MicrosoftDotData.GetType("Microsoft.Data.Common.DbConnectionPoolKey"); + private static Type s_dbConnectionPoolKey = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolKey"); private static Type s_dictStringPoolGroup = typeof(Dictionary<,>).MakeGenericType(s_dbConnectionPoolKey, s_dbConnectionPoolGroup); private static Type s_dictPoolIdentityPool = typeof(ConcurrentDictionary<,>).MakeGenericType(s_dbConnectionPoolIdentity, s_dbConnectionPool); - private static PropertyInfo s_dbConnectionPoolCount = s_dbConnectionPool.GetProperty("Count", BindingFlags.Instance | BindingFlags.NonPublic); + private static PropertyInfo s_dbConnectionPoolCount = s_waitHandleDbConnectionPool.GetProperty("Count", BindingFlags.Instance | BindingFlags.NonPublic); private static PropertyInfo s_dictStringPoolGroupGetKeys = s_dictStringPoolGroup.GetProperty("Keys"); private static PropertyInfo s_dictPoolIdentityPoolValues = s_dictPoolIdentityPool.GetProperty("Values"); private static FieldInfo s_dbConnectionFactoryPoolGroupList = s_dbConnectionFactory.GetField("_connectionPoolGroups", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo s_dbConnectionPoolGroupPoolCollection = s_dbConnectionPoolGroup.GetField("_poolCollection", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo s_sqlConnectionFactorySingleton = s_sqlConnectionFactory.GetField("SingletonInstance", BindingFlags.Static | BindingFlags.Public); - private static FieldInfo s_dbConnectionPoolStackOld = s_dbConnectionPool.GetField("_stackOld", BindingFlags.Instance | BindingFlags.NonPublic); - private static FieldInfo s_dbConnectionPoolStackNew = s_dbConnectionPool.GetField("_stackNew", BindingFlags.Instance | BindingFlags.NonPublic); - private static MethodInfo s_dbConnectionPoolCleanup = s_dbConnectionPool.GetMethod("CleanupCallback", BindingFlags.Instance | BindingFlags.NonPublic); + private static FieldInfo s_dbConnectionPoolStackOld = s_waitHandleDbConnectionPool.GetField("_stackOld", BindingFlags.Instance | BindingFlags.NonPublic); + private static FieldInfo s_dbConnectionPoolStackNew = s_waitHandleDbConnectionPool.GetField("_stackNew", BindingFlags.Instance | BindingFlags.NonPublic); + private static MethodInfo s_dbConnectionPoolCleanup = s_waitHandleDbConnectionPool.GetMethod("CleanupCallback", BindingFlags.Instance | BindingFlags.NonPublic); private static MethodInfo s_dictStringPoolGroupTryGetValue = s_dictStringPoolGroup.GetMethod("TryGetValue"); public static int CountFreeConnections(object pool) From b7a321e10e04f756c36683718eea3e65fec82212 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Thu, 6 Mar 2025 14:38:55 -0800 Subject: [PATCH 09/31] Address review comments --- .../Data/SqlClient/SqlConnectionFactory.cs | 2 +- .../Data/SqlClient/SqlConnectionHelper.cs | 2 +- .../Data/ProviderBase/DbConnectionFactory.cs | 2 +- .../ConnectionPool/DbConnectionPool.cs | 100 +++------- .../WaitHandleDbConnectionPool.cs | 174 +++++++----------- 5 files changed, 92 insertions(+), 188 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index 9383b8e6af..d9bf71b663 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -11,8 +11,8 @@ using System.Runtime.Versioning; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; -using Microsoft.Data.SqlClient.Server; using Microsoft.Data.SqlClient.ConnectionPool; +using Microsoft.Data.SqlClient.Server; namespace Microsoft.Data.SqlClient { diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs index 40a12d4976..9f8ddb7930 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs @@ -10,10 +10,10 @@ namespace Microsoft.Data.SqlClient using System.Diagnostics; using System.Runtime.ConstrainedExecution; using System.Threading; + using System.Transactions; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; using Microsoft.Data.SqlClient.ConnectionPool; - using System.Transactions; public sealed partial class SqlConnection : DbConnection { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs index 0e60dd2138..f357e6109b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs @@ -578,7 +578,7 @@ private void PruneConnectionPoolGroups(object state) if (0 == pool.Count) { _poolsToRelease.Remove(pool); - SqlClientEventSource.Log.TryAdvancedTraceEvent(" {0}, ReleasePool={1}", ObjectID, pool.ObjectID); + SqlClientEventSource.Log.TryAdvancedTraceEvent(" {0}, ReleasePool={1}", ObjectID, pool.ObjectId); #if NETFRAMEWORK PerformanceCounters.NumberOfInactiveConnectionPools.Decrement(); #else diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs index 1c9475d8f0..a4efd25d2c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs @@ -14,85 +14,37 @@ namespace Microsoft.Data.SqlClient.ConnectionPool { internal abstract class DbConnectionPool { - private static int _objectTypeCount; // EventSource counter - internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); - - internal int ObjectID - { - get - { - return _objectID; - } - } - - private DbConnectionPoolState _state; - internal DbConnectionPoolState State - { - get => _state; - set => _state = value; - } + private static int _objectTypeCount; + + internal int ObjectId { get; } = System.Threading.Interlocked.Increment(ref _objectTypeCount); + + internal DbConnectionPoolState State { get; set; } #region Abstract Properties - internal abstract int Count - { - get; - } - - internal abstract DbConnectionFactory ConnectionFactory - { - get; - } - - internal abstract bool ErrorOccurred - { - get; - } - - internal abstract TimeSpan LoadBalanceTimeout - { - get; - } - - internal abstract DbConnectionPoolIdentity Identity - { - get; - } - - internal abstract bool IsRunning - { - get; - } + internal abstract int Count { get; } + + internal abstract DbConnectionFactory ConnectionFactory { get; } + + internal abstract bool ErrorOccurred { get; } + + internal abstract TimeSpan LoadBalanceTimeout { get; } + + internal abstract DbConnectionPoolIdentity Identity { get; } + + internal abstract bool IsRunning { get; } #if NETFRAMEWORK - internal abstract DbConnectionPoolCounters PerformanceCounters - { - get; - } + internal abstract DbConnectionPoolCounters PerformanceCounters { get; } #endif - internal abstract DbConnectionPoolGroup PoolGroup - { - get; - } - - internal abstract DbConnectionPoolGroupOptions PoolGroupOptions - { - get; - } - - internal abstract DbConnectionPoolProviderInfo ProviderInfo - { - get; - } - - internal abstract ConcurrentDictionary AuthenticationContexts - { - get; - } - - internal abstract bool UseLoadBalancing - { - get; - } + internal abstract DbConnectionPoolGroup PoolGroup { get; } + + internal abstract DbConnectionPoolGroupOptions PoolGroupOptions { get; } + + internal abstract DbConnectionPoolProviderInfo ProviderInfo { get; } + + internal abstract ConcurrentDictionary AuthenticationContexts { get; } + + internal abstract bool UseLoadBalancing { get; } #endregion #region Abstract Methods diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index a278fce5de..8dd1a7d745 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -71,7 +71,7 @@ internal TransactedConnectionPool(DbConnectionPool pool) _pool = pool; _transactedCxns = new Dictionary(); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed for connection pool {1}", ObjectID, _pool.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed for connection pool {1}", ObjectID, _pool.ObjectId); } internal int ObjectID @@ -450,7 +450,7 @@ internal WaitHandleDbConnectionPool( _poolCreateRequest = new WaitCallback(PoolCreateRequest); // used by CleanupCallback State = Running; - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed.", ObjectId); //_cleanupTimer & QueuePoolCreateRequest is delayed until DbConnectionPoolGroup calls // StartBackgroundCallbacks after pool is actually in the collection @@ -461,36 +461,21 @@ private int CreationTimeout get { return PoolGroupOptions.CreationTimeout; } } - internal override int Count - { - get { return _totalObjects; } - } + internal override int Count => _totalObjects; - internal override DbConnectionFactory ConnectionFactory - { - get { return _connectionFactory; } - } + internal override DbConnectionFactory ConnectionFactory => _connectionFactory; - internal override bool ErrorOccurred - { - get { return _errorOccurred; } - } + internal override bool ErrorOccurred => _errorOccurred; - private bool HasTransactionAffinity - { - get { return PoolGroupOptions.HasTransactionAffinity; } - } + private bool HasTransactionAffinity => PoolGroupOptions.HasTransactionAffinity; - internal override TimeSpan LoadBalanceTimeout - { - get { return PoolGroupOptions.LoadBalanceTimeout; } - } + internal override TimeSpan LoadBalanceTimeout => PoolGroupOptions.LoadBalanceTimeout; private bool NeedToReplenish { get { - if (State != Running) // Don't allow connection create when not running. + if (State is not Running) // Don't allow connection create when not running. return false; int totalObjects = Count; @@ -509,68 +494,35 @@ private bool NeedToReplenish } } - internal override DbConnectionPoolIdentity Identity - { - get { return _identity; } - } + internal override DbConnectionPoolIdentity Identity => _identity; internal override bool IsRunning { - get { return State == Running; } + get { return State is Running; } } - private int MaxPoolSize - { - get { return PoolGroupOptions.MaxPoolSize; } - } + private int MaxPoolSize => PoolGroupOptions.MaxPoolSize; - private int MinPoolSize - { - get { return PoolGroupOptions.MinPoolSize; } - } + private int MinPoolSize => PoolGroupOptions.MinPoolSize; #if NETFRAMEWORK - internal override DbConnectionPoolCounters PerformanceCounters - { - get { return _connectionFactory.PerformanceCounters; } - } + internal override DbConnectionPoolCounters PerformanceCounters => _connectionFactory.PerformanceCounters; #endif - internal override DbConnectionPoolGroup PoolGroup - { - get { return _connectionPoolGroup; } - } + internal override DbConnectionPoolGroup PoolGroup => _connectionPoolGroup; - internal override DbConnectionPoolGroupOptions PoolGroupOptions - { - get { return _connectionPoolGroupOptions; } - } + internal override DbConnectionPoolGroupOptions PoolGroupOptions => _connectionPoolGroupOptions; - internal override DbConnectionPoolProviderInfo ProviderInfo - { - get { return _connectionPoolProviderInfo; } - } + internal override DbConnectionPoolProviderInfo ProviderInfo => _connectionPoolProviderInfo; /// /// Return the pooled authentication contexts. /// - internal override ConcurrentDictionary AuthenticationContexts - { - get - { - return _pooledDbAuthenticationContexts; - } - } + internal override ConcurrentDictionary AuthenticationContexts => _pooledDbAuthenticationContexts; - internal override bool UseLoadBalancing - { - get { return PoolGroupOptions.UseLoadBalancing; } - } + internal override bool UseLoadBalancing => PoolGroupOptions.UseLoadBalancing; - private bool UsingIntegrateSecurity - { - get { return _identity != null && DbConnectionPoolIdentity.NoIdentity != _identity; } - } + private bool UsingIntegrateSecurity => _identity != null && DbConnectionPoolIdentity.NoIdentity != _identity; private void CleanupCallback(object state) { @@ -592,7 +544,7 @@ private void CleanupCallback(object state) // // With this logic, objects are pruned from the pool if unused for // at least one period but not more than two periods. - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectId); // Destroy free objects that put us above MinPoolSize from old stack. while (Count > MinPoolSize) @@ -670,7 +622,7 @@ private void CleanupCallback(object state) break; Debug.Assert(obj != null, "null connection is not expected"); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, ChangeStacks={1}", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, ChangeStacks={1}", ObjectId, obj.ObjectID); Debug.Assert(!obj.IsEmancipated, "pooled object not in pool"); Debug.Assert(obj.CanBePooled, "pooled object is not poolable"); @@ -685,7 +637,7 @@ private void CleanupCallback(object state) internal override void Clear() { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Clearing.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Clearing.", ObjectId); DbConnectionInternal obj; // First, quickly doom everything. @@ -729,7 +681,7 @@ internal override void Clear() // Finally, reclaim everything that's emancipated (which, because // it's been doomed, will cause it to be disposed of as well) ReclaimEmancipatedObjects(); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Cleared.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Cleared.", ObjectId); } private Timer CreateCleanupTimer() => @@ -804,7 +756,7 @@ private DbConnectionInternal CreateObject(DbConnection owningObject, DbConnectio #endif } - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Added to pool.", ObjectID, newObj?.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Added to pool.", ObjectId, newObj?.ObjectID); // Reset the error wait: _errorWait = ERROR_WAIT_DEFAULT; @@ -875,7 +827,7 @@ private DbConnectionInternal CreateObject(DbConnection owningObject, DbConnectio private void DeactivateObject(DbConnectionInternal obj) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Deactivating.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Deactivating.", ObjectId, obj.ObjectID); obj.DeactivateConnection(); bool returnToGeneralPool = false; @@ -891,7 +843,7 @@ private void DeactivateObject(DbConnectionInternal obj) { // NOTE: constructor should ensure that current state cannot be State.Initializing, so it can only // be State.Running or State.ShuttingDown - Debug.Assert(State == Running || State == ShuttingDown); + Debug.Assert(State is Running or ShuttingDown); lock (obj) { @@ -901,7 +853,7 @@ private void DeactivateObject(DbConnectionInternal obj) // transaction object will ensure that it is owned (not lost), // and it will be certain to put it back into the pool. - if (State == ShuttingDown) + if (State is ShuttingDown) { if (obj.IsTransactionRoot) { @@ -1013,11 +965,11 @@ internal override void DestroyObject(DbConnectionInternal obj) // again. if (obj.IsTxRootWaitingForTxEnd) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Has Delegated Transaction, waiting to Dispose.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Has Delegated Transaction, waiting to Dispose.", ObjectId, obj.ObjectID); } else { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Removing from pool.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Removing from pool.", ObjectId, obj.ObjectID); bool removed = false; lock (_objectList) { @@ -1028,7 +980,7 @@ internal override void DestroyObject(DbConnectionInternal obj) if (removed) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Removed from pool.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Removed from pool.", ObjectId, obj.ObjectID); #if NET SqlClientEventSource.Log.ExitPooledConnection(); #else @@ -1036,7 +988,7 @@ internal override void DestroyObject(DbConnectionInternal obj) #endif } obj.Dispose(); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Disposed.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Disposed.", ObjectId, obj.ObjectID); #if NET SqlClientEventSource.Log.HardDisconnectRequest(); #else @@ -1047,7 +999,7 @@ internal override void DestroyObject(DbConnectionInternal obj) private void ErrorCallback(object state) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Resetting Error handling.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Resetting Error handling.", ObjectId); _errorOccurred = false; _waitHandles.ErrorEvent.Reset(); @@ -1200,9 +1152,9 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio allowCreate = true; } - if (State != Running) + if (State is not Running) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, DbConnectionInternal State != Running.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, DbConnectionInternal State != Running.", ObjectId); connection = null; return true; } @@ -1250,7 +1202,7 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj #if NETFRAMEWORK PerformanceCounters.SoftConnectsPerSecond.Increment(); #endif - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Getting connection.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Getting connection.", ObjectId); // If automatic transaction enlistment is required, then we try to // get the connection from the transacted connection pool first. @@ -1293,19 +1245,19 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj switch (waitResult) { case WaitHandle.WaitTimeout: - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Wait timed out.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Wait timed out.", ObjectId); Interlocked.Decrement(ref _waitCount); connection = null; return false; case ERROR_HANDLE: // Throw the error that PoolCreateRequest stashed. - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Errors are set.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Errors are set.", ObjectId); Interlocked.Decrement(ref _waitCount); throw TryCloneCachedException(); case CREATION_HANDLE: - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creating new connection.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creating new connection.", ObjectId); try { obj = UserCreateRequest(owningObject, userOptions); @@ -1358,7 +1310,7 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj if ((obj != null) && (!obj.IsConnectionAlive())) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); DestroyObject(obj); obj = null; // Setting to null in case creating a new object fails @@ -1371,7 +1323,7 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj #endif try { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creating new connection.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creating new connection.", ObjectId); obj = UserCreateRequest(owningObject, userOptions); } finally @@ -1382,7 +1334,7 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj else { // Timeout waiting for creation semaphore - return null - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Wait timed out.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Wait timed out.", ObjectId); connection = null; return false; } @@ -1391,22 +1343,22 @@ private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObj break; case WAIT_ABANDONED + SEMAPHORE_HANDLE: - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Semaphore handle abandonded.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Semaphore handle abandonded.", ObjectId); Interlocked.Decrement(ref _waitCount); throw new AbandonedMutexException(SEMAPHORE_HANDLE, _waitHandles.PoolSemaphore); case WAIT_ABANDONED + ERROR_HANDLE: - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Error handle abandonded.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Error handle abandonded.", ObjectId); Interlocked.Decrement(ref _waitCount); throw new AbandonedMutexException(ERROR_HANDLE, _waitHandles.ErrorEvent); case WAIT_ABANDONED + CREATION_HANDLE: - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creation handle abandoned.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Creation handle abandoned.", ObjectId); Interlocked.Decrement(ref _waitCount); throw new AbandonedMutexException(CREATION_HANDLE, _waitHandles.CreationSemaphore); default: - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, WaitForMultipleObjects={1}", ObjectID, waitResult); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, WaitForMultipleObjects={1}", ObjectId, waitResult); Interlocked.Decrement(ref _waitCount); throw ADP.InternalError(ADP.InternalErrorCode.UnexpectedWaitAnyResult); } @@ -1471,7 +1423,7 @@ internal override DbConnectionInternal ReplaceConnection(DbConnection owningObje #if NETFRAMEWORK PerformanceCounters.SoftConnectsPerSecond.Increment(); #endif - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, replacing connection.", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, replacing connection.", ObjectId); DbConnectionInternal newConnection = UserCreateRequest(owningObject, userOptions, oldConnection); if (newConnection != null) @@ -1515,7 +1467,7 @@ private DbConnectionInternal GetFromGeneralPool() if (obj != null) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Popped from general pool.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Popped from general pool.", ObjectId, obj.ObjectID); #if NET SqlClientEventSource.Log.ExitFreeConnection(); #else @@ -1536,7 +1488,7 @@ private DbConnectionInternal GetFromTransactedPool(out Transaction transaction) if (obj != null) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Popped from transacted pool.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Popped from transacted pool.", ObjectId, obj.ObjectID); #if NET SqlClientEventSource.Log.ExitFreeConnection(); #else @@ -1551,14 +1503,14 @@ private DbConnectionInternal GetFromTransactedPool(out Transaction transaction) } catch { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); DestroyObject(obj); throw; } } else if (!obj.IsConnectionAlive()) { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); DestroyObject(obj); obj = null; } @@ -1575,10 +1527,10 @@ private void PoolCreateRequest(object state) { // called by pooler to ensure pool requests are currently being satisfied - // creation mutex has not been obtained - long scopeID = SqlClientEventSource.Log.TryPoolerScopeEnterEvent(" {0}", ObjectID); + long scopeID = SqlClientEventSource.Log.TryPoolerScopeEnterEvent(" {0}", ObjectId); try { - if (State == Running) + if (State is Running) { // in case WaitForPendingOpen ever failed with no subsequent OpenAsync calls, // start it back up again @@ -1669,7 +1621,7 @@ private void PoolCreateRequest(object state) else { // trace waitResult and ignore the failure - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, PoolCreateRequest called WaitForSingleObject failed {1}", ObjectID, waitResult); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, PoolCreateRequest called WaitForSingleObject failed {1}", ObjectId, waitResult); } } catch (Exception e) @@ -1682,7 +1634,7 @@ private void PoolCreateRequest(object state) // Now that CreateObject can throw, we need to catch the exception and discard it. // There is no further action we can take beyond tracing. The error will be // thrown to the user the next time they request a connection. - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, PoolCreateRequest called CreateConnection which threw an exception: {1}", ObjectID, e); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, PoolCreateRequest called CreateConnection which threw an exception: {1}", ObjectId, e); } finally { @@ -1706,7 +1658,7 @@ internal override void PutNewObject(DbConnectionInternal obj) { Debug.Assert(obj != null, "why are we adding a null object to the pool?"); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Pushing to general pool.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Pushing to general pool.", ObjectId, obj.ObjectID); _stackNew.Push(obj); _waitHandles.PoolSemaphore.Release(1); @@ -1765,9 +1717,9 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) // method, we can safely presume that the caller is the only person // that is using the connection, and that all pre-push logic has been // done and all transactions are ended. - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Transaction has ended.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Transaction has ended.", ObjectId, obj.ObjectID); - if (State == Running && obj.CanBePooled) + if (State is Running && obj.CanBePooled) { PutNewObject(obj); } @@ -1780,7 +1732,7 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) private void QueuePoolCreateRequest() { - if (State == Running) + if (State is Running) { // Make sure we're at quota by posting a callback to the threadpool. ThreadPool.QueueUserWorkItem(_poolCreateRequest); @@ -1790,7 +1742,7 @@ private void QueuePoolCreateRequest() private bool ReclaimEmancipatedObjects() { bool emancipatedObjectFound = false; - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectId); List reclaimedObjects = new List(); int count; @@ -1842,7 +1794,7 @@ private bool ReclaimEmancipatedObjects() for (int i = 0; i < count; ++i) { DbConnectionInternal obj = reclaimedObjects[i]; - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Reclaiming.", ObjectID, obj.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Reclaiming.", ObjectId, obj.ObjectID); #if NET SqlClientEventSource.Log.ReclaimedConnectionRequest(); #else @@ -1859,7 +1811,7 @@ private bool ReclaimEmancipatedObjects() internal override void Startup() { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, CleanupWait={1}", ObjectID, _cleanupWait); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, CleanupWait={1}", ObjectId, _cleanupWait); _cleanupTimer = CreateCleanupTimer(); if (NeedToReplenish) @@ -1870,7 +1822,7 @@ internal override void Startup() internal override void Shutdown() { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectId); State = ShuttingDown; // deactivate timer callbacks @@ -1892,7 +1844,7 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt Debug.Assert(transactedObject != null, "null transactedObject?"); // Note: connection may still be associated with transaction due to Explicit Unbinding requirement. - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transaction Completed", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transaction Completed", ObjectId, transaction.GetHashCode(), transactedObject.ObjectID); // called by the internal connection when it get's told that the // transaction is completed. We tell the transacted pool to remove From a6f1f1301fb3f7292dfe04a10a2400b09b0c0bfe Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 10 Mar 2025 11:16:15 -0700 Subject: [PATCH 10/31] Bring over connection pool from sqlclientx. Bring over rate limit classes. --- .../src/Microsoft.Data.SqlClient.csproj | 2 +- .../Data/ProviderBase/DbConnectionInternal.cs | 5 +- .../ConnectionPool/BetterSyncPool.cs | 813 ++++++++++++++++++ .../ConnectionPool/DbConnectionPool.cs | 4 +- .../ConnectionPool/PoolPruningParameters.cs | 19 + .../WaitHandleDbConnectionPool.cs | 8 +- .../SqlClient/RateLimiter/AsyncFlagFunc.cs | 20 + .../RateLimiter/BlockingPeriodRateLimiter.cs | 36 + .../RateLimiter/ConcurrencyRateLimiter.cs | 68 ++ .../RateLimiter/PassthroughRateLimiter.cs | 41 + .../SqlClient/RateLimiter/RateLimiterBase.cs | 42 + 11 files changed, 1048 insertions(+), 10 deletions(-) create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/AsyncFlagFunc.cs create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj index 70f6b3ff2c..f42fe42b2c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs index 7268f00eea..62115ca5f9 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs @@ -95,6 +95,7 @@ internal DbConnectionInternal(ConnectionState state, bool hidePassword, bool all } #region Properties + internal DateTime OpenTimestamp => _createTime; internal bool AllowSetConnectionString { get; } @@ -472,8 +473,8 @@ internal virtual void CloseConnection(DbConnection owningObject, DbConnectionFac // into the pool. if (connectionPool is not null) { - // PutObject calls Deactivate for us... - connectionPool.PutObject(this, owningObject); + // ReturnInternalConnection calls Deactivate for us... + connectionPool.ReturnInternalConnection(this, owningObject); // NOTE: Before we leave the PutObject call, another thread may have // already popped the connection from the pool, so don't expect to be diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs new file mode 100644 index 0000000000..c8da2196a9 --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -0,0 +1,813 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if NET +using System; +using System.Collections.Concurrent; +using System.Data; +using System.Data.Common; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Channels; +using System.Threading.Tasks; +using System.Transactions; +using Microsoft.Data.Common; +using Microsoft.Data.ProviderBase; +using Microsoft.Data.SqlClient.RateLimiter; + +using static Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolState; + +#nullable enable + +namespace Microsoft.Data.SqlClient.ConnectionPool +{ + internal sealed class BetterSyncPool : DbConnectionPool + { + #region Interface + internal override int Count => _numConnectors; + + internal override DbConnectionFactory ConnectionFactory => _connectionFactory; + + internal override bool ErrorOccurred => false; + + private bool HasTransactionAffinity => PoolGroupOptions.HasTransactionAffinity; + + internal override TimeSpan LoadBalanceTimeout => PoolGroupOptions.LoadBalanceTimeout; + + internal override DbConnectionPoolIdentity Identity => _identity; + + internal override bool IsRunning + { + get { return State is Running; } + } + + private int MaxPoolSize => PoolGroupOptions.MaxPoolSize; + + private int MinPoolSize => PoolGroupOptions.MinPoolSize; + + internal override DbConnectionPoolGroup PoolGroup => _connectionPoolGroup; + + internal override DbConnectionPoolGroupOptions PoolGroupOptions => _connectionPoolGroupOptions; + + internal override DbConnectionPoolProviderInfo ProviderInfo => _connectionPoolProviderInfo; + + /// + /// Return the pooled authentication contexts. + /// + internal override ConcurrentDictionary AuthenticationContexts => _pooledDbAuthenticationContexts; + + internal override bool UseLoadBalancing => PoolGroupOptions.UseLoadBalancing; + + internal override void Clear() + { + //TODO + } + + internal override void DestroyObject(DbConnectionInternal obj) + { + //TODO + } + + internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection) + { + //TODO +#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type. + connection = null; +#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type. + + return true; + } + + /// + /// Creates a new connection to replace an existing connection + /// + /// Outer connection that currently owns + /// Options used to create the new connection + /// Inner connection that will be replaced + /// A new inner connection that is attached to the + internal override DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) + { + //TODO +#pragma warning disable CS8603 // Possible null reference return. + return null; +#pragma warning restore CS8603 // Possible null reference return. + + } + + internal override void ReturnInternalConnection(DbConnectionInternal obj, object owningObject) + { + } + + internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) + { + //TODO + } + + internal override void Startup() + { + //TODO + } + + internal override void Shutdown() + { + //TODO + } + + // TransactionEnded merely provides the plumbing for DbConnectionInternal to access the transacted pool + // that is implemented inside DbConnectionPool. This method's counterpart (PutTransactedObject) should + // only be called from DbConnectionPool.DeactivateObject and thus the plumbing to provide access to + // other objects is unnecessary (hence the asymmetry of Ended but no Begin) + internal override void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) + { + //TODO + } + #endregion + + #region Implementation + + private readonly DbConnectionPoolIdentity _identity; + + private readonly DbConnectionFactory _connectionFactory; + private readonly DbConnectionPoolGroup _connectionPoolGroup; + private readonly DbConnectionPoolGroupOptions _connectionPoolGroupOptions; + private DbConnectionPoolProviderInfo _connectionPoolProviderInfo; + + /// + /// The private member which carries the set of authenticationcontexts for this pool (based on the user's identity). + /// + private readonly ConcurrentDictionary _pooledDbAuthenticationContexts; + + // Prevents synchronous operations from blocking on all available threads, + // which would stop async tasks from being scheduled and cause deadlocks. + // Use ProcessorCount/2 as a balance between sync and async tasks. + private static SemaphoreSlim SyncOverAsyncSemaphore { get; } = new(Math.Max(1, Environment.ProcessorCount / 2)); + + private static int _objectTypeCount; // EventSource counter + private static TimeSpan DefaultPruningPeriod = TimeSpan.FromMinutes(2); + private static TimeSpan MinIdleCountPeriod = TimeSpan.FromSeconds(1); + + #region private readonly + private readonly int _objectID = Interlocked.Increment(ref _objectTypeCount); + private readonly RateLimiterBase _connectionRateLimiter; + //TODO: readonly TimeSpan _connectionLifetime; + + /// + /// Tracks all connectors currently managed by this pool, whether idle or busy. + /// Only updated rarely - when physical connections are opened/closed - but is read in perf-sensitive contexts. + /// + private readonly DbConnectionInternal?[] _connectors; + + /// + /// Reader side for the idle connector channel. Contains nulls in order to release waiting attempts after + /// a connector has been physically closed/broken. + /// + private readonly ChannelReader _idleConnectorReader; + private readonly ChannelWriter _idleConnectorWriter; + + private readonly CancellationTokenSource _shutdownCTS; + private readonly CancellationToken _shutdownCT; + + private Task _warmupTask; + private readonly SemaphoreSlim _warmupLock; + + private PoolPruningParameters _pruningParameters; + #endregion + + // Counts the total number of open connectors tracked by the pool. + private volatile int _numConnectors; + + // Counts the number of connectors currently sitting idle in the pool. + private volatile int _idleCount; + + /// + /// Initializes a new PoolingDataSource. + /// + //TODO: support auth contexts and provider info + internal BetterSyncPool( + SqlConnectionString connectionString, + SqlCredential credential, + RateLimiterBase connectionRateLimiter, + DbConnectionFactory connectionFactory, + DbConnectionPoolGroup connectionPoolGroup, + DbConnectionPoolGroupOptions connectionPoolGroupOptions, + DbConnectionPoolProviderInfo connectionPoolProviderInfo, + DbConnectionPoolIdentity identity) + { + _connectionRateLimiter = connectionRateLimiter; + _connectionFactory = connectionFactory; + _connectionPoolGroup = connectionPoolGroup; + _connectionPoolGroupOptions = connectionPoolGroupOptions; + _connectionPoolProviderInfo = connectionPoolProviderInfo; + _identity = identity; + _pooledDbAuthenticationContexts = new ConcurrentDictionary< + DbConnectionPoolAuthenticationContextKey, + DbConnectionPoolAuthenticationContext>( + concurrencyLevel: 4 * Environment.ProcessorCount, + capacity: 2); + + _connectors = new DbConnectionInternal[MaxPoolSize]; + + // We enforce Max Pool Size, so no need to to create a bounded channel (which is less efficient) + // On the consuming side, we have the multiplexing write loop but also non-multiplexing Rents + // On the producing side, we have connections being released back into the pool (both multiplexing and not) + var idleChannel = Channel.CreateUnbounded(); + _idleConnectorReader = idleChannel.Reader; + _idleConnectorWriter = idleChannel.Writer; + + _shutdownCTS = new CancellationTokenSource(); + _shutdownCT = _shutdownCTS.Token; + + _warmupTask = Task.CompletedTask; + _warmupLock = new SemaphoreSlim(1); + + + _pruningParameters = new PoolPruningParameters + { + _minIdleCount = int.MaxValue, + + // TODO: base this on a user provided param? + PruningTimer = new PeriodicTimer(DefaultPruningPeriod), + MinIdleCountTimer = new PeriodicTimer(MinIdleCountPeriod), + PruningLock = new SemaphoreSlim(1), + PruningTimerListener = InitiatePruningTimerListener(), + PruningTask = Task.CompletedTask, + UpdateMinIdleCountTask = UpdateMinIdleCount(), + }; + } + + #region properties + internal TimeSpan ConnectionLifetime => PoolGroupOptions.LoadBalanceTimeout; + internal int ObjectID => _objectID; + internal bool IsWarmupEnabled { get; set; } = true; + + + internal (int Total, int Idle, int Busy) Statistics + { + get + { + var numConnectors = _numConnectors; + var idleCount = _idleCount; + return (numConnectors, idleCount, numConnectors - idleCount); + } + } + #endregion + + static int DivideRoundingUp(int value, int divisor) => 1 + (value - 1) / divisor; + + /// + internal async ValueTask GetInternalConnection(DbConnection owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) + { + DbConnectionInternal? connector = GetIdleConnector(); + if (connector != null) + { + return connector; + } + + // First, try to open a new physical connector. This will fail if we're at max capacity. + connector = await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); + if (connector != null) + { + return connector; + } + + // We're at max capacity. Block on the idle channel with a timeout. + // Note that Channels guarantee fair FIFO behavior to callers of ReadAsync (first-come first- + // served), which is crucial to us. + using CancellationTokenSource linkedSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); + CancellationToken finalToken = linkedSource.Token; + linkedSource.CancelAfter(timeout); + //TODO: respect remaining time, linkedSource.CancelAfter(timeout.CheckAndGetTimeLeft()); + + try + { + while (true) + { + try + { + if (async) + { + connector = await _idleConnectorReader.ReadAsync(finalToken).ConfigureAwait(false); + } + else + { + SyncOverAsyncSemaphore.Wait(finalToken); + try + { + ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter awaiter = + _idleConnectorReader.ReadAsync(finalToken).ConfigureAwait(false).GetAwaiter(); + using ManualResetEventSlim mres = new ManualResetEventSlim(false, 0); + + // Cancellation happens through the ReadAsync call, which will complete the task. + awaiter.UnsafeOnCompleted(() => mres.Set()); + mres.Wait(CancellationToken.None); + connector = awaiter.GetResult(); + } + finally + { + SyncOverAsyncSemaphore.Release(); + } + } + + if (CheckIdleConnector(connector)) + { + return connector; + } + } + catch (OperationCanceledException) + { + cancellationToken.ThrowIfCancellationRequested(); + Debug.Assert(finalToken.IsCancellationRequested); + + //TODO: exceptions from resource file + throw new Exception("Pool exhausted", new TimeoutException()); + } + catch (ChannelClosedException) + { + //TODO: exceptions from resource file + throw new Exception("The connection pool has been shut down."); + } + + // If we're here, our waiting attempt on the idle connector channel was released with a null + // (or bad connector), or we're in sync mode. Check again if a new idle connector has appeared since we last checked. + connector = GetIdleConnector(); + if (connector != null) + { + return connector; + } + + // We might have closed a connector in the meantime and no longer be at max capacity + // so try to open a new connector and if that fails, loop again. + connector = await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); + if (connector != null) + { + return connector; + } + } + } + finally + { + //TODO: log error + } + } + + /// + /// Tries to read a connector from the idle connector channel. + /// + /// Returns true if a valid idles connector is found, otherwise returns false. + /// TODO: profile the inlining to see if it's necessary + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal DbConnectionInternal? GetIdleConnector() + { + + while (_idleConnectorReader.TryRead(out DbConnectionInternal? connector)) + { + if (CheckIdleConnector(connector)) + { + return connector; + } + } + + return null; + } + + /// + /// Checks that the provided connector is live and unexpired and closes it if needed. + /// Decrements the idle count as long as the connector is not null. + /// + /// The connector to be checked. + /// Returns true if the connector is live and unexpired, otherwise returns false. + /// TODO: profile the inlining to see if it's necessary + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool CheckIdleConnector([NotNullWhen(true)] DbConnectionInternal? connector) + { + if (connector is null) + { + return false; + } + + // Only decrement when the connector has a value. + Interlocked.Decrement(ref _idleCount); + + return CheckConnector(connector); + } + + /// + /// Checks that the provided connector is live and unexpired and closes it if needed. + /// + /// + /// Returns true if the connector is live and unexpired, otherwise returns false. + private bool CheckConnector(DbConnectionInternal connector) + { + // If Clear/ClearAll has been been called since this connector was first opened, + // throw it away. The same if it's broken (in which case CloseConnector is only + // used to update state/perf counter). + //TODO: check clear counter + + // An connector could be broken because of a keepalive that occurred while it was + // idling in the pool + // TODO: Consider removing the pool from the keepalive code. The following branch is simply irrelevant + // if keepalive isn't turned on. + if (!connector.IsConnectionAlive()) + { + CloseConnector(connector); + return false; + } + + if (ConnectionLifetime != TimeSpan.Zero && DateTime.UtcNow > connector.OpenTimestamp + ConnectionLifetime) + { + CloseConnector(connector); + return false; + } + + return true; + } + + /// + /// Closes the provided connector and adjust pool state accordingly. + /// + /// The connector to be closed. + private void CloseConnector(DbConnectionInternal connector) + { + try + { + connector.DeactivateConnection(); + } + catch + { + //TODO: log error + } + + + int i; + for (i = 0; i < MaxPoolSize; i++) + { + if (Interlocked.CompareExchange(ref _connectors[i], null, connector) == connector) + { + break; + } + } + + // If CloseConnector is being called from within OpenNewConnector (e.g. an error happened during a connection initializer which + // causes the connector to Break, and therefore return the connector), then we haven't yet added the connector to Connectors. + // In this case, there's no state to revert here (that's all taken care of in OpenNewConnector), skip it. + if (i == MaxPoolSize) + { + return; + } + + var numConnectors = Interlocked.Decrement(ref _numConnectors); + Debug.Assert(numConnectors >= 0); + + // If a connector has been closed for any reason, we write a null to the idle connector channel to wake up + // a waiter, who will open a new physical connection + // Statement order is important since we have synchronous completions on the channel. + _idleConnectorWriter.TryWrite(null); + + // Ensure that we return to min pool size if closing this connector brought us below min pool size. + _ = WarmUp(); + } + + /// + /// A state object used to pass context to the rate limited connector creation operation. + /// + internal readonly struct OpenInternalConnectionState + { + internal BetterSyncPool Pool { get; init; } + internal DbConnection? OwningConnection { get; init; } + internal DbConnectionOptions UserOptions { get; init; } + internal TimeSpan Timeout { get; init; } + } + + /// + internal ValueTask OpenNewInternalConnection(DbConnection? owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) + { + return _connectionRateLimiter.Execute( + RateLimitedOpen, + new OpenInternalConnectionState + { + Pool = this, + OwningConnection = owningConnection, + UserOptions = userOptions, + Timeout = timeout, + }, + async, + cancellationToken + ); + + + static ValueTask RateLimitedOpen(OpenInternalConnectionState state, bool async, CancellationToken cancellationToken) + { + // As long as we're under max capacity, attempt to increase the connector count and open a new connection. + for (var numConnectors = state.Pool._numConnectors; numConnectors < state.Pool.MaxPoolSize; numConnectors = state.Pool._numConnectors) + { + // Note that we purposefully don't use SpinWait for this: https://github.com/dotnet/coreclr/pull/21437 + if (Interlocked.CompareExchange(ref state.Pool._numConnectors, numConnectors + 1, numConnectors) != numConnectors) + { + continue; + } + + try + { + // We've managed to increase the open counter, open a physical connection. + var startTime = Stopwatch.GetTimestamp(); + + // TODO: This blocks the thread for several network calls! + // This will be unexpected to async callers. + // Our options are limited because DbConnectionInternal doesn't support async open. + // It's better to block this thread and keep throughput high than to queue all of our opens onto a single worker thread. + // Add an async path when this support is added to DbConnectionInternal. + DbConnectionInternal? newConnection = state.Pool.ConnectionFactory.CreatePooledConnection( + state.Pool, + state.OwningConnection, + state.Pool._connectionPoolGroup.ConnectionOptions, + state.Pool._connectionPoolGroup.PoolKey, + state.UserOptions); + + if (newConnection == null) + { + throw ADP.InternalError(ADP.InternalErrorCode.CreateObjectReturnedNull); // CreateObject succeeded, but null object + } + if (!newConnection.CanBePooled) + { + throw ADP.InternalError(ADP.InternalErrorCode.NewObjectCannotBePooled); // CreateObject succeeded, but non-poolable object + } + + int i; + for (i = 0; i < state.Pool.MaxPoolSize; i++) + { + if (Interlocked.CompareExchange(ref state.Pool._connectors[i], newConnection, null) == null) + { + break; + } + } + + Debug.Assert(i < state.Pool.MaxPoolSize, $"Could not find free slot in {state.Pool._connectors} when opening."); + if (i == state.Pool.MaxPoolSize) + { + //TODO: generic exception? + throw new Exception($"Could not find free slot in {state.Pool._connectors} when opening. Please report a bug."); + } + + return new ValueTask(newConnection); + } + catch + { + // Physical open failed, decrement the open and busy counter back down. + Interlocked.Decrement(ref state.Pool._numConnectors); + + // In case there's a waiting attempt on the channel, we write a null to the idle connector channel + // to wake it up, so it will try opening (and probably throw immediately) + // Statement order is important since we have synchronous completions on the channel. + state.Pool._idleConnectorWriter.TryWrite(null); + + throw; + } + } + + return new ValueTask((DbConnectionInternal?)null); + } + } + + /// + internal void ReturnInternalConnection(DbConnectionInternal connector) + { + + //TODO: verify transaction state + + if (!CheckConnector(connector)) + { + return; + } + + // Statement order is important since we have synchronous completions on the channel. + Interlocked.Increment(ref _idleCount); + var written = _idleConnectorWriter.TryWrite(connector); + Debug.Assert(written); + } + + /// + /// Initiates a task to wait on the pruning timer. Spins off child tasks to perform pruning + /// each time the timer ticks. + /// + internal async ValueTask InitiatePruningTimerListener() + { + _shutdownCT.ThrowIfCancellationRequested(); + + while (await _pruningParameters.PruningTimer.WaitForNextTickAsync(_shutdownCT)) + { + await await PruneIdleConnections(); + } + } + + /// + /// Prunes idle connections from the pool. + /// We may await this operation multiple times, so we need to use Task + /// in place of ValueTask so that it cannot be recycled. + /// + /// A ValueTask containing a Task that represents the pruning operation. + internal async ValueTask PruneIdleConnections() + { + if (!_pruningParameters.PruningTask.IsCompleted) + { + return _pruningParameters.PruningTask; + } + + await _pruningParameters.PruningLock.WaitAsync(); + + try + { + if (_pruningParameters.PruningTask.IsCompleted) + { + _pruningParameters.PruningTask = _PruneIdleConnections(); + } + } + finally + { + _pruningParameters.PruningLock.Release(); + } + + return _pruningParameters.PruningTask; + + async Task _PruneIdleConnections() + { + try + { + int numConnectionsToPrune = _pruningParameters._minIdleCount; + + // Reset _minIdleCount for the next pruning period + _pruningParameters._minIdleCount = int.MaxValue; + + // If we don't stop on null, we might cycle a bit? + // we might read out all of the nulls we just wrote into the channel + // that might not be bad... + while (numConnectionsToPrune > 0 && + _numConnectors > MinPoolSize && + _idleConnectorReader.TryRead(out var connector)) + { + _shutdownCT.ThrowIfCancellationRequested(); + + if (connector == null) + { + continue; + } + + if (CheckIdleConnector(connector)) + { + CloseConnector(connector); + } + + numConnectionsToPrune--; + } + } + catch + { + // TODO: log exception + } + + // Min pool size check above is best effort and may over prune. + // Ensure warmup runs to bring us back up to min pool size if necessary. + await WarmUp(); + } + } + + /// + /// Periodically checks the current idle connector count to maintain a minimum idle connector count. + /// Runs indefinitely until the timer is disposed or a cancellation is indicated on the pool shutdown + /// cancellation token. + /// + /// A ValueTask tracking this operation. + internal async ValueTask UpdateMinIdleCount() + { + _shutdownCT.ThrowIfCancellationRequested(); + + while (await _pruningParameters.MinIdleCountTimer.WaitForNextTickAsync(_shutdownCT)) + { + try + { + int currentMinIdle; + int currentIdle; + do + { + currentMinIdle = _pruningParameters._minIdleCount; + currentIdle = _idleCount; + if (currentIdle >= currentMinIdle) + { + break; + } + } + while (Interlocked.CompareExchange(ref _pruningParameters._minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); + } + catch + { + // TODO: log exception + } + } + } + + /// + /// Warms up the pool by bringing it up to min pool size. + /// We may await the underlying operation multiple times, so we need to use Task + /// in place of ValueTask so that it cannot be recycled. + /// + /// A ValueTask containing a Task that represents the warmup process. + internal async ValueTask WarmUp() + { + if (!IsWarmupEnabled) + { + return Task.CompletedTask; + } + + // Avoid semaphore wait if task is still running + if (!_warmupTask.IsCompleted) + { + return _warmupTask; + } + + // Prevent multiple threads from modifying the warmup task + await _warmupLock.WaitAsync(); + + try + { + // The task may have been started by another thread while we were + // waiting on the semaphore + if (_warmupTask.IsCompleted) + { + _warmupTask = _WarmUp(_shutdownCT); + } + } + finally + { + _warmupLock.Release(); + } + + return _warmupTask; + + async Task _WarmUp(CancellationToken ct) + { + // Best effort, we may over or under create due to race conditions. + // Open new connections slowly. If many connections are needed immediately + // upon pool creation they can always be created via user-initiated requests as fast + // as a parallel, pool-initiated approach could. + while (_numConnectors < MinPoolSize) + { + ct.ThrowIfCancellationRequested(); + + // Obey the same rate limit as user-initiated opens. + // Ensures that pool-initiated opens are queued properly alongside user requests. + DbConnectionInternal? connector = await OpenNewInternalConnection( + null, + // connections opened by the pool use the pool groups options in place of user provided options + _connectionPoolGroup.ConnectionOptions, + LoadBalanceTimeout, + true, + ct) + .ConfigureAwait(false); + + // If connector is null, then we hit the max pool size and can stop + // warming up the pool. + if (connector == null) + { + return; + } + + // The connector has never been used, so it's safe to immediately return it to the + // pool without resetting it. + ReturnInternalConnection(connector); + } + } + } + + /// + /// Shutsdown the pool and disposes pool resources. + /// + internal async ValueTask ShutdownAsync() + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); + + // Cancel background tasks + _shutdownCTS.Cancel(); + await Task.WhenAll( + _pruningParameters.PruningTimerListener.AsTask(), + _pruningParameters.PruningTask, + _pruningParameters.UpdateMinIdleCountTask.AsTask(), + _warmupTask); + + // Clean pool state + //TODO: close all open connections + + // Handle disposable resources + _shutdownCTS.Dispose(); + _warmupLock.Dispose(); + _pruningParameters.PruningTimer.Dispose(); + _pruningParameters.MinIdleCountTimer.Dispose(); + _connectionRateLimiter?.Dispose(); + } + + // TODO: override clear method + #endregion + } +} +#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs index a4efd25d2c..3ca5c791a0 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs @@ -56,9 +56,7 @@ internal abstract class DbConnectionPool internal abstract DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection); - internal abstract void PutNewObject(DbConnectionInternal obj); - - internal abstract void PutObject(DbConnectionInternal obj, object owningObject); + internal abstract void ReturnInternalConnection(DbConnectionInternal obj, object owningObject); internal abstract void PutObjectFromTransactedPool(DbConnectionInternal obj); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs new file mode 100644 index 0000000000..f35ea0ec71 --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if NET +using System.Threading.Tasks; +using System.Threading; + +internal struct PoolPruningParameters +{ + internal int _minIdleCount; + internal readonly PeriodicTimer PruningTimer { get; init; } + internal readonly PeriodicTimer MinIdleCountTimer { get; init; } + internal readonly ValueTask PruningTimerListener { get; init; } + internal Task PruningTask { get; set; } + internal readonly ValueTask UpdateMinIdleCountTask { get; init; } + internal readonly SemaphoreSlim PruningLock { get; init; } +} +#endif \ No newline at end of file diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index 8dd1a7d745..cb6cf31ef8 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -1121,7 +1121,7 @@ private void WaitForPendingOpen() if (!next.Completion.TrySetResult(connection)) { // if the completion was cancelled, lets try and get this connection back for the next try - PutObject(connection, next.Owner); + ReturnInternalConnection(connection, next.Owner); } } } @@ -1406,7 +1406,7 @@ private void PrepareConnection(DbConnection owningObject, DbConnectionInternal o { // if Activate throws an exception // put it back in the pool or have it properly disposed of - this.PutObject(obj, owningObject); + this.ReturnInternalConnection(obj, owningObject); throw; } } @@ -1654,7 +1654,7 @@ private void PoolCreateRequest(object state) } } - internal override void PutNewObject(DbConnectionInternal obj) + private void PutNewObject(DbConnectionInternal obj) { Debug.Assert(obj != null, "why are we adding a null object to the pool?"); @@ -1670,7 +1670,7 @@ internal override void PutNewObject(DbConnectionInternal obj) } - internal override void PutObject(DbConnectionInternal obj, object owningObject) + internal override void ReturnInternalConnection(DbConnectionInternal obj, object owningObject) { Debug.Assert(obj != null, "null obj?"); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/AsyncFlagFunc.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/AsyncFlagFunc.cs new file mode 100644 index 0000000000..f50320310c --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/AsyncFlagFunc.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Threading; + +namespace Microsoft.Data.SqlClient.RateLimiter +{ + /// + /// A function that operates asynchronously based on a flag. If isAsync is true, the function operates asynchronously. + /// If isAsync is false, the function operates synchronously. + /// + /// The type accepted by the callback as input. + /// The type returned by the callback. + /// An instance of State to be passed to the callback. + /// Indicates whether the function should operate asynchronously. + /// Allows cancellation of the operation. + /// Returns the result of the callback. + internal delegate TResult AsyncFlagFunc(TState state, bool isAsync, CancellationToken cancellationToken); +} diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs new file mode 100644 index 0000000000..b7c7497845 --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if NET +using System; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace Microsoft.Data.SqlClient.RateLimiter +{ + /// + /// A rate limiter that enforces a backoff (blocking) period upon error. + /// Each subsequent error increases the blocking duration, up to a maximum, until a success occurs. + /// + internal sealed class BlockingPeriodRateLimiter : RateLimiterBase + { + /// + internal override ValueTask Execute( + AsyncFlagFunc> callback, + State state, + bool isAsync, + CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + public override void Dispose() + { + throw new NotImplementedException(); + } + } +} +#endif \ No newline at end of file diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs new file mode 100644 index 0000000000..4ad195d0f1 --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs @@ -0,0 +1,68 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if NET +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Data.SqlClient.RateLimiter +{ + /// + /// A rate limiter that enforces a concurrency limit. + /// When the limit is reached, new requests must wait until a spot is freed upon completion of an existing request. + /// + internal class ConcurrencyRateLimiter : RateLimiterBase + { + private readonly SemaphoreSlim _concurrencyLimitSemaphore; + + /// + /// Initializes a new ConcurrencyRateLimiter with the specified concurrency limit. + /// + /// The maximum number of concurrent requests. + internal ConcurrencyRateLimiter(int concurrencyLimit) + { + _concurrencyLimitSemaphore = new SemaphoreSlim(concurrencyLimit); + } + + /// + internal sealed override async ValueTask Execute(AsyncFlagFunc> callback, State state, bool isAsync, CancellationToken cancellationToken = default) + { + cancellationToken.ThrowIfCancellationRequested(); + + //TODO: in the future, we can enforce order + if (isAsync) + { + await _concurrencyLimitSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); + } + else + { + _concurrencyLimitSemaphore.Wait(cancellationToken); + } + + try + { + cancellationToken.ThrowIfCancellationRequested(); + if (Next != null) + { + return await Next.Execute(callback, state, isAsync, cancellationToken).ConfigureAwait(false); + } + else + { + return await callback(state, isAsync, cancellationToken).ConfigureAwait(false); + } + } + finally + { + _concurrencyLimitSemaphore.Release(); + } + } + + public override void Dispose() + { + _concurrencyLimitSemaphore.Dispose(); + Next.Dispose(); + } + } +} +#endif \ No newline at end of file diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs new file mode 100644 index 0000000000..1223bf302b --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if NET +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Data.SqlClient.RateLimiter +{ + /// + /// A no-op rate limiter that simply executes the callback or passes through to the next rate limiter. + /// + internal sealed class PassthroughRateLimiter : RateLimiterBase + { + //TODO: no state, add static instance + + /// + internal override ValueTask Execute( + AsyncFlagFunc> callback, + State state, + bool isAsync, + CancellationToken cancellationToken = default) + { + if (Next != null) + { + return Next.Execute(callback, state, isAsync, cancellationToken); + } + else + { + return callback(state, isAsync, cancellationToken); + } + } + + public override void Dispose() + { + Next.Dispose(); + } + } +} +#endif \ No newline at end of file diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs new file mode 100644 index 0000000000..3089eb9a31 --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs @@ -0,0 +1,42 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if NET +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Data.SqlClient.RateLimiter +{ + /// + /// An interface for rate limiters that execute arbitraty code. Intended to be small and self contained and chained together to achieve more complex behavior. + /// + internal abstract class RateLimiterBase : IDisposable + { + + /// + /// The next rate limiter that should be executed within the context of this rate limiter. + /// + protected readonly RateLimiterBase Next; + + /// + /// Execute the provided callback within the context of the rate limit, or pass the responsibility along to the next rate limiter. + /// + /// The type accepted by the callback as input. + /// The type of the result returned by the callback. + /// The callback function to execute. + /// An instance of State to be passed to the callback. + /// Whether this method should run asynchronously. + /// Cancels outstanding requests. + /// Returns the result of the callback or the next rate limiter. + internal abstract ValueTask Execute( + AsyncFlagFunc> callback, + State state, + bool isAsync, + CancellationToken cancellationToken = default); + + public abstract void Dispose(); + } +} +#endif \ No newline at end of file From 9146ade4d6dae8e91e9881f86a0ec0499b97ff20 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 10 Mar 2025 11:25:07 -0700 Subject: [PATCH 11/31] Make DestroyObject private to WaitHandle pool. --- .../Data/SqlClient/ConnectionPool/BetterSyncPool.cs | 8 +------- .../Data/SqlClient/ConnectionPool/DbConnectionPool.cs | 2 -- .../ConnectionPool/WaitHandleDbConnectionPool.cs | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index c8da2196a9..626aaae69f 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -66,11 +66,6 @@ internal override void Clear() //TODO } - internal override void DestroyObject(DbConnectionInternal obj) - { - //TODO - } - internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection) { //TODO @@ -255,7 +250,6 @@ internal BetterSyncPool( } #endregion - static int DivideRoundingUp(int value, int divisor) => 1 + (value - 1) / divisor; /// internal async ValueTask GetInternalConnection(DbConnection owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) @@ -761,7 +755,7 @@ async Task _WarmUp(CancellationToken ct) null, // connections opened by the pool use the pool groups options in place of user provided options _connectionPoolGroup.ConnectionOptions, - LoadBalanceTimeout, + ConnectionLifetime, true, ct) .ConfigureAwait(false); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs index 3ca5c791a0..879a81141d 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs @@ -50,8 +50,6 @@ internal abstract class DbConnectionPool #region Abstract Methods internal abstract void Clear(); - internal abstract void DestroyObject(DbConnectionInternal obj); - internal abstract bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection); internal abstract DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index cb6cf31ef8..5e15baee61 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -956,7 +956,7 @@ private void DeactivateObject(DbConnectionInternal obj) Debug.Assert(rootTxn == true || returnToGeneralPool == true || destroyObject == true); } - internal override void DestroyObject(DbConnectionInternal obj) + private void DestroyObject(DbConnectionInternal obj) { // A connection with a delegated transaction cannot be disposed of // until the delegated transaction has actually completed. Instead, From 69016b98dd7513a3bd9c502c9a2db63c706ab117 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 10 Mar 2025 12:49:13 -0700 Subject: [PATCH 12/31] Basic open implementation. Refactor param for clarity. Add app context switch. --- .../Microsoft/Data/SqlClient/SqlConnection.cs | 10 +++---- .../Data/ProviderBase/DbConnectionInternal.cs | 4 +-- .../ConnectionPool/BetterSyncPool.cs | 30 +++++++++++++------ .../ConnectionPool/DbConnectionPool.cs | 2 +- .../WaitHandleDbConnectionPool.cs | 8 ++--- .../Data/SqlClient/LocalAppContextSwitches.cs | 21 +++++++++++++ 6 files changed, 54 insertions(+), 21 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs index 059f18c596..de92172b8c 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs @@ -1391,8 +1391,8 @@ public override void Open() Open(SqlConnectionOverrides.None); } - private bool TryOpenWithRetry(TaskCompletionSource retry, SqlConnectionOverrides overrides) - => RetryLogicProvider.Execute(this, () => TryOpen(retry, overrides)); + private bool TryOpenWithRetry(TaskCompletionSource taskCompletionSource, SqlConnectionOverrides overrides) + => RetryLogicProvider.Execute(this, () => TryOpen(taskCompletionSource, overrides)); /// public void Open(SqlConnectionOverrides overrides) @@ -1899,7 +1899,7 @@ private void PrepareStatisticsForNewConnection() } } - private bool TryOpen(TaskCompletionSource retry, SqlConnectionOverrides overrides = SqlConnectionOverrides.None) + private bool TryOpen(TaskCompletionSource taskCompletionSource, SqlConnectionOverrides overrides = SqlConnectionOverrides.None) { SqlConnectionString connectionOptions = (SqlConnectionString)ConnectionOptions; @@ -1961,14 +1961,14 @@ private bool TryOpen(TaskCompletionSource retry, SqlConnec if (ForceNewConnection) { - if (!InnerConnection.TryReplaceConnection(this, ConnectionFactory, retry, UserConnectionOptions)) + if (!InnerConnection.TryReplaceConnection(this, ConnectionFactory, taskCompletionSource, UserConnectionOptions)) { return false; } } else { - if (!InnerConnection.TryOpenConnection(this, ConnectionFactory, retry, UserConnectionOptions)) + if (!InnerConnection.TryOpenConnection(this, ConnectionFactory, taskCompletionSource, UserConnectionOptions)) { return false; } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs index 62115ca5f9..8cd896ee5b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs @@ -867,7 +867,7 @@ internal void SetInStasis() internal virtual bool TryOpenConnection( DbConnection outerConnection, DbConnectionFactory connectionFactory, - TaskCompletionSource retry, + TaskCompletionSource taskCompletionSource, DbConnectionOptions userOptions) { throw ADP.ConnectionAlreadyOpen(State); @@ -876,7 +876,7 @@ internal virtual bool TryOpenConnection( internal virtual bool TryReplaceConnection( DbConnection outerConnection, DbConnectionFactory connectionFactory, - TaskCompletionSource retry, + TaskCompletionSource taskCompletionSource, DbConnectionOptions userOptions) { throw ADP.MethodNotImplemented(); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 626aaae69f..17de3999fe 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -66,14 +66,23 @@ internal override void Clear() //TODO } - internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection) + internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource taskCompletionSource, DbConnectionOptions userOptions, out DbConnectionInternal? connection) { - //TODO -#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type. - connection = null; -#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type. - - return true; + if (taskCompletionSource is not null) + { + ThreadPool.QueueUserWorkItem(async (_) => + { + var connection = await GetInternalConnection(owningObject, userOptions, TimeSpan.Zero, false, CancellationToken.None).ConfigureAwait(false); + taskCompletionSource.SetResult(connection); + }); + connection = null; + return false; + } + else + { + connection = GetInternalConnection(owningObject, userOptions, TimeSpan.Zero, false, CancellationToken.None).Result; + return connection is not null; + } } /// @@ -94,6 +103,7 @@ internal override DbConnectionInternal ReplaceConnection(DbConnection owningObje internal override void ReturnInternalConnection(DbConnectionInternal obj, object owningObject) { + ReturnInternalConnection(obj); } internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) @@ -103,12 +113,14 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) internal override void Startup() { - //TODO + // NOTE: this occupies a thread for the whole duration of the warmup process. + ThreadPool.QueueUserWorkItem(async (_) => { await WarmUp(); }); } internal override void Shutdown() { - //TODO + // NOTE: this occupies a thread for the whole duration of the shutdown process. + ThreadPool.QueueUserWorkItem(async (_) => { await ShutdownAsync(); }); } // TransactionEnded merely provides the plumbing for DbConnectionInternal to access the transacted pool diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs index 879a81141d..3d117c0656 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPool.cs @@ -50,7 +50,7 @@ internal abstract class DbConnectionPool #region Abstract Methods internal abstract void Clear(); - internal abstract bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection); + internal abstract bool TryGetConnection(DbConnection owningObject, TaskCompletionSource taskCompletionSource, DbConnectionOptions userOptions, out DbConnectionInternal connection); internal abstract DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index 5e15baee61..62d78ecf9d 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -1136,12 +1136,12 @@ private void WaitForPendingOpen() } while (_pendingOpens.TryPeek(out next)); } - internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource retry, DbConnectionOptions userOptions, out DbConnectionInternal connection) + internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource taskCompletionSource, DbConnectionOptions userOptions, out DbConnectionInternal connection) { uint waitForMultipleObjectsTimeout = 0; bool allowCreate = false; - if (retry == null) + if (taskCompletionSource == null) { waitForMultipleObjectsTimeout = (uint)CreationTimeout; @@ -1164,7 +1164,7 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio { return true; } - else if (retry == null) + else if (taskCompletionSource == null) { // timed out on a sync call return true; @@ -1174,7 +1174,7 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio new PendingGetConnection( CreationTimeout == 0 ? Timeout.Infinite : ADP.TimerCurrent() + ADP.TimerFromSeconds(CreationTimeout / 1000), owningObject, - retry, + taskCompletionSource, userOptions); _pendingOpens.Enqueue(pendingGetConnection); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/LocalAppContextSwitches.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/LocalAppContextSwitches.cs index b66154a2ae..60c3911499 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/LocalAppContextSwitches.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/LocalAppContextSwitches.cs @@ -21,6 +21,7 @@ private enum Tristate : byte internal const string UseMinimumLoginTimeoutString = @"Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin"; internal const string LegacyVarTimeZeroScaleBehaviourString = @"Switch.Microsoft.Data.SqlClient.LegacyVarTimeZeroScaleBehaviour"; internal const string UseCompatibilityProcessSniString = @"Switch.Microsoft.Data.SqlClient.UseCompatibilityProcessSni"; + internal const string UseLegacyConnectionPoolString = @"Switch.Microsoft.Data.SqlClient.UseLegacyConnectionPool"; // this field is accessed through reflection in tests and should not be renamed or have the type changed without refactoring NullRow related tests private static Tristate s_legacyRowVersionNullBehavior; @@ -30,6 +31,7 @@ private enum Tristate : byte // this field is accessed through reflection in Microsoft.Data.SqlClient.Tests.SqlParameterTests and should not be renamed or have the type changed without refactoring related tests private static Tristate s_legacyVarTimeZeroScaleBehaviour; private static Tristate s_useCompatProcessSni; + private static Tristate s_useLegacyConnectionPool; #if NET static LocalAppContextSwitches() @@ -85,6 +87,25 @@ public static bool DisableTNIRByDefault } } #endif + public static bool UseLegacyConnectionPool + { + get + { + if (s_useLegacyConnectionPool == Tristate.NotInitialized) + { + if (AppContext.TryGetSwitch(UseLegacyConnectionPoolString, out bool returnedValue) && returnedValue) + { + s_useLegacyConnectionPool = Tristate.True; + } + else + { + s_useLegacyConnectionPool = Tristate.False; + } + } + return s_useLegacyConnectionPool == Tristate.True; + } + } + public static bool UseCompatibilityProcessSni { get From 938afde9511db891929bdd66032dbf3feb8ba2b3 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 10 Mar 2025 14:11:35 -0700 Subject: [PATCH 13/31] Fix compilation --- .../src/Microsoft.Data.SqlClient.csproj | 18 ++++++++++++++++ .../Microsoft/Data/SqlClient/AsyncFlagFunc.cs | 20 ++++++++++++++++++ .../ConnectionPool/BetterSyncPool.cs | 20 ++++++++++++------ .../ConnectionPool/DbConnectionPoolGroup.cs | 21 ++++++++++++++++--- .../ConnectionPool/PoolPruningParameters.cs | 19 ----------------- .../RateLimiter/BlockingPeriodRateLimiter.cs | 6 +++++- .../RateLimiter/ConcurrencyRateLimiter.cs | 9 +++++--- .../RateLimiter/PassthroughRateLimiter.cs | 9 ++++++-- .../SqlClient/RateLimiter/RateLimiterBase.cs | 11 ++++++++-- 9 files changed, 97 insertions(+), 36 deletions(-) create mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs delete mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 14ac8aab60..91740036f8 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -77,6 +77,9 @@ Microsoft\Data\ProviderBase\DbConnectionFactory.cs + + Microsoft\Data\SqlClient\ConnectionPool\BetterSyncPool.cs + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPool.cs @@ -119,6 +122,21 @@ Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolProviderInfo.cs + + Microsoft\Data\SqlClient\RateLimiter\AsyncFlagFunc.cs + + + Microsoft\Data\SqlClient\RateLimiter\BlockingPeriodRateLimiter.cs + + + Microsoft\Data\SqlClient\RateLimiter\ConcurrencyRateLimiter.cs + + + Microsoft\Data\SqlClient\RateLimiter\PassthroughRateLimiter.cs + + + Microsoft\Data\SqlClient\RateLimiter\RateLimiterBase.cs + Microsoft\Data\ProviderBase\DbMetaDataFactory.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs new file mode 100644 index 0000000000..f50320310c --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Threading; + +namespace Microsoft.Data.SqlClient.RateLimiter +{ + /// + /// A function that operates asynchronously based on a flag. If isAsync is true, the function operates asynchronously. + /// If isAsync is false, the function operates synchronously. + /// + /// The type accepted by the callback as input. + /// The type returned by the callback. + /// An instance of State to be passed to the callback. + /// Indicates whether the function should operate asynchronously. + /// Allows cancellation of the operation. + /// Returns the result of the callback. + internal delegate TResult AsyncFlagFunc(TState state, bool isAsync, CancellationToken cancellationToken); +} diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 17de3999fe..abfb08df1f 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -194,19 +194,16 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt /// //TODO: support auth contexts and provider info internal BetterSyncPool( - SqlConnectionString connectionString, - SqlCredential credential, - RateLimiterBase connectionRateLimiter, DbConnectionFactory connectionFactory, DbConnectionPoolGroup connectionPoolGroup, - DbConnectionPoolGroupOptions connectionPoolGroupOptions, + DbConnectionPoolIdentity identity, DbConnectionPoolProviderInfo connectionPoolProviderInfo, - DbConnectionPoolIdentity identity) + RateLimiterBase connectionRateLimiter) { _connectionRateLimiter = connectionRateLimiter; _connectionFactory = connectionFactory; _connectionPoolGroup = connectionPoolGroup; - _connectionPoolGroupOptions = connectionPoolGroupOptions; + _connectionPoolGroupOptions = connectionPoolGroup.PoolGroupOptions; _connectionPoolProviderInfo = connectionPoolProviderInfo; _identity = identity; _pooledDbAuthenticationContexts = new ConcurrentDictionary< @@ -814,6 +811,17 @@ await Task.WhenAll( // TODO: override clear method #endregion + + internal struct PoolPruningParameters + { + internal int _minIdleCount; + internal readonly PeriodicTimer PruningTimer { get; init; } + internal readonly PeriodicTimer MinIdleCountTimer { get; init; } + internal readonly ValueTask PruningTimerListener { get; init; } + internal Task PruningTask { get; set; } + internal readonly ValueTask UpdateMinIdleCountTask { get; init; } + internal readonly SemaphoreSlim PruningLock { get; init; } + } } } #endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs index 5aaa4fdcd7..d875e4d869 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs @@ -3,12 +3,15 @@ // See the LICENSE file in the project root for more information. -using Microsoft.Data.Common; -using Microsoft.Data.ProviderBase; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Threading; +using Microsoft.Data.Common; +using Microsoft.Data.ProviderBase; +#if NET +using Microsoft.Data.SqlClient.RateLimiter; +#endif namespace Microsoft.Data.SqlClient.ConnectionPool { @@ -187,7 +190,19 @@ internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactor if (!_poolCollection.TryGetValue(currentIdentity, out pool)) { DbConnectionPoolProviderInfo connectionPoolProviderInfo = connectionFactory.CreateConnectionPoolProviderInfo(ConnectionOptions); - DbConnectionPool newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); + DbConnectionPool newPool; +#if NET + if (LocalAppContextSwitches.UseLegacyConnectionPool) + { +#endif + newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); +#if NET + } + else + { + newPool = new BetterSyncPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo, new PassthroughRateLimiter()); + } +#endif if (MarkPoolGroupAsActive()) { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs deleted file mode 100644 index f35ea0ec71..0000000000 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/PoolPruningParameters.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#if NET -using System.Threading.Tasks; -using System.Threading; - -internal struct PoolPruningParameters -{ - internal int _minIdleCount; - internal readonly PeriodicTimer PruningTimer { get; init; } - internal readonly PeriodicTimer MinIdleCountTimer { get; init; } - internal readonly ValueTask PruningTimerListener { get; init; } - internal Task PruningTask { get; set; } - internal readonly ValueTask UpdateMinIdleCountTask { get; init; } - internal readonly SemaphoreSlim PruningLock { get; init; } -} -#endif \ No newline at end of file diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs index b7c7497845..c6a8f5f730 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs @@ -17,6 +17,10 @@ namespace Microsoft.Data.SqlClient.RateLimiter /// internal sealed class BlockingPeriodRateLimiter : RateLimiterBase { + public BlockingPeriodRateLimiter(RateLimiterBase? next = null) : base(next) + { + } + /// internal override ValueTask Execute( AsyncFlagFunc> callback, @@ -33,4 +37,4 @@ public override void Dispose() } } } -#endif \ No newline at end of file +#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs index 4ad195d0f1..fb9a6d36a2 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs @@ -6,6 +6,8 @@ using System.Threading; using System.Threading.Tasks; +#nullable enable + namespace Microsoft.Data.SqlClient.RateLimiter { /// @@ -20,7 +22,8 @@ internal class ConcurrencyRateLimiter : RateLimiterBase /// Initializes a new ConcurrencyRateLimiter with the specified concurrency limit. /// /// The maximum number of concurrent requests. - internal ConcurrencyRateLimiter(int concurrencyLimit) + /// The next rate limiter to apply. + internal ConcurrencyRateLimiter(int concurrencyLimit, RateLimiterBase? next = null) : base(next) { _concurrencyLimitSemaphore = new SemaphoreSlim(concurrencyLimit); } @@ -61,8 +64,8 @@ internal sealed override async ValueTask Execute(AsyncF public override void Dispose() { _concurrencyLimitSemaphore.Dispose(); - Next.Dispose(); + Next?.Dispose(); } } } -#endif \ No newline at end of file +#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs index 1223bf302b..b1188d515c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs @@ -6,6 +6,7 @@ using System.Threading; using System.Threading.Tasks; +#nullable enable namespace Microsoft.Data.SqlClient.RateLimiter { /// @@ -15,6 +16,10 @@ internal sealed class PassthroughRateLimiter : RateLimiterBase { //TODO: no state, add static instance + internal PassthroughRateLimiter(RateLimiterBase? next = null) : base(next) + { + } + /// internal override ValueTask Execute( AsyncFlagFunc> callback, @@ -34,8 +39,8 @@ internal override ValueTask Execute( public override void Dispose() { - Next.Dispose(); + Next?.Dispose(); } } } -#endif \ No newline at end of file +#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs index 3089eb9a31..cac85b43b2 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; +#nullable enable namespace Microsoft.Data.SqlClient.RateLimiter { /// @@ -18,7 +19,13 @@ internal abstract class RateLimiterBase : IDisposable /// /// The next rate limiter that should be executed within the context of this rate limiter. /// - protected readonly RateLimiterBase Next; + private RateLimiterBase? _next; + protected RateLimiterBase? Next => _next; + + internal RateLimiterBase(RateLimiterBase? next = null) + { + _next = next; + } /// /// Execute the provided callback within the context of the rate limit, or pass the responsibility along to the next rate limiter. @@ -39,4 +46,4 @@ internal abstract ValueTask Execute( public abstract void Dispose(); } } -#endif \ No newline at end of file +#endif From daa14135b9fbb84d7843c0206d31731b912b73de Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 11 Mar 2025 14:25:39 -0700 Subject: [PATCH 14/31] Fix compilation. Add clear implementation. --- .../Microsoft/Data/SqlClient/AsyncFlagFunc.cs | 20 --- .../ConnectionPool/BetterSyncPool.cs | 132 +++++++++++------- 2 files changed, 81 insertions(+), 71 deletions(-) delete mode 100644 src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs deleted file mode 100644 index f50320310c..0000000000 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/AsyncFlagFunc.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Threading; - -namespace Microsoft.Data.SqlClient.RateLimiter -{ - /// - /// A function that operates asynchronously based on a flag. If isAsync is true, the function operates asynchronously. - /// If isAsync is false, the function operates synchronously. - /// - /// The type accepted by the callback as input. - /// The type returned by the callback. - /// An instance of State to be passed to the callback. - /// Indicates whether the function should operate asynchronously. - /// Allows cancellation of the operation. - /// Returns the result of the callback. - internal delegate TResult AsyncFlagFunc(TState state, bool isAsync, CancellationToken cancellationToken); -} diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index abfb08df1f..9c8f6dd8f3 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -63,7 +63,27 @@ internal override bool IsRunning internal override void Clear() { - //TODO + Interlocked.Increment(ref _clearCounter); + + if (Interlocked.CompareExchange(ref _isClearing, 1, 0) == 1) + return; + + try + { + var count = _idleCount; + while (count > 0 && _idleConnectorReader.TryRead(out var connector)) + { + if (CheckIdleConnector(connector)) + { + CloseConnector(connector); + count--; + } + } + } + finally + { + _isClearing = 0; + } } internal override bool TryGetConnection(DbConnection owningObject, TaskCompletionSource taskCompletionSource, DbConnectionOptions userOptions, out DbConnectionInternal? connection) @@ -113,8 +133,7 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) internal override void Startup() { - // NOTE: this occupies a thread for the whole duration of the warmup process. - ThreadPool.QueueUserWorkItem(async (_) => { await WarmUp(); }); + _ = WarmUp(); } internal override void Shutdown() @@ -134,7 +153,6 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt #endregion #region Implementation - private readonly DbConnectionPoolIdentity _identity; private readonly DbConnectionFactory _connectionFactory; @@ -180,7 +198,13 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt private Task _warmupTask; private readonly SemaphoreSlim _warmupLock; - private PoolPruningParameters _pruningParameters; + internal int _minIdleCount; + internal PeriodicTimer PruningTimer { get; init; } + internal PeriodicTimer MinIdleCountTimer { get; init; } + internal ValueTask PruningTimerListener { get; init; } + internal Task PruningTask { get; set; } + internal ValueTask UpdateMinIdleCountTask { get; init; } + internal SemaphoreSlim PruningLock { get; init; } #endregion // Counts the total number of open connectors tracked by the pool. @@ -189,6 +213,13 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt // Counts the number of connectors currently sitting idle in the pool. private volatile int _idleCount; + /// + /// Incremented every time this pool is cleared. Allows us to identify connections which were + /// created before the clear. + /// + private volatile int _clearCounter; + private volatile int _isClearing; + /// /// Initializes a new PoolingDataSource. /// @@ -200,6 +231,8 @@ internal BetterSyncPool( DbConnectionPoolProviderInfo connectionPoolProviderInfo, RateLimiterBase connectionRateLimiter) { + State = Initializing; + _connectionRateLimiter = connectionRateLimiter; _connectionFactory = connectionFactory; _connectionPoolGroup = connectionPoolGroup; @@ -227,19 +260,20 @@ internal BetterSyncPool( _warmupTask = Task.CompletedTask; _warmupLock = new SemaphoreSlim(1); + var pruningTimer = new PeriodicTimer(DefaultPruningPeriod); - _pruningParameters = new PoolPruningParameters - { - _minIdleCount = int.MaxValue, - - // TODO: base this on a user provided param? - PruningTimer = new PeriodicTimer(DefaultPruningPeriod), - MinIdleCountTimer = new PeriodicTimer(MinIdleCountPeriod), - PruningLock = new SemaphoreSlim(1), - PruningTimerListener = InitiatePruningTimerListener(), - PruningTask = Task.CompletedTask, - UpdateMinIdleCountTask = UpdateMinIdleCount(), - }; + _minIdleCount = int.MaxValue; + + // TODO: make these private readonly if possible + // TODO: base pruning timer on a user provided param? + PruningTimer = pruningTimer; + MinIdleCountTimer = new PeriodicTimer(MinIdleCountPeriod); + PruningLock = new SemaphoreSlim(1); + PruningTimerListener = InitiatePruningTimerListener(); + PruningTask = Task.CompletedTask; + UpdateMinIdleCountTask = UpdateMinIdleCount(); + + State = Running; } #region properties @@ -443,6 +477,7 @@ private void CloseConnector(DbConnectionInternal connector) //TODO: log error } + // TODO: check clear counter so that we don't clear new connections int i; for (i = 0; i < MaxPoolSize; i++) @@ -523,10 +558,10 @@ internal readonly struct OpenInternalConnectionState // It's better to block this thread and keep throughput high than to queue all of our opens onto a single worker thread. // Add an async path when this support is added to DbConnectionInternal. DbConnectionInternal? newConnection = state.Pool.ConnectionFactory.CreatePooledConnection( - state.Pool, - state.OwningConnection, - state.Pool._connectionPoolGroup.ConnectionOptions, - state.Pool._connectionPoolGroup.PoolKey, + state.Pool, + state.OwningConnection, + state.Pool._connectionPoolGroup.ConnectionOptions, + state.Pool._connectionPoolGroup.PoolKey, state.UserOptions); if (newConnection == null) @@ -599,7 +634,7 @@ internal async ValueTask InitiatePruningTimerListener() { _shutdownCT.ThrowIfCancellationRequested(); - while (await _pruningParameters.PruningTimer.WaitForNextTickAsync(_shutdownCT)) + while (await PruningTimer.WaitForNextTickAsync(_shutdownCT)) { await await PruneIdleConnections(); } @@ -613,35 +648,35 @@ internal async ValueTask InitiatePruningTimerListener() /// A ValueTask containing a Task that represents the pruning operation. internal async ValueTask PruneIdleConnections() { - if (!_pruningParameters.PruningTask.IsCompleted) + if (!PruningTask.IsCompleted) { - return _pruningParameters.PruningTask; + return PruningTask; } - await _pruningParameters.PruningLock.WaitAsync(); + await PruningLock.WaitAsync(); try { - if (_pruningParameters.PruningTask.IsCompleted) + if (PruningTask.IsCompleted && State is Running) { - _pruningParameters.PruningTask = _PruneIdleConnections(); + PruningTask = _PruneIdleConnections(); } } finally { - _pruningParameters.PruningLock.Release(); + PruningLock.Release(); } - return _pruningParameters.PruningTask; + return PruningTask; async Task _PruneIdleConnections() { try { - int numConnectionsToPrune = _pruningParameters._minIdleCount; + int numConnectionsToPrune = _minIdleCount; // Reset _minIdleCount for the next pruning period - _pruningParameters._minIdleCount = int.MaxValue; + _minIdleCount = int.MaxValue; // If we don't stop on null, we might cycle a bit? // we might read out all of the nulls we just wrote into the channel @@ -686,22 +721,26 @@ internal async ValueTask UpdateMinIdleCount() { _shutdownCT.ThrowIfCancellationRequested(); - while (await _pruningParameters.MinIdleCountTimer.WaitForNextTickAsync(_shutdownCT)) + while (await MinIdleCountTimer.WaitForNextTickAsync(_shutdownCT)) { + if (State is not Running) + { + continue; + } try { int currentMinIdle; int currentIdle; do { - currentMinIdle = _pruningParameters._minIdleCount; + currentMinIdle = _minIdleCount; currentIdle = _idleCount; if (currentIdle >= currentMinIdle) { break; } } - while (Interlocked.CompareExchange(ref _pruningParameters._minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); + while (Interlocked.CompareExchange(ref _minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); } catch { @@ -736,7 +775,7 @@ internal async ValueTask WarmUp() { // The task may have been started by another thread while we were // waiting on the semaphore - if (_warmupTask.IsCompleted) + if (_warmupTask.IsCompleted && State is Running) { _warmupTask = _WarmUp(_shutdownCT); } @@ -790,12 +829,14 @@ internal async ValueTask ShutdownAsync() { SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); + State = ShuttingDown; + // Cancel background tasks _shutdownCTS.Cancel(); await Task.WhenAll( - _pruningParameters.PruningTimerListener.AsTask(), - _pruningParameters.PruningTask, - _pruningParameters.UpdateMinIdleCountTask.AsTask(), + PruningTimerListener.AsTask(), + PruningTask, + UpdateMinIdleCountTask.AsTask(), _warmupTask); // Clean pool state @@ -804,24 +845,13 @@ await Task.WhenAll( // Handle disposable resources _shutdownCTS.Dispose(); _warmupLock.Dispose(); - _pruningParameters.PruningTimer.Dispose(); - _pruningParameters.MinIdleCountTimer.Dispose(); + PruningTimer.Dispose(); + MinIdleCountTimer.Dispose(); _connectionRateLimiter?.Dispose(); } // TODO: override clear method #endregion - - internal struct PoolPruningParameters - { - internal int _minIdleCount; - internal readonly PeriodicTimer PruningTimer { get; init; } - internal readonly PeriodicTimer MinIdleCountTimer { get; init; } - internal readonly ValueTask PruningTimerListener { get; init; } - internal Task PruningTask { get; set; } - internal readonly ValueTask UpdateMinIdleCountTask { get; init; } - internal readonly SemaphoreSlim PruningLock { get; init; } - } } } #endif From fcc451458310ab44863ede3a5d92caf2bae850eb Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 11 Mar 2025 15:38:54 -0700 Subject: [PATCH 15/31] Fix connection activation. Handle cancelled operations. Improve shutdown for better consistency. --- .../ConnectionPool/BetterSyncPool.cs | 71 +++++++++++++------ 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 9c8f6dd8f3..18fee4b910 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -61,6 +61,10 @@ internal override bool IsRunning internal override bool UseLoadBalancing => PoolGroupOptions.UseLoadBalancing; + /// + /// This only clears idle connections. Connections that are in use are not affected. + /// Different from previous behavior where all connections in the pool are doomed and eventually cleaned up. + /// internal override void Clear() { Interlocked.Increment(ref _clearCounter); @@ -139,7 +143,8 @@ internal override void Startup() internal override void Shutdown() { // NOTE: this occupies a thread for the whole duration of the shutdown process. - ThreadPool.QueueUserWorkItem(async (_) => { await ShutdownAsync(); }); + var shutdownTask = new Task(async () => await ShutdownAsync()); + shutdownTask.RunSynchronously(); } // TransactionEnded merely provides the plumbing for DbConnectionInternal to access the transacted pool @@ -300,6 +305,8 @@ internal async ValueTask GetInternalConnection(DbConnectio DbConnectionInternal? connector = GetIdleConnector(); if (connector != null) { + // TODO: transactions + connector.ActivateConnection(null); return connector; } @@ -307,6 +314,8 @@ internal async ValueTask GetInternalConnection(DbConnectio connector = await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); if (connector != null) { + // TODO: transactions + connector.ActivateConnection(null); return connector; } @@ -350,6 +359,8 @@ internal async ValueTask GetInternalConnection(DbConnectio if (CheckIdleConnector(connector)) { + // TODO: transactions + connector.ActivateConnection(null); return connector; } } @@ -372,6 +383,8 @@ internal async ValueTask GetInternalConnection(DbConnectio connector = GetIdleConnector(); if (connector != null) { + // TODO: transactions + connector.ActivateConnection(null); return connector; } @@ -380,6 +393,8 @@ internal async ValueTask GetInternalConnection(DbConnectio connector = await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); if (connector != null) { + // TODO: transactions + connector.ActivateConnection(null); return connector; } } @@ -470,7 +485,7 @@ private void CloseConnector(DbConnectionInternal connector) { try { - connector.DeactivateConnection(); + connector.Dispose(); } catch { @@ -634,9 +649,15 @@ internal async ValueTask InitiatePruningTimerListener() { _shutdownCT.ThrowIfCancellationRequested(); - while (await PruningTimer.WaitForNextTickAsync(_shutdownCT)) + try { - await await PruneIdleConnections(); + while (await PruningTimer.WaitForNextTickAsync(_shutdownCT)) + { + await await PruneIdleConnections(); + } + } catch (OperationCanceledException) + { + //TODO: log something here? } } @@ -721,31 +742,37 @@ internal async ValueTask UpdateMinIdleCount() { _shutdownCT.ThrowIfCancellationRequested(); - while (await MinIdleCountTimer.WaitForNextTickAsync(_shutdownCT)) + try { - if (State is not Running) + while (await MinIdleCountTimer.WaitForNextTickAsync(_shutdownCT)) { - continue; - } - try - { - int currentMinIdle; - int currentIdle; - do + if (State is not Running) { - currentMinIdle = _minIdleCount; - currentIdle = _idleCount; - if (currentIdle >= currentMinIdle) + continue; + } + try + { + int currentMinIdle; + int currentIdle; + do { - break; + currentMinIdle = _minIdleCount; + currentIdle = _idleCount; + if (currentIdle >= currentMinIdle) + { + break; + } } + while (Interlocked.CompareExchange(ref _minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); + } + catch + { + // TODO: log exception } - while (Interlocked.CompareExchange(ref _minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); - } - catch - { - // TODO: log exception } + } catch (OperationCanceledException) + { + // TODO: log here? } } From 43ecf2c82c057ae5e67151fb33f5dc2c51ca8a2b Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Fri, 21 Mar 2025 13:43:24 -0700 Subject: [PATCH 16/31] Deactivate connection when returning to pool --- .../Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 18fee4b910..08b89626b2 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -635,6 +635,8 @@ internal void ReturnInternalConnection(DbConnectionInternal connector) return; } + connector.DeactivateConnection(); + // Statement order is important since we have synchronous completions on the channel. Interlocked.Increment(ref _idleCount); var written = _idleConnectorWriter.TryWrite(connector); From 30b13c7f0e7c0435e3809052ced3b9a8f60b0f68 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 8 Apr 2025 14:38:19 -0700 Subject: [PATCH 17/31] Fix internal connection activation, deactivation, and internal state setting. --- .../ConnectionPool/BetterSyncPool.cs | 94 +++++++++++++------ 1 file changed, 65 insertions(+), 29 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 08b89626b2..ea96dd80ce 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -5,6 +5,7 @@ #if NET using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Diagnostics; @@ -96,7 +97,10 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio { ThreadPool.QueueUserWorkItem(async (_) => { - var connection = await GetInternalConnection(owningObject, userOptions, TimeSpan.Zero, false, CancellationToken.None).ConfigureAwait(false); + //TODO: use same timespan everywhere and tick down for queueuing and actual connection opening work + var connection = await GetInternalConnection(owningObject, userOptions, TimeSpan.FromSeconds(owningObject.ConnectionTimeout), false, CancellationToken.None).ConfigureAwait(false); + //TODO set transaction if necessary + PrepareConnection(owningObject, connection, null); taskCompletionSource.SetResult(connection); }); connection = null; @@ -104,11 +108,33 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio } else { - connection = GetInternalConnection(owningObject, userOptions, TimeSpan.Zero, false, CancellationToken.None).Result; + //TODO: use same timespan everywhere and tick down for queueuing and actual connection opening work + connection = GetInternalConnection(owningObject, userOptions, TimeSpan.FromSeconds(owningObject.ConnectionTimeout), false, CancellationToken.None).Result; + //TODO set transaction if necessary + PrepareConnection(owningObject, connection, null); return connection is not null; } } + private void PrepareConnection(DbConnection owningObject, DbConnectionInternal obj, Transaction? transaction) + { + lock (obj) + { // Protect against Clear and ReclaimEmancipatedObjects, which call IsEmancipated, which is affected by PrePush and PostPop + obj.PostPop(owningObject); + } + try + { + obj.ActivateConnection(transaction); + } + catch + { + // if Activate throws an exception + // put it back in the pool or have it properly disposed of + this.ReturnInternalConnection(obj, owningObject); + throw; + } + } + /// /// Creates a new connection to replace an existing connection /// @@ -125,9 +151,40 @@ internal override DbConnectionInternal ReplaceConnection(DbConnection owningObje } - internal override void ReturnInternalConnection(DbConnectionInternal obj, object owningObject) + internal override void ReturnInternalConnection(DbConnectionInternal connector, object? owningObject) { - ReturnInternalConnection(obj); + // Once a connection is closing (which is the state that we're in at + // this point in time) you cannot delegate a transaction to or enlist + // a transaction in it, so we can correctly presume that if there was + // not a delegated or enlisted transaction to start with, that there + // will not be a delegated or enlisted transaction once we leave the + // lock. + + lock (connector) + { + // Calling PrePush prevents the object from being reclaimed + // once we leave the lock, because it sets _pooledCount such + // that it won't appear to be out of the pool. What that + // means, is that we're now responsible for this connection: + // it won't get reclaimed if it gets lost. + connector.PrePush(owningObject); + + // TODO: Consider using a Cer to ensure that we mark the object for reclaimation in the event something bad happens? + } + + //TODO: verify transaction state + + if (!CheckConnector(connector)) + { + return; + } + + connector.DeactivateConnection(); + + // Statement order is important since we have synchronous completions on the channel. + Interlocked.Increment(ref _idleCount); + var written = _idleConnectorWriter.TryWrite(connector); + Debug.Assert(written); } internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) @@ -306,7 +363,6 @@ internal async ValueTask GetInternalConnection(DbConnectio if (connector != null) { // TODO: transactions - connector.ActivateConnection(null); return connector; } @@ -315,7 +371,6 @@ internal async ValueTask GetInternalConnection(DbConnectio if (connector != null) { // TODO: transactions - connector.ActivateConnection(null); return connector; } @@ -360,7 +415,6 @@ internal async ValueTask GetInternalConnection(DbConnectio if (CheckIdleConnector(connector)) { // TODO: transactions - connector.ActivateConnection(null); return connector; } } @@ -369,8 +423,7 @@ internal async ValueTask GetInternalConnection(DbConnectio cancellationToken.ThrowIfCancellationRequested(); Debug.Assert(finalToken.IsCancellationRequested); - //TODO: exceptions from resource file - throw new Exception("Pool exhausted", new TimeoutException()); + throw ADP.PooledOpenTimeout(); } catch (ChannelClosedException) { @@ -588,6 +641,8 @@ internal readonly struct OpenInternalConnectionState throw ADP.InternalError(ADP.InternalErrorCode.NewObjectCannotBePooled); // CreateObject succeeded, but non-poolable object } + newConnection.PrePush(null); + int i; for (i = 0; i < state.Pool.MaxPoolSize; i++) { @@ -624,25 +679,6 @@ internal readonly struct OpenInternalConnectionState } } - /// - internal void ReturnInternalConnection(DbConnectionInternal connector) - { - - //TODO: verify transaction state - - if (!CheckConnector(connector)) - { - return; - } - - connector.DeactivateConnection(); - - // Statement order is important since we have synchronous completions on the channel. - Interlocked.Increment(ref _idleCount); - var written = _idleConnectorWriter.TryWrite(connector); - Debug.Assert(written); - } - /// /// Initiates a task to wait on the pruning timer. Spins off child tasks to perform pruning /// each time the timer ticks. @@ -846,7 +882,7 @@ async Task _WarmUp(CancellationToken ct) // The connector has never been used, so it's safe to immediately return it to the // pool without resetting it. - ReturnInternalConnection(connector); + ReturnInternalConnection(connector, null); } } } From cc16e133240a51b0602e5dcb813875bedbe768ec Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 8 Apr 2025 16:06:22 -0700 Subject: [PATCH 18/31] Clean up warmup and prune parallelism constructs. --- .../ConnectionPool/BetterSyncPool.cs | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index ea96dd80ce..77e2e97122 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -194,7 +194,7 @@ internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) internal override void Startup() { - _ = WarmUp(); + WarmUp(); } internal override void Shutdown() @@ -573,7 +573,7 @@ private void CloseConnector(DbConnectionInternal connector) _idleConnectorWriter.TryWrite(null); // Ensure that we return to min pool size if closing this connector brought us below min pool size. - _ = WarmUp(); + WarmUp(); } /// @@ -691,7 +691,7 @@ internal async ValueTask InitiatePruningTimerListener() { while (await PruningTimer.WaitForNextTickAsync(_shutdownCT)) { - await await PruneIdleConnections(); + await PruneIdleConnections(); } } catch (OperationCanceledException) { @@ -705,14 +705,22 @@ internal async ValueTask InitiatePruningTimerListener() /// in place of ValueTask so that it cannot be recycled. /// /// A ValueTask containing a Task that represents the pruning operation. - internal async ValueTask PruneIdleConnections() + internal Task PruneIdleConnections() { + if (State is ShuttingDown) + { + return Task.CompletedTask; + } + if (!PruningTask.IsCompleted) { return PruningTask; } - await PruningLock.WaitAsync(); + if (!PruningLock.Wait(0)) + { + return PruningTask; + } try { @@ -820,22 +828,19 @@ internal async ValueTask UpdateMinIdleCount() /// in place of ValueTask so that it cannot be recycled. /// /// A ValueTask containing a Task that represents the warmup process. - internal async ValueTask WarmUp() + internal Task WarmUp() { - if (!IsWarmupEnabled) + if (State is ShuttingDown || !IsWarmupEnabled) { return Task.CompletedTask; } // Avoid semaphore wait if task is still running - if (!_warmupTask.IsCompleted) + if (!_warmupTask.IsCompleted || !_warmupLock.Wait(0)) { return _warmupTask; } - // Prevent multiple threads from modifying the warmup task - await _warmupLock.WaitAsync(); - try { // The task may have been started by another thread while we were @@ -905,7 +910,7 @@ await Task.WhenAll( _warmupTask); // Clean pool state - //TODO: close all open connections + Clear(); // Handle disposable resources _shutdownCTS.Dispose(); From 9085c3215d7a91a7742dc24a560f452098bbf36a Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Fri, 11 Apr 2025 10:23:55 -0700 Subject: [PATCH 19/31] Support .NET Framework --- .../netfx/src/Microsoft.Data.SqlClient.csproj | 19 ++ .../ConnectionPool/BetterSyncPool.cs | 174 ++++++++---------- .../ConnectionPool/DbConnectionPoolGroup.cs | 6 - .../RateLimiter/BlockingPeriodRateLimiter.cs | 6 +- .../RateLimiter/ConcurrencyRateLimiter.cs | 8 +- .../RateLimiter/PassthroughRateLimiter.cs | 6 +- .../SqlClient/RateLimiter/RateLimiterBase.cs | 6 +- tools/props/Versions.props | 1 + 8 files changed, 103 insertions(+), 123 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 8099e9ff71..4a5ebee69f 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -262,6 +262,9 @@ Microsoft\Data\ProviderBase\DbConnectionInternal.cs + + Microsoft\Data\SqlClient\ConnectionPool\BetterSyncPool.cs + Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPool.cs @@ -310,6 +313,21 @@ Microsoft\Data\SqlClient\ConnectionPool\SqlConnectionPoolProviderInfo.cs + + Microsoft\Data\SqlClient\RateLimiter\AsyncFlagFunc.cs + + + Microsoft\Data\SqlClient\RateLimiter\BlockingPeriodRateLimiter.cs + + + Microsoft\Data\SqlClient\RateLimiter\ConcurrencyRateLimiter.cs + + + Microsoft\Data\SqlClient\RateLimiter\PassthroughRateLimiter.cs + + + Microsoft\Data\SqlClient\RateLimiter\RateLimiterBase.cs + Microsoft\Data\ProviderBase\DbMetaDataFactory.cs @@ -957,6 +975,7 @@ + diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 77e2e97122..55c38c5d96 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if NET using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -78,6 +77,10 @@ internal override void Clear() var count = _idleCount; while (count > 0 && _idleConnectorReader.TryRead(out var connector)) { + if (connector is null) + { + continue; + } if (CheckIdleConnector(connector)) { CloseConnector(connector); @@ -260,13 +263,16 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt private Task _warmupTask; private readonly SemaphoreSlim _warmupLock; + + private readonly Timer _pruningTimer; + private readonly Timer _minIdleCountTimer; + private readonly SemaphoreSlim _pruningLock; + internal int _minIdleCount; - internal PeriodicTimer PruningTimer { get; init; } - internal PeriodicTimer MinIdleCountTimer { get; init; } - internal ValueTask PruningTimerListener { get; init; } + internal Timer PruningTimer => _pruningTimer; + internal Timer MinIdleCountTimer => _minIdleCountTimer; internal Task PruningTask { get; set; } - internal ValueTask UpdateMinIdleCountTask { get; init; } - internal SemaphoreSlim PruningLock { get; init; } + internal SemaphoreSlim PruningLock => _pruningLock; #endregion // Counts the total number of open connectors tracked by the pool. @@ -322,18 +328,15 @@ internal BetterSyncPool( _warmupTask = Task.CompletedTask; _warmupLock = new SemaphoreSlim(1); - var pruningTimer = new PeriodicTimer(DefaultPruningPeriod); + _pruningTimer = new Timer(PruneIdleConnections, this, DefaultPruningPeriod, DefaultPruningPeriod); _minIdleCount = int.MaxValue; // TODO: make these private readonly if possible // TODO: base pruning timer on a user provided param? - PruningTimer = pruningTimer; - MinIdleCountTimer = new PeriodicTimer(MinIdleCountPeriod); - PruningLock = new SemaphoreSlim(1); - PruningTimerListener = InitiatePruningTimerListener(); + _minIdleCountTimer = new Timer(UpdateMinIdleCount, this, MinIdleCountPeriod, MinIdleCountPeriod); + _pruningLock = new SemaphoreSlim(1); PruningTask = Task.CompletedTask; - UpdateMinIdleCountTask = UpdateMinIdleCount(); State = Running; } @@ -343,21 +346,14 @@ internal BetterSyncPool( internal int ObjectID => _objectID; internal bool IsWarmupEnabled { get; set; } = true; - - internal (int Total, int Idle, int Busy) Statistics - { - get - { - var numConnectors = _numConnectors; - var idleCount = _idleCount; - return (numConnectors, idleCount, numConnectors - idleCount); - } - } - #endregion +#if NETFRAMEWORK + internal override DbConnectionPoolCounters PerformanceCounters => throw new NotImplementedException(); +#endif +#endregion /// - internal async ValueTask GetInternalConnection(DbConnection owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) + internal async Task GetInternalConnection(DbConnection owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) { DbConnectionInternal? connector = GetIdleConnector(); if (connector != null) @@ -412,7 +408,7 @@ internal async ValueTask GetInternalConnection(DbConnectio } } - if (CheckIdleConnector(connector)) + if (connector != null && CheckIdleConnector(connector)) { // TODO: transactions return connector; @@ -486,7 +482,7 @@ internal async ValueTask GetInternalConnection(DbConnectio /// Returns true if the connector is live and unexpired, otherwise returns false. /// TODO: profile the inlining to see if it's necessary [MethodImpl(MethodImplOptions.AggressiveInlining)] - private bool CheckIdleConnector([NotNullWhen(true)] DbConnectionInternal? connector) + private bool CheckIdleConnector(DbConnectionInternal? connector) { if (connector is null) { @@ -581,30 +577,41 @@ private void CloseConnector(DbConnectionInternal connector) /// internal readonly struct OpenInternalConnectionState { - internal BetterSyncPool Pool { get; init; } - internal DbConnection? OwningConnection { get; init; } - internal DbConnectionOptions UserOptions { get; init; } - internal TimeSpan Timeout { get; init; } + internal OpenInternalConnectionState( + BetterSyncPool pool, + DbConnection? owningConnection, + DbConnectionOptions userOptions, + TimeSpan timeout) + { + Pool = pool; + OwningConnection = owningConnection; + UserOptions = userOptions; + Timeout = timeout; + } + + internal readonly BetterSyncPool Pool; + internal readonly DbConnection? OwningConnection; + internal readonly DbConnectionOptions UserOptions; + internal readonly TimeSpan Timeout; } /// - internal ValueTask OpenNewInternalConnection(DbConnection? owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) + internal Task OpenNewInternalConnection(DbConnection? owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) { return _connectionRateLimiter.Execute( RateLimitedOpen, - new OpenInternalConnectionState - { - Pool = this, - OwningConnection = owningConnection, - UserOptions = userOptions, - Timeout = timeout, - }, + new OpenInternalConnectionState( + pool: this, + owningConnection: owningConnection, + userOptions: userOptions, + timeout: timeout + ), async, cancellationToken ); - static ValueTask RateLimitedOpen(OpenInternalConnectionState state, bool async, CancellationToken cancellationToken) + static Task RateLimitedOpen(OpenInternalConnectionState state, bool async, CancellationToken cancellationToken) { // As long as we're under max capacity, attempt to increase the connector count and open a new connection. for (var numConnectors = state.Pool._numConnectors; numConnectors < state.Pool.MaxPoolSize; numConnectors = state.Pool._numConnectors) @@ -659,7 +666,7 @@ internal readonly struct OpenInternalConnectionState throw new Exception($"Could not find free slot in {state.Pool._connectors} when opening. Please report a bug."); } - return new ValueTask(newConnection); + return Task.FromResult(newConnection); } catch { @@ -675,51 +682,20 @@ internal readonly struct OpenInternalConnectionState } } - return new ValueTask((DbConnectionInternal?)null); + return Task.FromResult(null); } } /// - /// Initiates a task to wait on the pruning timer. Spins off child tasks to perform pruning - /// each time the timer ticks. + /// Initiates a task to prune idle connections from the pool. /// - internal async ValueTask InitiatePruningTimerListener() + internal void PruneIdleConnections(object? state) { _shutdownCT.ThrowIfCancellationRequested(); - try - { - while (await PruningTimer.WaitForNextTickAsync(_shutdownCT)) - { - await PruneIdleConnections(); - } - } catch (OperationCanceledException) - { - //TODO: log something here? - } - } - - /// - /// Prunes idle connections from the pool. - /// We may await this operation multiple times, so we need to use Task - /// in place of ValueTask so that it cannot be recycled. - /// - /// A ValueTask containing a Task that represents the pruning operation. - internal Task PruneIdleConnections() - { - if (State is ShuttingDown) + if (State is ShuttingDown || !PruningTask.IsCompleted || !PruningLock.Wait(0)) { - return Task.CompletedTask; - } - - if (!PruningTask.IsCompleted) - { - return PruningTask; - } - - if (!PruningLock.Wait(0)) - { - return PruningTask; + return; } try @@ -734,7 +710,7 @@ internal Task PruneIdleConnections() PruningLock.Release(); } - return PruningTask; + return; async Task _PruneIdleConnections() { @@ -784,37 +760,34 @@ async Task _PruneIdleConnections() /// cancellation token. /// /// A ValueTask tracking this operation. - internal async ValueTask UpdateMinIdleCount() + internal void UpdateMinIdleCount(object? state) { _shutdownCT.ThrowIfCancellationRequested(); try { - while (await MinIdleCountTimer.WaitForNextTickAsync(_shutdownCT)) + if (State is not Running) { - if (State is not Running) - { - continue; - } - try + return; + } + try + { + int currentMinIdle; + int currentIdle; + do { - int currentMinIdle; - int currentIdle; - do + currentMinIdle = _minIdleCount; + currentIdle = _idleCount; + if (currentIdle >= currentMinIdle) { - currentMinIdle = _minIdleCount; - currentIdle = _idleCount; - if (currentIdle >= currentMinIdle) - { - break; - } + break; } - while (Interlocked.CompareExchange(ref _minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); - } - catch - { - // TODO: log exception } + while (Interlocked.CompareExchange(ref _minIdleCount, currentIdle, currentMinIdle) != currentMinIdle); + } + catch + { + // TODO: log exception } } catch (OperationCanceledException) { @@ -895,7 +868,7 @@ async Task _WarmUp(CancellationToken ct) /// /// Shutsdown the pool and disposes pool resources. /// - internal async ValueTask ShutdownAsync() + internal async Task ShutdownAsync() { SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}", ObjectID); @@ -904,9 +877,7 @@ internal async ValueTask ShutdownAsync() // Cancel background tasks _shutdownCTS.Cancel(); await Task.WhenAll( - PruningTimerListener.AsTask(), PruningTask, - UpdateMinIdleCountTask.AsTask(), _warmupTask); // Clean pool state @@ -924,4 +895,3 @@ await Task.WhenAll( #endregion } } -#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs index d875e4d869..4f6f14aa62 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs @@ -9,9 +9,7 @@ using System.Threading; using Microsoft.Data.Common; using Microsoft.Data.ProviderBase; -#if NET using Microsoft.Data.SqlClient.RateLimiter; -#endif namespace Microsoft.Data.SqlClient.ConnectionPool { @@ -191,18 +189,14 @@ internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactor { DbConnectionPoolProviderInfo connectionPoolProviderInfo = connectionFactory.CreateConnectionPoolProviderInfo(ConnectionOptions); DbConnectionPool newPool; -#if NET if (LocalAppContextSwitches.UseLegacyConnectionPool) { -#endif newPool = new WaitHandleDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo); -#if NET } else { newPool = new BetterSyncPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo, new PassthroughRateLimiter()); } -#endif if (MarkPoolGroupAsActive()) { diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs index c6a8f5f730..df4a444ecb 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/BlockingPeriodRateLimiter.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if NET using System; using System.Threading; using System.Threading.Tasks; @@ -22,8 +21,8 @@ public BlockingPeriodRateLimiter(RateLimiterBase? next = null) : base(next) } /// - internal override ValueTask Execute( - AsyncFlagFunc> callback, + internal override Task Execute( + AsyncFlagFunc> callback, State state, bool isAsync, CancellationToken cancellationToken = default) @@ -37,4 +36,3 @@ public override void Dispose() } } } -#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs index fb9a6d36a2..061fee63a3 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/ConcurrencyRateLimiter.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if NET using System.Threading; using System.Threading.Tasks; @@ -29,7 +28,11 @@ internal ConcurrencyRateLimiter(int concurrencyLimit, RateLimiterBase? next = nu } /// - internal sealed override async ValueTask Execute(AsyncFlagFunc> callback, State state, bool isAsync, CancellationToken cancellationToken = default) + internal sealed override async Task Execute( + AsyncFlagFunc> callback, + State state, + bool isAsync, + CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -68,4 +71,3 @@ public override void Dispose() } } } -#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs index b1188d515c..8cbfc14282 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/PassthroughRateLimiter.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if NET using System.Threading; using System.Threading.Tasks; @@ -21,8 +20,8 @@ internal PassthroughRateLimiter(RateLimiterBase? next = null) : base(next) } /// - internal override ValueTask Execute( - AsyncFlagFunc> callback, + internal override Task Execute( + AsyncFlagFunc> callback, State state, bool isAsync, CancellationToken cancellationToken = default) @@ -43,4 +42,3 @@ public override void Dispose() } } } -#endif diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs index cac85b43b2..e6fc946f7d 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/RateLimiter/RateLimiterBase.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if NET using System; using System.Threading; using System.Threading.Tasks; @@ -37,8 +36,8 @@ internal RateLimiterBase(RateLimiterBase? next = null) /// Whether this method should run asynchronously. /// Cancels outstanding requests. /// Returns the result of the callback or the next rate limiter. - internal abstract ValueTask Execute( - AsyncFlagFunc> callback, + internal abstract Task Execute( + AsyncFlagFunc> callback, State state, bool isAsync, CancellationToken cancellationToken = default); @@ -46,4 +45,3 @@ internal abstract ValueTask Execute( public abstract void Dispose(); } } -#endif diff --git a/tools/props/Versions.props b/tools/props/Versions.props index 407a1d68a2..62a95495fb 100644 --- a/tools/props/Versions.props +++ b/tools/props/Versions.props @@ -29,6 +29,7 @@ 6.0.0 6.0.10 4.3.0 + 9.0.4 From 9ad8d6851232b8c527ccd0b0c9c44a93f9ec7655 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Fri, 11 Apr 2025 14:51:25 -0700 Subject: [PATCH 20/31] Add package to nuspec. Fix missing performance counters implementation. --- .../Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs | 2 +- tools/specs/Microsoft.Data.SqlClient.nuspec | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 55c38c5d96..0cd9ddf1b2 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -347,7 +347,7 @@ internal BetterSyncPool( internal bool IsWarmupEnabled { get; set; } = true; #if NETFRAMEWORK - internal override DbConnectionPoolCounters PerformanceCounters => throw new NotImplementedException(); + internal override DbConnectionPoolCounters PerformanceCounters => _connectionFactory.PerformanceCounters; #endif #endregion diff --git a/tools/specs/Microsoft.Data.SqlClient.nuspec b/tools/specs/Microsoft.Data.SqlClient.nuspec index 4018a35c29..639ee24148 100644 --- a/tools/specs/Microsoft.Data.SqlClient.nuspec +++ b/tools/specs/Microsoft.Data.SqlClient.nuspec @@ -40,6 +40,7 @@ When using NuGet 3.x this package requires at least version 3.4. + From e5fbb66c2d35e91397a5805ba4b41851a20b4d76 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Wed, 23 Apr 2025 14:36:40 -0700 Subject: [PATCH 21/31] Fix cancellation flows. Warmup adding to queue. --- .../ConnectionPool/BetterSyncPool.cs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 0cd9ddf1b2..580ff19c68 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -691,7 +691,12 @@ internal OpenInternalConnectionState( /// internal void PruneIdleConnections(object? state) { - _shutdownCT.ThrowIfCancellationRequested(); + // Important not to throw here. We're not in an async function, so there's no task to automatically + // propagate the exception to. If we throw, we'll crash the process. + if (_shutdownCT.IsCancellationRequested) + { + return; + } if (State is ShuttingDown || !PruningTask.IsCompleted || !PruningLock.Wait(0)) { @@ -762,7 +767,12 @@ async Task _PruneIdleConnections() /// A ValueTask tracking this operation. internal void UpdateMinIdleCount(object? state) { - _shutdownCT.ThrowIfCancellationRequested(); + // Important not to throw here. We're not in an async function, so there's no task to automatically + // propagate the exception to. If we throw, we'll crash the process. + if (_shutdownCT.IsCancellationRequested) + { + return; + } try { @@ -858,9 +868,11 @@ async Task _WarmUp(CancellationToken ct) return; } - // The connector has never been used, so it's safe to immediately return it to the + // The connector has never been used, so it's safe to immediately add it to the // pool without resetting it. - ReturnInternalConnection(connector, null); + Interlocked.Increment(ref _idleCount); + var written = _idleConnectorWriter.TryWrite(connector); + Debug.Assert(written); } } } From 5c76d741e63d1f5e44b14e9577b0e191c7eef030 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Wed, 7 May 2025 14:40:19 -0700 Subject: [PATCH 22/31] Add design doc. --- .../connection-pool/Core8AzureAccessToken.png | Bin 0 -> 313193 bytes design/connection-pool/Core8AzureDefault.png | Bin 0 -> 176015 bytes design/connection-pool/Core8Local.png | Bin 0 -> 151744 bytes design/connection-pool/Core8LocalLinux.png | Bin 0 -> 188925 bytes .../Framework481AzureDefault.png | Bin 0 -> 319381 bytes design/connection-pool/Framework481Local.png | Bin 0 -> 206252 bytes .../connection-pool/MeanTimeAzureCold-1.png | Bin 0 -> 46265 bytes design/connection-pool/MeanTimeAzureCold.png | Bin 0 -> 46301 bytes .../connection-pool/MeanTimeAzureWarm-1.png | Bin 0 -> 47575 bytes design/connection-pool/MeanTimeAzureWarm.png | Bin 0 -> 45778 bytes design/connection-pool/MeanTimeLocal.png | Bin 0 -> 38973 bytes .../connection-pool/MeanTimeLocalWarm-1.png | Bin 0 -> 36938 bytes design/connection-pool/MeanTimeLocalWarm.png | Bin 0 -> 41613 bytes .../SqlClient Connection Pool (11).png | Bin 0 -> 126968 bytes .../connection-pool-design-doc.md | 87 ++++++++++++++++++ .../connection-pooling-primer.md | 0 16 files changed, 87 insertions(+) create mode 100644 design/connection-pool/Core8AzureAccessToken.png create mode 100644 design/connection-pool/Core8AzureDefault.png create mode 100644 design/connection-pool/Core8Local.png create mode 100644 design/connection-pool/Core8LocalLinux.png create mode 100644 design/connection-pool/Framework481AzureDefault.png create mode 100644 design/connection-pool/Framework481Local.png create mode 100644 design/connection-pool/MeanTimeAzureCold-1.png create mode 100644 design/connection-pool/MeanTimeAzureCold.png create mode 100644 design/connection-pool/MeanTimeAzureWarm-1.png create mode 100644 design/connection-pool/MeanTimeAzureWarm.png create mode 100644 design/connection-pool/MeanTimeLocal.png create mode 100644 design/connection-pool/MeanTimeLocalWarm-1.png create mode 100644 design/connection-pool/MeanTimeLocalWarm.png create mode 100644 design/connection-pool/SqlClient Connection Pool (11).png create mode 100644 design/connection-pool/connection-pool-design-doc.md create mode 100644 design/connection-pool/connection-pooling-primer.md diff --git a/design/connection-pool/Core8AzureAccessToken.png b/design/connection-pool/Core8AzureAccessToken.png new file mode 100644 index 0000000000000000000000000000000000000000..67e210e05c67d116fe0afed676ca2315024b4cd9 GIT binary patch literal 313193 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

=~!&!Qg>2#!oQiq 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%0DKjB^$h*7v&XSVrkY?H| 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%0AgAubF}OG-`fW@v|11YtoX$vmXRgQaXkd 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 U8`Ab~NZ=n?DJ98Laif6$13s2a`v3p{ literal 0 HcmV?d00001 diff --git a/design/connection-pool/Core8AzureDefault.png b/design/connection-pool/Core8AzureDefault.png new file mode 100644 index 0000000000000000000000000000000000000000..dab98832610d71418551a42107921b10af7c003c GIT binary patch literal 176015 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 Q74Sz+N?Ec%{F(3n07JaT?*IS* literal 0 HcmV?d00001 diff --git a/design/connection-pool/Core8LocalLinux.png b/design/connection-pool/Core8LocalLinux.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c4d92c8ba75941c992fd0830cdda4f4695f98c GIT binary patch literal 188925 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�zdU@rOKtX0g^|&L?y)yTui+L(Dn#rTE0Q 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%0AD3+Op4)06HA&wZ@>#MhNCW7Wfh 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⪼7Wzawi$#IWw)3Z%5I+e%-3+N`eB!pUW1-i3< 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

private readonly ConcurrentDictionary _pooledDbAuthenticationContexts; - // Prevents synchronous operations from blocking on all available threads, - // which would stop async tasks from being scheduled and cause deadlocks. - // Use ProcessorCount/2 as a balance between sync and async tasks. + // Prevents synchronous operations which depend on async operations on managed + // threads from blocking on all available threads, which would stop async tasks + // from being scheduled and cause deadlocks. Use ProcessorCount/2 as a balance + // between sync and async tasks. private static SemaphoreSlim SyncOverAsyncSemaphore { get; } = new(Math.Max(1, Environment.ProcessorCount / 2)); private static int _objectTypeCount; // EventSource counter @@ -250,6 +452,11 @@ internal override void TransactionEnded(Transaction transaction, DbConnectionInt /// private readonly DbConnectionInternal?[] _connectors; + /// + /// Tracks all connectors currently managed by this pool that are in a transaction. + /// + private readonly TransactedConnectionPool _transactedConnectionPool; + /// /// Reader side for the idle connector channel. Contains nulls in order to release waiting attempts after /// a connector has been physically closed/broken. @@ -314,6 +521,7 @@ internal BetterSyncPool( capacity: 2); _connectors = new DbConnectionInternal[MaxPoolSize]; + _transactedConnectionPool = new TransactedConnectionPool(this); // We enforce Max Pool Size, so no need to to create a bounded channel (which is less efficient) // On the consuming side, we have the multiplexing write loop but also non-multiplexing Rents @@ -345,24 +553,27 @@ internal BetterSyncPool( internal TimeSpan ConnectionLifetime => PoolGroupOptions.LoadBalanceTimeout; internal int ObjectID => _objectID; internal bool IsWarmupEnabled { get; set; } = true; -#endregion + #endregion /// internal async Task GetInternalConnection(DbConnection owningConnection, DbConnectionOptions userOptions, TimeSpan timeout, bool async, CancellationToken cancellationToken) { - DbConnectionInternal? connector = GetIdleConnector(); - if (connector != null) + DbConnectionInternal? connector = null; + Transaction? transaction = null; + + if (HasTransactionAffinity) { - // TODO: transactions - return connector; + connector ??= GetFromTransactedPool(out transaction); } - // First, try to open a new physical connector. This will fail if we're at max capacity. - connector = await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); + connector ??= GetIdleConnector(); + + connector ??= await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); + if (connector != null) { - // TODO: transactions + PrepareConnection(owningConnection, connector, transaction); return connector; } @@ -389,6 +600,9 @@ internal async Task GetInternalConnection(DbConnection own SyncOverAsyncSemaphore.Wait(finalToken); try { + // If there are no connections in the channel, then this call will block until one is available. + // Because this call uses the managed thread pool, we need to limit the number of + // threads allowed to block here to avoid a deadlock. ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter awaiter = _idleConnectorReader.ReadAsync(finalToken).ConfigureAwait(false).GetAwaiter(); using ManualResetEventSlim mres = new ManualResetEventSlim(false, 0); @@ -406,7 +620,7 @@ internal async Task GetInternalConnection(DbConnection own if (connector != null && CheckIdleConnector(connector)) { - // TODO: transactions + PrepareConnection(owningConnection, connector, transaction); return connector; } } @@ -426,20 +640,14 @@ internal async Task GetInternalConnection(DbConnection own // If we're here, our waiting attempt on the idle connector channel was released with a null // (or bad connector), or we're in sync mode. Check again if a new idle connector has appeared since we last checked. connector = GetIdleConnector(); - if (connector != null) - { - // TODO: transactions - connector.ActivateConnection(null); - return connector; - } // We might have closed a connector in the meantime and no longer be at max capacity // so try to open a new connector and if that fails, loop again. - connector = await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); + connector ??= await OpenNewInternalConnection(owningConnection, userOptions, timeout, async, cancellationToken).ConfigureAwait(false); + if (connector != null) { - // TODO: transactions - connector.ActivateConnection(null); + PrepareConnection(owningConnection, connector, transaction); return connector; } } @@ -751,7 +959,7 @@ async Task _PruneIdleConnections() // Min pool size check above is best effort and may over prune. // Ensure warmup runs to bring us back up to min pool size if necessary. - await WarmUp(); + await WarmUp().ConfigureAwait(false); } } @@ -886,7 +1094,7 @@ internal async Task ShutdownAsync() _shutdownCTS.Cancel(); await Task.WhenAll( PruningTask, - _warmupTask); + _warmupTask).ConfigureAwait(false); // Clean pool state Clear(); diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/TransactedConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/TransactedConnectionPool.cs new file mode 100644 index 0000000000..cec29f8ab7 --- /dev/null +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/TransactedConnectionPool.cs @@ -0,0 +1,271 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.Transactions; +using Microsoft.Data.ProviderBase; + +namespace Microsoft.Data.SqlClient.ConnectionPool +{ + internal class TransactedConnectionPool + { + // This class is a way to stash our cloned Tx key for later disposal when it's no longer needed. + // We can't get at the key in the dictionary without enumerating entries, so we stash an extra + // copy as part of the value. + private sealed class TransactedConnectionList : List + { + private Transaction _transaction; + internal TransactedConnectionList(int initialAllocation, Transaction tx) : base(initialAllocation) + { + _transaction = tx; + } + + internal void Dispose() + { + if (_transaction != null) + { + _transaction.Dispose(); + } + } + } + + Dictionary _transactedCxns; + + DbConnectionPool _pool; + + private static int _objectTypeCount; // EventSource Counter + internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); + + internal TransactedConnectionPool(DbConnectionPool pool) + { + Debug.Assert(pool != null, "null pool?"); + + _pool = pool; + _transactedCxns = new Dictionary(); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed for connection pool {1}", ObjectID, _pool.ObjectId); + } + + internal int ObjectID + { + get + { + return _objectID; + } + } + + internal DbConnectionPool Pool + { + get + { + return _pool; + } + } + + internal DbConnectionInternal GetTransactedObject(Transaction transaction) + { + Debug.Assert(transaction != null, "null transaction?"); + + DbConnectionInternal transactedObject = null; + + TransactedConnectionList connections; + bool txnFound = false; + + lock (_transactedCxns) + { + txnFound = _transactedCxns.TryGetValue(transaction, out connections); + } + + // NOTE: GetTransactedObject is only used when AutoEnlist = True and the ambient transaction + // (Sys.Txns.Txn.Current) is still valid/non-null. This, in turn, means that we don't need + // to worry about a pending asynchronous TransactionCompletedEvent to trigger processing in + // TransactionEnded below and potentially wipe out the connections list underneath us. It + // is similarly alright if a pending addition to the connections list in PutTransactedObject + // below is not completed prior to the lock on the connections object here...getting a new + // connection is probably better than unnecessarily locking + if (txnFound) + { + Debug.Assert(connections != null); + + // synchronize multi-threaded access with PutTransactedObject (TransactionEnded should + // not be a concern, see comments above) + lock (connections) + { + int i = connections.Count - 1; + if (0 <= i) + { + transactedObject = connections[i]; + connections.RemoveAt(i); + } + } + } + + if (transactedObject != null) + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Popped.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + } + return transactedObject; + } + + internal void PutTransactedObject(Transaction transaction, DbConnectionInternal transactedObject) + { + Debug.Assert(transaction != null, "null transaction?"); + Debug.Assert(transactedObject != null, "null transactedObject?"); + + TransactedConnectionList connections; + bool txnFound = false; + + // NOTE: because TransactionEnded is an asynchronous notification, there's no guarantee + // around the order in which PutTransactionObject and TransactionEnded are called. + + lock (_transactedCxns) + { + // Check if a transacted pool has been created for this transaction + if (txnFound = _transactedCxns.TryGetValue(transaction, out connections)) + { + Debug.Assert(connections != null); + + // synchronize multi-threaded access with GetTransactedObject + lock (connections) + { + Debug.Assert(0 > connections.IndexOf(transactedObject), "adding to pool a second time?"); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Pushing.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + connections.Add(transactedObject); + } + } + } + + // CONSIDER: the following code is more complicated than it needs to be to avoid cloning the + // transaction and allocating memory within a lock. Is that complexity really necessary? + if (!txnFound) + { + // create the transacted pool, making sure to clone the associated transaction + // for use as a key in our internal dictionary of transactions and connections + Transaction transactionClone = null; + TransactedConnectionList newConnections = null; + + try + { + transactionClone = transaction.Clone(); + newConnections = new TransactedConnectionList(2, transactionClone); // start with only two connections in the list; most times we won't need that many. + + lock (_transactedCxns) + { + // NOTE: in the interim between the locks on the transacted pool (this) during + // execution of this method, another thread (threadB) may have attempted to + // add a different connection to the transacted pool under the same + // transaction. As a result, threadB may have completed creating the + // transacted pool while threadA was processing the above instructions. + if (txnFound = _transactedCxns.TryGetValue(transaction, out connections)) + { + Debug.Assert(connections != null); + + // synchronize multi-threaded access with GetTransactedObject + lock (connections) + { + Debug.Assert(0 > connections.IndexOf(transactedObject), "adding to pool a second time?"); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Pushing.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + connections.Add(transactedObject); + } + } + else + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Adding List to transacted pool.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + + // add the connection/transacted object to the list + newConnections.Add(transactedObject); + + _transactedCxns.Add(transactionClone, newConnections); + transactionClone = null; // we've used it -- don't throw it or the TransactedConnectionList that references it away. + } + } + } + finally + { + if (transactionClone != null) + { + if (newConnections != null) + { + // another thread created the transaction pool and thus the new + // TransactedConnectionList was not used, so dispose of it and + // the transaction clone that it incorporates. + newConnections.Dispose(); + } + else + { + // memory allocation for newConnections failed...clean up unused transactionClone + transactionClone.Dispose(); + } + } + } + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Added.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + } + + SqlClientEventSource.Metrics.EnterFreeConnection(); + } + + internal void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transaction Completed", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + TransactedConnectionList connections; + int entry = -1; + + // NOTE: because TransactionEnded is an asynchronous notification, there's no guarantee + // around the order in which PutTransactionObject and TransactionEnded are called. As + // such, it is possible that the transaction does not yet have a pool created. + + // TODO: is this a plausible and/or likely scenario? Do we need to have a mechanism to ensure + // TODO: that the pending creation of a transacted pool for this transaction is aborted when + // TODO: PutTransactedObject finally gets some CPU time? + + lock (_transactedCxns) + { + if (_transactedCxns.TryGetValue(transaction, out connections)) + { + Debug.Assert(connections != null); + + bool shouldDisposeConnections = false; + + // Lock connections to avoid conflict with GetTransactionObject + lock (connections) + { + entry = connections.IndexOf(transactedObject); + + if (entry >= 0) + { + connections.RemoveAt(entry); + } + + // Once we've completed all the ended notifications, we can + // safely remove the list from the transacted pool. + if (0 >= connections.Count) + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Removing List from transacted pool.", ObjectID, transaction.GetHashCode()); + _transactedCxns.Remove(transaction); + + // we really need to dispose our connection list; it may have + // native resources via the tx and GC may not happen soon enough. + shouldDisposeConnections = true; + } + } + + if (shouldDisposeConnections) + { + connections.Dispose(); + } + } + else + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transacted pool not yet created prior to transaction completing. Connection may be leaked.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); + } + } + + // If (and only if) we found the connection in the list of + // connections, we'll put it back... + if (0 <= entry) + { + + SqlClientEventSource.Metrics.ExitFreeConnection(); + Pool.PutObjectFromTransactedPool(transactedObject); + } + } + + } +} diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index bdb07041d5..dad3bdebe0 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -21,26 +21,6 @@ namespace Microsoft.Data.SqlClient.ConnectionPool { internal sealed class WaitHandleDbConnectionPool : DbConnectionPool { - // This class is a way to stash our cloned Tx key for later disposal when it's no longer needed. - // We can't get at the key in the dictionary without enumerating entries, so we stash an extra - // copy as part of the value. - private sealed class TransactedConnectionList : List - { - private Transaction _transaction; - internal TransactedConnectionList(int initialAllocation, Transaction tx) : base(initialAllocation) - { - _transaction = tx; - } - - internal void Dispose() - { - if (_transaction != null) - { - _transaction.Dispose(); - } - } - } - private sealed class PendingGetConnection { public PendingGetConnection(long dueTime, DbConnection owner, TaskCompletionSource completion, DbConnectionOptions userOptions) @@ -56,250 +36,6 @@ public PendingGetConnection(long dueTime, DbConnection owner, TaskCompletionSour public DbConnectionOptions UserOptions { get; private set; } } - private sealed class TransactedConnectionPool - { - Dictionary _transactedCxns; - - DbConnectionPool _pool; - - private static int _objectTypeCount; // EventSource Counter - internal readonly int _objectID = System.Threading.Interlocked.Increment(ref _objectTypeCount); - - internal TransactedConnectionPool(DbConnectionPool pool) - { - Debug.Assert(pool != null, "null pool?"); - - _pool = pool; - _transactedCxns = new Dictionary(); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Constructed for connection pool {1}", ObjectID, _pool.ObjectId); - } - - internal int ObjectID - { - get - { - return _objectID; - } - } - - internal DbConnectionPool Pool - { - get - { - return _pool; - } - } - - internal DbConnectionInternal GetTransactedObject(Transaction transaction) - { - Debug.Assert(transaction != null, "null transaction?"); - - DbConnectionInternal transactedObject = null; - - TransactedConnectionList connections; - bool txnFound = false; - - lock (_transactedCxns) - { - txnFound = _transactedCxns.TryGetValue(transaction, out connections); - } - - // NOTE: GetTransactedObject is only used when AutoEnlist = True and the ambient transaction - // (Sys.Txns.Txn.Current) is still valid/non-null. This, in turn, means that we don't need - // to worry about a pending asynchronous TransactionCompletedEvent to trigger processing in - // TransactionEnded below and potentially wipe out the connections list underneath us. It - // is similarly alright if a pending addition to the connections list in PutTransactedObject - // below is not completed prior to the lock on the connections object here...getting a new - // connection is probably better than unnecessarily locking - if (txnFound) - { - Debug.Assert(connections != null); - - // synchronize multi-threaded access with PutTransactedObject (TransactionEnded should - // not be a concern, see comments above) - lock (connections) - { - int i = connections.Count - 1; - if (0 <= i) - { - transactedObject = connections[i]; - connections.RemoveAt(i); - } - } - } - - if (transactedObject != null) - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Popped.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - } - return transactedObject; - } - - internal void PutTransactedObject(Transaction transaction, DbConnectionInternal transactedObject) - { - Debug.Assert(transaction != null, "null transaction?"); - Debug.Assert(transactedObject != null, "null transactedObject?"); - - TransactedConnectionList connections; - bool txnFound = false; - - // NOTE: because TransactionEnded is an asynchronous notification, there's no guarantee - // around the order in which PutTransactionObject and TransactionEnded are called. - - lock (_transactedCxns) - { - // Check if a transacted pool has been created for this transaction - if (txnFound = _transactedCxns.TryGetValue(transaction, out connections)) - { - Debug.Assert(connections != null); - - // synchronize multi-threaded access with GetTransactedObject - lock (connections) - { - Debug.Assert(0 > connections.IndexOf(transactedObject), "adding to pool a second time?"); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Pushing.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - connections.Add(transactedObject); - } - } - } - - // CONSIDER: the following code is more complicated than it needs to be to avoid cloning the - // transaction and allocating memory within a lock. Is that complexity really necessary? - if (!txnFound) - { - // create the transacted pool, making sure to clone the associated transaction - // for use as a key in our internal dictionary of transactions and connections - Transaction transactionClone = null; - TransactedConnectionList newConnections = null; - - try - { - transactionClone = transaction.Clone(); - newConnections = new TransactedConnectionList(2, transactionClone); // start with only two connections in the list; most times we won't need that many. - - lock (_transactedCxns) - { - // NOTE: in the interim between the locks on the transacted pool (this) during - // execution of this method, another thread (threadB) may have attempted to - // add a different connection to the transacted pool under the same - // transaction. As a result, threadB may have completed creating the - // transacted pool while threadA was processing the above instructions. - if (txnFound = _transactedCxns.TryGetValue(transaction, out connections)) - { - Debug.Assert(connections != null); - - // synchronize multi-threaded access with GetTransactedObject - lock (connections) - { - Debug.Assert(0 > connections.IndexOf(transactedObject), "adding to pool a second time?"); - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Pushing.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - connections.Add(transactedObject); - } - } - else - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Adding List to transacted pool.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - - // add the connection/transacted object to the list - newConnections.Add(transactedObject); - - _transactedCxns.Add(transactionClone, newConnections); - transactionClone = null; // we've used it -- don't throw it or the TransactedConnectionList that references it away. - } - } - } - finally - { - if (transactionClone != null) - { - if (newConnections != null) - { - // another thread created the transaction pool and thus the new - // TransactedConnectionList was not used, so dispose of it and - // the transaction clone that it incorporates. - newConnections.Dispose(); - } - else - { - // memory allocation for newConnections failed...clean up unused transactionClone - transactionClone.Dispose(); - } - } - } - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Added.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - } - - SqlClientEventSource.Metrics.EnterFreeConnection(); - } - - internal void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transaction Completed", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - TransactedConnectionList connections; - int entry = -1; - - // NOTE: because TransactionEnded is an asynchronous notification, there's no guarantee - // around the order in which PutTransactionObject and TransactionEnded are called. As - // such, it is possible that the transaction does not yet have a pool created. - - // TODO: is this a plausible and/or likely scenario? Do we need to have a mechanism to ensure - // TODO: that the pending creation of a transacted pool for this transaction is aborted when - // TODO: PutTransactedObject finally gets some CPU time? - - lock (_transactedCxns) - { - if (_transactedCxns.TryGetValue(transaction, out connections)) - { - Debug.Assert(connections != null); - - bool shouldDisposeConnections = false; - - // Lock connections to avoid conflict with GetTransactionObject - lock (connections) - { - entry = connections.IndexOf(transactedObject); - - if (entry >= 0) - { - connections.RemoveAt(entry); - } - - // Once we've completed all the ended notifications, we can - // safely remove the list from the transacted pool. - if (0 >= connections.Count) - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Removing List from transacted pool.", ObjectID, transaction.GetHashCode()); - _transactedCxns.Remove(transaction); - - // we really need to dispose our connection list; it may have - // native resources via the tx and GC may not happen soon enough. - shouldDisposeConnections = true; - } - } - - if (shouldDisposeConnections) - { - connections.Dispose(); - } - } - else - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transacted pool not yet created prior to transaction completing. Connection may be leaked.", ObjectID, transaction.GetHashCode(), transactedObject.ObjectID); - } - } - - // If (and only if) we found the connection in the list of - // connections, we'll put it back... - if (0 <= entry) - { - - SqlClientEventSource.Metrics.ExitFreeConnection(); - Pool.PutObjectFromTransactedPool(transactedObject); - } - } - - } - private sealed class PoolWaitHandles { private readonly Semaphore _poolSemaphore; @@ -1439,45 +1175,6 @@ private DbConnectionInternal GetFromGeneralPool() return obj; } - private DbConnectionInternal GetFromTransactedPool(out Transaction transaction) - { - transaction = ADP.GetCurrentTransaction(); - DbConnectionInternal obj = null; - - if (transaction != null && _transactedConnectionPool != null) - { - obj = _transactedConnectionPool.GetTransactedObject(transaction); - - if (obj != null) - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Popped from transacted pool.", ObjectId, obj.ObjectID); - - SqlClientEventSource.Metrics.ExitFreeConnection(); - - if (obj.IsTransactionRoot) - { - try - { - obj.IsConnectionAlive(true); - } - catch - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); - DestroyObject(obj); - throw; - } - } - else if (!obj.IsConnectionAlive()) - { - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); - DestroyObject(obj); - obj = null; - } - } - } - return obj; - } - #if NETFRAMEWORK [ResourceExposure(ResourceScope.None)] // SxS: this method does not expose resources [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] From 00bc21219d779a3b3facedad529e4a5154ff5d9e Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 12 May 2025 10:16:31 -0700 Subject: [PATCH 25/31] Fix main pull --- .../src/Microsoft.Data.SqlClient.csproj | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index b62dc6e19e..2b63c07f54 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -52,13 +52,31 @@ Microsoft\Data\Common\BitConverterCompatible.cs + + + Microsoft\Data\Common\ConnectionString\AttestationProtocolUtilities.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringDefaults.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringKeywords.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringSynonyms.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringUtilities.cs + + + Microsoft\Data\Common\ConnectionString\IpAddressPreferenceUtilities.cs + + + Microsoft\Data\Common\ConnectionString\PoolBlockingUtilities.cs Microsoft\Data\Common\DbConnectionOptions.Common.cs - - Microsoft\Data\Common\DbConnectionStringCommon.cs - Microsoft\Data\Common\MultipartIdentifier.cs @@ -977,6 +995,7 @@ Resources\%(RecursiveDir)%(Filename)%(Extension) Microsoft.Data.SqlClient.Resources.%(Filename).resources + Microsoft.Data.SqlClient.SqlMetaData.xml From 747701828e93b25f54d70d8a7d97c46f734c3291 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 12 May 2025 10:47:56 -0700 Subject: [PATCH 26/31] Fix nullables --- .../src/Microsoft.Data.SqlClient.csproj | 21 ---------- .../ConnectionPool/BetterSyncPool.cs | 8 ++-- .../WaitHandleDbConnectionPool.cs | 39 +++++++++++++++++++ 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 2b63c07f54..825b25a5ab 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -52,27 +52,6 @@ Microsoft\Data\Common\BitConverterCompatible.cs - - - Microsoft\Data\Common\ConnectionString\AttestationProtocolUtilities.cs - - - Microsoft\Data\Common\ConnectionString\DbConnectionStringDefaults.cs - - - Microsoft\Data\Common\ConnectionString\DbConnectionStringKeywords.cs - - - Microsoft\Data\Common\ConnectionString\DbConnectionStringSynonyms.cs - - - Microsoft\Data\Common\ConnectionString\DbConnectionStringUtilities.cs - - - Microsoft\Data\Common\ConnectionString\IpAddressPreferenceUtilities.cs - - - Microsoft\Data\Common\ConnectionString\PoolBlockingUtilities.cs Microsoft\Data\Common\DbConnectionOptions.Common.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 60b21528ac..61677fc866 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -316,10 +316,10 @@ private void DeactivateObject(DbConnectionInternal obj) Debug.Assert(rootTxn == true || returnToGeneralPool == true || destroyObject == true); } - internal override void PutObjectFromTransactedPool(DbConnectionInternal obj) + internal override void PutObjectFromTransactedPool(DbConnectionInternal? obj) { Debug.Assert(obj != null, "null pooledObject?"); - Debug.Assert(obj.EnlistedTransaction == null, "pooledObject is still enlisted?"); + Debug.Assert(obj!.EnlistedTransaction == null, "pooledObject is still enlisted?"); obj.DeactivateConnection(); @@ -361,13 +361,13 @@ internal override void Shutdown() // that is implemented inside DbConnectionPool. This method's counterpart (PutTransactedObject) should // only be called from DbConnectionPool.DeactivateObject and thus the plumbing to provide access to // other objects is unnecessary (hence the asymmetry of Ended but no Begin) - internal override void TransactionEnded(Transaction transaction, DbConnectionInternal transactedObject) + internal override void TransactionEnded(Transaction? transaction, DbConnectionInternal? transactedObject) { Debug.Assert(transaction != null, "null transaction?"); Debug.Assert(transactedObject != null, "null transactedObject?"); // Note: connection may still be associated with transaction due to Explicit Unbinding requirement. - SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transaction Completed", ObjectId, transaction.GetHashCode(), transactedObject.ObjectID); + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Transaction {1}, Connection {2}, Transaction Completed", ObjectId, transaction?.GetHashCode(), transactedObject?.ObjectID); // called by the internal connection when it get's told that the // transaction is completed. We tell the transacted pool to remove diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs index dad3bdebe0..5c022a1ddd 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/WaitHandleDbConnectionPool.cs @@ -1175,6 +1175,45 @@ private DbConnectionInternal GetFromGeneralPool() return obj; } + private DbConnectionInternal GetFromTransactedPool(out Transaction transaction) + { + transaction = ADP.GetCurrentTransaction(); + DbConnectionInternal obj = null; + + if (transaction != null && _transactedConnectionPool != null) + { + obj = _transactedConnectionPool.GetTransactedObject(transaction); + + if (obj != null) + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, Popped from transacted pool.", ObjectId, obj.ObjectID); + + SqlClientEventSource.Metrics.ExitFreeConnection(); + + if (obj.IsTransactionRoot) + { + try + { + obj.IsConnectionAlive(true); + } + catch + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); + DestroyObject(obj); + throw; + } + } + else if (!obj.IsConnectionAlive()) + { + SqlClientEventSource.Log.TryPoolerTraceEvent(" {0}, Connection {1}, found dead and removed.", ObjectId, obj.ObjectID); + DestroyObject(obj); + obj = null; + } + } + } + return obj; + } + #if NETFRAMEWORK [ResourceExposure(ResourceScope.None)] // SxS: this method does not expose resources [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] From 501074077b683423d89ec648466a46a98752d1af Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 12 May 2025 10:56:49 -0700 Subject: [PATCH 27/31] Align netcore proj file --- .../src/Microsoft.Data.SqlClient.csproj | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 825b25a5ab..c6f9ab030f 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -53,6 +53,27 @@ Microsoft\Data\Common\BitConverterCompatible.cs + + Microsoft\Data\Common\ConnectionString\AttestationProtocolUtilities.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringDefaults.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringKeywords.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringSynonyms.cs + + + Microsoft\Data\Common\ConnectionString\DbConnectionStringUtilities.cs + + + Microsoft\Data\Common\ConnectionString\IpAddressPreferenceUtilities.cs + + + Microsoft\Data\Common\ConnectionString\PoolBlockingUtilities.cs + Microsoft\Data\Common\DbConnectionOptions.Common.cs @@ -230,6 +251,9 @@ Microsoft\Data\SqlClient\Diagnostics\SqlClientConnectionOpenError.netcore.cs + + Microsoft\Data\SqlClient\Diagnostics\SqlClientMetrics.cs + Microsoft\Data\SqlClient\Diagnostics\SqlClientTransactionCommitAfter.netcore.cs @@ -530,6 +554,9 @@ Microsoft\Data\SqlClient\SqlDataAdapter.cs + + Microsoft\Data\SqlClient\SqlDataReader.cs + Microsoft\Data\SqlClient\SqlDbColumn.cs @@ -602,12 +629,6 @@ Microsoft\Data\SqlClient\SqlNotificationType.cs - - Microsoft\Data\SqlClient\SqlObjectPool.cs - - - Microsoft\Data\SqlClient\SqlObjectPools.cs - Microsoft\Data\SqlClient\SqlParameter.cs @@ -665,6 +686,12 @@ Microsoft\Data\SqlClient\SSPI\SSPIContextProvider.cs + + Microsoft\Data\SqlClient\Utilities\ObjectPool.cs + + + Microsoft\Data\SqlClient\Utilities\ObjectPools.cs + Microsoft\Data\SqlClient\TdsEnums.cs @@ -701,6 +728,9 @@ Microsoft\Data\SqlClient\VirtualSecureModeEnclaveProviderBase.cs + + Microsoft\Data\SqlDbTypeExtensions.cs + Microsoft\Data\SQLTypes\SQLResource.cs @@ -719,12 +749,8 @@ Common\System\Diagnostics\CodeAnalysis.cs - - Microsoft\Data\SqlDbTypeExtensions.cs - - @@ -745,13 +771,11 @@ - - @@ -945,10 +969,6 @@ - - - - @@ -974,7 +994,6 @@ Resources\%(RecursiveDir)%(Filename)%(Extension) Microsoft.Data.SqlClient.Resources.%(Filename).resources - Microsoft.Data.SqlClient.SqlMetaData.xml From 30869c9c8d206394282f588d0ffbb63a1a4ff1ff Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 12 May 2025 11:06:33 -0700 Subject: [PATCH 28/31] Align netcore proj file --- .../netcore/src/Microsoft.Data.SqlClient.csproj | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index c6f9ab030f..09b0724da4 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -32,9 +32,6 @@ $([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFramework)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)')) - - - @@ -747,7 +744,7 @@ Resources\ResDescriptionAttribute.cs - Common\System\Diagnostics\CodeAnalysis.cs + System\Diagnostics\CodeAnalysis.cs From 6b16e14b4838b5fcc2f46d01763ecf91aca1a9ef Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 12 May 2025 14:57:47 -0700 Subject: [PATCH 29/31] Fix exception handling to avoid AggregateException. --- .../connection-pooling-primer.md | 18 ++++++++++++++++++ .../SqlClient/ConnectionPool/BetterSyncPool.cs | 16 ++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/design/connection-pool/connection-pooling-primer.md b/design/connection-pool/connection-pooling-primer.md index e69de29bb2..7832f0c414 100644 --- a/design/connection-pool/connection-pooling-primer.md +++ b/design/connection-pool/connection-pooling-primer.md @@ -0,0 +1,18 @@ +# Primer on Connection Pooling + +## Overview +Connection pooling is a technique used to manage database connections efficiently. It involves maintaining a pool of connections that can be reused, reducing the overhead of opening and closing connections frequently. + +## Key Concepts +- **Connection Pool Initialization**: A connection pool is created for each unique connection string. The pool maintains a collection of connections that are already logged in and ready to use. +- **Connection Reuse and Creation**: Connections are reused from the pool if available; otherwise, new connections are created. Connection strings are used to differentiate pools, and any change in the connection string results in a new pool. +- **Connection String Sensitivity**: Connection pooling is not sensitive to whitespace in connection strings. Different authentication methods for the same user result in separate pools. +- **Pool Management**: Pools are managed per process. A pool manager oversees all pools and determines which pool to use based on the connection string. +- **Session Settings**: SQL Server provides a procedure (SP reset connection) to reset session settings when reusing a connection. SP reset connection is triggered every time a connection is reused from the pool. +- **Handling Transactions**: Connections involved in transactions are handled separately and may be reset while preserving the transaction state. +- **Connection Liveness**: Connection liveness is checked when pulling connections from the pool. Dead connections are discarded, and new ones are created if necessary. +- **Connection Pruning**: Idle connections above the minimum threshold are closed periodically to manage resources. Pruning helps reclaim leaked connections and maintain the pool size within the defined limits. +- **Warm-Up Process**: On application startup, the pool warms up to the minimum pool size by creating connections in the background. +- **Handling Broken Connections**: Broken connections are detected and handled by creating new connections if the session cannot be recovered. +- **Concurrency and Async Handling**: Connection creation should happen on separate threads to avoid queuing and improve performance. +- **Security Considerations**: Pools are separated based on user authentication to prevent unauthorized access. \ No newline at end of file diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs index 61677fc866..5c570c55f0 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs @@ -98,11 +98,17 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio { if (taskCompletionSource is not null) { - ThreadPool.QueueUserWorkItem(async (_) => + Task.Run(async () => { //TODO: use same timespan everywhere and tick down for queueuing and actual connection opening work - var connection = await GetInternalConnection(owningObject, userOptions, TimeSpan.FromSeconds(owningObject.ConnectionTimeout), true, CancellationToken.None).ConfigureAwait(false); - taskCompletionSource.SetResult(connection); + try + { + var connection = await GetInternalConnection(owningObject, userOptions, TimeSpan.FromSeconds(owningObject.ConnectionTimeout), true, CancellationToken.None).ConfigureAwait(false); + taskCompletionSource.SetResult(connection); + } catch (Exception e) + { + taskCompletionSource.SetException(e); + } }); connection = null; return false; @@ -110,7 +116,9 @@ internal override bool TryGetConnection(DbConnection owningObject, TaskCompletio else { //TODO: use same timespan everywhere and tick down for queueuing and actual connection opening work - connection = GetInternalConnection(owningObject, userOptions, TimeSpan.FromSeconds(owningObject.ConnectionTimeout), false, CancellationToken.None).Result; + var task = GetInternalConnection(owningObject, userOptions, TimeSpan.FromSeconds(owningObject.ConnectionTimeout), false, CancellationToken.None); + //TODO: move sync over async limit to this spot? + connection = task.GetAwaiter().GetResult(); return connection is not null; } } From a4bd12daa7b3a52b81bd729e6d42925b902830e9 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Mon, 12 May 2025 17:18:15 -0700 Subject: [PATCH 30/31] Fix missing provider info check. --- .../src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs | 2 +- .../netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index ca9bcc2cd9..de627b70db 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -86,7 +86,7 @@ override protected DbConnectionInternal CreateConnection(DbConnectionOptions opt redirectedUserInstance = true; string instanceName; - if (pool == null || (pool != null && pool.Count <= 0)) + if (pool == null || (pool != null && ((SqlConnectionPoolProviderInfo)pool.ProviderInfo).InstanceName == null)) { // Non-pooled or pooled and no connections in the pool. SqlInternalConnectionTds sseConnection = null; try diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs index d3402a48bd..e70f829070 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionFactory.cs @@ -93,7 +93,7 @@ override protected DbConnectionInternal CreateConnection(DbConnectionOptions opt redirectedUserInstance = true; string instanceName; - if (pool == null || (pool != null && pool.Count <= 0)) + if (pool == null || (pool != null && ((SqlConnectionPoolProviderInfo)pool.ProviderInfo).InstanceName == null)) { // Non-pooled or pooled and no connections in the pool. SqlInternalConnectionTds sseConnection = null; From 600f62bdcdf76d3811f55faa01f993881248abd3 Mon Sep 17 00:00:00 2001 From: Malcolm Daigle Date: Tue, 13 May 2025 14:55:46 -0700 Subject: [PATCH 31/31] Rename pool implementation. Fix test helper. --- .../netcore/src/Microsoft.Data.SqlClient.csproj | 4 ++-- .../netfx/src/Microsoft.Data.SqlClient.csproj | 4 ++-- .../{BetterSyncPool.cs => ChannelDbConnectionPool.cs} | 8 ++++---- .../SqlClient/ConnectionPool/DbConnectionPoolGroup.cs | 2 +- .../Common/SystemDataInternals/ConnectionPoolHelper.cs | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/{BetterSyncPool.cs => ChannelDbConnectionPool.cs} (99%) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 09b0724da4..54146cb175 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -95,8 +95,8 @@ Microsoft\Data\ProviderBase\DbConnectionFactory.cs - - Microsoft\Data\SqlClient\ConnectionPool\BetterSyncPool.cs + + Microsoft\Data\SqlClient\ConnectionPool\ChannelDbConnectionPool.cs Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj index 6095292542..640436330d 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj @@ -279,8 +279,8 @@ Microsoft\Data\ProviderBase\DbConnectionInternal.cs - - Microsoft\Data\SqlClient\ConnectionPool\BetterSyncPool.cs + + Microsoft\Data\SqlClient\ConnectionPool\ChannelDbConnectionPool.cs Microsoft\Data\SqlClient\ConnectionPool\DbConnectionPool.cs diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/ChannelDbConnectionPool.cs similarity index 99% rename from src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs rename to src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/ChannelDbConnectionPool.cs index 5c570c55f0..be568bbc3c 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/BetterSyncPool.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/ChannelDbConnectionPool.cs @@ -24,7 +24,7 @@ namespace Microsoft.Data.SqlClient.ConnectionPool { - internal sealed class BetterSyncPool : DbConnectionPool + internal sealed class ChannelDbConnectionPool : DbConnectionPool { #region Interface internal override int Count => _numConnectors; @@ -507,7 +507,7 @@ internal override void TransactionEnded(Transaction? transaction, DbConnectionIn /// Initializes a new PoolingDataSource. /// //TODO: support auth contexts and provider info - internal BetterSyncPool( + internal ChannelDbConnectionPool( DbConnectionFactory connectionFactory, DbConnectionPoolGroup connectionPoolGroup, DbConnectionPoolIdentity identity, @@ -790,7 +790,7 @@ private void CloseConnector(DbConnectionInternal connector) internal readonly struct OpenInternalConnectionState { internal OpenInternalConnectionState( - BetterSyncPool pool, + ChannelDbConnectionPool pool, DbConnection? owningConnection, DbConnectionOptions userOptions, TimeSpan timeout) @@ -801,7 +801,7 @@ internal OpenInternalConnectionState( Timeout = timeout; } - internal readonly BetterSyncPool Pool; + internal readonly ChannelDbConnectionPool Pool; internal readonly DbConnection? OwningConnection; internal readonly DbConnectionOptions UserOptions; internal readonly TimeSpan Timeout; diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs index 5892eac12b..f63880dd7b 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs @@ -193,7 +193,7 @@ internal DbConnectionPool GetConnectionPool(DbConnectionFactory connectionFactor } else { - newPool = new BetterSyncPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo, new PassthroughRateLimiter()); + newPool = new ChannelDbConnectionPool(connectionFactory, this, currentIdentity, connectionPoolProviderInfo, new PassthroughRateLimiter()); } if (MarkPoolGroupAsActive()) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs index e930f437e9..d5d3c90867 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Common/SystemDataInternals/ConnectionPoolHelper.cs @@ -15,7 +15,7 @@ internal static class ConnectionPoolHelper { private static Assembly s_MicrosoftDotData = Assembly.Load(new AssemblyName(typeof(SqlConnection).GetTypeInfo().Assembly.FullName)); private static Type s_dbConnectionPool = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPool"); - private static Type s_waitHandleDbConnectionPool = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.WaitHandleDbConnectionPool"); + private static Type s_waitHandleDbConnectionPool = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.ChannelDbConnectionPool"); private static Type s_dbConnectionPoolGroup = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolGroup"); private static Type s_dbConnectionPoolIdentity = s_MicrosoftDotData.GetType("Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolIdentity"); private static Type s_dbConnectionFactory = s_MicrosoftDotData.GetType("Microsoft.Data.ProviderBase.DbConnectionFactory");