Skip to content

Commit 6c9ba6c

Browse files
author
Oleksandr Poliakov
committed
PR
1 parent f187294 commit 6c9ba6c

File tree

6 files changed

+30
-132
lines changed

6 files changed

+30
-132
lines changed

src/MongoDB.Driver/MongoClient.cs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public sealed class MongoClient : IMongoClient
4141
private readonly IClusterInternal _cluster;
4242
#pragma warning restore CA2213 // Disposable fields should be disposed
4343
private readonly IAutoEncryptionLibMongoCryptController _libMongoCryptController;
44+
private readonly Func<IMongoClient, IOperationExecutor> _operationExecutorFactory;
4445
private readonly IOperationExecutor _operationExecutor;
4546
private readonly MongoClientSettings _settings;
4647
private readonly ILogger<LogCategories.Client> _logger;
@@ -61,26 +62,9 @@ public MongoClient()
6162
/// </summary>
6263
/// <param name="settings">The settings.</param>
6364
public MongoClient(MongoClientSettings settings)
65+
: this(client => new OperationExecutor(client), settings)
6466
{
65-
_settings = Ensure.IsNotNull(settings, nameof(settings)).FrozenCopy();
66-
_logger = _settings.LoggingSettings?.CreateLogger<LogCategories.Client>();
6767

68-
_cluster = _settings.ClusterSource.Get(_settings.ToClusterKey());
69-
_operationExecutor = new OperationExecutor(this);
70-
_readOperationOptions = new(DefaultReadPreference: _settings.ReadPreference);
71-
_writeOperationOptions = new();
72-
73-
if (settings.AutoEncryptionOptions != null)
74-
{
75-
_libMongoCryptController =
76-
MongoClientSettings.Extensions.AutoEncryptionProvider.CreateAutoCryptClientController(this, settings.AutoEncryptionOptions);
77-
78-
_settings.LoggingSettings?.CreateLogger<LogCategories.Client>()?.LogTrace(
79-
StructuredLogTemplateProviders.TopologyId_Message_SharedLibraryVersion,
80-
_cluster.ClusterId,
81-
"CryptClient created. Configured shared library version: ",
82-
_libMongoCryptController.CryptSharedLibraryVersion() ?? "None");
83-
}
8468
}
8569

8670
/// <summary>
@@ -101,10 +85,27 @@ public MongoClient(string connectionString)
10185
{
10286
}
10387

104-
internal MongoClient(IOperationExecutor operationExecutor, MongoClientSettings settings)
105-
: this(settings)
88+
internal MongoClient(Func<IMongoClient, IOperationExecutor> operationExecutorFactory, MongoClientSettings settings)
10689
{
107-
_operationExecutor = new OperationExecutorWrapper(operationExecutor);
90+
_operationExecutorFactory = Ensure.IsNotNull(operationExecutorFactory, nameof(operationExecutorFactory));
91+
_settings = Ensure.IsNotNull(settings, nameof(settings)).FrozenCopy();
92+
_logger = _settings.LoggingSettings?.CreateLogger<LogCategories.Client>();
93+
_cluster = _settings.ClusterSource.Get(_settings.ToClusterKey());
94+
_operationExecutor = _operationExecutorFactory(this);
95+
_readOperationOptions = new(DefaultReadPreference: _settings.ReadPreference);
96+
_writeOperationOptions = new();
97+
98+
if (settings.AutoEncryptionOptions != null)
99+
{
100+
_libMongoCryptController =
101+
MongoClientSettings.Extensions.AutoEncryptionProvider.CreateAutoCryptClientController(this, settings.AutoEncryptionOptions);
102+
103+
_settings.LoggingSettings?.CreateLogger<LogCategories.Client>()?.LogTrace(
104+
StructuredLogTemplateProviders.TopologyId_Message_SharedLibraryVersion,
105+
_cluster.ClusterId,
106+
"CryptClient created. Configured shared library version: ",
107+
_libMongoCryptController.CryptSharedLibraryVersion() ?? "None");
108+
}
108109
}
109110

110111
// public properties
@@ -442,7 +443,7 @@ public IMongoClient WithReadConcern(ReadConcern readConcern)
442443

443444
var newSettings = Settings.Clone();
444445
newSettings.ReadConcern = readConcern;
445-
return new MongoClient(_operationExecutor, newSettings);
446+
return new MongoClient(_operationExecutorFactory, newSettings);
446447
}
447448

448449
/// <inheritdoc/>
@@ -454,7 +455,7 @@ public IMongoClient WithReadPreference(ReadPreference readPreference)
454455

455456
var newSettings = Settings.Clone();
456457
newSettings.ReadPreference = readPreference;
457-
return new MongoClient(_operationExecutor, newSettings);
458+
return new MongoClient(_operationExecutorFactory, newSettings);
458459
}
459460

460461
/// <inheritdoc/>
@@ -466,7 +467,7 @@ public IMongoClient WithWriteConcern(WriteConcern writeConcern)
466467

467468
var newSettings = Settings.Clone();
468469
newSettings.WriteConcern = writeConcern;
469-
return new MongoClient(_operationExecutor, newSettings);
470+
return new MongoClient(_operationExecutorFactory, newSettings);
470471
}
471472

472473
// private methods

src/MongoDB.Driver/MongoDatabase.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ internal sealed class MongoDatabase : IMongoDatabase
3939
private readonly DatabaseNamespace _databaseNamespace;
4040
private readonly IOperationExecutor _operationExecutor;
4141
private readonly MongoDatabaseSettings _settings;
42-
4342
private readonly ReadOperationOptions _readOperationOptions;
4443
private readonly WriteOperationOptions _writeOperationOptions;
4544

@@ -52,8 +51,8 @@ public MongoDatabase(IMongoClient client, DatabaseNamespace databaseNamespace, M
5251
_cluster = Ensure.IsNotNull(cluster, nameof(cluster));
5352
_operationExecutor = Ensure.IsNotNull(operationExecutor, nameof(operationExecutor));
5453

55-
_readOperationOptions = new ReadOperationOptions(DefaultReadPreference: _settings.ReadPreference);
56-
_writeOperationOptions = new WriteOperationOptions();
54+
_readOperationOptions = new(DefaultReadPreference: _settings.ReadPreference);
55+
_writeOperationOptions = new();
5756
}
5857

5958
// public properties

src/MongoDB.Driver/OperationExecutorWrapper.cs

Lines changed: 0 additions & 102 deletions
This file was deleted.

src/MongoDB.Driver/ReadOperationOptions.cs

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

1616
namespace MongoDB.Driver
1717
{
18-
internal record class ReadOperationOptions(ReadPreference ExplicitReadPreference = null, ReadPreference DefaultReadPreference = null);
18+
internal record ReadOperationOptions(ReadPreference ExplicitReadPreference = null, ReadPreference DefaultReadPreference = null);
1919

2020
internal static class ReadOperationOptionsExtensions
2121
{

src/MongoDB.Driver/WriteOperationOptions.cs

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

1616
namespace MongoDB.Driver
1717
{
18-
internal record class WriteOperationOptions();
18+
internal record WriteOperationOptions();
1919
}
2020

tests/MongoDB.Driver.Tests/OperationExecutorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class OperationExecutorTests
2929
{
3030
[Theory]
3131
[ParameterAttributeData]
32-
public async Task StartImplicitSession_should_call_cluster([Values(true, false)]bool isAsync)
32+
public async Task StartImplicitSession_should_call_cluster_StartSession([Values(true, false)]bool isAsync)
3333
{
3434
var subject = CreateSubject(out var clusterMock, out _);
3535
if (isAsync)

0 commit comments

Comments
 (0)