mongodb-core
Advanced tools
Comparing version 1.3.1 to 1.3.2
@@ -0,1 +1,6 @@ | ||
1.3.2 2016-02-09 | ||
---------------- | ||
- Harden MessageHandler in server.js to avoid issues where we cannot find a callback for an operation. | ||
- Ensure RequestId can never be larger than Max Number integer size. | ||
1.3.1 2016-02-05 | ||
@@ -2,0 +7,0 @@ ---------------- |
@@ -27,2 +27,5 @@ "use strict"; | ||
// Request Id Max Value in JS | ||
var JS_INT_MAX = 0x20000000000000; | ||
// Response flags | ||
@@ -60,3 +63,3 @@ var CURSOR_NOT_FOUND = 0; | ||
this.returnFieldSelector = options.returnFieldSelector || null; | ||
this.requestId = _requestId++; | ||
this.requestId = (_requestId++) % JS_INT_MAX; | ||
@@ -83,3 +86,3 @@ // Serialization option | ||
Query.prototype.incRequestId = function() { | ||
this.requestId = _requestId++; | ||
this.requestId = (_requestId++) % JS_INT_MAX; | ||
} | ||
@@ -90,3 +93,3 @@ | ||
Query.nextRequestId = function() { | ||
return _requestId + 1; | ||
return (_requestId + 1) % JS_INT_MAX; | ||
} | ||
@@ -226,3 +229,3 @@ | ||
Query.getRequestId = function() { | ||
return ++_requestId; | ||
return (++_requestId) % JS_INT_MAX; | ||
} | ||
@@ -236,3 +239,3 @@ | ||
this.numberToReturn = opts.numberToReturn || 0; | ||
this.requestId = _requestId++; | ||
this.requestId = (_requestId++) % JS_INT_MAX; | ||
this.bson = bson; | ||
@@ -323,3 +326,3 @@ this.ns = ns; | ||
var KillCursor = function(bson, cursorIds) { | ||
this.requestId = _requestId++; | ||
this.requestId = (_requestId++) % JS_INT_MAX; | ||
this.cursorIds = cursorIds; | ||
@@ -326,0 +329,0 @@ } |
@@ -556,3 +556,2 @@ "use strict"; | ||
ReplSet.prototype.auth = function(mechanism, db) { | ||
// console.log("=========================== REPLSET.auth") | ||
var allArgs = Array.prototype.slice.call(arguments, 0).slice(0); | ||
@@ -945,7 +944,2 @@ var self = this; | ||
var haveAvailableServers = function(state) { | ||
// console.log("!---------------------------------------------------------------") | ||
// console.dir("state.disconnectedServers.length = " + state.disconnectedServers.length) | ||
// console.dir("state.replState.secondaries.length = " + state.replState.secondaries.length) | ||
// console.dir("state.replState.arbiters.length = " + state.replState.arbiters.length) | ||
// console.dir("state.replState.primary = " + (state.replState.primary != null)) | ||
if(state.disconnectedServers.length == 0 | ||
@@ -960,7 +954,5 @@ && state.replState.secondaries.length == 0 | ||
return function() { | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer :: " + state.replState.state) | ||
if(state.replState.state == DESTROYED) return | ||
// We have no connections we need to reseed the disconnected list | ||
if(!haveAvailableServers(state)) { | ||
// console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ replicasetInquirer 0") | ||
// For all entries in the seedlist build a server instance | ||
@@ -991,4 +983,2 @@ state.disconnectedServers = state.seedlist.map(function(e) { | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 2") | ||
// Process already running don't rerun | ||
@@ -1015,4 +1005,2 @@ if(state.highAvailabilityProcessRunning) return; | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 3") | ||
// Emit replicasetInquirer | ||
@@ -1023,3 +1011,2 @@ self.emit('ha', 'start', {norepeat: norepeat, id: localHaId, state: state.replState ? state.replState.toJSON() : {}}); | ||
while(state.disconnectedServers.length > 0) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!! ATTEMPT TO RECONNECT") | ||
// Get the first disconnected server | ||
@@ -1034,6 +1021,2 @@ var server = state.disconnectedServers.shift(); | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SERVER") | ||
// console.log("&&&&&&&&&&&&&&&&&&&&& reconnect to server :: " + server.name) | ||
// console.dir(server.s.options) | ||
// Ensure we schedule the opening of new socket | ||
@@ -1050,3 +1033,2 @@ // on separate ticks of the event loop | ||
} | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 4") | ||
@@ -1059,16 +1041,11 @@ // Cleanup state (removed disconnected servers) | ||
var serversLeft = servers.length; | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 5 :: " + serversLeft) | ||
// If no servers and we are not destroyed keep pinging | ||
if(servers.length == 0 && state.replState.state == CONNECTED) { | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 6:1") | ||
// Emit ha process end | ||
self.emit('ha', 'end', {norepeat: norepeat, id: localHaId, state: state.replState ? state.replState.toJSON() : {}}); | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 6:2") | ||
// Ended highAvailabilityProcessRunning | ||
state.highAvailabilityProcessRunning = false; | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 6:3 :: " + norepeat) | ||
// Restart ha process | ||
if(!norepeat) setHaTimer(self, state); | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 6:4") | ||
return; | ||
@@ -1098,8 +1075,4 @@ } | ||
var timeoutId = timeoutServer(server); | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 1:1") | ||
// Execute ismaster | ||
server.command('admin.$cmd', { ismaster:true }, { monitoring:true }, function(err, r) { | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ execute replicasetInquirer 1:2") | ||
// console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ replicasetInquirer :: " + new Date().getTime()) | ||
// if(r)console.dir(r.result) | ||
// Clear out the timeoutServer | ||
@@ -1230,4 +1203,2 @@ clearTimeout(timeoutId); | ||
return function(err, server) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!! TEMP ERROR HANDLER REPLSET") | ||
// console.dir(err) | ||
// Log the information | ||
@@ -1239,3 +1210,2 @@ if(state.logger.isInfo()) state.logger.info(f('[%s] server %s disconnected', state.id, server.lastIsMaster() ? server.lastIsMaster().me : server.name)); | ||
}); | ||
// console.log("!!!!!!!!!!!!!!!!!!!! TEMP ERROR HANDLER REPLSET 1") | ||
@@ -1250,9 +1220,5 @@ // Connection is destroyed, ignore | ||
// console.log("!!!!!!!!!!!!!!!!!!!! TEMP ERROR HANDLER REPLSET 2") | ||
// Push to list of disconnected servers | ||
addToListIfNotExist(state.disconnectedServers, server); | ||
// console.log("!!!!!!!!!!!!!!!!!!!! TEMP ERROR HANDLER REPLSET 3") | ||
// End connection operation if we have no legal replicaset state | ||
@@ -1262,7 +1228,5 @@ if(state.initialConnectionServers == 0 && state.replState.state == CONNECTING) { | ||
|| (!state.secondaryOnlyConnectionAllowed && !state.replState.isPrimaryConnected())) { | ||
// console.log("----- REPLSET 0") | ||
if(state.logger.isInfo()) state.logger.info(f('[%s] no valid seed servers in list', state.id)); | ||
if(self.listeners('error').length > 0) { | ||
// console.log("----- REPLSET 1") | ||
return self.emit('error', new MongoError('no valid seed servers in list')); | ||
@@ -1273,4 +1237,2 @@ } | ||
// console.log("!!!!!!!!!!!!!!!!!!!! TEMP ERROR HANDLER REPLSET 4") | ||
// If the number of disconnected servers is equal to | ||
@@ -1280,7 +1242,5 @@ // the number of seed servers we cannot connect | ||
if(state.emitError && self.listeners('error').length > 0) { | ||
// console.log("----- REPLSET 2") | ||
if(state.logger.isInfo()) state.logger.info(f('[%s] no valid seed servers in list', state.id)); | ||
if(self.listeners('error').length > 0) { | ||
// console.log("----- REPLSET 3") | ||
self.emit('error', new MongoError('no valid seed servers in list')); | ||
@@ -1290,4 +1250,2 @@ } | ||
} | ||
// console.log("!!!!!!!!!!!!!!!!!!!! TEMP ERROR HANDLER REPLSET 5") | ||
} | ||
@@ -1301,4 +1259,2 @@ } | ||
return function(server) { | ||
// console.log(" --------------------------- connectHandler 0") | ||
// console.log("SERVER CONNECTED") | ||
if(state.logger.isInfo()) state.logger.info(f('[%s] connected to %s', state.id, server.name)); | ||
@@ -1385,3 +1341,2 @@ // Destroyed connection | ||
// console.log(" --------------------------- connectHandler 1 :: " + self.s.authInProgress) | ||
// Save up new members to be authenticated against | ||
@@ -1392,4 +1347,2 @@ if(self.s.authInProgress) { | ||
// console.log(" --------------------------- connectHandler 2") | ||
// No credentials just process server | ||
@@ -1399,3 +1352,2 @@ if(state.credentials.length == 0) return processNewServer(); | ||
var count = state.credentials.length; | ||
// console.log(" --------------------------- connectHandler 3 :: " + count) | ||
// Apply the credentials | ||
@@ -1406,3 +1358,2 @@ for(var i = 0; i < state.credentials.length; i++) { | ||
if(count == 0) { | ||
// console.log(" --------------------------- connectHandler 4") | ||
processNewServer(); | ||
@@ -1474,4 +1425,2 @@ } | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Server :: connectToServer :: " + opts.port) | ||
// Create a new server instance | ||
@@ -1519,3 +1468,2 @@ var server = new Server(opts); | ||
return function(err, server) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!! err handler REPLSET") | ||
if(state.replState.state == DESTROYED) return; | ||
@@ -1529,3 +1477,2 @@ if(state.logger.isInfo()) state.logger.info(f('[%s] server %s errored out with %s', state.id, server.lastIsMaster() ? server.lastIsMaster().me : server.name, JSON.stringify(err))); | ||
setTimeout(function() { | ||
// replicasetInquirer(self, self.s, true)(); | ||
replicasetInquirer(self, self.s, self.s.highAvailabilityProcessRunning)(); | ||
@@ -1538,3 +1485,2 @@ }, self.s.minHeartbeatFrequencyMS); | ||
return function(err, server) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!! timeout handler REPLSET") | ||
if(state.replState.state == DESTROYED) return; | ||
@@ -1547,3 +1493,2 @@ if(state.logger.isInfo()) state.logger.info(f('[%s] server %s timed out', state.id, server.lastIsMaster() ? server.lastIsMaster().me : server.name)); | ||
setTimeout(function() { | ||
// replicasetInquirer(self, self.s, true)(); | ||
replicasetInquirer(self, self.s, self.s.highAvailabilityProcessRunning)(); | ||
@@ -1556,3 +1501,2 @@ }, self.s.minHeartbeatFrequencyMS); | ||
return function(err, server) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!! close handler REPLSET") | ||
if(state.replState.state == DESTROYED) return; | ||
@@ -1559,0 +1503,0 @@ if(state.logger.isInfo()) state.logger.info(f('[%s] server %s closed', state.id, server.lastIsMaster() ? server.lastIsMaster().me : server.name)); |
@@ -259,6 +259,2 @@ "use strict"; | ||
return function(response, connection) { | ||
// console.log("!----------------------- messageHandler " + self.s.pool.availableConnections.length + " :: " + connection.id) | ||
// Release the connection back to the pool | ||
// self.s.pool.connectionAvailable(connection); | ||
// Attempt to parse the message | ||
@@ -272,7 +268,4 @@ try { | ||
// console.dir(Object.keys(cb)) | ||
// console.dir(response.documents) | ||
// If no | ||
if(!cb.noRelease) { | ||
if(cb && !cb.noRelease) { | ||
self.s.pool.connectionAvailable(connection); | ||
@@ -295,4 +288,2 @@ } | ||
if(state.state == DISCONNECTED || state.state == DESTROYED) return; | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% errorHandler") | ||
// console.log(err) | ||
// Flush the connection operations | ||
@@ -306,6 +297,4 @@ if(self.s.callbacks) { | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% errorHandler 1") | ||
// No more connections left, emit a close | ||
if(state.pool.getAll().length == 0) { | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% errorHandler 2 :: " + state.emitError) | ||
// Set disconnected state | ||
@@ -320,3 +309,2 @@ state.state = DISCONNECTED; | ||
self.destroy(); | ||
// console.log("!!!!!!!!!!!!! EMIT ERROR :: " + state.emitError + " :: " + self.listeners('error').length + " :: " + state.reconnect) | ||
// Emit error event | ||
@@ -335,3 +323,2 @@ if(state.emitError && self.listeners('error').length > 0) self.emit('error', err, self); | ||
if(state.state == DISCONNECTED || state.state == DESTROYED) return; | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fatalErrorHandler") | ||
// Flush the connection operations | ||
@@ -370,7 +357,2 @@ if(self.s.callbacks) { | ||
if(state.state == DISCONNECTED || state.state == DESTROYED) return; | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% timeoutHandler = " + connection.port + " :: " + state.pool.getAll().length) | ||
// console.log("----------------------- pool.write _execute 0 :: availableConnections = " + self.s.pool.availableConnections.length) | ||
// console.log("----------------------- pool.write _execute 0 :: inUseConnections = " + self.s.pool.inUseConnections.length) | ||
// console.log("----------------------- pool.write _execute 0 :: newConnections = " + self.s.pool.newConnections.length) | ||
// console.log("----------------------- pool.write _execute 0 :: queue = " + self.s.pool.queue.length) | ||
@@ -398,3 +380,2 @@ // Flush the connection operations | ||
if(state.reconnect) setTimeout(function() { | ||
// state.currentReconnectRetry = state.reconnectTries, | ||
reconnectServer(self, state) | ||
@@ -411,10 +392,5 @@ }, state.reconnectInterval); | ||
if(state.state == DISCONNECTED || state.state == DESTROYED) return; | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% closeHandler :: " + state.pool.getAll().length) | ||
// // Emit error event | ||
// self.emit('close', err, self); | ||
// No more connections left, emit a close | ||
if(state.pool.getAll().length == 0) { | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% closeHandler 1 :: " + state.pool.getAll().length) | ||
// Set state to disconnected | ||
@@ -425,13 +401,8 @@ state.state = DISCONNECTED; | ||
if(state.logger.isInfo()) state.logger.info(f('server %s closed', self.name)); | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% closeHandler 2 :: " + state.pool.getAll().length) | ||
// Flush out all the callbacks | ||
if(state.callbacks) state.callbacks.flush(new MongoError(f("server %s sockets closed", self.name))); | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% closeHandler 3 :: " + state.pool.getAll().length) | ||
// Emit error event | ||
self.emit('close', err, self); | ||
// console.log("!!!!!!!!!!!!! EMIT CLOSE :: " + state.reconnect) | ||
// console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% closeHandler 1 :: " + state.pool.getAll().length) | ||
// If we specified the driver to reconnect perform it | ||
if(state.reconnect) setTimeout(function() { | ||
// state.currentReconnectRetry = state.reconnectTries, | ||
reconnectServer(self, state) | ||
@@ -446,3 +417,2 @@ }, state.reconnectInterval); | ||
var connectHandler = function(self, state) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! server connect :: " + self.name) | ||
// Apply all stored authentications | ||
@@ -456,3 +426,2 @@ var applyAuthentications = function(callback) { | ||
var connections = state.pool.getAll(); | ||
// console.log("~~~~~~~~~~~~~~~~~~~~~~~~~ connectHandler :: " + connections.length) | ||
// Execute all providers | ||
@@ -619,5 +588,2 @@ var count = keys.length; | ||
// console.log(")))))))))))))))))))))))))))))))))))))))))))))))))))))") | ||
// console.dir(options) | ||
// Keeps all the internal state of the server | ||
@@ -779,8 +745,5 @@ this.s = { | ||
self.s.pool.on('connection', function(connection) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NEW Connection :: " + connection.id + " -- server -- " + self.s.id + " -- " + self.s.options.port) | ||
// No auth handler used, return the connection | ||
var keys = Object.keys(self.s.authProviders); | ||
if(keys.length == 0) return self.s.pool.connectionAvailable(connection); | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NEW Connection 1 :: " + keys.length) | ||
@@ -794,16 +757,7 @@ // Get all connections | ||
for(var i = 0; i < keys.length; i++) { | ||
// console.log("------------------ authenticating against " + keys[i]); | ||
// if(keys[i] == 'scram-sha-1') { | ||
// console.dir(self.s.authProviders[keys[i]].authStore) | ||
// } | ||
// reauthenticate the connection | ||
self.s.authProviders[keys[i]].reauthenticate(self, connections, function(err, r) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NEW Connection 1 auth :: ") | ||
// console.dir(err) | ||
// console.dir(r) | ||
count = count - 1; | ||
// We are done, emit reconnect event | ||
if(count == 0) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NEW Connection 2 auth :: " + r) | ||
// console.dir(err) | ||
return self.s.pool.connectionAvailable(connection); | ||
@@ -937,5 +891,2 @@ } | ||
if(err) return callback(err); | ||
// if(result && result.connection) { | ||
// console.log("====== received result from connection " + result.connection.id) | ||
// } | ||
@@ -962,3 +913,2 @@ if(result.documents[0]['$err'] | ||
if(options.connection) { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!! ONE") | ||
// Add the reference to the connection to the callback so | ||
@@ -971,3 +921,2 @@ // we can flush only the affected operations | ||
} else { | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!! TWO") | ||
self.s.pool.write(query.toBin(), commandCallback, options); | ||
@@ -1000,6 +949,2 @@ } | ||
if(typeof options == 'function') callback = options, options = {}; | ||
// console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! execute command :: " + this.name) | ||
// console.dir(cmd) | ||
// console.dir(this.s.authProviders['scram-sha-1'].authStore) | ||
// console.dir(Object.keys(options)) | ||
var self = this; | ||
@@ -1155,3 +1100,2 @@ if(this.s.state == DESTROYED) return callback(new MongoError(f('topology was destroyed'))); | ||
Server.prototype.auth = function(mechanism, db) { | ||
// console.log("=========================== SERVER.auth -- server -- " + this.s.id + " :: " + this.s.options.port) | ||
var self = this; | ||
@@ -1178,5 +1122,2 @@ var args = Array.prototype.slice.call(arguments, 2); | ||
var finalArguments = [self, connections, db].concat(args.slice(0)).concat([function(err, r) { | ||
// console.log("=========================== SERVER.auth 0 :: " + self.s.id) | ||
// console.dir(self.s.authProviders[mechanism].authStore) | ||
// console.dir(err) | ||
if(err) return callback(err); | ||
@@ -1214,3 +1155,2 @@ if(!r) return callback(new MongoError('could not authenticate')); | ||
Server.prototype.addAuthProvider = function(name, provider) { | ||
// console.log("===== Server.prototype.addAuthProvider :: " + this.name) | ||
var self = this; | ||
@@ -1217,0 +1157,0 @@ self.s.authProviders[name] = provider; |
{ | ||
"name": "mongodb-core", | ||
"version": "1.3.1", | ||
"version": "1.3.2", | ||
"description": "Core MongoDB driver functionality, no bells and whistles and meant for integration not end applications", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
461696
9306