When mongod returns a WriteConcernError, there may be additional info in an errInfo field:
> db.test.insert({}, {writeConcern: {w: "majority", wtimeout: 1}})
WriteResult({
"nInserted" : 1,
"writeConcernError" : {
"code" : 64,
"codeName" : "WriteConcernFailed",
"errmsg" : "waiting for replication timed out",
>>> "errInfo" : {
>>> "wtimeout" : true
>>> }
}
})
However, when mongos gathers and merges WriteResults from shards, this info gets serialised to JSON and concatenated into the errmsg:
> db.test.insert({}, {writeConcern: {w: "majority", wtimeout: 1}})
WriteResult({
"nInserted" : 1,
"writeConcernError" : {
"code" : 64,
"codeName" : "WriteConcernFailed",
"errmsg" : "waiting for replication timed out; Error details: { wtimeout: true } at shard01"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
})
Better would be if the errInfo from the shards was available in the top-level errInfo, eg:
> db.test.insert({}, {writeConcern: {w: "majority", wtimeout: 1}})
WriteResult({
"nInserted" : 1,
"writeConcernError" : {
"code" : 64,
"codeName" : "WriteConcernFailed",
"errmsg" : "waiting for replication timed out; Error details: { wtimeout: true } at shard01",
>>> "errInfo" : {
>>> "wtimeout" : true,
>>> "shards" : {
>>> "shard01" : {
>>> "wtimeout" : true,
>>> }
>>> }
}
}
})
(The existing errmsg format should be preserved for backwards compatibility.)
- related to
-
SERVER-45623 RWC provenance
-
- Closed
-