@@ -2247,6 +2247,54 @@ public void testWaitOnMinSessionsThrowsExceptionWhenTimeoutIsReached() {
2247
2247
pool .maybeWaitOnMinSessions ();
2248
2248
}
2249
2249
2250
+ @ Test
2251
+ public void reset_maxSessionsInUse () {
2252
+ Clock clock = mock (Clock .class );
2253
+ when (clock .instant ()).thenReturn (Instant .now ());
2254
+ options =
2255
+ SessionPoolOptions .newBuilder ()
2256
+ .setMinSessions (1 )
2257
+ .setMaxSessions (3 )
2258
+ .setIncStep (1 )
2259
+ .setMaxIdleSessions (0 )
2260
+ .setPoolMaintainerClock (clock )
2261
+ .build ();
2262
+ setupForLongRunningTransactionsCleanup (options );
2263
+
2264
+ pool = createPool (clock );
2265
+ // Make sure pool has been initialized
2266
+ pool .getSession ().close ();
2267
+
2268
+ // All 3 sessions used. 100% of pool utilised.
2269
+ PooledSessionFuture readSession1 = pool .getSession ();
2270
+ PooledSessionFuture readSession2 = pool .getSession ();
2271
+ PooledSessionFuture readSession3 = pool .getSession ();
2272
+
2273
+ // complete the async tasks
2274
+ readSession1 .get ().setEligibleForLongRunning (false );
2275
+ readSession2 .get ().setEligibleForLongRunning (false );
2276
+ readSession3 .get ().setEligibleForLongRunning (true );
2277
+
2278
+ assertEquals (3 , pool .getMaxSessionsInUse ());
2279
+ assertEquals (3 , pool .getNumberOfSessionsInUse ());
2280
+
2281
+ // Release 1 session
2282
+ readSession1 .get ().close ();
2283
+
2284
+ // Verify that numSessionsInUse reduces to 2 while maxSessionsInUse remain 3
2285
+ assertEquals (3 , pool .getMaxSessionsInUse ());
2286
+ assertEquals (2 , pool .getNumberOfSessionsInUse ());
2287
+
2288
+ // ensure that the lastResetTime for maxSessionsInUse > 10 minutes
2289
+ when (clock .instant ()).thenReturn (Instant .now ().plus (11 , ChronoUnit .MINUTES ));
2290
+
2291
+ pool .poolMaintainer .maintainPool ();
2292
+
2293
+ // Verify that maxSessionsInUse is reset to numSessionsInUse
2294
+ assertEquals (2 , pool .getMaxSessionsInUse ());
2295
+ assertEquals (2 , pool .getNumberOfSessionsInUse ());
2296
+ }
2297
+
2250
2298
private void mockKeepAlive (ReadContext context ) {
2251
2299
ResultSet resultSet = mock (ResultSet .class );
2252
2300
when (resultSet .next ()).thenReturn (true , false );
0 commit comments