Skip to content

Commit 8cb6edb

Browse files
authored
🐛 Unhandled rejection when submitting presence during hard rollback. (#693)
Similar case to: - #692 however instead of submitting ops to doc is when we submit doc presence
1 parent dc798a8 commit 8cb6edb

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

lib/client/presence/local-doc-presence.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,20 @@ LocalDocPresence.prototype.submit = function(value, callback) {
3030
// be null. Let's early return, instead of error since this is a harmless
3131
// no-op
3232
if (value === null) return this._callbackOrEmit(null, callback);
33-
var error = {
34-
code: ERROR_CODE.ERR_DOC_DOES_NOT_EXIST,
35-
message: 'Cannot submit presence. Document has not been created'
36-
};
33+
34+
var error = null;
35+
if (this._doc._isInHardRollback) {
36+
error = {
37+
code: ERROR_CODE.ERR_DOC_IN_HARD_ROLLBACK,
38+
message: 'Cannot submit presence. Document is processing hard rollback'
39+
};
40+
} else {
41+
error = {
42+
code: ERROR_CODE.ERR_DOC_DOES_NOT_EXIST,
43+
message: 'Cannot submit presence. Document has not been created'
44+
};
45+
}
46+
3747
return this._callbackOrEmit(error, callback);
3848
};
3949

test/client/presence/doc-presence.js

+14
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,20 @@ describe('DocPresence', function() {
829829
], done);
830830
});
831831

832+
833+
it('errors local presence when doc is in hard rollback', function(done) {
834+
var localPresence1 = presence1.create('presence-1');
835+
836+
doc1.on('error', function(error) {
837+
expect(error).to.be.equal('some error');
838+
});
839+
doc1._hardRollback('some error');
840+
localPresence1.submit({index: 1}, function(error) {
841+
expect(error.code).to.be.equal('ERR_DOC_IN_HARD_ROLLBACK');
842+
done();
843+
});
844+
});
845+
832846
it('returns errors sent from the middleware', function(done) {
833847
backend.use(backend.MIDDLEWARE_ACTIONS.sendPresence, function(request, callback) {
834848
callback('some error');

0 commit comments

Comments
 (0)