Skip to content

Commit f30e71a

Browse files
fix test
1 parent 4df7985 commit f30e71a

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private bool CheckIdleSession([NotNullWhen(true)] T? session)
9292

9393
private async ValueTask<ISession> RentAsync(CancellationToken cancellationToken)
9494
{
95-
using var ctsGetSession = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, _disposeCts.Token);
95+
using var ctsGetSession = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
9696
if (_createSessionTimeout > 0)
9797
ctsGetSession.CancelAfter(TimeSpan.FromSeconds(_createSessionTimeout));
9898

@@ -133,6 +133,10 @@ private async ValueTask<ISession> RentAsync(CancellationToken cancellationToken)
133133
() => waiterTcs.TrySetCanceled(),
134134
useSynchronizationContext: false
135135
);
136+
await using var disposeRegistration = _disposeCts.Token.Register(
137+
() => waiterTcs.TrySetException(new YdbException("Session Source is disposed.")),
138+
useSynchronizationContext: false
139+
);
136140
session = await waiterTcs.Task.ConfigureAwait(false);
137141

138142
if (CheckIdleSession(session) || TryGetIdleSession(out session))
@@ -151,6 +155,11 @@ private async ValueTask<ISession> RentAsync(CancellationToken cancellationToken)
151155
if (Interlocked.CompareExchange(ref _numSessions, numSessions + 1, numSessions) != numSessions)
152156
continue;
153157

158+
if (IsDisposed)
159+
{
160+
break;
161+
}
162+
154163
try
155164
{
156165
var session = _sessionFactory.NewSession(this);
@@ -261,16 +270,6 @@ public async ValueTask DisposeAsync()
261270
await _cleanerTimer.DisposeAsync();
262271
_disposeCts.Cancel();
263272

264-
for (var i = 0; i < _maxSessionSize; i++)
265-
{
266-
var session = Volatile.Read(ref _sessions[i]);
267-
268-
if (session != null && session.CompareAndSet(PoolingSessionState.In, PoolingSessionState.Clean))
269-
{
270-
CloseSession(session);
271-
}
272-
}
273-
274273
var spinWait = new SpinWait();
275274
do
276275
{

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public async Task DisposeAsync_Cancel_WaitersSession()
130130

131131
var disposeTask = Task.Run(async () => await sessionSource.DisposeAsync());
132132
Assert.Equal(maxSessionSize, mockFactory.NumSession);
133-
133+
await Task.Delay(5_000);
134134
for (var i = 0; i < maxSessionSize; i++)
135135
{
136136
openSessions[i].Close();
@@ -140,7 +140,8 @@ public async Task DisposeAsync_Cancel_WaitersSession()
140140
Assert.Equal(0, mockFactory.NumSession);
141141
for (var i = 0; i < maxSessionSize; i++)
142142
{
143-
await Assert.ThrowsAnyAsync<Exception>(() => waitingSessionTasks[i]);
143+
Assert.Equal("Session Source is disposed.",
144+
(await Assert.ThrowsAsync<YdbException>(() => waitingSessionTasks[i])).Message);
144145
}
145146

146147
Assert.Equal("Session Source is disposed.",

0 commit comments

Comments
 (0)