Skip to content

Commit b6803ec

Browse files
committed
CSHARP-2286: Sync retryable write tests and throw writeConcernError exception at a lower level so it can be retryable.
1 parent b8eeb25 commit b6803ec

File tree

58 files changed

+4048
-186
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+4048
-186
lines changed

src/MongoDB.Driver.Core/Core/Operations/AggregateToCollectionOperation.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,7 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
190190
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
191191
{
192192
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
193-
var result = operation.Execute(channelBinding, cancellationToken);
194-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
195-
return result;
193+
return operation.Execute(channelBinding, cancellationToken);
196194
}
197195
}
198196

@@ -206,9 +204,7 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
206204
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
207205
{
208206
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
209-
var result = await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
210-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
211-
return result;
207+
return await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
212208
}
213209
}
214210

src/MongoDB.Driver.Core/Core/Operations/BulkUnmixedWriteOperationBase.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,30 @@ private void EnsureCollationIsSupportedIfAnyRequestHasCollation(RetryableWriteCo
198198
private BulkWriteBatchResult ExecuteBatch(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken)
199199
{
200200
var operation = CreateBatchOperation(batch);
201-
var operationResult = RetryableWriteOperationExecutor.Execute(operation, context, cancellationToken);
201+
BsonDocument operationResult;
202+
try
203+
{
204+
operationResult = RetryableWriteOperationExecutor.Execute(operation, context, cancellationToken);
205+
}
206+
catch (MongoWriteConcernException exception) when (exception.IsWriteConcernErrorOnly())
207+
{
208+
operationResult = exception.Result;
209+
}
202210
return CreateBatchResult(batch, operationResult);
203211
}
204212

205213
private async Task<BulkWriteBatchResult> ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken)
206214
{
207215
var operation = CreateBatchOperation(batch);
208-
var operationResult = await RetryableWriteOperationExecutor.ExecuteAsync(operation, context, cancellationToken).ConfigureAwait(false);
216+
BsonDocument operationResult;
217+
try
218+
{
219+
operationResult = await RetryableWriteOperationExecutor.ExecuteAsync(operation, context, cancellationToken).ConfigureAwait(false);
220+
}
221+
catch (MongoWriteConcernException exception) when (exception.IsWriteConcernErrorOnly())
222+
{
223+
operationResult = exception.Result;
224+
}
209225
return CreateBatchResult(batch, operationResult);
210226
}
211227

src/MongoDB.Driver.Core/Core/Operations/CreateCollectionOperation.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,7 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
296296
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
297297
{
298298
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
299-
var result = operation.Execute(channelBinding, cancellationToken);
300-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
301-
return result;
299+
return operation.Execute(channelBinding, cancellationToken);
302300
}
303301
}
304302

@@ -312,9 +310,7 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
312310
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
313311
{
314312
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
315-
var result = await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
316-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
317-
return result;
313+
return await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
318314
}
319315
}
320316

src/MongoDB.Driver.Core/Core/Operations/CreateIndexesUsingCommandOperation.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,7 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
126126
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
127127
{
128128
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
129-
var result = operation.Execute(channelBinding, cancellationToken);
130-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
131-
return result;
129+
return operation.Execute(channelBinding, cancellationToken);
132130
}
133131
}
134132

@@ -141,9 +139,7 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
141139
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
142140
{
143141
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
144-
var result = await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
145-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
146-
return result;
142+
return await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
147143
}
148144
}
149145

src/MongoDB.Driver.Core/Core/Operations/CreateViewOperation.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,7 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
154154
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
155155
{
156156
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
157-
var result = operation.Execute(channelBinding, cancellationToken);
158-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
159-
return result;
157+
return operation.Execute(channelBinding, cancellationToken);
160158
}
161159
}
162160

@@ -170,9 +168,7 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
170168
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
171169
{
172170
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
173-
var result = await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
174-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
175-
return result;
171+
return await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
176172
}
177173
}
178174

src/MongoDB.Driver.Core/Core/Operations/DropCollectionOperation.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
108108
}
109109
result = ex.Result;
110110
}
111-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
112111
return result;
113112
}
114113
}
@@ -136,7 +135,6 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
136135
}
137136
result = ex.Result;
138137
}
139-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
140138
return result;
141139
}
142140
}

src/MongoDB.Driver.Core/Core/Operations/DropDatabaseOperation.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,7 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
9595
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
9696
{
9797
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
98-
var result = operation.Execute(channelBinding, cancellationToken);
99-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
100-
return result;
98+
return operation.Execute(channelBinding, cancellationToken);
10199
}
102100
}
103101

@@ -111,9 +109,7 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
111109
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
112110
{
113111
var operation = CreateOperation(channelBinding.Session, channel.ConnectionDescription);
114-
var result = await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
115-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
116-
return result;
112+
return await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
117113
}
118114
}
119115

src/MongoDB.Driver.Core/Core/Operations/DropIndexOperation.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ public BsonDocument Execute(IWriteBinding binding, CancellationToken cancellatio
167167
}
168168
result = ex.Result;
169169
}
170-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
171170
return result;
172171
}
173172
}
@@ -195,7 +194,6 @@ public async Task<BsonDocument> ExecuteAsync(IWriteBinding binding, Cancellation
195194
}
196195
result = ex.Result;
197196
}
198-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
199197
return result;
200198
}
201199
}

src/MongoDB.Driver.Core/Core/Operations/EndTransactionOperation.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ public virtual BsonDocument Execute(IReadBinding binding, CancellationToken canc
8484
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
8585
{
8686
var operation = CreateOperation();
87-
var result = operation.Execute(channelBinding, cancellationToken);
88-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
89-
return result;
87+
return operation.Execute(channelBinding, cancellationToken);
9088
}
9189
}
9290

@@ -100,9 +98,7 @@ public virtual async Task<BsonDocument> ExecuteAsync(IReadBinding binding, Cance
10098
using (var channelBinding = new ChannelReadWriteBinding(channelSource.Server, channel, binding.Session.Fork()))
10199
{
102100
var operation = CreateOperation();
103-
var result = await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
104-
WriteConcernErrorHelper.ThrowIfHasWriteConcernError(channel.ConnectionDescription.ConnectionId, result);
105-
return result;
101+
return await operation.ExecuteAsync(channelBinding, cancellationToken).ConfigureAwait(false);
106102
}
107103
}
108104

src/MongoDB.Driver.Core/Core/Operations/FindAndModifyOperationBase.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -208,15 +208,6 @@ private TResult ProcessCommandResult(ConnectionId connectionId, RawBsonDocument
208208
GuidRepresentation = _messageEncoderSettings.GetOrDefault<GuidRepresentation>(MessageEncoderSettingsName.GuidRepresentation, GuidRepresentation.CSharpLegacy)
209209
};
210210

211-
BsonValue writeConcernError;
212-
if (rawBsonDocument.TryGetValue("writeConcernError", out writeConcernError))
213-
{
214-
var message = writeConcernError["errmsg"].AsString;
215-
var response = rawBsonDocument.Materialize(binaryReaderSettings);
216-
var writeConcernResult = new WriteConcernResult(response);
217-
throw new MongoWriteConcernException(connectionId, message, writeConcernResult);
218-
}
219-
220211
using (var stream = new ByteBufferStream(rawBsonDocument.Slice, ownsBuffer: false))
221212
using (var reader = new BsonBinaryReader(stream, binaryReaderSettings))
222213
{

0 commit comments

Comments
 (0)