Skip to content

Commit

Permalink
No removal of close event handlers on server reconnect, emits reconne…
Browse files Browse the repository at this point in the history
…ct event when reconnection happens. Reconnect Only applies for single server connections as of now as semantics for ReplSet and Mongos is not clear (Issue #1056)
  • Loading branch information
christkv committed Aug 21, 2013
1 parent 169cec0 commit 0fd78b3
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 21 deletions.
2 changes: 2 additions & 0 deletions HISTORY
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
1.3.19 2013-08-21
-----------------
- Correctly rethrowing errors after change from event emission to callbacks, compatibility with 0.10.X domains without breaking 0.8.X support.
- Small fix to return the entire findAndModify result as the third parameter (Issue #1068)
- No removal of "close" event handlers on server reconnect, emits "reconnect" event when reconnection happens. Reconnect Only applies for single server connections as of now as semantics for ReplSet and Mongos is not clear (Issue #1056)

1.3.18 2013-08-10
-----------------
Expand Down
27 changes: 7 additions & 20 deletions lib/mongodb/connection/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,26 +195,13 @@ DbStore.prototype.fetch = function(databaseName) {
DbStore.prototype.emit = function(event, message, object, reset, filterDb, rethrow_if_no_listeners) {
var emitted = false;

if(reset) {
while(this._dbs.length > 0) {
var db = this._dbs.shift();
// Only emit if there is a listener
if(db.listeners(event).length > 0) {
if(filterDb == null || filterDb.databaseName !== db.databaseName
|| filterDb.tag !== db.tag) {
db.emit(event, message, object == null ? db : object);
emitted = true;
}
}
}
} else {
for(var i = 0; i < this._dbs.length; i++) {
if(this._dbs[i].listeners(event).length > 0) {
if(filterDb == null || filterDb.databaseName !== this._dbs[i].databaseName
|| filterDb.tag !== this._dbs[i].tag) {
this._dbs[i].emit(event, message, object == null ? this._dbs[i] : object);
emitted = true;
}
// Emit the events
for(var i = 0; i < this._dbs.length; i++) {
if(this._dbs[i].listeners(event).length > 0) {
if(filterDb == null || filterDb.databaseName !== this._dbs[i].databaseName
|| filterDb.tag !== this._dbs[i].tag) {
this._dbs[i].emit(event, message, object == null ? this._dbs[i] : object);
emitted = true;
}
}
}
Expand Down
6 changes: 5 additions & 1 deletion lib/mongodb/connection/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -368,8 +368,12 @@ Server.prototype.connect = function(dbInstance, options, callback) {
// Save document returned so we can query it
_server.isMasterDoc = reply.documents[0];

if(self.emitOpen)
if(self.emitOpen) {
_server._emitAcrossAllDbInstances(_server, eventReceiver, "open", null, returnIsMasterResults ? reply : null, null);
self.emitOpen = false;
} else {
_server._emitAcrossAllDbInstances(_server, eventReceiver, "reconnect", null, returnIsMasterResults ? reply : null, null);
}

// If we have it set to returnIsMasterResults
if(returnIsMasterResults) {
Expand Down

0 comments on commit 0fd78b3

Please sign in to comment.