From 7ccc1b230503ff8e65bcfa13315ef27fe3e0bcf7 Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Mon, 13 Jun 2016 17:05:06 -0400 Subject: [PATCH] swallow error for automatic rollback --- lib/datastore/transaction.js | 17 ++++------------- test/datastore/transaction.js | 28 ++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/lib/datastore/transaction.js b/lib/datastore/transaction.js index 8b56393839a..1f500c246b0 100644 --- a/lib/datastore/transaction.js +++ b/lib/datastore/transaction.js @@ -200,19 +200,10 @@ Transaction.prototype.commit = function(callback) { this.request_(protoOpts, reqOpts, function(err, resp) { if (err) { // Rollback automatically for the user. - self.rollback(function(err) { - if (err) { - err.message = [ - 'The commit was not successful and the transaction could not be', - 'rolled back. You may want to try calling transaction.rollback().', - '\n', - '\n', - err.message - ].join(''); - } - - // Provide the response items from the failed commit to the user. A - // successful rollback should be transparent. + self.rollback(function() { + // Provide the response items from the failed commit to the user. Even + // a failed rollback should be transparent. + // RE: https://github.com/GoogleCloudPlatform/gcloud-node/pull/1369#discussion_r66833976 callback(err, resp); }); return; diff --git a/test/datastore/transaction.js b/test/datastore/transaction.js index f7789651f59..41c1bcd8f78 100644 --- a/test/datastore/transaction.js +++ b/test/datastore/transaction.js @@ -161,15 +161,27 @@ describe('Transaction', function() { transaction.commit(done); }); - it('should pass error to callback', function(done) { + describe('errors', function() { var error = new Error('Error.'); - transaction.request_ = function(protoOpts, reqOpts, callback) { - callback = callback || reqOpts; - callback(error); - }; - transaction.commit(function(err) { - assert.deepEqual(err, error); - done(); + var apiResponse = {}; + + beforeEach(function() { + transaction.rollback = function(callback) { + callback(); + }; + + transaction.request_ = function(protoOpts, reqOpts, callback) { + callback = callback || reqOpts; + callback(error, apiResponse); + }; + }); + + it('should pass the error to the callback', function(done) { + transaction.commit(function(err, resp) { + assert.strictEqual(err, error); + assert.strictEqual(resp, apiResponse); + done(); + }); }); });