Skip to content

Commit 9c34b84

Browse files
CSHARP-3664: Clarify whether maxPoolSize allows 0 option or no. (#532)
CSHARP-3664: Clarify whether maxPoolSize allows 0 option or no.
1 parent 0eb2430 commit 9c34b84

File tree

18 files changed

+232
-20
lines changed

18 files changed

+232
-20
lines changed

src/MongoDB.Driver.Core/Core/Configuration/ClusterBuilderExtensions.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using MongoDB.Driver.Core.Clusters;
2424
using MongoDB.Driver.Core.Events.Diagnostics;
2525
using MongoDB.Driver.Core.Misc;
26+
using MongoDB.Shared;
2627

2728
namespace MongoDB.Driver.Core.Configuration
2829
{
@@ -182,7 +183,8 @@ public static ClusterBuilder ConfigureWithConnectionString(
182183
// Connection Pool
183184
if (connectionString.MaxPoolSize != null)
184185
{
185-
builder = builder.ConfigureConnectionPool(s => s.With(maxConnections: connectionString.MaxPoolSize.Value));
186+
var effectiveMaxConnections = ConnectionStringConversions.GetEffectiveMaxConnections(connectionString.MaxPoolSize.Value);
187+
builder = builder.ConfigureConnectionPool(s => s.With(maxConnections: effectiveMaxConnections));
186188
}
187189
if (connectionString.MinPoolSize != null)
188190
{
@@ -195,9 +197,9 @@ public static ClusterBuilder ConfigureWithConnectionString(
195197
}
196198
else if (connectionString.WaitQueueMultiple != null)
197199
{
198-
var maxConnections = connectionString.MaxPoolSize ?? new ConnectionPoolSettings().MaxConnections;
199-
var waitQueueSize = (int)Math.Round(maxConnections * connectionString.WaitQueueMultiple.Value);
200-
builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: waitQueueSize));
200+
var effectiveMaxConnections = ConnectionStringConversions.GetEffectiveMaxConnections(connectionString.MaxPoolSize) ?? new ConnectionPoolSettings().MaxConnections;
201+
var computedWaitQueueSize = ConnectionStringConversions.GetComputedWaitQueueSize(effectiveMaxConnections, connectionString.WaitQueueMultiple.Value);
202+
builder = builder.ConfigureConnectionPool(s => s.With(waitQueueSize: computedWaitQueueSize));
201203
}
202204
#pragma warning restore 618
203205
if (connectionString.WaitQueueTimeout != null)

src/MongoDB.Driver.Core/Core/Configuration/ConnectionPoolSettings.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
using System;
1717
using MongoDB.Driver.Core.Misc;
18+
using MongoDB.Shared;
1819

1920
namespace MongoDB.Driver.Core.Configuration
2021
{
@@ -49,7 +50,9 @@ public ConnectionPoolSettings(
4950
_maintenanceInterval = Ensure.IsInfiniteOrGreaterThanOrEqualToZero(maintenanceInterval.WithDefault(TimeSpan.FromMinutes(1)), "maintenanceInterval");
5051
_maxConnections = Ensure.IsGreaterThanZero(maxConnections.WithDefault(100), "maxConnections");
5152
_minConnections = Ensure.IsGreaterThanOrEqualToZero(minConnections.WithDefault(0), "minConnections");
52-
_waitQueueSize = Ensure.IsGreaterThanOrEqualToZero(waitQueueSize.WithDefault(_maxConnections * 5), "waitQueueSize");
53+
#pragma warning disable CS0618 // Type or member is obsolete
54+
_waitQueueSize = Ensure.IsGreaterThanOrEqualToZero(waitQueueSize.WithDefault(ConnectionStringConversions.GetComputedWaitQueueSize(_maxConnections, 5)), "waitQueueSize");
55+
#pragma warning restore CS0618 // Type or member is obsolete
5356
_waitQueueTimeout = Ensure.IsInfiniteOrGreaterThanOrEqualToZero(waitQueueTimeout.WithDefault(TimeSpan.FromMinutes(2)), "waitQueueTimeout");
5457
}
5558

src/MongoDB.Driver.Core/MongoDB.Driver.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@
154154

155155
<ItemGroup>
156156
<Compile Include="..\MongoDB.Shared\ApplicationNameHelper.cs" Link="Core\Configuration\ApplicationNameHelper.cs" />
157+
<Compile Include="..\MongoDB.Shared\ConnectionStringConversions.cs" Link="Core\Misc\ConnectionStringConversions.cs" />
157158
<Compile Include="..\MongoDB.Shared\Hasher.cs" Link="Core\Misc\Hasher.cs" />
158159
<Compile Include="..\MongoDB.Shared\MaxTimeHelper.cs" Link="Core\Operations\MaxTimeHelper.cs" />
159160
<Compile Include="..\MongoDB.Shared\OperatingSystemHelper.cs" Link="Core\Misc\OperatingSystemHelper.cs" />

src/MongoDB.Driver.Legacy/MongoDB.Driver.Legacy.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<PropertyGroup>
77
<TargetFrameworks>netstandard1.5;netstandard2.0;netstandard2.1;net452</TargetFrameworks>
88
<TargetFrameworks Condition="'$(IsWindows)'!='true'">netstandard1.5;netstandard2.0;netstandard2.1</TargetFrameworks>
9-
<LangVersion>7.3</LangVersion>
9+
<LangVersion>9</LangVersion>
1010
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1111
<WarningsAsErrors />
1212
<CodeAnalysisRuleSet>..\..\MongoDBLegacy.ruleset</CodeAnalysisRuleSet>

src/MongoDB.Driver.Legacy/MongoServerSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -887,7 +887,7 @@ public static MongoServerSettings FromUrl(MongoUrl url)
887887
serverSettings.IPv6 = url.IPv6;
888888
serverSettings.MaxConnectionIdleTime = url.MaxConnectionIdleTime;
889889
serverSettings.MaxConnectionLifeTime = url.MaxConnectionLifeTime;
890-
serverSettings.MaxConnectionPoolSize = url.MaxConnectionPoolSize;
890+
serverSettings.MaxConnectionPoolSize = ConnectionStringConversions.GetEffectiveMaxConnections(url.MaxConnectionPoolSize);
891891
serverSettings.MinConnectionPoolSize = url.MinConnectionPoolSize;
892892
serverSettings.ReadConcern = new ReadConcern(url.ReadConcernLevel);
893893
serverSettings.ReadEncoding = null; // ReadEncoding must be provided in code

src/MongoDB.Driver/MongoClientSettings.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ public int MaxConnectionPoolSize
448448
set
449449
{
450450
if (_isFrozen) { throw new InvalidOperationException("MongoClientSettings is frozen."); }
451-
_maxConnectionPoolSize = value;
451+
_maxConnectionPoolSize = Ensure.IsGreaterThanZero(value, nameof(MaxConnectionPoolSize));
452452
}
453453
}
454454

@@ -871,7 +871,7 @@ public static MongoClientSettings FromUrl(MongoUrl url)
871871
clientSettings.IPv6 = url.IPv6;
872872
clientSettings.MaxConnectionIdleTime = url.MaxConnectionIdleTime;
873873
clientSettings.MaxConnectionLifeTime = url.MaxConnectionLifeTime;
874-
clientSettings.MaxConnectionPoolSize = url.MaxConnectionPoolSize;
874+
clientSettings.MaxConnectionPoolSize = ConnectionStringConversions.GetEffectiveMaxConnections(url.MaxConnectionPoolSize);
875875
clientSettings.MinConnectionPoolSize = url.MinConnectionPoolSize;
876876
clientSettings.ReadConcern = new ReadConcern(url.ReadConcernLevel);
877877
clientSettings.ReadEncoding = null; // ReadEncoding must be provided in code

src/MongoDB.Driver/MongoDB.Driver.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565

6666
<ItemGroup>
6767
<Compile Include="..\MongoDB.Shared\ApplicationNameHelper.cs" Link="ApplicationNameHelper.cs" />
68+
<Compile Include="..\MongoDB.Shared\ConnectionStringConversions.cs" Link="Support\ConnectionStringConversions.cs" />
6869
<Compile Include="..\MongoDB.Shared\Hasher.cs" Link="Support\Hasher.cs" />
6970
<Compile Include="..\MongoDB.Shared\OperatingSystemHelper.cs" Link="Support\OperatingSystemHelper.cs" />
7071
<Compile Include="..\MongoDB.Shared\SecureStringHelper.cs" Link="Support\SecureStringHelper.cs" />

src/MongoDB.Driver/MongoDefaults.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using System.Threading;
1919
using MongoDB.Bson;
2020
using MongoDB.Bson.IO;
21+
using MongoDB.Driver.Core.Misc;
22+
using MongoDB.Shared;
2123

2224
namespace MongoDB.Driver
2325
{
@@ -82,7 +84,7 @@ public static int ComputedWaitQueueSize
8284
}
8385
else
8486
{
85-
return (int)(__waitQueueMultiple * __maxConnectionPoolSize);
87+
return ConnectionStringConversions.GetComputedWaitQueueSize(__maxConnectionPoolSize, __waitQueueMultiple);
8688
}
8789
}
8890
}
@@ -150,7 +152,7 @@ public static TimeSpan MaxConnectionLifeTime
150152
public static int MaxConnectionPoolSize
151153
{
152154
get { return __maxConnectionPoolSize; }
153-
set { __maxConnectionPoolSize = value; }
155+
set { __maxConnectionPoolSize = Ensure.IsGreaterThanZero(value, nameof(MaxConnectionPoolSize)); }
154156
}
155157

