Skip to content

Commit 501208f

Browse files
CSHARP-2512: Change the RetryWrites default value to true.
1 parent 87a8339 commit 501208f

Some content is hidden

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

53 files changed

+114
-412
lines changed

Docs/reference/content/upgrading.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,4 @@ title = "Upgrading"
1111

1212
## Breaking Changes
1313

14-
For most users there should be no breaking changes in version 2.8.0 of the driver.
15-
16-
Because we have updated several external dependencies to newer versions, you might encounter compatibility
17-
issues if your application depends on different versions of those dependencies. This might apply to you
18-
if you depend on System.Runtime.InteropServices.RuntimeInformation or DnsClient. Note that even if your
19-
application does not depend on these directly, it is possible that you depend on them indirectly.
14+
There should be no breaking changes in version 2.9.0 of the driver.

Docs/reference/content/what_is_new.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ title = "What's New"
88
pre = "<i class='fa fa-star'></i>"
99
+++
1010

11+
## What's New in 2.9.0
12+
13+
Some of the changes in 2.9.0 include:
14+
15+
* Retryable writes are enabled by default
16+
1117
## What's New in 2.8.0
1218

1319
Some of the changes in 2.8.0 include:

src/MongoDB.Driver.Legacy/MongoServerSettings.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public MongoServerSettings()
9696
_readPreference = ReadPreference.Primary;
9797
_replicaSetName = null;
9898
_retryReads = true;
99-
_retryWrites = false;
99+
_retryWrites = true;
100100
_scheme = ConnectionStringScheme.MongoDB;
101101
_sdamLogFilename = null;
102102
_servers = new List<MongoServerAddress> { new MongoServerAddress("localhost") };
@@ -421,6 +421,9 @@ public bool RetryReads
421421
/// <summary>
422422
/// Gets or sets whether to retry writes.
423423
/// </summary>
424+
/// <value>
425+
/// The default value is <c>true</c>.
426+
/// </value>
424427
public bool RetryWrites
425428
{
426429
get { return _retryWrites; }
@@ -727,7 +730,7 @@ public static MongoServerSettings FromUrl(MongoUrl url)
727730
serverSettings.ReadPreference = (url.ReadPreference == null) ? ReadPreference.Primary : url.ReadPreference;
728731
serverSettings.ReplicaSetName = url.ReplicaSetName;
729732
serverSettings.RetryReads = url.RetryReads ?? true;
730-
serverSettings.RetryWrites = url.RetryWrites ?? false;
733+
serverSettings.RetryWrites = url.RetryWrites ?? true;
731734
serverSettings.LocalThreshold = url.LocalThreshold;
732735
serverSettings.Scheme = url.Scheme;
733736
serverSettings.SdamLogFilename = null; // SdamLogFilename must be provided in code

src/MongoDB.Driver/MongoClientSettings.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
using System.Collections.ObjectModel;
1919
using System.Linq;
2020
using System.Text;
21-
using System.Threading;
2221
using MongoDB.Bson;
2322
using MongoDB.Driver.Core.Configuration;
2423
using MongoDB.Driver.Core.Misc;
@@ -94,7 +93,7 @@ public MongoClientSettings()
9493
_readPreference = ReadPreference.Primary;
9594
_replicaSetName = null;
9695
_retryReads = true;
97-
_retryWrites = false;
96+
_retryWrites = true;
9897
_scheme = ConnectionStringScheme.MongoDB;
9998
_sdamLogFilename = null;
10099
_servers = new List<MongoServerAddress> { new MongoServerAddress("localhost") };
@@ -399,6 +398,9 @@ public bool RetryReads
399398
/// <summary>
400399
/// Gets or sets whether to retry writes.
401400
/// </summary>
401+
/// <value>
402+
/// The default value is <c>true</c>.
403+
/// </value>
402404
public bool RetryWrites
403405
{
404406
get { return _retryWrites; }
@@ -676,7 +678,7 @@ public static MongoClientSettings FromUrl(MongoUrl url)
676678
clientSettings.ReadPreference = (url.ReadPreference == null) ? ReadPreference.Primary : url.ReadPreference;
677679
clientSettings.ReplicaSetName = url.ReplicaSetName;
678680
clientSettings.RetryReads = url.RetryReads.GetValueOrDefault(true);
679-
clientSettings.RetryWrites = url.RetryWrites.GetValueOrDefault(false);
681+
clientSettings.RetryWrites = url.RetryWrites.GetValueOrDefault(true);
680682
clientSettings.LocalThreshold = url.LocalThreshold;
681683
clientSettings.Scheme = url.Scheme;
682684
clientSettings.Servers = new List<MongoServerAddress>(url.Servers);

src/MongoDB.Driver/MongoUrlBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -927,9 +927,9 @@ public override string ToString()
927927
{
928928
query.AppendFormat("retryReads=false;");
929929
}
930-
if (_retryWrites.GetValueOrDefault(false))
930+
if (_retryWrites.HasValue)
931931
{
932-
query.AppendFormat("retryWrites=true;");
932+
query.AppendFormat("retryWrites={0};", JsonConvert.ToString(_retryWrites.Value));
933933
}
934934
if (query.Length != 0)
935935
{

tests/MongoDB.Driver.Legacy.TestHelpers/LegacyTestConfiguration.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,20 @@ public static MongoCollection<T> GetCollection<T>()
9292
return __database.GetCollection<T>(__collection.Name);
9393
}
9494

95+
public static MongoServer GetServer(
96+
bool? retryWrites = null)
97+
{
98+
var settings = DriverTestConfiguration.GetClientSettings();
99+
if (retryWrites.HasValue)
100+
{
101+
settings.RetryWrites = retryWrites.Value;
102+
}
103+
var client = new MongoClient(settings);
104+
#pragma warning disable 618
105+
return client.GetServer();
106+
#pragma warning restore 618
107+
}
108+
95109
public static void StartReplication(MongoServerInstance secondary)
96110
{
97111
using (__server.RequestStart(secondary))

tests/MongoDB.Driver.Legacy.Tests/MongoCollectionTests.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
using MongoDB.Driver.TestHelpers;
3535
using MongoDB.Driver.Core.Events;
3636
using MongoDB.Driver.Legacy.Tests;
37-
using MongoDB.Bson.TestHelpers;
3837

3938
namespace MongoDB.Driver.Tests
4039
{
@@ -54,7 +53,7 @@ private class TestClass
5453
public MongoCollectionTests()
5554
{
5655
_server = LegacyTestConfiguration.Server;
57-
_primary = _server.Instances.First(x => x.IsPrimary);
56+
_primary = GetPrimary(_server);
5857
_database = LegacyTestConfiguration.Database;
5958
_collection = _database.GetCollection(GetType().Name);
6059
}
@@ -1230,15 +1229,19 @@ public void TestFindAndRemoveWithFields()
12301229
[Fact]
12311230
public void TestFindAndRemoveWithMaxTime()
12321231
{
1233-
if (_primary.Supports(FeatureId.MaxTime))
1232+
var server = LegacyTestConfiguration.GetServer(retryWrites: false);
1233+
var primary = GetPrimary(server);
1234+
var collection = GetCollection(server);
1235+
1236+
if (primary.Supports(FeatureId.MaxTime))
12341237
{
1235-
using (var failpoint = new FailPoint(FailPointName.MaxTimeAlwaysTimeout, _server, _primary))
1238+
using (var failpoint = new FailPoint(FailPointName.MaxTimeAlwaysTimeout, server, primary))
12361239
{
12371240
if (failpoint.IsSupported())
12381241
{
12391242
failpoint.SetAlwaysOn();
12401243
var args = new FindAndRemoveArgs { MaxTime = TimeSpan.FromMilliseconds(1) };
1241-
Assert.Throws<MongoExecutionTimeoutException>(() => _collection.FindAndRemove(args));
1244+
Assert.Throws<MongoExecutionTimeoutException>(() => collection.FindAndRemove(args));
12421245
}
12431246
}
12441247
}
@@ -3577,6 +3580,18 @@ private void EnsureCollectionExists(string collectionName)
35773580
_database.CreateCollection(collectionName);
35783581
}
35793582

3583+
private MongoCollection<BsonDocument> GetCollection(MongoServer server)
3584+
{
3585+
return server
3586+
.GetDatabase(CoreTestConfiguration.DatabaseNamespace.DatabaseName)
3587+
.GetCollection(GetType().Name);
3588+
}
3589+
3590+
private MongoServerInstance GetPrimary(MongoServer server)
3591+
{
3592+
return server.Instances.First(c => c.IsPrimary);
3593+
}
3594+
35803595
// nested types
35813596
private class ExpectedWriteConcernResult
35823597
{

tests/MongoDB.Driver.Legacy.Tests/MongoServerSettingsTests.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
using System.Security.Authentication;
2020
using FluentAssertions;
2121
using MongoDB.Bson;
22-
using MongoDB.Driver;
2322
using MongoDB.Driver.Core.Configuration;
2423
using Xunit;
2524

@@ -161,7 +160,7 @@ public void TestDefaults()
161160
Assert.Equal(ReadPreference.Primary, settings.ReadPreference);
162161
Assert.Equal(null, settings.ReplicaSetName);
163162
Assert.Equal(true, settings.RetryReads);
164-
Assert.Equal(false, settings.RetryWrites);
163+
Assert.Equal(true, settings.RetryWrites);
165164
Assert.Equal(ConnectionStringScheme.MongoDB, settings.Scheme);
166165
Assert.Equal(null, settings.SdamLogFilename);
167166
Assert.Equal(_localHost, settings.Server);
@@ -261,7 +260,7 @@ public void TestEquals()
261260
Assert.False(clone.Equals(settings));
262261

263262
clone = settings.Clone();
264-
clone.RetryWrites = true;
263+
clone.RetryWrites = false;
265264
Assert.False(clone.Equals(settings));
266265

267266
clone = settings.Clone();
@@ -643,15 +642,15 @@ public void TestRetryReads()
643642
public void TestRetryWrites()
644643
{
645644
var settings = new MongoServerSettings();
646-
Assert.Equal(false, settings.RetryWrites);
645+
Assert.Equal(true, settings.RetryWrites);
647646

648-
var retryWrites = true;
647+
var retryWrites = false;
649648
settings.RetryWrites = retryWrites;
650649
Assert.Equal(retryWrites, settings.RetryWrites);
651650

652651
settings.Freeze();
653652
Assert.Equal(retryWrites, settings.RetryWrites);
654-
Assert.Throws<InvalidOperationException>(() => { settings.RetryWrites = false; });
653+
Assert.Throws<InvalidOperationException>(() => { settings.RetryWrites = true; });
655654
}
656655

657656
[Fact]

tests/MongoDB.Driver.Legacy.Tests/Operations/BulkWriteOperationTests.cs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@
1414
*/
1515

1616
using System;
17-
using System.Collections.Generic;
1817
using System.Linq;
1918
using FluentAssertions;
2019
using MongoDB.Bson;
2120
using MongoDB.Bson.TestHelpers.XunitExtensions;
22-
using MongoDB.Driver;
2321
using MongoDB.Driver.Builders;
24-
using MongoDB.Driver.Core;
2522
using MongoDB.Driver.Core.Clusters;
2623
using MongoDB.Driver.Core.Misc;
2724
using MongoDB.Driver.Core.TestHelpers.XunitExtensions;
25+
using MongoDB.Driver.Legacy.Tests;
26+
using MongoDB.Driver.TestHelpers;
2827
using Xunit;
2928

3029
namespace MongoDB.Driver.Tests.Operations
@@ -168,7 +167,7 @@ public void TestBatchSplittingUpdatesNearMaxWriteBatchCount(int maxBatchCountDel
168167
{
169168
var count = _primary.MaxBatchCount + maxBatchCountDelta;
170169
_collection.Drop();
171-
_collection.InsertBatch(Enumerable.Range(0, count).Select(n => new BsonDocument { { "_id", n }, { "n", 0 } }));
170+
_collection.InsertBatch(Enumerable.Range(0, count).Select(n => new BsonDocument { { "_id", n }, { "n", 0 } }));
172171

173172
var bulk = _collection.InitializeOrderedBulkOperation();
174173
for (var n = 0; n < count; n++)
@@ -209,21 +208,24 @@ public void TestExecuteTwice(bool ordered)
209208
[InlineData(true, 1)]
210209
public void TestExecuteWithExplicitWriteConcern(bool ordered, int w)
211210
{
211+
var server = LegacyTestConfiguration.GetServer(retryWrites: false);
212+
var collection = GetCollection(server);
213+
212214
// use RequestStart because some of the test cases use { w : 0 }
213-
using (_server.RequestStart())
215+
using (server.RequestStart())
214216
{
215-
_collection.Drop();
217+
collection.Drop();
216218

217219
var document = new BsonDocument("_id", 1);
218-
var bulk = InitializeBulkOperation(_collection, ordered);
220+
var bulk = InitializeBulkOperation(collection, ordered);
219221
bulk.Insert(document);
220222
var result = bulk.Execute(new WriteConcern(w));
221223

222224
var expectedResult = new ExpectedResult { IsAcknowledged = w > 0, InsertedCount = 1 };
223225
CheckExpectedResult(expectedResult, result);
224226

225227
var expectedDocuments = new[] { document };
226-
_collection.FindAll().Should().BeEquivalentTo(expectedDocuments);
228+
collection.FindAll().Should().BeEquivalentTo(expectedDocuments);
227229
}
228230
}
229231

@@ -706,7 +708,7 @@ public void TestUnorderedBatchWithErrors()
706708

707709
var expectedDocuments = new BsonDocument[]
708710
{
709-
new BsonDocument { { "b", 1 }, { "a", 1 } },
711+
new BsonDocument { { "b", 1 }, { "a", 1 } },
710712
_primary.BuildInfo.Version < new Version(2, 6, 0) ?
711713
new BsonDocument { { "a", 2 }, { "b", 3 } } : // servers prior to 2.6 rewrite field order on update
712714
new BsonDocument { { "b", 3 }, { "a", 2 } },
@@ -1127,18 +1129,21 @@ public void TestUpsertWithOneMatchingDocument(bool ordered)
11271129
[InlineData(true)]
11281130
public void TestW0DoesNotReportErrors(bool ordered)
11291131
{
1132+
var server = LegacyTestConfiguration.GetServer(retryWrites: false);
1133+
var collection = GetCollection(server);
1134+
11301135
// use a request so we can read our own writes even with older servers
1131-
using (_server.RequestStart())
1136+
using (server.RequestStart())
11321137
{
1133-
_collection.Drop();
1138+
collection.Drop();
11341139

11351140
var documents = new[]
11361141
{
11371142
new BsonDocument("_id", 1),
11381143
new BsonDocument("_id", 1)
11391144
};
11401145

1141-
var bulk = InitializeBulkOperation(_collection, ordered);
1146+
var bulk = InitializeBulkOperation(collection, ordered);
11421147
bulk.Insert(documents[0]);
11431148
bulk.Insert(documents[1]);
11441149
var result = bulk.Execute(WriteConcern.Unacknowledged);
@@ -1147,7 +1152,7 @@ public void TestW0DoesNotReportErrors(bool ordered)
11471152
CheckExpectedResult(expectedResult, result);
11481153

11491154
var expectedDocuments = new[] { documents[0] };
1150-
_collection.FindAll().Should().BeEquivalentTo(expectedDocuments);
1155+
collection.FindAll().Should().BeEquivalentTo(expectedDocuments);
11511156
}
11521157
}
11531158

@@ -1252,6 +1257,13 @@ private void CheckExpectedResult(ExpectedResult expectedResult, BulkWriteResult<
12521257
}
12531258
}
12541259

1260+
private MongoCollection<BsonDocument> GetCollection(MongoServer server)
1261+
{
1262+
return server
1263+
.GetDatabase(CoreTestConfiguration.DatabaseNamespace.DatabaseName)
1264+
.GetCollection(GetType().Name);
1265+
}
1266+
12551267
private BulkWriteOperation<T> InitializeBulkOperation<T>(MongoCollection<T> collection, bool ordered)
12561268
{
12571269
return ordered ? collection.InitializeOrderedBulkOperation() : collection.InitializeUnorderedBulkOperation();

tests/MongoDB.Driver.Tests/MongoClientSettingsTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public void TestDefaults()
145145
Assert.Equal(ReadPreference.Primary, settings.ReadPreference);
146146
Assert.Equal(null, settings.ReplicaSetName);
147147
Assert.Equal(true, settings.RetryReads);
148-
Assert.Equal(false, settings.RetryWrites);
148+
Assert.Equal(true, settings.RetryWrites);
149149
Assert.Equal(ConnectionStringScheme.MongoDB, settings.Scheme);
150150
Assert.Equal(_localHost, settings.Server);
151151
Assert.Equal(_localHost, settings.Servers.First());
@@ -245,7 +245,7 @@ public void TestEquals()
245245
Assert.False(clone.Equals(settings));
246246

247247
clone = settings.Clone();
248-
clone.RetryWrites = true;
248+
clone.RetryWrites = false;
249249
Assert.False(clone.Equals(settings));
250250

251251
clone = settings.Clone();
@@ -616,15 +616,15 @@ public void TestRetryReads()
616616
public void TestRetryWrites()
617617
{
618618
var settings = new MongoClientSettings();
619-
Assert.Equal(false, settings.RetryWrites);
619+
Assert.Equal(true, settings.RetryWrites);
620620

621-
var retryWrites = true;
621+
var retryWrites = false;
622622
settings.RetryWrites = retryWrites;
623623
Assert.Equal(retryWrites, settings.RetryWrites);
624624

625625
settings.Freeze();
626626
Assert.Equal(retryWrites, settings.RetryWrites);
627-
Assert.Throws<InvalidOperationException>(() => { settings.RetryWrites = false; });
627+
Assert.Throws<InvalidOperationException>(() => { settings.RetryWrites = true; });
628628
}
629629

630630
[Fact]

0 commit comments

Comments
 (0)