Skip to content

Commit 3eeced0

Browse files
committed
pr
1 parent 88900f0 commit 3eeced0

2 files changed

Lines changed: 30 additions & 15 deletions

File tree

src/MongoDB.Driver/Core/Bindings/CoreServerSessionPool.cs

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ internal sealed class CoreServerSessionPool : ICoreServerSessionPool
3838
private readonly ILogger<LogCategories.Client> _logger;
3939
private readonly ConcurrentStack<ICoreServerSession> _pool = new();
4040
private volatile bool _isDisposed = false;
41+
private long _sessionsCreated;
42+
private long _sessionsDisposed;
4143
private long _sessionsAcquired;
4244
private long _sessionsReturned;
4345

@@ -51,21 +53,24 @@ public CoreServerSessionPool(ICluster cluster, ILogger<LogCategories.Client> log
5153
public ICoreServerSession AcquireSession()
5254
{
5355
ThrowIfDisposed();
54-
while (_pool.TryPop(out var pooledSession))
56+
ICoreServerSession session = null;
57+
while (session == null && _pool.TryPop(out session))
5558
{
56-
if (IsAboutToExpireOrDirty(pooledSession))
59+
if (IsAboutToExpireOrDirty(session))
5760
{
58-
pooledSession.Dispose();
59-
}
60-
else
61-
{
62-
Interlocked.Increment(ref _sessionsAcquired);
63-
return new ReleaseOnDisposeCoreServerSession(pooledSession, this);
61+
session.Dispose();
62+
session = null;
6463
}
6564
}
6665

66+
if (session == null)
67+
{
68+
Interlocked.Increment(ref _sessionsCreated);
69+
session = new CoreServerSession();
70+
}
71+
6772
Interlocked.Increment(ref _sessionsAcquired);
68-
return new ReleaseOnDisposeCoreServerSession(new CoreServerSession(), this);
73+
return new ReleaseOnDisposeCoreServerSession(session, this);
6974
}
7075

7176
public void ReleaseSession(ICoreServerSession session)
@@ -75,6 +80,7 @@ public void ReleaseSession(ICoreServerSession session)
7580

7681
if (IsAboutToExpireOrDirty(session))
7782
{
83+
Interlocked.Increment(ref _sessionsDisposed);
7884
session.Dispose();
7985
}
8086
else
@@ -93,8 +99,10 @@ public void CloseAndDispose(IServer server)
9399
_isDisposed = true;
94100
var timestamp = Stopwatch.GetTimestamp();
95101
_logger?.LogDebug(
96-
"Closing server session pool for {clusterId}: total sessions acquired {sessionsAcquired}, sessions returned {sessionsReturned}, pooled sessions {pooledSessions}.",
97-
_cluster.ClusterId, _sessionsAcquired, _sessionsReturned, _pool.Count);
102+
"Closing server session pool for {clusterId}: total sessions created {sessionsCreated}, total sessions acquired {sessionsAcquired}, sessions returned {sessionsReturned}, sessions disposed {sessionsDisposed}, pooled sessions {pooledSessions}.",
103+
_cluster.ClusterId, _sessionsCreated, _sessionsAcquired, _sessionsReturned, _sessionsDisposed, _pool.Count);
104+
105+
var sessionsEnded = 0;
98106
try
99107
{
100108
while (true)
@@ -103,7 +111,7 @@ public void CloseAndDispose(IServer server)
103111
var batch = new ICoreServerSession[batchSize];
104112

105113
batchSize = _pool.TryPopRange(batch);
106-
if(batchSize == 0)
114+
if (batchSize == 0)
107115
{
108116
return;
109117
}
@@ -124,6 +132,13 @@ public void CloseAndDispose(IServer server)
124132
CommandResponseHandling.Return,
125133
BsonDocumentSerializer.Instance,
126134
null);
135+
136+
sessionsEnded += batchSize;
137+
138+
for (var i = 0; i < batchSize; i++)
139+
{
140+
batch[i].Dispose();
141+
}
127142
}
128143
}
129144
catch(Exception ex)
@@ -133,8 +148,8 @@ public void CloseAndDispose(IServer server)
133148
finally
134149
{
135150
_logger?.LogDebug(
136-
"Closed server session pool for {clusterId} in {milliseconds}ms.",
137-
_cluster.ClusterId, (Stopwatch.GetTimestamp() - timestamp) / (double)Stopwatch.Frequency * 1000);
151+
"Closed server session pool for {clusterId} in {milliseconds}ms, total sessions ended {sessionsEnded}.",
152+
_cluster.ClusterId, (Stopwatch.GetTimestamp() - timestamp) / (double)Stopwatch.Frequency * 1000, sessionsEnded);
138153
}
139154
}
140155

tests/MongoDB.Driver.Tests/Specifications/Runner/MongoClientJsonDrivenTestRunnerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ protected virtual void RunTest(BsonDocument shared, BsonDocument test, EventCapt
322322

323323
ExecuteOperations(client, objectMap: null, test, eventCapturer);
324324

325-
eventCapturer.Stop();
325+
eventCapturer?.Stop();
326326
}
327327
}
328328

0 commit comments

Comments
 (0)