Skip to content

Commit 43e8249

Browse files
CSHARP-3068: Raise error when hint option is provided on unacknowledged writes against any server version
1 parent 6eedd69 commit 43e8249

File tree

63 files changed

+3018
-954
lines changed

Some content is hidden

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

63 files changed

+3018
-954
lines changed

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -361,16 +361,12 @@ private async Task<BulkWriteBatchResult> ExecuteBatchAsync(RetryableWriteContext
361361

362362
private bool IsHintSupportedForRequestWithHint(WriteRequest request, SemanticVersion serverVersion)
363363
{
364-
if (request is DeleteRequest &&
365-
(Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion) ||
366-
(!_writeConcern.IsAcknowledged && !Feature.HintForDeleteOperations.IsSupported(serverVersion))))
364+
if (request is DeleteRequest && (Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion) || !_writeConcern.IsAcknowledged))
367365
{
368366
return false;
369367
}
370368

371-
if (request is UpdateRequest &&
372-
(Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion) ||
373-
(!_writeConcern.IsAcknowledged && !Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion))))
369+
if (request is UpdateRequest && (Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion) || !_writeConcern.IsAcknowledged))
374370
{
375371
return false;
376372
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,16 +248,12 @@ private async Task<BulkWriteOperationResult> ExecuteBatchesAsync(RetryableWriteC
248248

249249
private bool IsHintSupportedForRequestWithHint(WriteRequest request, SemanticVersion serverVersion)
250250
{
251-
if (request is DeleteRequest &&
252-
(Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion) ||
253-
(!_writeConcern.IsAcknowledged && !Feature.HintForDeleteOperations.IsSupported(serverVersion))))
251+
if (request is DeleteRequest && (Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion) || !_writeConcern.IsAcknowledged))
254252
{
255253
return false;
256254
}
257255

258-
if (request is UpdateRequest &&
259-
(Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion) ||
260-
(!_writeConcern.IsAcknowledged && !Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion))))
256+
if (request is UpdateRequest && (Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion) || !_writeConcern.IsAcknowledged))
261257
{
262258
return false;
263259
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,7 @@ internal override BsonDocument CreateCommand(ICoreSessionHandle session, Connect
117117
{
118118
var serverVersion = connectionDescription.ServerVersion;
119119
Feature.Collation.ThrowIfNotSupported(serverVersion, Collation);
120-
if (Feature.HintForFindAndModifyFeature.DriverMustThrowIfNotSupported(serverVersion) ||
121-
(WriteConcern != null && !WriteConcern.IsAcknowledged && !Feature.HintForFindAndModifyFeature.IsSupported(serverVersion)))
120+
if (Feature.HintForFindAndModifyFeature.DriverMustThrowIfNotSupported(serverVersion) || (WriteConcern != null && !WriteConcern.IsAcknowledged))
122121
{
123122
if (_hint != null)
124123
{

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ internal override BsonDocument CreateCommand(ICoreSessionHandle session, Connect
172172
{
173173
var serverVersion = connectionDescription.ServerVersion;
174174
Feature.Collation.ThrowIfNotSupported(serverVersion, Collation);
175-
if (Feature.HintForFindAndModifyFeature.DriverMustThrowIfNotSupported(serverVersion))
175+
if (Feature.HintForFindAndModifyFeature.DriverMustThrowIfNotSupported(serverVersion) || (WriteConcern != null && !WriteConcern.IsAcknowledged))
176176
{
177177
if (_hint != null)
178178
{

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ internal override BsonDocument CreateCommand(ICoreSessionHandle session, Connect
186186
{
187187
var serverVersion = connectionDescription.ServerVersion;
188188
Feature.Collation.ThrowIfNotSupported(serverVersion, Collation);
189-
if (Feature.HintForFindAndModifyFeature.DriverMustThrowIfNotSupported(serverVersion))
189+
if (Feature.HintForFindAndModifyFeature.DriverMustThrowIfNotSupported(serverVersion) || (WriteConcern != null && !WriteConcern.IsAcknowledged))
190190
{
191191
if (_hint != null)
192192
{

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ protected override BsonDocument CreateCommand(ICoreSessionHandle session, Connec
8989
throw new NotSupportedException($"Server version {serverVersion} does not support collations.");
9090
}
9191
}
92-
if (Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion) ||
93-
(!WriteConcern.IsAcknowledged && !Feature.HintForDeleteOperations.IsSupported(serverVersion)))
92+
if (Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion) || (WriteConcern != null && !WriteConcern.IsAcknowledged))
9493
{
9594
if (_deletes.Items.Skip(_deletes.Offset).Take(_deletes.Count).Any(u => u.Hint != null))
9695
{

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,7 @@ protected override BsonDocument CreateCommand(ICoreSessionHandle session, Connec
108108
throw new NotSupportedException($"Server version {serverVersion} does not support arrayFilters.");
109109
}
110110
}
111-
if (Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion) ||
112-
(!WriteConcern.IsAcknowledged && !Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion)))
111+
if (Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion) || (WriteConcern != null && !WriteConcern.IsAcknowledged))
113112
{
114113
if (_updates.Items.Skip(_updates.Offset).Take(_updates.Count).Any(u => u.Hint != null))
115114
{

tests/MongoDB.Driver.Core.Tests/Core/Operations/BulkDeleteOperationTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,18 @@ public void Execute_with_hint_should_throw_when_hint_is_not_supported(
7272

7373
var exception = Record.Exception(() => ExecuteOperation(subject, async, useImplicitSession: true));
7474

75-
if (Feature.HintForDeleteOperations.IsSupported(serverVersion))
76-
{
77-
exception.Should().BeNull();
78-
}
79-
else if (!writeConcern.IsAcknowledged)
75+
if (!writeConcern.IsAcknowledged)
8076
{
8177
exception.Should().BeOfType<NotSupportedException>();
8278
}
8379
else if (Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion))
8480
{
8581
exception.Should().BeOfType<NotSupportedException>();
8682
}
83+
else if (Feature.HintForDeleteOperations.IsSupported(serverVersion))
84+
{
85+
exception.Should().BeNull();
86+
}
8787
else
8888
{
8989
exception.Should().BeOfType<MongoCommandException>();

tests/MongoDB.Driver.Core.Tests/Core/Operations/BulkMixedWriteOperationTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -172,18 +172,18 @@ public void Execute_delete_with_hint_should_throw_when_hint_is_not_supported(
172172

173173
var exception = Record.Exception(() => ExecuteOperation(subject, async, useImplicitSession: true));
174174

175-
if (Feature.HintForDeleteOperations.IsSupported(serverVersion))
176-
{
177-
exception.Should().BeNull();
178-
}
179-
else if (!writeConcern.IsAcknowledged)
175+
if (!writeConcern.IsAcknowledged)
180176
{
181177
exception.Should().BeOfType<NotSupportedException>();
182178
}
183179
else if (Feature.HintForDeleteOperations.DriverMustThrowIfNotSupported(serverVersion))
184180
{
185181
exception.Should().BeOfType<NotSupportedException>();
186182
}
183+
else if (Feature.HintForDeleteOperations.IsSupported(serverVersion))
184+
{
185+
exception.Should().BeNull();
186+
}
187187
else
188188
{
189189
exception.Should().BeOfType<MongoCommandException>();
@@ -215,18 +215,18 @@ public void Execute_update_with_hint_should_throw_when_hint_is_not_supported(
215215

216216
var exception = Record.Exception(() => ExecuteOperation(subject, async, useImplicitSession: true));
217217

218-
if (Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion))
219-
{
220-
exception.Should().BeNull();
221-
}
222-
else if (!writeConcern.IsAcknowledged)
218+
if (!writeConcern.IsAcknowledged)
223219
{
224220
exception.Should().BeOfType<NotSupportedException>();
225221
}
226222
else if (Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion))
227223
{
228224
exception.Should().BeOfType<NotSupportedException>();
229225
}
226+
else if (Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion))
227+
{
228+
exception.Should().BeNull();
229+
}
230230
else
231231
{
232232
exception.Should().BeOfType<MongoCommandException>();

tests/MongoDB.Driver.Core.Tests/Core/Operations/BulkUpdateOperationTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,18 @@ public void Execute_with_hint_should_throw_when_hint_is_not_supported(
7575

7676
var exception = Record.Exception(() => ExecuteOperation(subject, async, useImplicitSession: true));
7777

78-
if (Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion))
79-
{
80-
exception.Should().BeNull();
81-
}
82-
else if (!writeConcern.IsAcknowledged)
78+
if (!writeConcern.IsAcknowledged)
8379
{
8480
exception.Should().BeOfType<NotSupportedException>();
8581
}
8682
else if (Feature.HintForUpdateAndReplaceOperations.DriverMustThrowIfNotSupported(serverVersion))
8783
{
8884
exception.Should().BeOfType<NotSupportedException>();
8985
}
86+
else if (Feature.HintForUpdateAndReplaceOperations.IsSupported(serverVersion))
87+
{
88+
exception.Should().BeNull();
89+
}
9090
else
9191
{
9292
exception.Should().BeOfType<MongoCommandException>();

0 commit comments

Comments
 (0)