Skip to content

Commit 9b1ff37

Browse files
Renamed properties in YdbConnectionStringBuilder: MaxSessionPool -> MaxPoolSize, MinSessionPool -> MinPoolSize (#538)
**Breaking Change**: Renamed properties in `YdbConnectionStringBuilder`: - `MaxSessionPool` -> `MaxPoolSize`. - `MinSessionPool` -> `MinPoolSize`.
1 parent e19e172 commit 9b1ff37

File tree

15 files changed

+142
-139
lines changed

15 files changed

+142
-139
lines changed

src/EFCore.Ydb/test/EntityFrameworkCore.Ydb.FunctionalTests/TestUtilities/YdbTestStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private static YdbCommand CreateCommand(
181181
}
182182

183183

184-
private static YdbConnection CreateConnection() => new(new YdbConnectionStringBuilder { MaxSessionPool = 10 });
184+
private static YdbConnection CreateConnection() => new(new YdbConnectionStringBuilder { MaxPoolSize = 10 });
185185

186186
public override async Task CleanAsync(DbContext context)
187187
{

src/Ydb.Sdk/CHANGELOG.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
- **Breaking Change**: Renamed properties in `YdbConnectionStringBuilder`:
2+
- `MaxSessionPool` -> `MaxPoolSize`.
3+
- `MinSessionPool` -> `MinPoolSize`.
14
- Added XML documentation for all public APIs in `Ydb.Sdk`.
25
- Feat ADO.NET: Added dispose timeout (10 seconds) to `PoolingSessionSource`.
36
- Feat ADO.NET: Added `EnableImplicitSession` to support implicit sessions.
@@ -43,8 +46,8 @@
4346
- Fixed bug: Grpc.Core.StatusCode.Cancelled was mapped to server's Canceled status.
4447
- Feat ADO.NET: PoolingSessionSource 2.0 based on lock-free FIFO pooling algorithm.
4548
- Added new ADO.NET options:
46-
- `MinSessionPool`: The minimum connection pool size.
47-
- `SessionIdleTimeout`: The time (in seconds) to wait before closing idle session in the pool if the count of all sessions exceeds `MinSessionPool`.
49+
- `MinPoolSize`: The minimum session pool size.
50+
- `SessionIdleTimeout`: The time (in seconds) to wait before closing idle session in the pool if the count of all sessions exceeds `MinPoolSize`.
4851
- Fixed bug `Reader`: unhandled exception in `TryReadRequestBytes(long bytes)`.
4952
- Handle `YdbException` on `DeleteSession`.
5053
- Do not invoke `DeleteSession` if the session is not active.

src/Ydb.Sdk/src/Ado/Session/PoolingSessionSource.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ internal sealed class PoolingSessionSource<T> : ISessionSource where T : Pooling
1616
private readonly CancellationTokenSource _disposeCts = new();
1717

1818
private readonly IPoolingSessionFactory<T> _sessionFactory;
19-
private readonly int _minSessionSize;
20-
private readonly int _maxSessionSize;
19+
private readonly int _minSizePool;
20+
private readonly int _maxSizePool;
2121
private readonly T?[] _sessions;
2222
private readonly int _createSessionTimeout;
2323
private readonly TimeSpan _sessionIdleTimeout;
@@ -32,16 +32,16 @@ internal sealed class PoolingSessionSource<T> : ISessionSource where T : Pooling
3232
public PoolingSessionSource(IPoolingSessionFactory<T> sessionFactory, YdbConnectionStringBuilder settings)
3333
{
3434
_sessionFactory = sessionFactory;
35-
_minSessionSize = settings.MinSessionPool;
36-
_maxSessionSize = settings.MaxSessionPool;
35+
_minSizePool = settings.MinPoolSize;
36+
_maxSizePool = settings.MaxPoolSize;
3737

38-
if (_minSessionSize > _maxSessionSize)
38+
if (_minSizePool > _maxSizePool)
3939
{
4040
throw new ArgumentException(
41-
$"Connection can't have 'Max Session Pool' {_maxSessionSize} under 'Min Session Pool' {_minSessionSize}");
41+
$"Connection can't have 'Max Session Pool' {_maxSizePool} under 'Min Session Pool' {_minSizePool}");
4242
}
4343

44-
_sessions = new T?[_maxSessionSize];
44+
_sessions = new T?[_maxSizePool];
4545
_createSessionTimeout = settings.CreateSessionTimeout;
4646
_sessionIdleTimeout = TimeSpan.FromSeconds(settings.SessionIdleTimeout);
4747
_cleanerTimer = new Timer(CleanIdleSessions, this, _sessionIdleTimeout, _sessionIdleTimeout);
@@ -129,8 +129,8 @@ private async ValueTask<ISession> RentAsync(CancellationToken cancellationToken)
129129
}
130130

131131
await using var _ = finalToken.Register(() => waiterTcs.TrySetException(
132-
new YdbException($"The connection pool has been exhausted, either raise 'MaxSessionPool' " +
133-
$"(currently {_maxSessionSize}) or 'CreateSessionTimeout' " +
132+
new YdbException($"The connection pool has been exhausted, either raise 'MaxPoolSize' " +
133+
$"(currently {_maxSizePool}) or 'CreateSessionTimeout' " +
134134
$"(currently {_createSessionTimeout} seconds) in your connection string.")
135135
), useSynchronizationContext: false
136136
);
@@ -151,7 +151,7 @@ private async ValueTask<ISession> RentAsync(CancellationToken cancellationToken)
151151

152152
private async ValueTask<T?> OpenNewSession(CancellationToken cancellationToken)
153153
{
154-
for (var numSessions = _numSessions; numSessions < _maxSessionSize; numSessions = _numSessions)
154+
for (var numSessions = _numSessions; numSessions < _maxSizePool; numSessions = _numSessions)
155155
{
156156
if (Interlocked.CompareExchange(ref _numSessions, numSessions + 1, numSessions) != numSessions)
157157
continue;
@@ -164,7 +164,7 @@ private async ValueTask<ISession> RentAsync(CancellationToken cancellationToken)
164164
var session = _sessionFactory.NewSession(this);
165165
await session.Open(cancellationToken);
166166

167-
for (var i = 0; i < _maxSessionSize; i++)
167+
for (var i = 0; i < _maxSizePool; i++)
168168
{
169169
if (Interlocked.CompareExchange(ref _sessions[i], session, null) == null)
170170
return session;
@@ -221,11 +221,11 @@ public void Return(T session)
221221
private void CloseSession(T session)
222222
{
223223
var i = 0;
224-
for (; i < _maxSessionSize; i++)
224+
for (; i < _maxSizePool; i++)
225225
if (Interlocked.CompareExchange(ref _sessions[i], null, session) == session)
226226
break;
227227

228-
if (i == _maxSessionSize)
228+
if (i == _maxSizePool)
229229
return;
230230

231231
_ = session.DeleteSession();
@@ -242,13 +242,13 @@ private static void CleanIdleSessions(object? state)
242242
var pool = (PoolingSessionSource<T>)state!;
243243
var now = DateTime.Now;
244244

245-
for (var i = 0; i < pool._maxSessionSize; i++)
245+
for (var i = 0; i < pool._maxSizePool; i++)
246246
{
247247
var session = Volatile.Read(ref pool._sessions[i]);
248248

249249
if (
250250
session != null &&
251-
pool._numSessions > pool._minSessionSize &&
251+
pool._numSessions > pool._minSizePool &&
252252
session.IdleStartTime + pool._sessionIdleTimeout <= now &&
253253
session.CompareAndSet(PoolingSessionState.In, PoolingSessionState.Clean)
254254
)
@@ -272,7 +272,7 @@ public async ValueTask DisposeAsync()
272272
var spinWait = new SpinWait();
273273
do
274274
{
275-
for (var i = 0; i < _maxSessionSize; i++)
275+
for (var i = 0; i < _maxSizePool; i++)
276276
{
277277
var session = Volatile.Read(ref _sessions[i]);
278278

@@ -294,7 +294,7 @@ public async ValueTask DisposeAsync()
294294
_logger.LogError(e, "Failed to dispose the transport driver");
295295
}
296296

297-
for (var i = 0; i < _maxSessionSize; i++)
297+
for (var i = 0; i < _maxSizePool; i++)
298298
{
299299
var session = Volatile.Read(ref _sessions[i]);
300300

src/Ydb.Sdk/src/Ado/YdbConnectionStringBuilder.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ private void InitDefaultValues()
5050
_host = "localhost";
5151
_port = 2136;
5252
_database = "/local";
53-
_minSessionPool = 0;
54-
_maxSessionPool = 100;
53+
_minPoolSize = 0;
54+
_maxPoolSize = 100;
5555
_createSessionTimeout = 5;
5656
_sessionIdleTimeout = 300;
5757
_useTls = false;
@@ -177,22 +177,22 @@ public string? Password
177177
/// in the session pool. Must be greater than 0.
178178
/// <para>Default value: 100.</para>
179179
/// </remarks>
180-
public int MaxSessionPool
180+
public int MaxPoolSize
181181
{
182-
get => _maxSessionPool;
182+
get => _maxPoolSize;
183183
set
184184
{
185185
if (value <= 0)
186186
{
187187
throw new ArgumentOutOfRangeException(nameof(value), value, "Invalid max session pool: " + value);
188188
}
189189

190-
_maxSessionPool = value;
191-
SaveValue(nameof(MaxSessionPool), value);
190+
_maxPoolSize = value;
191+
SaveValue(nameof(MaxPoolSize), value);
192192
}
193193
}
194194

195-
private int _maxSessionPool;
195+
private int _maxPoolSize;
196196

197197
/// <summary>
198198
/// Gets or sets the minimum number of sessions in the pool.
@@ -202,22 +202,22 @@ public int MaxSessionPool
202202
/// Must be greater than or equal to 0.
203203
/// <para>Default value: 0.</para>
204204
/// </remarks>
205-
public int MinSessionPool
205+
public int MinPoolSize
206206
{
207-
get => _minSessionPool;
207+
get => _minPoolSize;
208208
set
209209
{
210210
if (value < 0)
211211
{
212212
throw new ArgumentOutOfRangeException(nameof(value), value, "Invalid min session pool: " + value);
213213
}
214214

215-
_minSessionPool = value;
216-
SaveValue(nameof(MinSessionPool), value);
215+
_minPoolSize = value;
216+
SaveValue(nameof(MinPoolSize), value);
217217
}
218218
}
219219

220-
private int _minSessionPool;
220+
private int _minPoolSize;
221221

222222
/// <summary>
223223
/// Gets or sets the session idle timeout in seconds.
@@ -392,7 +392,7 @@ public bool EnableMultipleHttp2Connections
392392
/// Specifies the maximum size of messages that can be sent to the server.
393393
/// Note: server-side limit is 64 MB. Exceeding this limit may result in
394394
/// "resource exhausted" errors or unpredictable behavior.
395-
/// <para>Default value: 4194304 bytes (4 MB).</para>
395+
/// <para>Default value: 67108864 bytes (64 MB).</para>
396396
/// </remarks>
397397
public int MaxSendMessageSize
398398
{
@@ -411,7 +411,7 @@ public int MaxSendMessageSize
411411
/// </summary>
412412
/// <remarks>
413413
/// Specifies the maximum size of messages that can be received from the server.
414-
/// <para>Default value: 4194304 bytes (4 MB).</para>
414+
/// <para>Default value: 67108864 bytes (64 MB).</para>
415415
/// </remarks>
416416
public int MaxReceiveMessageSize
417417
{
@@ -679,12 +679,12 @@ static YdbConnectionOption()
679679
(builder, user) => builder.User = user), "User", "Username", "UserId", "User Id");
680680
AddOption(new YdbConnectionOption<string>(StringExtractor,
681681
(builder, password) => builder.Password = password), "Password", "PWD", "PSW");
682-
AddOption(new YdbConnectionOption<int>(IntExtractor, (builder, maxSessionPool) =>
683-
builder.MaxSessionPool = maxSessionPool), "MaxSessionPool", "Max Session Pool", "Maximum Pool Size",
684-
"MaximumPoolSize", "Max Pool Size", "MaxPoolSize", "MaxSessionSize", "Max Session Size");
685-
AddOption(new YdbConnectionOption<int>(IntExtractor, (builder, minSessionSize) =>
686-
builder.MinSessionPool = minSessionSize), "MinSessionPool", "Min Session Pool", "Minimum Pool Size",
687-
"MinimumPoolSize", "Min Pool Size", "MinPoolSize", "MinSessionSize", "Min Session Size");
682+
AddOption(new YdbConnectionOption<int>(IntExtractor,
683+
(builder, maxPoolSize) => builder.MaxPoolSize = maxPoolSize),
684+
"Maximum Pool Size", "MaximumPoolSize", "Max Pool Size", "MaxPoolSize");
685+
AddOption(new YdbConnectionOption<int>(IntExtractor,
686+
(builder, minPoolSize) => builder.MinPoolSize = minPoolSize),
687+
"Minimum Pool Size", "MinimumPoolSize", "Min Pool Size", "MinPoolSize");
688688
AddOption(new YdbConnectionOption<bool>(BoolExtractor, (builder, useTls) => builder.UseTls = useTls),
689689
"UseTls", "Use Tls");
690690
AddOption(new YdbConnectionOption<string>(StringExtractor,

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Benchmarks/SessionSourceBenchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class SessionSourceBenchmark
1515
[GlobalSetup]
1616
public void Setup()
1717
{
18-
var settings = new YdbConnectionStringBuilder { MaxSessionPool = SessionPoolSize };
18+
var settings = new YdbConnectionStringBuilder { MaxPoolSize = SessionPoolSize };
1919

2020
_poolingSessionSource = new PoolingSessionSource<MockPoolingSession>(new MockSessionFactory(), settings);
2121
}

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Specification.Tests/YdbFactoryFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ public class YdbFactoryFixture : IDbFactoryFixture
77
{
88
public DbProviderFactory Factory => YdbProviderFactory.Instance;
99

10-
public string ConnectionString => "Host=localhost;Port=2136;Database=local;MaxSessionPool=10";
10+
public string ConnectionString => "Host=localhost;Port=2136;Database=local;MaxPoolSize=10";
1111
}

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Stress.Loader/LoadTank.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Starting YDB ADO.NET Stress Test Tank
4343
var workers = new List<Task>();
4444
ctsStep1.CancelAfter(_config.TotalTestTimeSeconds * 500);
4545

46-
for (var i = 0; i < _settings.MaxSessionPool; i++)
46+
for (var i = 0; i < _settings.MaxPoolSize; i++)
4747
{
4848
workers.Add(Task.Run(async () =>
4949
{
@@ -72,7 +72,7 @@ Starting YDB ADO.NET Stress Test Tank
7272
_logger.LogInformation("[{Now}] Starting shooting without PoolingSessionSource...", DateTime.Now);
7373
var ctsStep2 = new CancellationTokenSource();
7474
ctsStep2.CancelAfter(_config.TotalTestTimeSeconds * 500);
75-
for (var i = 0; i < _settings.MaxSessionPool; i++)
75+
for (var i = 0; i < _settings.MaxPoolSize; i++)
7676
{
7777
workers.Add(Task.Run(async () =>
7878
{

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/PoolManagerTests.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@ public class PoolManagerTests
99
[Theory]
1010
[InlineData(new[]
1111
{
12-
"MinSessionSize=1", "MinSessionSize=2", "MinSessionSize=3",
13-
"MinSessionSize=1;DisableDiscovery=True", "MinSessionSize=2;DisableDiscovery=True"
12+
"MinPoolSize=1", "MinPoolSize=2", "MinPoolSize=3",
13+
"MinPoolSize=1;DisableDiscovery=True", "MinPoolSize=2;DisableDiscovery=True"
1414
}, 2, 5)] // 2 transports (by the DisableDiscovery flag), 5 pools
1515
[InlineData(
16-
new[] { "MinSessionSize=1", "MinSessionSize=2", "MinSessionSize=3", "MinSessionSize=4", "MinSessionSize=5" },
16+
new[] { "MinPoolSize=1", "MinPoolSize=2", "MinPoolSize=3", "MinPoolSize=4", "MinPoolSize=5" },
1717
1, 5)] // 1 transport, 5 five pools
1818
[InlineData(new[]
19-
{ "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=3" }, 1,
19+
{ "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=3" }, 1,
2020
3)] // duplicate rows — we expect 1 transport, 3 pools
2121
[InlineData(new[]
2222
{
23-
"MinSessionSize=1;ConnectTimeout=5", "MinSessionSize=1;ConnectTimeout=6", "MinSessionSize=1;ConnectTimeout=7",
24-
"MinSessionSize=1;ConnectTimeout=8", "MinSessionSize=1;ConnectTimeout=9"
23+
"MinPoolSize=1;ConnectTimeout=5", "MinPoolSize=1;ConnectTimeout=6", "MinPoolSize=1;ConnectTimeout=7",
24+
"MinPoolSize=1;ConnectTimeout=8", "MinPoolSize=1;ConnectTimeout=9"
2525
}, 5, 5)] // 5 transport, 5 five pools
26-
[InlineData(new[] { "MinSessionSize=1" }, 1, 1)] // simple case
26+
[InlineData(new[] { "MinPoolSize=1" }, 1, 1)] // simple case
2727
[InlineData(new[]
2828
{
29-
"MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1",
30-
"MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1",
31-
"MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1",
32-
"MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1", "MinSessionSize=1",
33-
"MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2",
34-
"MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2",
35-
"MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=2", "MinSessionSize=3",
36-
"MinSessionSize=3", "MinSessionSize=3", "MinSessionSize=3", "MinSessionSize=3", "MinSessionSize=3"
29+
"MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1",
30+
"MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1",
31+
"MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1",
32+
"MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1", "MinPoolSize=1",
33+
"MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2",
34+
"MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2",
35+
"MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=2", "MinPoolSize=3",
36+
"MinPoolSize=3", "MinPoolSize=3", "MinPoolSize=3", "MinPoolSize=3", "MinPoolSize=3"
3737
}, 1, 3)] // duplicate rows — we expect 1 transport, 3 pools, stress test
3838
public async Task PoolManager_CachingAndCleanup(string[] connectionStrings, int expectedDrivers, int expectedPools)
3939
{

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/Session/MockPoolingSessionFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Ydb.Sdk.Ado.Tests.Session;
66

7-
internal class MockPoolingSessionFactory(int maxSessionSize) : IPoolingSessionFactory<MockPoolingSession>
7+
internal class MockPoolingSessionFactory(int maxPoolSize) : IPoolingSessionFactory<MockPoolingSession>
88
{
99
private int _sessionOpened;
1010
private int _numSession;
@@ -25,7 +25,7 @@ public MockPoolingSession NewSession(PoolingSessionSource<MockPoolingSession> so
2525
{
2626
await Open(sessionCountOpened);
2727

28-
Assert.True(Interlocked.Increment(ref _numSession) <= maxSessionSize);
28+
Assert.True(Interlocked.Increment(ref _numSession) <= maxPoolSize);
2929

3030
await Task.Yield();
3131
},

0 commit comments

Comments
 (0)