156158
/// <summary>

src/MongoDB.Driver/MongoUrl.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using MongoDB.Bson;
2222
using MongoDB.Driver.Core.Clusters;
2323
using MongoDB.Driver.Core.Configuration;
24+
using MongoDB.Shared;
2425

2526
namespace MongoDB.Driver
2627
{
@@ -225,7 +226,8 @@ public int ComputedWaitQueueSize
225226
}
226227
else
227228
{
228-
return (int)(_waitQueueMultiple * _maxConnectionPoolSize);
229+
var effectiveMaxConnections = ConnectionStringConversions.GetEffectiveMaxConnections(_maxConnectionPoolSize);
230+
return ConnectionStringConversions.GetComputedWaitQueueSize(effectiveMaxConnections, _waitQueueMultiple);
229231
}
230232
}
231233
}

src/MongoDB.Driver/MongoUrlBuilder.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ public int ComputedWaitQueueSize
223223
}
224224
else
225225
{
226-
return (int)(_waitQueueMultiple * _maxConnectionPoolSize);
226+
var effectiveMaxConnections = ConnectionStringConversions.GetEffectiveMaxConnections(_maxConnectionPoolSize);
227+
return ConnectionStringConversions.GetComputedWaitQueueSize(effectiveMaxConnections, _waitQueueMultiple);
227228
}
228229
}
229230
}
@@ -460,9 +461,9 @@ public int MaxConnectionPoolSize
460461
get { return _maxConnectionPoolSize; }
461462
set
462463
{
463-
if (value <= 0)
464+
if (value < 0)
464465
{
465-
throw new ArgumentOutOfRangeException("value", "MaxConnectionPoolSize must be greater than zero.");
466+
throw new ArgumentOutOfRangeException("value", "MaxConnectionPoolSize must be greater than or equal to zero.");
466467
}
467468
_maxConnectionPoolSize = value;
468469
}

0 commit comments

Comments
 (0)