From 0b16633e957f37f394b1d3e3018c92a341794226 Mon Sep 17 00:00:00 2001 From: Dawid Kisielwski <91346346+dawidreedsy@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:51:46 +0100 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=90=9B=20Unhandled=20rejection=20when?= =?UTF-8?q?=20submitting=20presence=20during=20hard=20rollback.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similar case to: - https://github.com/share/sharedb/pull/692 however instead of submitting ops to doc is when we submit doc presence --- lib/client/presence/local-doc-presence.js | 18 ++++++++++++++---- test/client/presence/doc-presence.js | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/client/presence/local-doc-presence.js b/lib/client/presence/local-doc-presence.js index fc693e661..1d0310be7 100644 --- a/lib/client/presence/local-doc-presence.js +++ b/lib/client/presence/local-doc-presence.js @@ -30,10 +30,20 @@ LocalDocPresence.prototype.submit = function(value, callback) { // be null. Let's early return, instead of error since this is a harmless // no-op if (value === null) return this._callbackOrEmit(null, callback); - var error = { - code: ERROR_CODE.ERR_DOC_DOES_NOT_EXIST, - message: 'Cannot submit presence. Document has not been created' - }; + + var error = null; + if (this._doc._isInHardRollback) { + error = { + code: ERROR_CODE.ERR_DOC_IN_HARD_ROLLBACK, + message: 'Cannot submit presence. Document is processing hard rollback' + }; + } else { + error = { + code: ERROR_CODE.ERR_DOC_DOES_NOT_EXIST, + message: 'Cannot submit presence. Document has not been created' + }; + } + return this._callbackOrEmit(error, callback); }; diff --git a/test/client/presence/doc-presence.js b/test/client/presence/doc-presence.js index 45772b9aa..f29d5e830 100644 --- a/test/client/presence/doc-presence.js +++ b/test/client/presence/doc-presence.js @@ -829,6 +829,20 @@ describe('DocPresence', function() { ], done); }); + + it('errors local presence when doc is in hard rollback', function(done) { + var localPresence1 = presence1.create('presence-1'); + + doc1.on('error', function(error) { + expect(error).to.be.equal('some error'); + }); + doc1._hardRollback('some error'); + localPresence1.submit({index: 1}, function(error) { + expect(error.code).to.be.equal('ERR_DOC_IN_HARD_ROLLBACK'); + done(); + }); + }); + it('returns errors sent from the middleware', function(done) { backend.use(backend.MIDDLEWARE_ACTIONS.sendPresence, function(request, callback) { callback('some error');