@@ -20,7 +20,7 @@ internal sealed class ConnectionPool : IDisposable
20
20
21
21
public SslProtocols SslProtocols { get ; set ; }
22
22
23
- public async ValueTask < ServerSession > GetSessionAsync ( MySqlConnection connection , int startTickCount , int timeoutMilliseconds , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
23
+ public async ValueTask < ServerSession > GetSessionAsync ( MySqlConnection connection , long startingTimestamp , int timeoutMilliseconds , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
24
24
{
25
25
cancellationToken . ThrowIfCancellationRequested ( ) ;
26
26
@@ -72,7 +72,7 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
72
72
if ( ConnectionSettings . ConnectionReset || session . DatabaseOverride is not null )
73
73
{
74
74
if ( timeoutMilliseconds != 0 )
75
- session . SetTimeout ( Math . Max ( 1 , timeoutMilliseconds - ( Environment . TickCount - startTickCount ) ) ) ;
75
+ session . SetTimeout ( Math . Max ( 1 , timeoutMilliseconds - ( int ) Utility . GetElapsedMilliseconds ( startingTimestamp ) ) ) ;
76
76
reuseSession = await session . TryResetConnectionAsync ( ConnectionSettings , connection , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
77
77
session . SetTimeout ( Constants . InfiniteTimeout ) ;
78
78
}
@@ -103,14 +103,14 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
103
103
ActivitySourceHelper . CopyTags ( session . ActivityTags , activity ) ;
104
104
Log . ReturningPooledSession ( m_logger , Id , session . Id , leasedSessionsCountPooled ) ;
105
105
106
- session . LastLeasedTicks = unchecked ( ( uint ) Environment . TickCount ) ;
107
- MetricsReporter . RecordWaitTime ( this , unchecked ( session . LastLeasedTicks - ( uint ) startTickCount ) ) ;
106
+ session . LastLeasedTimestamp = Stopwatch . GetTimestamp ( ) ;
107
+ MetricsReporter . RecordWaitTime ( this , Utility . GetElapsedMilliseconds ( startingTimestamp , session . LastLeasedTimestamp ) ) ;
108
108
return session ;
109
109
}
110
110
}
111
111
112
112
// create a new session
113
- session = await ConnectSessionAsync ( connection , s_createdNewSession , startTickCount , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
113
+ session = await ConnectSessionAsync ( connection , s_createdNewSession , startingTimestamp , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
114
114
AdjustHostConnectionCount ( session , 1 ) ;
115
115
session . OwningConnection = new ( connection ) ;
116
116
int leasedSessionsCountNew ;
@@ -122,8 +122,8 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
122
122
MetricsReporter . AddUsed ( this ) ;
123
123
Log . ReturningNewSession ( m_logger , Id , session . Id , leasedSessionsCountNew ) ;
124
124
125
- session . LastLeasedTicks = unchecked ( ( uint ) Environment . TickCount ) ;
126
- MetricsReporter . RecordCreateTime ( this , unchecked ( session . LastLeasedTicks - ( uint ) startTickCount ) ) ;
125
+ session . LastLeasedTimestamp = Stopwatch . GetTimestamp ( ) ;
126
+ MetricsReporter . RecordCreateTime ( this , Utility . GetElapsedMilliseconds ( startingTimestamp , session . LastLeasedTimestamp ) ) ;
127
127
return session ;
128
128
}
129
129
catch ( Exception ex )
@@ -161,7 +161,7 @@ private int GetSessionHealth(ServerSession session)
161
161
if ( session . PoolGeneration != m_generation )
162
162
return 2 ;
163
163
if ( ConnectionSettings . ConnectionLifeTime > 0
164
- && unchecked ( ( uint ) Environment . TickCount ) - session . CreatedTicks >= ConnectionSettings . ConnectionLifeTime )
164
+ && Utility . GetElapsedMilliseconds ( session . CreatedTimestamp ) >= ConnectionSettings . ConnectionLifeTime )
165
165
return 3 ;
166
166
167
167
return 0 ;
@@ -214,7 +214,7 @@ public async Task ReapAsync(IOBehavior ioBehavior, CancellationToken cancellatio
214
214
{
215
215
Log . ReapingConnectionPool ( m_logger , Id ) ;
216
216
await RecoverLeakedSessionsAsync ( ioBehavior ) . ConfigureAwait ( false ) ;
217
- await CleanPoolAsync ( ioBehavior , session => ( unchecked ( ( uint ) Environment . TickCount ) - session . LastReturnedTicks ) / 1000 >= ConnectionSettings . ConnectionIdleTimeout , true , cancellationToken ) . ConfigureAwait ( false ) ;
217
+ await CleanPoolAsync ( ioBehavior , session => Utility . GetElapsedMilliseconds ( session . LastReturnedTimestamp ) / 1000 >= ConnectionSettings . ConnectionIdleTimeout , true , cancellationToken ) . ConfigureAwait ( false ) ;
218
218
}
219
219
220
220
/// <summary>
@@ -403,7 +403,7 @@ private async Task CreateMinimumPooledSessions(MySqlConnection connection, IOBeh
403
403
404
404
try
405
405
{
406
- var session = await ConnectSessionAsync ( connection , s_createdToReachMinimumPoolSize , Environment . TickCount , null , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
406
+ var session = await ConnectSessionAsync ( connection , s_createdToReachMinimumPoolSize , Stopwatch . GetTimestamp ( ) , null , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
407
407
AdjustHostConnectionCount ( session , 1 ) ;
408
408
lock ( m_sessions )
409
409
m_sessions . AddFirst ( session ) ;
@@ -417,15 +417,15 @@ private async Task CreateMinimumPooledSessions(MySqlConnection connection, IOBeh
417
417
}
418
418
}
419
419
420
- private async ValueTask < ServerSession > ConnectSessionAsync ( MySqlConnection connection , Action < ILogger , int , string , Exception ? > logMessage , int startTickCount , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
420
+ private async ValueTask < ServerSession > ConnectSessionAsync ( MySqlConnection connection , Action < ILogger , int , string , Exception ? > logMessage , long startingTimestamp , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
421
421
{
422
422
var session = new ServerSession ( m_connectionLogger , this , m_generation , Interlocked . Increment ( ref m_lastSessionId ) ) ;
423
423
if ( m_logger . IsEnabled ( LogLevel . Debug ) )
424
424
logMessage ( m_logger , Id , session . Id , null ) ;
425
425
string ? statusInfo ;
426
426
try
427
427
{
428
- statusInfo = await session . ConnectAsync ( ConnectionSettings , connection , startTickCount , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
428
+ statusInfo = await session . ConnectAsync ( ConnectionSettings , connection , startingTimestamp , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
429
429
}
430
430
catch ( Exception )
431
431
{
@@ -452,7 +452,7 @@ private async ValueTask<ServerSession> ConnectSessionAsync(MySqlConnection conne
452
452
var redirectedSession = new ServerSession ( m_connectionLogger , this , m_generation , Interlocked . Increment ( ref m_lastSessionId ) ) ;
453
453
try
454
454
{
455
- await redirectedSession . ConnectAsync ( redirectedSettings , connection , startTickCount , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
455
+ await redirectedSession . ConnectAsync ( redirectedSettings , connection , startingTimestamp , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
456
456
}
457
457
catch ( Exception ex )
458
458
{
0 commit comments