Skip to content

Commit 43a83ba

Browse files
albeadrai
authored andcommitted
Prevent uncommittedEvents to be overwritten accidentally (#85)
* Prevent uncommittedEvents to be overwritten accidentally 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. * Create uncommittedEvents copy early and update inline documentation
1 parent 231e51c commit 43a83ba

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

lib/eventstore.js

+12-10
Original file line numberDiff line numberDiff line change
@@ -399,10 +399,11 @@ _.extend(Eventstore.prototype, {
399399
function commitEvents(id, callback) {
400400
// start committing.
401401
var event,
402-
currentRevision = eventstream.currentRevision();
403-
404-
for (var i = 0, len = eventstream.uncommittedEvents.length; i < len; i++) {
405-
event = eventstream.uncommittedEvents[i];
402+
currentRevision = eventstream.currentRevision(),
403+
uncommittedEvents = [].concat(eventstream.uncommittedEvents);
404+
eventstream.uncommittedEvents = [];
405+
for (var i = 0, len = uncommittedEvents.length; i < len; i++) {
406+
event = uncommittedEvents[i];
406407
event.id = id + i.toString();
407408
event.commitId = id;
408409
event.commitSequence = i;
@@ -418,21 +419,22 @@ _.extend(Eventstore.prototype, {
418419
});
419420
}
420421

421-
self.store.addEvents(eventstream.uncommittedEvents, function(err) {
422+
self.store.addEvents(uncommittedEvents, function(err) {
422423
if (err) {
424+
// add uncommitted events back to eventstream
425+
eventstream.uncommittedEvents = uncommittedEvents.concat(eventstream.uncommittedEvents);
423426
return callback(err);
424427
}
425428

426429
if (self.publisher && self.dispatcher) {
427430
// push to undispatchedQueue
428-
self.dispatcher.addUndispatchedEvents(eventstream.uncommittedEvents);
431+
self.dispatcher.addUndispatchedEvents(uncommittedEvents);
429432
} else {
430-
eventstream.eventsToDispatch = [].concat(eventstream.uncommittedEvents);
433+
eventstream.eventsToDispatch = [].concat(uncommittedEvents);
431434
}
432435

433-
// move to events and remove uncommitted events.
434-
eventstream.events = eventstream.events.concat(eventstream.uncommittedEvents);
435-
eventstream.uncommittedEvents = [];
436+
// move uncommitted events to events
437+
eventstream.events = eventstream.events.concat(uncommittedEvents);
436438
eventstream.currentRevision();
437439

438440
callback(null, eventstream);

0 commit comments

Comments
 (0)