Skip to content

Commit 38973f2

Browse files
author
Oleksandr Poliakov
committed
PR
1 parent f88dc48 commit 38973f2

File tree

7 files changed

+380
-366
lines changed

7 files changed

+380
-366
lines changed

src/MongoDB.Driver/IOperationExecutor.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,31 @@ namespace MongoDB.Driver
2222
{
2323
internal interface IOperationExecutor : IDisposable
2424
{
25-
TResult ExecuteReadOperation<TResult>(IReadOperation<TResult> operation,
26-
ReadOperationOptions options,
25+
TResult ExecuteReadOperation<TResult>(
2726
IClientSessionHandle session,
27+
IReadOperation<TResult> operation,
28+
ReadOperationOptions options,
2829
bool allowChannelPinning,
2930
CancellationToken cancellationToken);
3031

31-
Task<TResult> ExecuteReadOperationAsync<TResult>(IReadOperation<TResult> operation,
32-
ReadOperationOptions options,
32+
Task<TResult> ExecuteReadOperationAsync<TResult>(
3333
IClientSessionHandle session,
34+
IReadOperation<TResult> operation,
35+
ReadOperationOptions options,
3436
bool allowChannelPinning,
3537
CancellationToken cancellationToken);
3638

37-
TResult ExecuteWriteOperation<TResult>(IWriteOperation<TResult> operation,
38-
WriteOperationOptions options,
39+
TResult ExecuteWriteOperation<TResult>(
3940
IClientSessionHandle session,
41+
IWriteOperation<TResult> operation,
42+
WriteOperationOptions options,
4043
bool allowChannelPinning,
4144
CancellationToken cancellationToken);
4245

43-
Task<TResult> ExecuteWriteOperationAsync<TResult>(IWriteOperation<TResult> operation,
44-
WriteOperationOptions options,
46+
Task<TResult> ExecuteWriteOperationAsync<TResult>(
4547
IClientSessionHandle session,
48+
IWriteOperation<TResult> operation,
49+
WriteOperationOptions options,
4650
bool allowChannelPinning,
4751
CancellationToken cancellationToken);
4852

src/MongoDB.Driver/MongoClient.cs

Lines changed: 87 additions & 61 deletions
Large diffs are not rendered by default.

src/MongoDB.Driver/MongoCollectionImpl.cs

Lines changed: 159 additions & 170 deletions
Large diffs are not rendered by default.

src/MongoDB.Driver/MongoDatabase.cs

Lines changed: 87 additions & 96 deletions
Large diffs are not rendered by default.

src/MongoDB.Driver/OperationExecutor.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public void Dispose()
3939
}
4040

4141
public TResult ExecuteReadOperation<TResult>(
42+
IClientSessionHandle session,
4243
IReadOperation<TResult> operation,
4344
ReadOperationOptions options,
44-
IClientSessionHandle session,
4545
bool allowChannelPinning,
4646
CancellationToken cancellationToken)
4747
{
@@ -56,9 +56,9 @@ public TResult ExecuteReadOperation<TResult>(
5656
}
5757

5858
public async Task<TResult> ExecuteReadOperationAsync<TResult>(
59+
IClientSessionHandle session,
5960
IReadOperation<TResult> operation,
6061
ReadOperationOptions options,
61-
IClientSessionHandle session,
6262
bool allowChannelPinning,
6363
CancellationToken cancellationToken)
6464
{
@@ -73,9 +73,9 @@ public async Task<TResult> ExecuteReadOperationAsync<TResult>(
7373
}
7474

7575
public TResult ExecuteWriteOperation<TResult>(
76+
IClientSessionHandle session,
7677
IWriteOperation<TResult> operation,
7778
WriteOperationOptions options,
78-
IClientSessionHandle session,
7979
bool allowChannelPinning,
8080
CancellationToken cancellationToken)
8181
{
@@ -89,9 +89,9 @@ public TResult ExecuteWriteOperation<TResult>(
8989
}
9090

9191
public async Task<TResult> ExecuteWriteOperationAsync<TResult>(
92+
IClientSessionHandle session,
9293
IWriteOperation<TResult> operation,
9394
WriteOperationOptions options,
94-
IClientSessionHandle session,
9595
bool allowChannelPinning,
9696
CancellationToken cancellationToken)
9797
{
@@ -128,15 +128,15 @@ private IReadBindingHandle CreateReadBinding(IClientSessionHandle session, ReadP
128128
return new ReadBindingHandle(binding);
129129
}
130130

131-
private IReadWriteBindingHandle CreateReadWriteBinding(IClientSessionHandle session, bool disableChannelPinning)
131+
private IReadWriteBindingHandle CreateReadWriteBinding(IClientSessionHandle session, bool allowChannelPinning)
132132
{
133-
if (disableChannelPinning)
133+
if (allowChannelPinning)
134134
{
135-
var binding = new WritableServerBinding(_client.GetClusterInternal(), session.WrappedCoreSession.Fork());
136-
return new ReadWriteBindingHandle(binding);
135+
return ChannelPinningHelper.CreateReadWriteBinding(_client.GetClusterInternal(), session.WrappedCoreSession.Fork());
137136
}
138137

139-
return ChannelPinningHelper.CreateReadWriteBinding(_client.GetClusterInternal(), session.WrappedCoreSession.Fork());
138+
var binding = new WritableServerBinding(_client.GetClusterInternal(), session.WrappedCoreSession.Fork());
139+
return new ReadWriteBindingHandle(binding);
140140
}
141141

142142
private void ThrowIfDisposed()

tests/MongoDB.Driver.Tests/MockOperationExecutor.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,10 @@ public void EnqueueException<TResult>(Exception exception)
6262
_results.Enqueue(exception);
6363
}
6464

65-
public TResult ExecuteReadOperation<TResult>(IReadOperation<TResult> operation,
66-
ReadOperationOptions readOperationOptions,
65+
public TResult ExecuteReadOperation<TResult>(
6766
IClientSessionHandle session,
67+
IReadOperation<TResult> operation,
68+
ReadOperationOptions readOperationOptions,
6869
bool allowChannelPinning,
6970
CancellationToken cancellationToken)
7071
{
@@ -93,15 +94,16 @@ public TResult ExecuteReadOperation<TResult>(IReadOperation<TResult> operation,
9394
return default(TResult);
9495
}
9596

96-
public Task<TResult> ExecuteReadOperationAsync<TResult>(IReadOperation<TResult> operation,
97-
ReadOperationOptions readOperationOptions,
97+
public Task<TResult> ExecuteReadOperationAsync<TResult>(
9898
IClientSessionHandle session,
99+
IReadOperation<TResult> operation,
100+
ReadOperationOptions readOperationOptions,
99101
bool allowChannelPinning,
100102
CancellationToken cancellationToken)
101103
{
102104
try
103105
{
104-
var result = ExecuteReadOperation(operation, readOperationOptions, session, allowChannelPinning, cancellationToken);
106+
var result = ExecuteReadOperation(session, operation, readOperationOptions, allowChannelPinning, cancellationToken);
105107
return Task.FromResult(result);
106108
}
107109
catch (Exception ex)
@@ -112,9 +114,10 @@ public Task<TResult> ExecuteReadOperationAsync<TResult>(IReadOperation<TResult>
112114
}
113115
}
114116

115-
public TResult ExecuteWriteOperation<TResult>(IWriteOperation<TResult> operation,
116-
WriteOperationOptions writeOperationOptions,
117+
public TResult ExecuteWriteOperation<TResult>(
117118
IClientSessionHandle session,
119+
IWriteOperation<TResult> operation,
120+
WriteOperationOptions writeOperationOptions,
118121
bool allowChannelPinning,
119122
CancellationToken cancellationToken)
120123
{
@@ -143,15 +146,16 @@ public TResult ExecuteWriteOperation<TResult>(IWriteOperation<TResult> operation
143146
return default(TResult);
144147
}
145148

146-
public Task<TResult> ExecuteWriteOperationAsync<TResult>(IWriteOperation<TResult> operation,
147-
WriteOperationOptions writeOperationOptions,
149+
public Task<TResult> ExecuteWriteOperationAsync<TResult>(
148150
IClientSessionHandle session,
151+
IWriteOperation<TResult> operation,
152+
WriteOperationOptions writeOperationOptions,
149153
bool allowChannelPinning,
150154
CancellationToken cancellationToken)
151155
{
152156
try
153157
{
154-
var result = ExecuteWriteOperation(operation, writeOperationOptions, session, allowChannelPinning, cancellationToken);
158+
var result = ExecuteWriteOperation(session, operation, writeOperationOptions, allowChannelPinning, cancellationToken);
155159
return Task.FromResult(result);
156160
}
157161
catch (Exception ex)

tests/MongoDB.Driver.Tests/OperationExecutorTests.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ public async Task ExecuteReadOperation_throws_on_null_operation([Values(true, fa
4747
var session = Mock.Of<IClientSessionHandle>();
4848

4949
var exception = async ?
50-
await Record.ExceptionAsync(() => subject.ExecuteReadOperationAsync<object>(null, options, session, true, CancellationToken.None)) :
51-
Record.Exception(() => subject.ExecuteReadOperation<object>(null, options, session, true, CancellationToken.None));
50+
await Record.ExceptionAsync(() => subject.ExecuteReadOperationAsync<object>(session, null, options, true, CancellationToken.None)) :
51+
Record.Exception(() => subject.ExecuteReadOperation<object>(session, null, options, true, CancellationToken.None));
5252

5353
exception.Should().BeOfType<ArgumentNullException>()
5454
.Subject.ParamName.Should().Be("operation");
@@ -63,8 +63,8 @@ public async Task ExecuteReadOperation_throws_on_null_options([Values(true, fals
6363
var session = Mock.Of<IClientSessionHandle>();
6464

6565
var exception = async ?
66-
await Record.ExceptionAsync(() => subject.ExecuteReadOperationAsync(operation, null, session, true, CancellationToken.None)) :
67-
Record.Exception(() => subject.ExecuteReadOperation(operation, null, session, true, CancellationToken.None));
66+
await Record.ExceptionAsync(() => subject.ExecuteReadOperationAsync(session, operation, null, true, CancellationToken.None)) :
67+
Record.Exception(() => subject.ExecuteReadOperation(session, operation, null, true, CancellationToken.None));
6868

6969
exception.Should().BeOfType<ArgumentNullException>()
7070
.Subject.ParamName.Should().Be("options");
@@ -79,8 +79,8 @@ public async Task ExecuteReadOperation_throws_on_null_session([Values(true, fals
7979
var options = new ReadOperationOptions();
8080

8181
var exception = async ?
82-
await Record.ExceptionAsync(() => subject.ExecuteReadOperationAsync(operation, options, null, true, CancellationToken.None)) :
83-
Record.Exception(() => subject.ExecuteReadOperation(operation, options, null, true, CancellationToken.None));
82+
await Record.ExceptionAsync(() => subject.ExecuteReadOperationAsync(null, operation, options, true, CancellationToken.None)) :
83+
Record.Exception(() => subject.ExecuteReadOperation(null, operation, options, true, CancellationToken.None));
8484

8585
exception.Should().BeOfType<ArgumentNullException>()
8686
.Subject.ParamName.Should().Be("session");
@@ -95,8 +95,8 @@ public async Task ExecuteWriteOperation_throws_on_null_operation([Values(true, f
9595
var session = Mock.Of<IClientSessionHandle>();
9696

9797
var exception = async ?
98-
await Record.ExceptionAsync(() => subject.ExecuteWriteOperationAsync<object>(null, options, session, true, CancellationToken.None)) :
99-
Record.Exception(() => subject.ExecuteWriteOperation<object>(null, options, session, true, CancellationToken.None));
98+
await Record.ExceptionAsync(() => subject.ExecuteWriteOperationAsync<object>(session, null, options, true, CancellationToken.None)) :
99+
Record.Exception(() => subject.ExecuteWriteOperation<object>(session, null, options, true, CancellationToken.None));
100100

101101
exception.Should().BeOfType<ArgumentNullException>()
102102
.Subject.ParamName.Should().Be("operation");
@@ -111,8 +111,8 @@ public async Task ExecuteWriteOperation_throws_on_null_options([Values(true, fal
111111
var session = Mock.Of<IClientSessionHandle>();
112112

113113
var exception = async ?
114-
await Record.ExceptionAsync(() => subject.ExecuteWriteOperationAsync(operation, null, session, true, CancellationToken.None)) :
115-
Record.Exception(() => subject.ExecuteWriteOperation(operation, null, session, true, CancellationToken.None));
114+
await Record.ExceptionAsync(() => subject.ExecuteWriteOperationAsync(session, operation, null, true, CancellationToken.None)) :
115+
Record.Exception(() => subject.ExecuteWriteOperation(session, operation, null, true, CancellationToken.None));
116116

117117
exception.Should().BeOfType<ArgumentNullException>()
118118
.Subject.ParamName.Should().Be("options");
@@ -127,8 +127,8 @@ public async Task ExecuteWriteOperation_throws_on_null_session([Values(true, fal
127127
var options = new WriteOperationOptions();
128128

129129
var exception = async ?
130-
await Record.ExceptionAsync(() => subject.ExecuteWriteOperationAsync(operation, options, null, true, CancellationToken.None)) :
131-
Record.Exception(() => subject.ExecuteWriteOperation(operation, options, null, true, CancellationToken.None));
130+
await Record.ExceptionAsync(() => subject.ExecuteWriteOperationAsync(null, operation, options, true, CancellationToken.None)) :
131+
Record.Exception(() => subject.ExecuteWriteOperation(null, operation, options, true, CancellationToken.None));
132132

133133
exception.Should().BeOfType<ArgumentNullException>()
134134
.Subject.ParamName.Should().Be("session");

0 commit comments

Comments
 (0)