Skip to content

Commit caeb8a4

Browse files
committed
CSHARP-1252: write exceptions now have more complete messages.
1 parent e7a00db commit caeb8a4

File tree

4 files changed

+62
-6
lines changed

4 files changed

+62
-6
lines changed

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Collections.ObjectModel;
1919
using System.Linq;
2020
using System.Runtime.Serialization;
21+
using System.Text;
2122
using MongoDB.Driver.Core.Connections;
2223

2324
namespace MongoDB.Driver.Core.Operations
@@ -49,7 +50,7 @@ public MongoBulkWriteOperationException(
4950
IReadOnlyList<BulkWriteOperationError> writeErrors,
5051
BulkWriteConcernError writeConcernError,
5152
IReadOnlyList<WriteRequest> unprocessedRequests)
52-
: base(connectionId, "A bulk write operation resulted in one or more errors.")
53+
: base(connectionId, FormatMessage(writeErrors, writeConcernError))
5354
{
5455
_result = result;
5556
_writeErrors = writeErrors;
@@ -124,5 +125,23 @@ public override void GetObjectData(SerializationInfo info, StreamingContext cont
124125
info.AddValue("_writeConcernError", _writeConcernError);
125126
info.AddValue("_writeErrors", _writeErrors);
126127
}
128+
129+
private static string FormatMessage(IReadOnlyList<BulkWriteOperationError> writeErrors, BulkWriteConcernError writeConcernError)
130+
{
131+
var sb = new StringBuilder("A bulk write operation resulted in one or more errors.");
132+
if (writeErrors != null)
133+
{
134+
foreach (var writeError in writeErrors)
135+
{
136+
sb.AppendLine().Append(" " + writeError.Message);
137+
}
138+
}
139+
if (writeConcernError != null)
140+
{
141+
sb.AppendLine().Append(" " + writeConcernError.Message);
142+
}
143+
144+
return sb.ToString();
145+
}
127146
}
128147
}

src/MongoDB.Driver.Tests/MongoWriteExceptionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void constructor_should_initialize_subject()
5252

5353
subject.ConnectionId.Should().Be(_connectionId);
5454
subject.InnerException.Should().Be(_innerException);
55-
subject.Message.Should().Be("A write operation resulted in an error.");
55+
subject.Message.Should().Be("A write operation resulted in an error." + Environment.NewLine + " writeError" + Environment.NewLine + " writeConcernError");
5656
subject.WriteConcernError.Should().Be(_writeConcernError);
5757
subject.WriteError.Should().Be(_writeError);
5858
}
@@ -72,7 +72,7 @@ public void FromBulkWriteException_should_return_expected_result()
7272

7373
result.ConnectionId.Should().Be(_connectionId);
7474
result.InnerException.Should().BeSameAs(bulkWriteException);
75-
result.Message.Should().Be("A write operation resulted in an error.");
75+
result.Message.Should().Be("A write operation resulted in an error." + Environment.NewLine + " message" + Environment.NewLine + " message");
7676
result.WriteConcernError.Should().Be(writeConcernError);
7777
result.WriteError.Should().Be(writeErrors[0]);
7878
}

src/MongoDB.Driver/MongoBulkWriteException.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using System.Collections.Generic;
1818
using System.Linq;
1919
using System.Runtime.Serialization;
20+
using System.Text;
2021
using MongoDB.Driver.Core.Connections;
2122
using MongoDB.Driver.Core.Operations;
2223
using MongoDB.Driver.Support;
@@ -43,7 +44,7 @@ public MongoBulkWriteException(
4344
ConnectionId connectionId,
4445
IEnumerable<BulkWriteError> writeErrors,
4546
WriteConcernError writeConcernError)
46-
: base(connectionId, message: "A bulk write operation resulted in one or more errors.")
47+
: base(connectionId, message: FormatMessage(writeErrors, writeConcernError))
4748
{
4849
_writeErrors = writeErrors.ToList();
4950
_writeConcernError = writeConcernError;
@@ -90,6 +91,25 @@ public override void GetObjectData(SerializationInfo info, StreamingContext cont
9091
info.AddValue("_writeConcernError", _writeConcernError);
9192
info.AddValue("_writeErrors", _writeErrors);
9293
}
94+
95+
// private static methods
96+
private static string FormatMessage(IEnumerable<BulkWriteError> writeErrors, WriteConcernError writeConcernError)
97+
{
98+
var sb = new StringBuilder("A bulk write operation resulted in one or more errors.");
99+
if (writeErrors != null)
100+
{
101+
foreach (var writeError in writeErrors)
102+
{
103+
sb.AppendLine().Append(" " + writeError.Message);
104+
}
105+
}
106+
if (writeConcernError != null)
107+
{
108+
sb.AppendLine().Append(" " + writeConcernError.Message);
109+
}
110+
111+
return sb.ToString();
112+
}
93113
}
94114

95115
/// <summary>
@@ -114,7 +134,7 @@ public sealed class MongoBulkWriteException<TDocument> : MongoBulkWriteException
114134
/// <param name="unprocessedRequests">The unprocessed requests.</param>
115135
public MongoBulkWriteException(
116136
ConnectionId connectionId,
117-
BulkWriteResult<TDocument> result,
137+
BulkWriteResult<TDocument> result,
118138
IEnumerable<BulkWriteError> writeErrors,
119139
WriteConcernError writeConcernError,
120140
IEnumerable<WriteModel<TDocument>> unprocessedRequests)

src/MongoDB.Driver/MongoWriteException.cs

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

1616
using System;
1717
using System.Runtime.Serialization;
18+
using System.Text;
1819
using MongoDB.Driver.Core.Connections;
1920

2021
namespace MongoDB.Driver
@@ -52,7 +53,7 @@ public MongoWriteException(
5253
WriteError writeError,
5354
WriteConcernError writeConcernError,
5455
Exception innerException)
55-
: base(connectionId, "A write operation resulted in an error.", innerException)
56+
: base(connectionId, FormatMessage(writeError, writeConcernError), innerException)
5657
{
5758
_writeError = writeError;
5859
_writeConcernError = writeConcernError;
@@ -99,5 +100,21 @@ public override void GetObjectData(SerializationInfo info, StreamingContext cont
99100
info.AddValue("_writeConcernError", _writeConcernError);
100101
info.AddValue("_writeError", _writeError);
101102
}
103+
104+
// private static methods
105+
private static string FormatMessage(WriteError writeError, WriteConcernError writeConcernError)
106+
{
107+
var sb = new StringBuilder("A write operation resulted in an error.");
108+
if (writeError != null)
109+
{
110+
sb.AppendLine().Append(" " + writeError.Message);
111+
}
112+
if (writeConcernError != null)
113+
{
114+
sb.AppendLine().Append(" " + writeConcernError.Message);
115+
}
116+
117+
return sb.ToString();
118+
}
102119
}
103120
}

0 commit comments

Comments
 (0)