From 24c5d06650e48e40e016e46b9838c0fa4121fae1 Mon Sep 17 00:00:00 2001 From: Katherine Walker Date: Thu, 21 Jun 2018 12:10:11 -0400 Subject: [PATCH] fix(error): attach command response to MongoWriteConcernError (#322) Fixes NODE-1521 --- lib/connection/pool.js | 10 +++++----- lib/error.js | 8 +++++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/connection/pool.js b/lib/connection/pool.js index d2004b10b..5d044c652 100644 --- a/lib/connection/pool.js +++ b/lib/connection/pool.js @@ -581,11 +581,11 @@ function messageHandler(self) { } if (responseDoc.writeConcernError) { - return handleOperationCallback( - self, - workItem.cb, - new MongoWriteConcernError(responseDoc.writeConcernError) - ); + const err = + responseDoc.ok === 1 + ? new MongoWriteConcernError(responseDoc.writeConcernError, responseDoc) + : new MongoWriteConcernError(responseDoc.writeConcernError); + return handleOperationCallback(self, workItem.cb, err); } } diff --git a/lib/error.js b/lib/error.js index 30ac0e6e0..67c2d7107 100644 --- a/lib/error.js +++ b/lib/error.js @@ -130,13 +130,19 @@ function isRetryableError(error) { * * @class * @param {Error|string|object} message The error message + * @param {object} result The result document (provided if ok: 1) * @property {string} message The error message + * @property {object} [result] The result document (provided if ok: 1) * @return {MongoWriteConcernError} A MongoWriteConcernError instance * @extends {MongoError} */ -const MongoWriteConcernError = function(message) { +const MongoWriteConcernError = function(message, result) { MongoError.call(this, message); this.name = 'MongoWriteConcernError'; + + if (result != null) { + this.result = result; + } }; util.inherits(MongoWriteConcernError, MongoError);