Comparing version 1.3.1 to 1.3.2
@@ -168,3 +168,10 @@ var EventEmitter = require('events').EventEmitter | ||
DbStore.prototype.add = function(db) { | ||
this._dbs.push(db); | ||
// this._dbs.push(db); | ||
var found = false; | ||
// Only add if it does not exist already | ||
for(var i = 0; i < this._dbs.length; i++) { | ||
if(db.databaseName == this._dbs[i].databaseName) found = true; | ||
} | ||
if(!found) this._dbs.push(db); | ||
} | ||
@@ -176,11 +183,22 @@ | ||
DbStore.prototype.emit = function(event, message, object, reset) { | ||
DbStore.prototype.emit = function(event, message, object, reset, filterDb) { | ||
if(reset) { | ||
while(this._dbs.length > 0) { | ||
var db = this._dbs.shift(); | ||
db.emit(event, message, object); | ||
// 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); | ||
} | ||
} | ||
} | ||
} else { | ||
for(var i = 0; i < this._dbs.length; i++) { | ||
this._dbs[i].emit(event, message, object); | ||
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); | ||
} | ||
} | ||
} | ||
@@ -438,40 +456,13 @@ } | ||
Base.prototype._emitAcrossAllDbInstances = function(server, filterDb, event, message, object, resetConnection) { | ||
// Emit close event across all db instances sharing the sockets | ||
var allServerInstances = server.allServerInstances(); | ||
// Fetch the first server instance | ||
var serverInstance = allServerInstances[0]; | ||
// For all db instances signal all db instances | ||
if(serverInstance && Array.isArray(serverInstance.dbInstances) && serverInstance.dbInstances.length >= 1) { | ||
for(var i = 0; i < serverInstance.dbInstances.length; i++) { | ||
var dbInstance = serverInstance.dbInstances[i]; | ||
// Set the parent | ||
if(resetConnection && typeof dbInstance.openCalled != 'undefined') | ||
dbInstance.openCalled = false; | ||
// Check if it's our current db instance and skip if it is | ||
if(filterDb == null || filterDb.databaseName !== dbInstance.databaseName || filterDb.tag !== dbInstance.tag) { | ||
// Only emit if there is a listener | ||
if(dbInstance.listeners(event).length > 0) | ||
dbInstance.emit(event, message, object); | ||
} | ||
if(resetConnection) { | ||
for(var i = 0; i < this._dbStore._dbs.length; i++) { | ||
if(typeof this._dbStore._dbs[i].openCalled != 'undefined') | ||
this._dbStore._dbs[i].openCalled = false; | ||
} | ||
} | ||
// Fire event | ||
this._dbStore.emit(event, message, object, resetConnection, filterDb); | ||
} | ||
// Base.prototype._timeoutCalls = function(timeoutMargin) { | ||
// NOT SURE WE CAN DO THIS | ||
// var currentDateTime = new Date().getTime(); | ||
// for(var id in this._callBackStore_notReplied) { | ||
// var reply = this._callBackStore_notReplied; | ||
// if((currentDateTime - reply.start) > timeoutMargin) { | ||
// this._callHandler(id, null, new Error("call timed out")); | ||
// } | ||
// } | ||
// } | ||
exports.Base = Base; |
@@ -31,9 +31,20 @@ var DbCommand = require('../../commands/db_command').DbCommand | ||
if(candidate_servers.length == 0) { | ||
return setTimeout(function() { | ||
self.start(); | ||
}, this.options.haInterval); | ||
return; | ||
} | ||
var server = candidate_servers.pop(); | ||
var self = this; | ||
// var server = candidate_servers.pop(); | ||
var server = null; | ||
// Locate a server that is connected and use that for HA | ||
for(var i = 0; i < candidate_servers.length; i++) { | ||
if(candidate_servers[i].isConnected()) { | ||
server = candidate_servers[i]; | ||
break; | ||
} | ||
} | ||
// No server connected let's pick one randomly and try to connect | ||
if(server == null) { | ||
server = candidate_servers[Math.round(Math.random(1000000) * (candidate_servers.length - 1))]; | ||
} | ||
@@ -109,9 +120,2 @@ // Unpack connection options | ||
return function() { | ||
// There are no servers available at all (no HA possible) | ||
if(self.replset._state | ||
&& Object.keys(self.replset._state.addresses).length == 0) { | ||
self.state = HighAvailabilityProcess.STOPPED; | ||
return; | ||
} | ||
if(self.state == HighAvailabilityProcess.STOPPED) { | ||
@@ -121,2 +125,3 @@ // Stop all server instances | ||
self.replset._state.addresses[name].close(); | ||
delete self.replset._state.addresses[name]; | ||
} | ||
@@ -128,6 +133,2 @@ | ||
// // We are going to process all the non-replied to callbacks timing out any that has gone over the socket time out settings | ||
// if(typeof self.options.socketTimeoutMS == 'number' && self.options.socketTimeoutMS > 0) | ||
// self.replset._timeoutCalls(self.options.socketTimeoutMS * 1.1); | ||
// If the server is connected | ||
@@ -393,6 +394,4 @@ if(self.server.isConnected() && !self._haProcessInProcess) { | ||
self._serverState = ReplSet.REPLSET_READ_ONLY; | ||
delete self._state.addresses[server.name]; | ||
} else if(self._state.isSecondary(server)) { | ||
delete self._state.secondaries[server.name]; | ||
delete self._state.addresses[server.name]; | ||
} | ||
@@ -399,0 +398,0 @@ |
@@ -35,9 +35,6 @@ /** | ||
var candidate_servers = []; | ||
if(this.master && this.master.isConnected()) | ||
candidate_servers.push(this.master); | ||
for(var name in this.addresses) { | ||
candidate_servers.push(this.addresses[name]); | ||
} | ||
for(var name in this.secondaries) { | ||
if(this.secondaries[name].isConnected()) | ||
candidate_servers.push(this.secondaries[name]); | ||
} | ||
// Return all possible read candidates | ||
@@ -44,0 +41,0 @@ return candidate_servers; |
@@ -99,3 +99,3 @@ var ReadPreference = require('../read_preference').ReadPreference | ||
// Set up a clean state | ||
this._state = new ReplSetState(); | ||
this._state = new ReplSetState(); | ||
// Ensure up the server callbacks | ||
@@ -221,4 +221,2 @@ for(var i = 0; i < this.servers.length; i++) { | ||
this._haProcess.stop(); | ||
// Clear out any db emits | ||
this._dbStore.reset(); | ||
@@ -234,2 +232,5 @@ // If we have a strategy stop it | ||
} | ||
// Clean out the state | ||
this._state = new ReplSetState(); | ||
@@ -239,3 +240,2 @@ // Emit close event | ||
self._emitAcrossAllDbInstances(self, null, "close", null, null, true) | ||
// self.options.db.emit("close"); | ||
}); | ||
@@ -309,3 +309,3 @@ | ||
self._serverState = ReplSet.REPLSET_READ_ONLY; | ||
delete self._state.addresses[server.name]; | ||
// delete self._state.addresses[server.name]; | ||
@@ -322,3 +322,3 @@ if(current_master != null) { | ||
delete self._state.secondaries[server.name]; | ||
delete self._state.addresses[server.name]; | ||
// delete self._state.addresses[server.name]; | ||
} | ||
@@ -325,0 +325,0 @@ |
{ "name" : "mongodb" | ||
, "description" : "A node.js driver for MongoDB" | ||
, "keywords" : ["mongodb", "mongo", "driver", "db"] | ||
, "version" : "1.3.1" | ||
, "version" : "1.3.2" | ||
, "author" : "Christian Amor Kvalheim <christkv@gmail.com>" | ||
@@ -6,0 +6,0 @@ , "contributors" : [ "Aaron Heckmann", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
540609
12443