From 2b8f105afa2023184fd15d579ab69158400292e6 Mon Sep 17 00:00:00 2001 From: Alexander Berl Date: Wed, 19 Oct 2016 18:32:23 +0200 Subject: [PATCH 1/3] Prevent uncommittedEvents to be overwritten accidentally MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change avoids the eventstream to lose events from the uncommittedEvents list that were added in between the èventstore.commit` and `store.addEvents` call by only working on a copy of those. --- lib/eventstore.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/eventstore.js b/lib/eventstore.js index b5e3e86d..eef06fcc 100644 --- a/lib/eventstore.js +++ b/lib/eventstore.js @@ -418,21 +418,23 @@ _.extend(Eventstore.prototype, { }); } - self.store.addEvents(eventstream.uncommittedEvents, function(err) { + let uncommittedEvents = [].concat(eventstream.uncommittedEvents); + eventstream.uncommittedEvents = []; + self.store.addEvents(uncommittedEvents, function(err) { if (err) { + eventstream.uncommittedEvents = uncommittedEvents.concat(eventstream.uncommittedEvents); return callback(err); } if (self.publisher && self.dispatcher) { // push to undispatchedQueue - self.dispatcher.addUndispatchedEvents(eventstream.uncommittedEvents); + self.dispatcher.addUndispatchedEvents(uncommittedEvents); } else { - eventstream.eventsToDispatch = [].concat(eventstream.uncommittedEvents); + eventstream.eventsToDispatch = [].concat(uncommittedEvents); } // move to events and remove uncommitted events. - eventstream.events = eventstream.events.concat(eventstream.uncommittedEvents); - eventstream.uncommittedEvents = []; + eventstream.events = eventstream.events.concat(uncommittedEvents); eventstream.currentRevision(); callback(null, eventstream); From 4426662155342fedbe7f7ab79b70fd8a16496781 Mon Sep 17 00:00:00 2001 From: Alexander Berl Date: Wed, 19 Oct 2016 18:38:56 +0200 Subject: [PATCH 2/3] Create uncommittedEvents copy early and update inline documentation --- lib/eventstore.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/eventstore.js b/lib/eventstore.js index eef06fcc..47c62847 100644 --- a/lib/eventstore.js +++ b/lib/eventstore.js @@ -401,8 +401,10 @@ _.extend(Eventstore.prototype, { var event, currentRevision = eventstream.currentRevision(); - for (var i = 0, len = eventstream.uncommittedEvents.length; i < len; i++) { - event = eventstream.uncommittedEvents[i]; + let uncommittedEvents = [].concat(eventstream.uncommittedEvents); + eventstream.uncommittedEvents = []; + for (var i = 0, len = uncommittedEvents.length; i < len; i++) { + event = uncommittedEvents[i]; event.id = id + i.toString(); event.commitId = id; event.commitSequence = i; @@ -418,10 +420,9 @@ _.extend(Eventstore.prototype, { }); } - let uncommittedEvents = [].concat(eventstream.uncommittedEvents); - eventstream.uncommittedEvents = []; self.store.addEvents(uncommittedEvents, function(err) { if (err) { + // add uncommitted events back to eventstream eventstream.uncommittedEvents = uncommittedEvents.concat(eventstream.uncommittedEvents); return callback(err); } @@ -433,7 +434,7 @@ _.extend(Eventstore.prototype, { eventstream.eventsToDispatch = [].concat(uncommittedEvents); } - // move to events and remove uncommitted events. + // move uncommitted events to events eventstream.events = eventstream.events.concat(uncommittedEvents); eventstream.currentRevision(); From fccfe20587ba5f40371b9ce46f1a35c3d93fa877 Mon Sep 17 00:00:00 2001 From: Alexander Berl Date: Wed, 19 Oct 2016 18:47:37 +0200 Subject: [PATCH 3/3] BC Fix with Node <= 0.12 --- lib/eventstore.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/eventstore.js b/lib/eventstore.js index 47c62847..48bfb11e 100644 --- a/lib/eventstore.js +++ b/lib/eventstore.js @@ -399,9 +399,8 @@ _.extend(Eventstore.prototype, { function commitEvents(id, callback) { // start committing. var event, - currentRevision = eventstream.currentRevision(); - - let uncommittedEvents = [].concat(eventstream.uncommittedEvents); + currentRevision = eventstream.currentRevision(), + uncommittedEvents = [].concat(eventstream.uncommittedEvents); eventstream.uncommittedEvents = []; for (var i = 0, len = uncommittedEvents.length; i < len; i++) { event = uncommittedEvents[i];