You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apex.apache.org by da...@apache.org on 2015/11/30 22:06:20 UTC

[14/98] [abbrv] [partial] incubator-apex-malhar git commit: Removing all web demos

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js
----------------------------------------------------------------------
diff --git a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js b/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js
deleted file mode 100644
index c2d1df4..0000000
--- a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js
+++ /dev/null
@@ -1,811 +0,0 @@
-var ReadPreference = require('../read_preference').ReadPreference
-  , DbCommand = require('../../commands/db_command').DbCommand
-  , inherits = require('util').inherits
-  , format = require('util').format
-  , timers = require('timers')
-  , Server = require('../server').Server
-  , utils = require('../../utils')
-  , PingStrategy = require('./strategies/ping_strategy').PingStrategy
-  , StatisticsStrategy = require('./strategies/statistics_strategy').StatisticsStrategy
-  , Options = require('./options').Options
-  , ReplSetState = require('./repl_set_state').ReplSetState
-  , HighAvailabilityProcess = require('./ha').HighAvailabilityProcess
-  , Base = require('../base').Base;
-
-var STATE_STARTING_PHASE_1 = 0;
-var STATE_PRIMARY = 1;
-var STATE_SECONDARY = 2;
-var STATE_RECOVERING = 3;
-var STATE_FATAL_ERROR = 4;
-var STATE_STARTING_PHASE_2 = 5;
-var STATE_UNKNOWN = 6;
-var STATE_ARBITER = 7;
-var STATE_DOWN = 8;
-var STATE_ROLLBACK = 9;
-
-// Set processor, setImmediate if 0.10 otherwise nextTick
-var processor = require('../../utils').processor();
-
-/**
- * ReplSet constructor provides replicaset functionality
- *
- * Options
- *  - **ha** {Boolean, default:true}, turn on high availability.
- *  - **haInterval** {Number, default:2000}, time between each replicaset status check.
- *  - **reconnectWait** {Number, default:1000}, time to wait in miliseconds before attempting reconnect.
- *  - **retries** {Number, default:30}, number of times to attempt a replicaset reconnect.
- *  - **rs_name** {String}, the name of the replicaset to connect to.
- *  - **socketOptions** {Object, default:null}, an object containing socket options to use (noDelay:(boolean), keepAlive:(number), connectTimeoutMS:(number), socketTimeoutMS:(number))
- *  - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST).
- *  - **strategy** {String, default:'ping'}, selection strategy for reads choose between (ping, statistical and none, default is ping)
- *  - **secondaryAcceptableLatencyMS** {Number, default:15}, sets the range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms)
- *  - **connectWithNoPrimary** {Boolean, default:false}, sets if the driver should connect even if no primary is available
- *  - **connectArbiter** {Boolean, default:false}, sets if the driver should connect to arbiters or not.
- *  - **logger** {Object, default:null}, an object representing a logger that you want to use, needs to support functions debug, log, error **({error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}})**.
- *  - **poolSize** {Number, default:5}, number of connections in the connection pool for each server instance, set to 5 as default for legacy reasons.
- *  - **ssl** {Boolean, default:false}, use ssl connection (needs to have a mongod server with ssl support)
- *  - **sslValidate** {Boolean, default:false}, validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslCA** {Array, default:null}, Array of valid certificates either as Buffers or Strings (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslCert** {Buffer/String, default:null}, String or buffer containing the certificate we wish to present (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslKey** {Buffer/String, default:null}, String or buffer containing the certificate private key we wish to present (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslPass** {Buffer/String, default:null}, String or buffer containing the certificate password (needs to have a mongod server with ssl support, 2.4 or higher)
- *
- * @class Represents a 
- Replicaset Configuration
- * @param {Array} list of server objects participating in the replicaset.
- * @param {Object} [options] additional options for the replicaset connection.
- */
-var ReplSet = exports.ReplSet = function(servers, options) {
-  // Set up basic
-  if(!(this instanceof ReplSet))
-    return new ReplSet(servers, options);
-
-  // Set up event emitter
-  Base.call(this);
-
-  // Ensure we have a list of servers
-  if(!Array.isArray(servers)) throw Error("The parameter must be an array of servers and contain at least one server");
-  // Ensure no Mongos's
-  for(var i = 0; i < servers.length; i++) {
-    if(!(servers[i] instanceof Server)) throw new Error("list of servers must be of type Server");
-  }
-
-  // Save the options
-  this.options = new Options(options);
-  // Ensure basic validation of options
-  this.options.init();
-
-  // Server state
-  this._serverState = ReplSet.REPLSET_DISCONNECTED;
-  // Add high availability process
-  this._haProcess = new HighAvailabilityProcess(this, this.options);
-
-  // Let's iterate over all the provided server objects and decorate them
-  this.servers = this.options.decorateAndClean(servers, this._callBackStore);
-  // Throw error if no seed servers
-  if(this.servers.length == 0) throw new Error("No valid seed servers in the array");
-
-  // Let's set up our strategy object for picking secondaries
-  if(this.options.strategy == 'ping') {
-    // Create a new instance
-    this.strategyInstance = new PingStrategy(this, this.options.secondaryAcceptableLatencyMS);
-  } else if(this.options.strategy == 'statistical') {
-    // Set strategy as statistical
-    this.strategyInstance = new StatisticsStrategy(this);
-    // Add enable query information
-    this.enableRecordQueryStats(true);
-  }
-
-  this.emitOpen = this.options.emitOpen || true;
-  // Set up a clean state
-  this._state = new ReplSetState(this);
-  // Current round robin selected server
-  this._currentServerChoice = 0;
-  // Ensure up the server callbacks
-  for(var i = 0; i < this.servers.length; i++) {
-    this.servers[i]._callBackStore = this._callBackStore;
-    this.servers[i].name = format("%s:%s", this.servers[i].host, this.servers[i].port)
-    this.servers[i].replicasetInstance = this;
-    this.servers[i].options.auto_reconnect = false;
-    this.servers[i].inheritReplSetOptionsFrom(this);
-  }
-
-  // Allow setting the socketTimeoutMS on all connections
-  // to work around issues such as secondaries blocking due to compaction
-  utils.setSocketTimeoutProperty(this, this.options.socketOptions);
-}
-
-/**
- * @ignore
- */
-inherits(ReplSet, Base);
-
-// Replicaset states
-ReplSet.REPLSET_CONNECTING = 'connecting';
-ReplSet.REPLSET_DISCONNECTED = 'disconnected';
-ReplSet.REPLSET_CONNECTED = 'connected';
-ReplSet.REPLSET_RECONNECTING = 'reconnecting';
-ReplSet.REPLSET_DESTROYED = 'destroyed';
-ReplSet.REPLSET_READ_ONLY = 'readonly';
-
-ReplSet.prototype.isAutoReconnect = function() {
-  return true;
-}
-
-ReplSet.prototype.canWrite = function() {
-  return this._state.master && this._state.master.isConnected();
-}
-
-ReplSet.prototype.canRead = function(read) {
-  if((read == ReadPreference.PRIMARY 
-      || read == null || read == false) && (this._state.master == null || !this._state.master.isConnected())) return false;
-  return Object.keys(this._state.secondaries).length > 0;
-}
-
-/**
- * @ignore
- */
-ReplSet.prototype.enableRecordQueryStats = function(enable) {
-  // Set the global enable record query stats
-  this.recordQueryStats = enable;
-
-  // Enable all the servers
-  for(var i = 0; i < this.servers.length; i++) {
-    this.servers[i].enableRecordQueryStats(enable);
-  }
-}
-
-/**
- * @ignore
- */
-ReplSet.prototype.setReadPreference = function(preference) {
-  this.options.readPreference = preference;
-}
-
-ReplSet.prototype.connect = function(parent, options, callback) {
-  if(this._serverState != ReplSet.REPLSET_DISCONNECTED) 
-    return callback(new Error("in process of connection"));
-
-  // If no callback throw
-  if(!(typeof callback == 'function')) 
-    throw new Error("cannot call ReplSet.prototype.connect with no callback function");
-
-  var self = this;
-  // Save db reference
-  this.options.db = parent;
-  // Set replicaset as connecting
-  this._serverState = ReplSet.REPLSET_CONNECTING
-  // Copy all the servers to our list of seeds
-  var candidateServers = this.servers.slice(0);
-  // Pop the first server
-  var server = candidateServers.pop();
-  server.name = format("%s:%s", server.host, server.port);
-  // Set up the options
-  var opts = {
-    returnIsMasterResults: true,
-    eventReceiver: server
-  }
-
-  // Register some event listeners
-  this.once("fullsetup", function(err, db, replset) {
-    // Set state to connected
-    self._serverState = ReplSet.REPLSET_CONNECTED;
-    // Stop any process running
-    if(self._haProcess) self._haProcess.stop();
-    // Start the HA process
-    self._haProcess.start();
-
-    // Emit fullsetup
-    processor(function() {
-      if(self.emitOpen)
-        self._emitAcrossAllDbInstances(self, null, "open", null, null, null);        
-
-      self._emitAcrossAllDbInstances(self, null, "fullsetup", null, null, null);        
-    });
-
-    // If we have a strategy defined start it
-    if(self.strategyInstance) {
-      self.strategyInstance.start();
-    }
-
-    // Finishing up the call
-    callback(err, db, replset);
-  });
-
-  // Errors
-  this.once("connectionError", function(err, result) {
-    callback(err, result);
-  });
-
-  // Attempt to connect to the server
-  server.connect(this.options.db, opts, _connectHandler(this, candidateServers, server));
-}
-
-ReplSet.prototype.close = function(callback) {  
-  var self = this;
-  // Set as destroyed
-  this._serverState = ReplSet.REPLSET_DESTROYED;
-  // Stop the ha
-  this._haProcess.stop();
-  
-  // If we have a strategy stop it
-  if(this.strategyInstance) {
-    this.strategyInstance.stop();
-  }
-
-  // Kill all servers available
-  for(var name in this._state.addresses) {
-    this._state.addresses[name].close();
-  }
-
-  // Clean out the state
-  this._state = new ReplSetState(this); 
-  
-  // Emit close event
-  processor(function() {
-    self._emitAcrossAllDbInstances(self, null, "close", null, null, true)    
-  });
-
-  // Flush out any remaining call handlers
-  self._flushAllCallHandlers(utils.toError("Connection Closed By Application"));
-
-  // Callback
-  if(typeof callback == 'function') 
-    return callback(null, null);
-}
-
-/**
- * Creates a new server for the `replset` based on `host`.
- *
- * @param {String} host - host:port pair (localhost:27017)
- * @param {ReplSet} replset - the ReplSet instance
- * @return {Server}
- * @ignore
- */
-var createServer = function(self, host, options) {
-  // copy existing socket options to new server
-  var socketOptions = {}
-  if(options.socketOptions) {
-    var keys = Object.keys(options.socketOptions);
-    for(var k = 0; k < keys.length; k++) {
-      socketOptions[keys[k]] = options.socketOptions[keys[k]];
-    }
-  }
-
-  var parts = host.split(/:/);
-  if(1 === parts.length) {
-    parts[1] = Connection.DEFAULT_PORT;
-  }
-
-  socketOptions.host = parts[0];
-  socketOptions.port = parseInt(parts[1], 10);
-
-  var serverOptions = {
-    readPreference: options.readPreference,
-    socketOptions: socketOptions,
-    poolSize: options.poolSize,
-    logger: options.logger,
-    auto_reconnect: false,
-    ssl: options.ssl,
-    sslValidate: options.sslValidate,
-    sslCA: options.sslCA,
-    sslCert: options.sslCert,
-    sslKey: options.sslKey,
-    sslPass: options.sslPass
-  }
-
-  var server = new Server(socketOptions.host, socketOptions.port, serverOptions);
-  // Set up shared state
-  server._callBackStore = self._callBackStore;
-  server.replicasetInstance = self;
-  server.enableRecordQueryStats(self.recordQueryStats);
-  // Set up event handlers
-  server.on("close", _handler("close", self, server));
-  server.on("error", _handler("error", self, server));
-  server.on("timeout", _handler("timeout", self, server));
-  return server;
-}
-
-var _handler = function(event, self, server) {
-  return function(err, doc) {
-    // The event happened to a primary
-    // Remove it from play
-    if(self._state.isPrimary(server)) {    
-      // Emit that the primary left the replicaset
-      self.emit('left', 'primary', server);
-      // Get the current master
-      var current_master = self._state.master;
-      self._state.master = null;
-      self._serverState = ReplSet.REPLSET_READ_ONLY;
-    
-      if(current_master != null) {
-        // Unpack variables
-        var host = current_master.socketOptions.host;
-        var port = current_master.socketOptions.port;
-
-        // Fire error on any unknown callbacks
-        self.__executeAllServerSpecificErrorCallbacks(host, port, err);        
-      }
-    } else if(self._state.isSecondary(server)) {
-      // Emit that a secondary left the replicaset
-      self.emit('left', 'secondary', server);
-      // Delete from the list
-      delete self._state.secondaries[server.name];
-    }
-
-    // If there is no more connections left and the setting is not destroyed
-    // set to disconnected
-    if(Object.keys(self._state.addresses).length == 0 
-      && self._serverState != ReplSet.REPLSET_DESTROYED) {
-        self._serverState = ReplSet.REPLSET_DISCONNECTED;
-
-        // Emit close across all the attached db instances
-        self._dbStore.emit("close", new Error("replicaset disconnected, no valid servers contactable over tcp"), null, true);
-    }
-
-    // Unpack variables
-    var host = server.socketOptions.host;
-    var port = server.socketOptions.port;
-
-    // Fire error on any unknown callbacks
-    self.__executeAllServerSpecificErrorCallbacks(host, port, err);
-  }
-}
-
-var locateNewServers = function(self, state, candidateServers, ismaster) {
-  // Retrieve the host
-  var hosts = ismaster.hosts;
-  // In candidate servers
-  var inCandidateServers = function(name, candidateServers) {
-    for(var i = 0; i < candidateServers.length; i++) {
-      if(candidateServers[i].name == name) return true;
-    }
-
-    return false;
-  }
-
-  // New servers
-  var newServers = [];
-  if(Array.isArray(hosts)) {
-    // Let's go over all the hosts
-    for(var i = 0; i < hosts.length; i++) {
-      if(!state.contains(hosts[i]) 
-        && !inCandidateServers(hosts[i], candidateServers)) {
-          newServers.push(createServer(self, hosts[i], self.options));
-      }
-    }    
-  }
-
-  // Return list of possible new servers
-  return newServers;
-}
-
-var _connectHandler = function(self, candidateServers, instanceServer) {
-  return function(err, doc) {
-    // If we have an error add to the list
-    if(err) {
-      self._state.errors[instanceServer.name] = instanceServer;
-    } else {
-      delete self._state.errors[instanceServer.name];
-    }
-
-    if(!err) {      
-      var ismaster = doc.documents[0]
-
-      // Error the server if 
-      if(!ismaster.ismaster
-        && !ismaster.secondary) {
-        self._state.errors[instanceServer.name] = instanceServer;
-      }
-    }
-
-
-    // No error let's analyse the ismaster command
-    if(!err && self._state.errors[instanceServer.name] == null) {
-      var ismaster = doc.documents[0]
-
-      // If no replicaset name exists set the current one
-      if(self.options.rs_name == null) {
-        self.options.rs_name = ismaster.setName;
-      }
-
-      // If we have a member that is not part of the set let's finish up
-      if(typeof ismaster.setName == 'string' && ismaster.setName != self.options.rs_name) {
-        return self.emit("connectionError", new Error("Replicaset name " + ismaster.setName + " does not match specified name " + self.options.rs_name));
-      }
-
-      // Add the error handlers
-      instanceServer.on("close", _handler("close", self, instanceServer));
-      instanceServer.on("error", _handler("error", self, instanceServer));
-      instanceServer.on("timeout", _handler("timeout", self, instanceServer));
-      
-      // Set any tags on the instance server
-      instanceServer.name = ismaster.me;
-      instanceServer.tags = ismaster.tags;
-
-      // Add the server to the list
-      self._state.addServer(instanceServer, ismaster);
-
-      // Check if we have more servers to add (only check when done with initial set)
-      if(candidateServers.length == 0) {
-        // Get additional new servers that are not currently in set
-        var new_servers = locateNewServers(self, self._state, candidateServers, ismaster);
-
-        // Locate any new servers that have not errored out yet
-        for(var i = 0; i < new_servers.length; i++) {
-          if(self._state.errors[new_servers[i].name] == null) {
-            candidateServers.push(new_servers[i])            
-          }
-        }
-      }
-    }
-
-    // If the candidate server list is empty and no valid servers
-    if(candidateServers.length == 0 &&
-      !self._state.hasValidServers()) {
-        return self.emit("connectionError", new Error("No valid replicaset instance servers found"));
-    } else if(candidateServers.length == 0) {      
-      if(!self.options.connectWithNoPrimary && (self._state.master == null || !self._state.master.isConnected())) {
-        return self.emit("connectionError", new Error("No primary found in set"));
-      }
-      return self.emit("fullsetup", null, self.options.db, self);
-    }
-        
-    // Let's connect the next server    
-    var nextServer = candidateServers.pop();
-  
-    // Set up the options
-    var opts = {
-      returnIsMasterResults: true,
-      eventReceiver: nextServer
-    }
-
-    // Attempt to connect to the server
-    nextServer.connect(self.options.db, opts, _connectHandler(self, candidateServers, nextServer));
-  }
-}
-
-ReplSet.prototype.isDestroyed = function() {
-  return this._serverState == ReplSet.REPLSET_DESTROYED;
-}
-
-ReplSet.prototype.isConnected = function(read) {
-  var isConnected = false;  
-
-  if(read == null || read == ReadPreference.PRIMARY || read == false)
-    isConnected = this._state.master != null && this._state.master.isConnected();
-
-  if((read == ReadPreference.PRIMARY_PREFERRED || read == ReadPreference.SECONDARY_PREFERRED || read == ReadPreference.NEAREST)
-    && ((this._state.master != null && this._state.master.isConnected())
-    || (this._state && this._state.secondaries && Object.keys(this._state.secondaries).length > 0))) {
-      isConnected = true;
-  } else if(read == ReadPreference.SECONDARY) {
-    isConnected = this._state && this._state.secondaries && Object.keys(this._state.secondaries).length > 0;
-  }
-
-  // No valid connection return false
-  return isConnected;
-}
-
-ReplSet.prototype.isMongos = function() {
-  return false;
-}
-
-ReplSet.prototype.checkoutWriter = function() {
-  if(this._state.master) return this._state.master.checkoutWriter();
-  return new Error("no writer connection available");
-}
-
-ReplSet.prototype.processIsMaster = function(_server, _ismaster) {
-  // Server in recovery mode, remove it from available servers
-  if(!_ismaster.ismaster && !_ismaster.secondary) {
-    // Locate the actual server
-    var server = this._state.addresses[_server.name];
-    // Close the server, simulating the closing of the connection
-    // to get right removal semantics
-    if(server) server.close();
-    // Execute any callback errors
-    _handler(null, this, server)(new Error("server is in recovery mode"));
-  }
-}
-
-ReplSet.prototype.allRawConnections = function() {
-  var connections = [];
-
-  for(var name in this._state.addresses) {
-    connections = connections.concat(this._state.addresses[name].allRawConnections());
-  }
-
-  return connections;
-}
-
-/**
- * @ignore
- */
-ReplSet.prototype.allServerInstances = function() {
-  var self = this;
-  // If no state yet return empty
-  if(!self._state) return [];
-  // Close all the servers (concatenate entire list of servers first for ease)
-  var allServers = self._state.master != null ? [self._state.master] : [];
-
-  // Secondary keys
-  var keys = Object.keys(self._state.secondaries);
-  // Add all secondaries
-  for(var i = 0; i < keys.length; i++) {
-    allServers.push(self._state.secondaries[keys[i]]);
-  }
-
-  // Return complete list of all servers
-  return allServers;
-}
-
-/**
- * @ignore
- */
-ReplSet.prototype.checkoutReader = function(readPreference, tags) {
-  var connection = null;
-
-  // If we have a read preference object unpack it
-  if(typeof readPreference == 'object' && readPreference['_type'] == 'ReadPreference') {
-    // Validate if the object is using a valid mode
-    if(!readPreference.isValid()) throw new Error("Illegal readPreference mode specified, " + readPreference.mode);
-    // Set the tag
-    tags = readPreference.tags;
-    readPreference = readPreference.mode;
-  } else if(typeof readPreference == 'object' && readPreference['_type'] != 'ReadPreference') {
-    return new Error("read preferences must be either a string or an instance of ReadPreference");
-  }
-
-  // Set up our read Preference, allowing us to override the readPreference
-  var finalReadPreference = readPreference != null ? readPreference : this.options.readPreference;
-
-  // Ensure we unpack a reference
-  if(finalReadPreference != null && typeof finalReadPreference == 'object' && finalReadPreference['_type'] == 'ReadPreference') {
-    // Validate if the object is using a valid mode
-    if(!finalReadPreference.isValid()) throw new Error("Illegal readPreference mode specified, " + finalReadPreference.mode);
-    // Set the tag
-    tags = finalReadPreference.tags;
-    readPreference = finalReadPreference.mode;
-  }
-
-  // Finalize the read preference setup
-  finalReadPreference = finalReadPreference == true ? ReadPreference.SECONDARY_PREFERRED : finalReadPreference;
-  finalReadPreference = finalReadPreference == null ? ReadPreference.PRIMARY : finalReadPreference;
-
-  // If we are reading from a primary
-  if(finalReadPreference == 'primary') {
-    // If we provide a tags set send an error
-    if(typeof tags == 'object' && tags != null) {
-      return new Error("PRIMARY cannot be combined with tags");
-    }
-
-    // If we provide a tags set send an error
-    if(this._state.master == null) {
-      return new Error("No replica set primary available for query with ReadPreference PRIMARY");
-    }
-
-    // Checkout a writer
-    return this.checkoutWriter();
-  }
-
-  // If we have specified to read from a secondary server grab a random one and read
-  // from it, otherwise just pass the primary connection
-  if((this.options.readSecondary || finalReadPreference == ReadPreference.SECONDARY_PREFERRED || finalReadPreference == ReadPreference.SECONDARY) && Object.keys(this._state.secondaries).length > 0) {
-    // If we have tags, look for servers matching the specific tag
-    if(this.strategyInstance != null) {
-      // Only pick from secondaries
-      var _secondaries = [];
-      for(var key in this._state.secondaries) {
-        _secondaries.push(this._state.secondaries[key]);
-      }
-
-      if(finalReadPreference == ReadPreference.SECONDARY) {
-        // Check out the nearest from only the secondaries
-        connection = this.strategyInstance.checkoutConnection(tags, _secondaries);
-      } else {
-        connection = this.strategyInstance.checkoutConnection(tags, _secondaries);
-        // No candidate servers that match the tags, error
-        if(connection == null || connection instanceof Error) {
-          // No secondary server avilable, attemp to checkout a primary server
-          connection = this.checkoutWriter();
-          // If no connection return an error
-          if(connection == null || connection instanceof Error) {
-            return new Error("No replica set members available for query");
-          }
-        }
-      }
-    } else if(tags != null && typeof tags == 'object') {
-      // Get connection
-      connection = _pickFromTags(this, tags);// = function(self, readPreference, tags) {
-      // No candidate servers that match the tags, error
-      if(connection == null) {
-        return new Error("No replica set members available for query");
-      }
-    } else {
-      connection = _roundRobin(this, tags);
-    }
-  } else if(finalReadPreference == ReadPreference.PRIMARY_PREFERRED) {
-    // Check if there is a primary available and return that if possible
-    connection = this.checkoutWriter();
-    // If no connection available checkout a secondary
-    if(connection == null || connection instanceof Error) {
-      // If we have tags, look for servers matching the specific tag
-      if(tags != null && typeof tags == 'object') {
-        // Get connection
-        connection = _pickFromTags(this, tags);// = function(self, readPreference, tags) {
-        // No candidate servers that match the tags, error
-        if(connection == null) {
-          return new Error("No replica set members available for query");
-        }
-      } else {
-        connection = _roundRobin(this, tags);
-      }
-    }
-  } else if(finalReadPreference == ReadPreference.SECONDARY_PREFERRED) {
-    // If we have tags, look for servers matching the specific tag
-    if(this.strategyInstance != null) {
-      connection = this.strategyInstance.checkoutConnection(tags);
-      
-      // No candidate servers that match the tags, error
-      if(connection == null || connection instanceof Error) {
-        // No secondary server avilable, attemp to checkout a primary server
-        connection = this.checkoutWriter();
-        // If no connection return an error
-        if(connection == null || connection instanceof Error) {
-          var preferenceName = finalReadPreference == ReadPreference.SECONDARY ? 'secondary' : finalReadPreference;
-          return new Error("No replica set member available for query with ReadPreference " + preferenceName + " and tags " + JSON.stringify(tags));
-        }
-      }
-    } else if(tags != null && typeof tags == 'object') {
-      // Get connection
-      connection = _pickFromTags(this, tags);// = function(self, readPreference, tags) {
-      // No candidate servers that match the tags, error
-      if(connection == null) {
-        // No secondary server avilable, attemp to checkout a primary server
-        connection = this.checkoutWriter();
-        // If no connection return an error
-        if(connection == null || connection instanceof Error) {
-          var preferenceName = finalReadPreference == ReadPreference.SECONDARY ? 'secondary' : finalReadPreference;
-          return new Error("No replica set member available for query with ReadPreference " + preferenceName + " and tags " + JSON.stringify(tags));
-        }
-      }
-    }
-  } else if(finalReadPreference == ReadPreference.NEAREST && this.strategyInstance != null) {
-    connection = this.strategyInstance.checkoutConnection(tags);
-  } else if(finalReadPreference == ReadPreference.NEAREST && this.strategyInstance == null) {
-    return new Error("A strategy for calculating nearness must be enabled such as ping or statistical");
-  } else if(finalReadPreference == ReadPreference.SECONDARY && Object.keys(this._state.secondaries).length == 0) {
-    if(tags != null && typeof tags == 'object') {
-      var preferenceName = finalReadPreference == ReadPreference.SECONDARY ? 'secondary' : finalReadPreference;
-      return new Error("No replica set member available for query with ReadPreference " + preferenceName + " and tags " + JSON.stringify(tags));
-    } else {
-      return new Error("No replica set secondary available for query with ReadPreference SECONDARY");
-    }
-  } else {
-    connection = this.checkoutWriter();
-  }
-
-  // Return the connection
-  return connection;
-}
-
-/**
- * @ignore
- */
-var _pickFromTags = function(self, tags) {
-  // If we have an array or single tag selection
-  var tagObjects = Array.isArray(tags) ? tags : [tags];
-  // Iterate over all tags until we find a candidate server
-  for(var _i = 0; _i < tagObjects.length; _i++) {
-    // Grab a tag object
-    var tagObject = tagObjects[_i];
-    // Matching keys
-    var matchingKeys = Object.keys(tagObject);
-    // Match all the servers that match the provdided tags
-    var keys = Object.keys(self._state.secondaries);
-    var candidateServers = [];
-
-    for(var i = 0; i < keys.length; i++) {
-      var server = self._state.secondaries[keys[i]];
-      // If we have tags match
-      if(server.tags != null) {
-        var matching = true;
-        // Ensure we have all the values
-        for(var j = 0; j < matchingKeys.length; j++) {
-          if(server.tags[matchingKeys[j]] != tagObject[matchingKeys[j]]) {
-            matching = false;
-            break;
-          }
-        }
-
-        // If we have a match add it to the list of matching servers
-        if(matching) {
-          candidateServers.push(server);
-        }
-      }
-    }
-
-    // If we have a candidate server return
-    if(candidateServers.length > 0) {
-      if(self.strategyInstance) return self.strategyInstance.checkoutConnection(tags, candidateServers);
-      // Set instance to return
-      return candidateServers[Math.floor(Math.random() * candidateServers.length)].checkoutReader();
-    }
-  }
-
-  // No connection found
-  return null;
-}
-
-/**
- * Pick a secondary using round robin
- *
- * @ignore
- */
-function _roundRobin (replset, tags) {
-  var keys = Object.keys(replset._state.secondaries);
-  // Update index
-  replset._currentServerChoice = replset._currentServerChoice + 1;
-  // Pick a server
-  var key = keys[replset._currentServerChoice % keys.length];
-
-  var conn = null != replset._state.secondaries[key]
-    ? replset._state.secondaries[key].checkoutReader()
-    : null;
-
-  // If connection is null fallback to first available secondary
-  if(null == conn) {
-    conn = pickFirstConnectedSecondary(replset, tags);
-  }
-
-  return conn;
-}
-
-/**
- * @ignore
- */
-var pickFirstConnectedSecondary = function pickFirstConnectedSecondary(self, tags) {
-  var keys = Object.keys(self._state.secondaries);
-  var connection;
-
-  // Find first available reader if any
-  for(var i = 0; i < keys.length; i++) {
-    connection = self._state.secondaries[keys[i]].checkoutReader();
-    if(connection) return connection;
-  }
-
-  // If we still have a null, read from primary if it's not secondary only
-  if(self._readPreference == ReadPreference.SECONDARY_PREFERRED) {
-    connection = self._state.master.checkoutReader();
-    if(connection) return connection;
-  }
-
-  var preferenceName = self._readPreference == ReadPreference.SECONDARY_PREFERRED
-    ? 'secondary'
-    : self._readPreference;
-
-  return new Error("No replica set member available for query with ReadPreference "
-                  + preferenceName + " and tags " + JSON.stringify(tags));
-}
-
-/**
- * Get list of secondaries
- * @ignore
- */
-Object.defineProperty(ReplSet.prototype, "secondaries", {enumerable: true
-  , get: function() {
-      return utils.objectToArray(this._state.secondaries);
-    }
-});
-
-/**
- * Get list of secondaries
- * @ignore
- */
-Object.defineProperty(ReplSet.prototype, "arbiters", {enumerable: true
-  , get: function() {
-      return utils.objectToArray(this._state.arbiters);
-    }
-});
-

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js
----------------------------------------------------------------------
diff --git a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js b/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js
deleted file mode 100644
index 1fbd9c0..0000000
--- a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Interval state object constructor
- *
- * @ignore
- */
-var ReplSetState = function ReplSetState (replset) {
-  this.errorMessages = [];
-  this.secondaries = {};
-  this.addresses = {};
-  this.arbiters = {};
-  this.passives = {};
-  this.members = [];
-  this.errors = {};
-  this.setName = null;
-  this.master = null;
-  this.replset = replset;
-}
-
-ReplSetState.prototype.hasValidServers = function() {
-  var validServers = [];
-  if(this.master && this.master.isConnected()) return true;
-
-  if(this.secondaries) {
-    var keys = Object.keys(this.secondaries)
-    for(var i = 0; i < keys.length; i++) {
-      if(this.secondaries[keys[i]].isConnected())
-        return true;
-    }
-  }
-
-  return false;
-}
-
-ReplSetState.prototype.getAllReadServers = function() {
-  var candidate_servers = [];
-  for(var name in this.addresses) {
-    candidate_servers.push(this.addresses[name]);
-  }
-
-  // Return all possible read candidates
-  return candidate_servers;
-}
-
-ReplSetState.prototype.addServer = function(server, master) {
-  server.name = master.me;
-
-  if(master.ismaster) {
-    this.master = server;
-    this.addresses[server.name] = server;
-    this.replset.emit('joined', "primary", master, server);
-  } else if(master.secondary) {
-    this.secondaries[server.name] = server;
-    this.addresses[server.name] = server;
-    this.replset.emit('joined', "secondary", master, server);
-  } else if(master.arbiters) {
-    this.arbiters[server.name] = server;
-    this.addresses[server.name] = server;
-    this.replset.emit('joined', "arbiter", master, server);
-  }
-}
-
-ReplSetState.prototype.contains = function(host) {
-  return this.addresses[host] != null;
-}
-
-ReplSetState.prototype.isPrimary = function(server) {
-  return this.master && this.master.name == server.name;
-}
-
-ReplSetState.prototype.isSecondary = function(server) {
-  return this.secondaries[server.name] != null;
-}
-
-exports.ReplSetState = ReplSetState;

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js
----------------------------------------------------------------------
diff --git a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js b/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js
deleted file mode 100644
index 15a3a88..0000000
--- a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js
+++ /dev/null
@@ -1,333 +0,0 @@
-var Server = require("../../server").Server
-  , format = require('util').format;
-
-// The ping strategy uses pings each server and records the
-// elapsed time for the server so it can pick a server based on lowest
-// return time for the db command {ping:true}
-var PingStrategy = exports.PingStrategy = function(replicaset, secondaryAcceptableLatencyMS) {
-  this.replicaset = replicaset;
-  this.secondaryAcceptableLatencyMS = secondaryAcceptableLatencyMS;
-  this.state = 'disconnected';
-  this.pingInterval = 5000;
-  // Class instance
-  this.Db = require("../../../db").Db;
-  // Active db connections
-  this.dbs = {};
-  // Current server index
-  this.index = 0;
-  // Logger api
-  this.Logger = null;
-}
-
-// Starts any needed code
-PingStrategy.prototype.start = function(callback) {
-  // already running?
-  if ('connected' == this.state) return;
-
-  this.state = 'connected';
-
-  // Start ping server
-  this._pingServer(callback);
-}
-
-// Stops and kills any processes running
-PingStrategy.prototype.stop = function(callback) {
-  // Stop the ping process
-  this.state = 'disconnected';
-
-  // Stop all the server instances
-  for(var key in this.dbs) {
-    this.dbs[key].close();
-  }
-
-  // optional callback
-  callback && callback(null, null);
-}
-
-PingStrategy.prototype.checkoutConnection = function(tags, secondaryCandidates) {
-  // Servers are picked based on the lowest ping time and then servers that lower than that + secondaryAcceptableLatencyMS
-  // Create a list of candidat servers, containing the primary if available
-  var candidateServers = [];
-  var self = this;
-
-  // If we have not provided a list of candidate servers use the default setup
-  if(!Array.isArray(secondaryCandidates)) {
-    candidateServers = this.replicaset._state.master != null ? [this.replicaset._state.master] : [];
-    // Add all the secondaries
-    var keys = Object.keys(this.replicaset._state.secondaries);
-    for(var i = 0; i < keys.length; i++) {
-      candidateServers.push(this.replicaset._state.secondaries[keys[i]])
-    }
-  } else {
-    candidateServers = secondaryCandidates;
-  }
-
-  // Final list of eligable server
-  var finalCandidates = [];
-
-  // If we have tags filter by tags
-  if(tags != null && typeof tags == 'object') {
-    // If we have an array or single tag selection
-    var tagObjects = Array.isArray(tags) ? tags : [tags];
-    // Iterate over all tags until we find a candidate server
-    for(var _i = 0; _i < tagObjects.length; _i++) {
-      // Grab a tag object
-      var tagObject = tagObjects[_i];
-      // Matching keys
-      var matchingKeys = Object.keys(tagObject);
-      // Remove any that are not tagged correctly
-      for(var i = 0; i < candidateServers.length; i++) {
-        var server = candidateServers[i];
-        // If we have tags match
-        if(server.tags != null) {
-          var matching = true;
-
-          // Ensure we have all the values
-          for(var j = 0; j < matchingKeys.length; j++) {
-            if(server.tags[matchingKeys[j]] != tagObject[matchingKeys[j]]) {
-              matching = false;
-              break;
-            }
-          }
-
-          // If we have a match add it to the list of matching servers
-          if(matching) {
-            finalCandidates.push(server);
-          }
-        }
-      }
-    }
-  } else {
-    // Final array candidates
-    var finalCandidates = candidateServers;
-  }
-
-  // Sort by ping time
-  finalCandidates.sort(function(a, b) {
-    return a.runtimeStats['pingMs'] > b.runtimeStats['pingMs'];
-  });
-
-  if(0 === finalCandidates.length)
-    return new Error("No replica set members available for query");
-
-  // find lowest server with a ping time
-  var lowest = finalCandidates.filter(function (server) {
-    return undefined != server.runtimeStats.pingMs;
-  })[0];
-
-  if(!lowest) {
-    lowest = finalCandidates[0];
-  }
-
-  // convert to integer
-  var lowestPing = lowest.runtimeStats.pingMs | 0;
-  
-  // determine acceptable latency
-  var acceptable = lowestPing + this.secondaryAcceptableLatencyMS;
-
-  // remove any server responding slower than acceptable
-  var len = finalCandidates.length;
-  while(len--) {
-    if(finalCandidates[len].runtimeStats['pingMs'] > acceptable) {
-      finalCandidates.splice(len, 1);
-    }
-  }
-
-  if(self.logger && self.logger.debug) {    
-    self.logger.debug("Ping strategy selection order for tags", tags);
-    finalCandidates.forEach(function(c) {
-      self.logger.debug(format("%s:%s = %s ms", c.host, c.port, c.runtimeStats['pingMs']), null);
-    })    
-  }
-
-  // If no candidates available return an error
-  if(finalCandidates.length == 0)
-    return new Error("No replica set members available for query");
-
-  // Ensure no we don't overflow
-  this.index = this.index % finalCandidates.length
-  // Pick a random acceptable server  
-  var connection = finalCandidates[this.index].checkoutReader();
-  // Point to next candidate (round robin style)
-  this.index = this.index + 1;
-
-  if(self.logger && self.logger.debug) {    
-    if(connection)
-      self.logger.debug("picked server %s:%s", connection.socketOptions.host, connection.socketOptions.port);
-  }
-
-  return connection;
-}
-
-PingStrategy.prototype._pingServer = function(callback) {
-  var self = this;
-
-  // Ping server function
-  var pingFunction = function() {
-    // Our state changed to disconnected or destroyed return
-    if(self.state == 'disconnected' || self.state == 'destroyed') return;
-    // If the replicaset is destroyed return
-    if(self.replicaset.isDestroyed() || self.replicaset._serverState == 'disconnected') return
-
-    // Create a list of all servers we can send the ismaster command to
-    var allServers = self.replicaset._state.master != null ? [self.replicaset._state.master] : [];
-
-    // Secondary keys
-    var keys = Object.keys(self.replicaset._state.secondaries);
-    // Add all secondaries
-    for(var i = 0; i < keys.length; i++) {
-      allServers.push(self.replicaset._state.secondaries[keys[i]]);
-    }
-
-    // Number of server entries
-    var numberOfEntries = allServers.length;
-
-    // We got keys
-    for(var i = 0; i < allServers.length; i++) {
-
-      // We got a server instance
-      var server = allServers[i];
-
-      // Create a new server object, avoid using internal connections as they might
-      // be in an illegal state
-      new function(serverInstance) {
-        var _db = self.dbs[serverInstance.host + ":" + serverInstance.port];
-        // If we have a db
-        if(_db != null) {
-          // Startup time of the command
-          var startTime = Date.now();
-
-          // Execute ping command in own scope
-          var _ping = function(__db, __serverInstance) {
-            // Execute ping on this connection
-            __db.executeDbCommand({ping:1}, {failFast:true}, function(err) {
-              if(err) {
-                delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port];
-                __db.close();
-                return done();
-              }
-
-              if(null != __serverInstance.runtimeStats && __serverInstance.isConnected()) {
-                __serverInstance.runtimeStats['pingMs'] = Date.now() - startTime;
-              }
-
-              __db.executeDbCommand({ismaster:1}, {failFast:true}, function(err, result) {
-                if(err) {
-                  delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port];
-                  __db.close();
-                  return done();
-                }
-
-                // Process the ismaster for the server
-                if(result && result.documents && self.replicaset.processIsMaster) {
-                  self.replicaset.processIsMaster(__serverInstance, result.documents[0]);
-                }
-
-                // Done with the pinging
-                done();
-              });
-            });            
-          };
-          // Ping
-          _ping(_db, serverInstance);
-        } else {
-          var connectTimeoutMS = self.replicaset.options.socketOptions 
-            ? self.replicaset.options.socketOptions.connectTimeoutMS : 0
-
-          // Create a new master connection
-          var _server = new Server(serverInstance.host, serverInstance.port, {
-            auto_reconnect: false,
-            returnIsMasterResults: true,
-            slaveOk: true,
-            poolSize: 1,
-            socketOptions: { connectTimeoutMS: connectTimeoutMS },
-            ssl: self.replicaset.options.ssl,
-            sslValidate: self.replicaset.options.sslValidate,
-            sslCA: self.replicaset.options.sslCA,
-            sslCert: self.replicaset.options.sslCert,
-            sslKey: self.replicaset.options.sslKey,
-            sslPass: self.replicaset.options.sslPass
-          });
-
-          // Create Db instance        
-          var _db = new self.Db('local', _server, { safe: true });
-          _db.on("close", function() {
-            delete self.dbs[this.serverConfig.host + ":" + this.serverConfig.port];
-          })
-
-          var _ping = function(__db, __serverInstance) {
-            if(self.state == 'disconnected') {
-              self.stop();
-              return;
-            }
-
-            __db.open(function(err, db) {  
-              if(self.state == 'disconnected' && __db != null) {
-                return __db.close();
-              }
-
-              if(err) {
-                delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port];
-                __db.close();
-                return done();
-              }
-
-              // Save instance
-              self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port] = __db;
-
-              // Startup time of the command
-              var startTime = Date.now();
-
-              // Execute ping on this connection
-              __db.executeDbCommand({ping:1}, {failFast:true}, function(err) {
-                if(err) {
-                  delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port];
-                  __db.close();
-                  return done();
-                }
-
-                if(null != __serverInstance.runtimeStats && __serverInstance.isConnected()) {
-                  __serverInstance.runtimeStats['pingMs'] = Date.now() - startTime;
-                }
-
-                __db.executeDbCommand({ismaster:1}, {failFast:true}, function(err, result) {
-                  if(err) {
-                    delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port];
-                    __db.close();
-                    return done();
-                  }
-    
-                  // Process the ismaster for the server
-                  if(result && result.documents && self.replicaset.processIsMaster) {
-                    self.replicaset.processIsMaster(__serverInstance, result.documents[0]);
-                  }
-
-                  // Done with the pinging
-                  done();
-                });
-              });
-            });            
-          };
-
-          // Ping the server
-          _ping(_db, serverInstance);
-        }
-
-        function done() {
-          // Adjust the number of checks
-          numberOfEntries--;
-
-          // If we are done with all results coming back trigger ping again
-          if(0 === numberOfEntries && 'connected' == self.state) {
-            setTimeout(pingFunction, self.pingInterval);
-          }
-        }
-      }(server);
-    }
-  }
-
-  // Start pingFunction
-  pingFunction();
-
-  callback && callback(null);
-}

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js
----------------------------------------------------------------------
diff --git a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js b/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js
deleted file mode 100644
index f9b8c46..0000000
--- a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// The Statistics strategy uses the measure of each end-start time for each
-// query executed against the db to calculate the mean, variance and standard deviation
-// and pick the server which the lowest mean and deviation
-var StatisticsStrategy = exports.StatisticsStrategy = function(replicaset) {
-  this.replicaset = replicaset;
-  // Logger api
-  this.Logger = null;  
-}
-
-// Starts any needed code
-StatisticsStrategy.prototype.start = function(callback) {
-  callback && callback(null, null);
-}
-
-StatisticsStrategy.prototype.stop = function(callback) {
-  callback && callback(null, null);
-}
-
-StatisticsStrategy.prototype.checkoutConnection = function(tags, secondaryCandidates) {
-  // Servers are picked based on the lowest ping time and then servers that lower than that + secondaryAcceptableLatencyMS
-  // Create a list of candidat servers, containing the primary if available
-  var candidateServers = [];
-
-  // If we have not provided a list of candidate servers use the default setup
-  if(!Array.isArray(secondaryCandidates)) {
-    candidateServers = this.replicaset._state.master != null ? [this.replicaset._state.master] : [];
-    // Add all the secondaries
-    var keys = Object.keys(this.replicaset._state.secondaries);
-    for(var i = 0; i < keys.length; i++) {
-      candidateServers.push(this.replicaset._state.secondaries[keys[i]])
-    }
-  } else {
-    candidateServers = secondaryCandidates;
-  }
-
-  // Final list of eligable server
-  var finalCandidates = [];
-
-  // If we have tags filter by tags
-  if(tags != null && typeof tags == 'object') {
-    // If we have an array or single tag selection
-    var tagObjects = Array.isArray(tags) ? tags : [tags];
-    // Iterate over all tags until we find a candidate server
-    for(var _i = 0; _i < tagObjects.length; _i++) {
-      // Grab a tag object
-      var tagObject = tagObjects[_i];
-      // Matching keys
-      var matchingKeys = Object.keys(tagObject);
-      // Remove any that are not tagged correctly
-      for(var i = 0; i < candidateServers.length; i++) {
-        var server = candidateServers[i];
-        // If we have tags match
-        if(server.tags != null) {
-          var matching = true;
-
-          // Ensure we have all the values
-          for(var j = 0; j < matchingKeys.length; j++) {
-            if(server.tags[matchingKeys[j]] != tagObject[matchingKeys[j]]) {
-              matching = false;
-              break;
-            }
-          }
-
-          // If we have a match add it to the list of matching servers
-          if(matching) {
-            finalCandidates.push(server);
-          }
-        }
-      }
-    }
-  } else {
-    // Final array candidates
-    var finalCandidates = candidateServers;
-  }
-
-  // If no candidates available return an error
-  if(finalCandidates.length == 0) return new Error("No replica set members available for query");
-  // Pick a random server
-  return finalCandidates[Math.round(Math.random(1000000) * (finalCandidates.length - 1))].checkoutReader();
-}

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server.js
----------------------------------------------------------------------
diff --git a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server.js b/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server.js
deleted file mode 100644
index 36a3bc0..0000000
--- a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server.js
+++ /dev/null
@@ -1,940 +0,0 @@
-var Connection = require('./connection').Connection,
-  ReadPreference = require('./read_preference').ReadPreference,
-  DbCommand = require('../commands/db_command').DbCommand,
-  MongoReply = require('../responses/mongo_reply').MongoReply,
-  ConnectionPool = require('./connection_pool').ConnectionPool,
-  EventEmitter = require('events').EventEmitter,
-  ServerCapabilities = require('./server_capabilities').ServerCapabilities,
-  Base = require('./base').Base,
-  format = require('util').format,
-  utils = require('../utils'),
-  timers = require('timers'),
-  inherits = require('util').inherits;
-
-// Set processor, setImmediate if 0.10 otherwise nextTick
-var processor = require('../utils').processor();
-
-/**
- * Class representing a single MongoDB Server connection
- *
- * Options
- *  - **readPreference** {String, default:null}, set's the read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST)
- *  - **ssl** {Boolean, default:false}, use ssl connection (needs to have a mongod server with ssl support)
- *  - **sslValidate** {Boolean, default:false}, validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslCA** {Array, default:null}, Array of valid certificates either as Buffers or Strings (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslCert** {Buffer/String, default:null}, String or buffer containing the certificate we wish to present (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslKey** {Buffer/String, default:null}, String or buffer containing the certificate private key we wish to present (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **sslPass** {Buffer/String, default:null}, String or buffer containing the certificate password (needs to have a mongod server with ssl support, 2.4 or higher)
- *  - **poolSize** {Number, default:5}, number of connections in the connection pool, set to 5 as default for legacy reasons.
- *  - **socketOptions** {Object, default:null}, an object containing socket options to use (noDelay:(boolean), keepAlive:(number), connectTimeoutMS:(number), socketTimeoutMS:(number))
- *  - **logger** {Object, default:null}, an object representing a logger that you want to use, needs to support functions debug, log, error **({error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}})**.
- *  - **auto_reconnect** {Boolean, default:false}, reconnect on error.
- *  - **disableDriverBSONSizeCheck** {Boolean, default:false}, force the server to error if the BSON message is to big
- *
- * @class Represents a Server connection.
- * @param {String} host the server host
- * @param {Number} port the server port
- * @param {Object} [options] optional options for insert command
- */
-function Server(host, port, options) {
-  // Set up Server instance
-  if(!(this instanceof Server)) return new Server(host, port, options);
-
-  // Set up event emitter
-  Base.call(this);
-
-  // Ensure correct values
-  if(port != null && typeof port == 'object') {
-    options = port;
-    port = Connection.DEFAULT_PORT;
-  }
-
-  var self = this;
-  this.host = host;
-  this.port = port;
-  this.options = options == null ? {} : options;
-  this.internalConnection;
-  this.internalMaster = false;
-  this.connected = false;  
-  this.poolSize = this.options.poolSize == null ? 5 : this.options.poolSize;
-  this.disableDriverBSONSizeCheck = this.options.disableDriverBSONSizeCheck != null ? this.options.disableDriverBSONSizeCheck : false;
-  this._used = false;
-  this.replicasetInstance = null;
-
-  // Emit open setup
-  this.emitOpen = this.options.emitOpen || true;
-  // Set ssl as connection method
-  this.ssl = this.options.ssl == null ? false : this.options.ssl;
-  // Set ssl validation
-  this.sslValidate = this.options.sslValidate == null ? false : this.options.sslValidate;
-  // Set the ssl certificate authority (array of Buffer/String keys)
-  this.sslCA = Array.isArray(this.options.sslCA) ? this.options.sslCA : null;
-  // Certificate to present to the server
-  this.sslCert = this.options.sslCert;
-  // Certificate private key if in separate file
-  this.sslKey = this.options.sslKey;
-  // Password to unlock private key
-  this.sslPass = this.options.sslPass;
-  // Server capabilities
-  this.serverCapabilities = null;
-  // Set server name
-  this.name = format("%s:%s", host, port);
-
-  // Ensure we are not trying to validate with no list of certificates
-  if(this.sslValidate && (!Array.isArray(this.sslCA) || this.sslCA.length == 0)) {
-    throw new Error("The driver expects an Array of CA certificates in the sslCA parameter when enabling sslValidate");
-  }
-
-  // Get the readPreference
-  var readPreference = this.options['readPreference'];
-  // If readPreference is an object get the mode string
-  var validateReadPreference = readPreference != null && typeof readPreference == 'object' ? readPreference.mode : readPreference;
-  // Read preference setting
-  if(validateReadPreference != null) {
-    if(validateReadPreference != ReadPreference.PRIMARY && validateReadPreference != ReadPreference.SECONDARY && validateReadPreference != ReadPreference.NEAREST
-      && validateReadPreference != ReadPreference.SECONDARY_PREFERRED && validateReadPreference != ReadPreference.PRIMARY_PREFERRED) {
-        throw new Error("Illegal readPreference mode specified, " + validateReadPreference);
-    }
-
-    // Set read Preference
-    this._readPreference = readPreference;
-  } else {
-    this._readPreference = null;
-  }
-
-  // Contains the isMaster information returned from the server
-  this.isMasterDoc;
-
-  // Set default connection pool options
-  this.socketOptions = this.options.socketOptions != null ? this.options.socketOptions : {};
-  if(this.disableDriverBSONSizeCheck) this.socketOptions.disableDriverBSONSizeCheck = this.disableDriverBSONSizeCheck;
-
-  // Set ssl up if it's defined
-  if(this.ssl) {
-    this.socketOptions.ssl = true;
-    // Set ssl validation
-    this.socketOptions.sslValidate = this.sslValidate == null ? false : this.sslValidate;
-    // Set the ssl certificate authority (array of Buffer/String keys)
-    this.socketOptions.sslCA = Array.isArray(this.sslCA) ? this.sslCA : null;
-    // Set certificate to present
-    this.socketOptions.sslCert = this.sslCert;
-    // Set certificate to present
-    this.socketOptions.sslKey = this.sslKey;
-    // Password to unlock private key
-    this.socketOptions.sslPass = this.sslPass;
-  }
-
-  // Set up logger if any set
-  this.logger = this.options.logger != null
-    && (typeof this.options.logger.debug == 'function')
-    && (typeof this.options.logger.error == 'function')
-    && (typeof this.options.logger.log == 'function')
-      ? this.options.logger : {error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}};
-
-  // Just keeps list of events we allow
-  this.eventHandlers = {error:[], parseError:[], poolReady:[], message:[], close:[], timeout:[]};
-  // Internal state of server connection
-  this._serverState = 'disconnected';
-  // Contains state information about server connection
-  this._state = {'runtimeStats': {'queryStats':new RunningStats()}};
-  // Do we record server stats or not
-  this.recordQueryStats = false;
-
-  // Allow setting the socketTimeoutMS on all connections
-  // to work around issues such as secondaries blocking due to compaction
-  utils.setSocketTimeoutProperty(this, this.socketOptions);
-};
-
-/**
- * @ignore
- */
-inherits(Server, Base);
-
-//
-//  Deprecated, USE ReadPreferences class
-//
-Server.READ_PRIMARY = ReadPreference.PRIMARY;
-Server.READ_SECONDARY = ReadPreference.SECONDARY_PREFERRED;
-Server.READ_SECONDARY_ONLY = ReadPreference.SECONDARY;
-
-/**
- * Always ourselves
- * @ignore
- */
-Server.prototype.setReadPreference = function(readPreference) {
-  this._readPreference = readPreference;  
-}
-
-/**
- * @ignore
- */
-Server.prototype.isMongos = function() {
-  return this.isMasterDoc != null && this.isMasterDoc['msg'] == "isdbgrid" ? true : false;
-}
-
-/**
- * @ignore
- */
-Server.prototype._isUsed = function() {
-  return this._used;
-}
-
-/**
- * @ignore
- */
-Server.prototype.close = function(callback) {
-  // Set server status as disconnected
-  this._serverState = 'destroyed';
-  // Remove all local listeners
-  this.removeAllListeners();
-
-  if(this.connectionPool != null) {
-    // Remove all the listeners on the pool so it does not fire messages all over the place
-    this.connectionPool.removeAllEventListeners();
-    // Close the connection if it's open
-    this.connectionPool.stop(true);
-  }
-
-  // Emit close event
-  if(this.db && !this.isSetMember()) {
-    var self = this;
-    processor(function() {
-      self._emitAcrossAllDbInstances(self, null, "close", null, null, true)
-    })
-
-    // Flush out any remaining call handlers
-    self._flushAllCallHandlers(utils.toError("Connection Closed By Application"));
-  }
-
-  // Peform callback if present
-  if(typeof callback === 'function') callback(null);
-};
-
-Server.prototype.isDestroyed = function() {
-  return this._serverState == 'destroyed';
-}
-
-/**
- * @ignore
- */
-Server.prototype.isConnected = function() {
-  return this.connectionPool != null && this.connectionPool.isConnected();
-}
-
-/**
- * @ignore
- */
-Server.prototype.canWrite = Server.prototype.isConnected;
-Server.prototype.canRead = Server.prototype.isConnected;
-
-Server.prototype.isAutoReconnect = function() {
-  if(this.isSetMember()) return false;
-  return this.options.auto_reconnect != null ? this.options.auto_reconnect : true;
-}
-
-/**
- * @ignore
- */
-Server.prototype.allServerInstances = function() {
-  return [this];
-}
-
-/**
- * @ignore
- */
-Server.prototype.isSetMember = function() {
-  return this.replicasetInstance != null || this.mongosInstance != null;
-}
-
-/**
- * Assigns a replica set to this `server`.
- *
- * @param {ReplSet} replset
- * @ignore
- */
-Server.prototype.assignReplicaSet = function (replset) {
-  this.replicasetInstance = replset;
-  this.inheritReplSetOptionsFrom(replset);
-  this.enableRecordQueryStats(replset.recordQueryStats);
-}
-
-/**
- * Takes needed options from `replset` and overwrites
- * our own options.
- *
- * @param {ReplSet} replset
- * @ignore
- */
-Server.prototype.inheritReplSetOptionsFrom = function (replset) {
-  this.socketOptions = {};
-  this.socketOptions.connectTimeoutMS = replset.options.socketOptions.connectTimeoutMS || 30000;
-
-  if(replset.options.ssl) {
-    // Set ssl on
-    this.socketOptions.ssl = true;
-    // Set ssl validation
-    this.socketOptions.sslValidate = replset.options.sslValidate == null ? false : replset.options.sslValidate;
-    // Set the ssl certificate authority (array of Buffer/String keys)
-    this.socketOptions.sslCA = Array.isArray(replset.options.sslCA) ? replset.options.sslCA : null;
-    // Set certificate to present
-    this.socketOptions.sslCert = replset.options.sslCert;
-    // Set certificate to present
-    this.socketOptions.sslKey = replset.options.sslKey;
-    // Password to unlock private key
-    this.socketOptions.sslPass = replset.options.sslPass;
-  }
-
-  // If a socket option object exists clone it
-  if(utils.isObject(replset.options.socketOptions)) {
-    var keys = Object.keys(replset.options.socketOptions);
-    for(var i = 0; i < keys.length; i++)
-      this.socketOptions[keys[i]] = replset.options.socketOptions[keys[i]];
-  }
-}
-
-/**
- * Opens this server connection.
- *
- * @ignore
- */
-Server.prototype.connect = function(dbInstance, options, callback) {
-  if('function' === typeof options) callback = options, options = {};
-  if(options == null) options = {};
-  if(!('function' === typeof callback)) callback = null;
-  var self = this;
-  // Save the options
-  this.options = options;
-
-  // Currently needed to work around problems with multiple connections in a pool with ssl
-  // TODO fix if possible
-  if(this.ssl == true) {
-    // Set up socket options for ssl
-    this.socketOptions.ssl = true;
-    // Set ssl validation
-    this.socketOptions.sslValidate = this.sslValidate == null ? false : this.sslValidate;
-    // Set the ssl certificate authority (array of Buffer/String keys)
-    this.socketOptions.sslCA = Array.isArray(this.sslCA) ? this.sslCA : null;
-    // Set certificate to present
-    this.socketOptions.sslCert = this.sslCert;
-    // Set certificate to present
-    this.socketOptions.sslKey = this.sslKey;
-    // Password to unlock private key
-    this.socketOptions.sslPass = this.sslPass;
-  }
-
-  // Let's connect
-  var server = this;
-  // Let's us override the main receiver of events
-  var eventReceiver = options.eventReceiver != null ? options.eventReceiver : this;
-  // Save reference to dbInstance
-  this.db = dbInstance;  // `db` property matches ReplSet and Mongos
-  this.dbInstances = [dbInstance];
-
-  // Force connection pool if there is one
-  if(server.connectionPool) server.connectionPool.stop();
-  // Set server state to connecting
-  this._serverState = 'connecting';
-
-  if(server.connectionPool != null) {
-    // Remove all the listeners on the pool so it does not fire messages all over the place
-    this.connectionPool.removeAllEventListeners();
-    // Close the connection if it's open
-    this.connectionPool.stop(true);    
-  }
-
-  this.connectionPool = new ConnectionPool(this.host, this.port, this.poolSize, dbInstance.bson, this.socketOptions);
-  var connectionPool = this.connectionPool;
-  // If ssl is not enabled don't wait between the pool connections
-  if(this.ssl == null || !this.ssl) connectionPool._timeToWait = null;
-  // Set logger on pool
-  connectionPool.logger = this.logger;
-  connectionPool.bson = dbInstance.bson;
-
-  // Set basic parameters passed in
-  var returnIsMasterResults = options.returnIsMasterResults == null ? false : options.returnIsMasterResults;
-
-  // Create a default connect handler, overriden when using replicasets
-  var connectCallback = function(_server) {
-    return function(err, reply) {  
-      // ensure no callbacks get called twice
-      var internalCallback = callback;
-      callback = null;
-      
-      // Assign the server
-      _server = _server != null ? _server : server;
-      
-      // If something close down the connection and removed the callback before
-      // proxy killed connection etc, ignore the erorr as close event was isssued
-      if(err != null && internalCallback == null) return;
-      // Internal callback
-      if(err != null) return internalCallback(err, null, _server);
-      _server.master = reply.documents[0].ismaster == 1 ? true : false;
-      _server.connectionPool.setMaxBsonSize(reply.documents[0].maxBsonObjectSize);
-      _server.connectionPool.setMaxMessageSizeBytes(reply.documents[0].maxMessageSizeBytes);
-      // Set server state to connEcted
-      _server._serverState = 'connected';
-      // Set server as connected
-      _server.connected = true;
-      // Save document returned so we can query it
-      _server.isMasterDoc = reply.documents[0];
-      
-      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);        
-      }
-
-      // Set server capabilities
-      server.serverCapabilities = new ServerCapabilities(_server.isMasterDoc);      
-
-      // If we have it set to returnIsMasterResults
-      if(returnIsMasterResults) {
-        internalCallback(null, reply, _server);
-      } else {
-        internalCallback(null, dbInstance, _server);
-      }
-    }
-  };
-
-  // Let's us override the main connect callback
-  var connectHandler = options.connectHandler == null ? connectCallback(server) : options.connectHandler;
-
-  // Set up on connect method
-  connectionPool.on("poolReady", function() {
-    // Create db command and Add the callback to the list of callbacks by the request id (mapping outgoing messages to correct callbacks)
-    var db_command = DbCommand.NcreateIsMasterCommand(dbInstance, dbInstance.databaseName);
-    // Check out a reader from the pool
-    var connection = connectionPool.checkoutConnection();
-    // Register handler for messages
-    server._registerHandler(db_command, false, connection, connectHandler);
-    // Write the command out
-    connection.write(db_command);
-  })
-
-  // Set up item connection
-  connectionPool.on("message", function(message) {
-    // Attempt to parse the message
-    try {
-      // Create a new mongo reply
-      var mongoReply = new MongoReply()
-      // Parse the header
-      mongoReply.parseHeader(message, connectionPool.bson)
-
-      // If message size is not the same as the buffer size
-      // something went terribly wrong somewhere
-      if(mongoReply.messageLength != message.length) {
-        // Emit the error
-        if(eventReceiver.listeners("error") && eventReceiver.listeners("error").length > 0) eventReceiver.emit("error", new Error("bson length is different from message length"), server);
-        // Remove all listeners
-        server.removeAllListeners();
-      } else {
-        var startDate = new Date().getTime();
-
-        // Callback instance
-        var callbackInfo = server._findHandler(mongoReply.responseTo.toString());
-
-        // The command executed another request, log the handler again under that request id
-        if(mongoReply.requestId > 0 && mongoReply.cursorId.toString() != "0" 
-          && callbackInfo && callbackInfo.info && callbackInfo.info.exhaust) {
-            server._reRegisterHandler(mongoReply.requestId, callbackInfo);
-        }
-        // Parse the body
-        mongoReply.parseBody(message, connectionPool.bson, callbackInfo.info.raw, function(err) {
-          if(err != null) {
-            // If pool connection is already closed
-            if(server._serverState === 'disconnected') return;
-            // Set server state to disconnected
-            server._serverState = 'disconnected';
-            // Remove all listeners and close the connection pool
-            server.removeAllListeners();
-            connectionPool.stop(true);
-
-            // If we have a callback return the error
-            if(typeof callback === 'function') {
-              // ensure no callbacks get called twice
-              var internalCallback = callback;
-              callback = null;
-              // Perform callback
-              internalCallback(err, null, server);
-            } else if(server.isSetMember()) {
-              if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", utils.toError(err), server);
-            } else {
-              if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", utils.toError(err), server);
-            }
-
-            // If we are a single server connection fire errors correctly
-            if(!server.isSetMember()) {
-              // Fire all callback errors
-              server.__executeAllCallbacksWithError(err);
-              // Emit error
-              server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true);
-            }
-            // Short cut
-            return;
-          }
-
-          // Let's record the stats info if it's enabled
-          if(server.recordQueryStats == true && server._state['runtimeStats'] != null
-            && server._state.runtimeStats['queryStats'] instanceof RunningStats) {
-            // Add data point to the running statistics object
-            server._state.runtimeStats.queryStats.push(new Date().getTime() - callbackInfo.info.start);
-          }
-
-          // Dispatch the call
-          server._callHandler(mongoReply.responseTo, mongoReply, null);
-
-          // If we have an error about the server not being master or primary
-          if((mongoReply.responseFlag & (1 << 1)) != 0
-            && mongoReply.documents[0].code
-            && mongoReply.documents[0].code == 13436) {
-              server.close();
-          }
-        });
-      }
-    } catch (err) {
-      // Throw error in next tick
-      processor(function() {
-        throw err;
-      })
-    }
-  });
-
-  // Handle timeout
-  connectionPool.on("timeout", function(err) {
-    // If pool connection is already closed
-    if(server._serverState === 'disconnected' 
-      || server._serverState === 'destroyed') return;
-    // Set server state to disconnected
-    server._serverState = 'disconnected';
-    // If we have a callback return the error
-    if(typeof callback === 'function') {
-      // ensure no callbacks get called twice
-      var internalCallback = callback;
-      callback = null;
-      // Perform callback
-      internalCallback(err, null, server);
-    } else if(server.isSetMember()) {
-      if(server.listeners("timeout") && server.listeners("timeout").length > 0) server.emit("timeout", err, server);
-    } else {
-      if(eventReceiver.listeners("timeout") && eventReceiver.listeners("timeout").length > 0) eventReceiver.emit("timeout", err, server);
-    }
-
-    // If we are a single server connection fire errors correctly
-    if(!server.isSetMember()) {
-      // Fire all callback errors
-      server.__executeAllCallbacksWithError(err);
-      // Emit error
-      server._emitAcrossAllDbInstances(server, eventReceiver, "timeout", err, server, true);
-    }
-
-    // If we have autoConnect enabled let's fire up an attempt to reconnect
-    if(server.isAutoReconnect() 
-      && !server.isSetMember()
-      && (server._serverState != 'destroyed')
-      && !server._reconnectInProgreess) {
-      // Set the number of retries
-      server._reconnect_retries = server.db.numberOfRetries;
-      // Attempt reconnect
-      server._reconnectInProgreess = true;
-      setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds);
-    }    
-  });
-
-  // Handle errors
-  connectionPool.on("error", function(message, connection, error_options) {
-    // If pool connection is already closed
-    if(server._serverState === 'disconnected' 
-      || server._serverState === 'destroyed') return;
-    
-    // Set server state to disconnected
-    server._serverState = 'disconnected';
-    // Error message
-    var error_message = new Error(message && message.err ? message.err : message);
-    // Error message coming from ssl
-    if(error_options && error_options.ssl) error_message.ssl = true;
-
-    // If we have a callback return the error
-    if(typeof callback === 'function') {
-      // ensure no callbacks get called twice
-      var internalCallback = callback;
-      callback = null;
-      // Perform callback
-      internalCallback(error_message, null, server);
-    } else if(server.isSetMember()) {
-      if(server.listeners("error") && server.listeners("error").length > 0) server.emit("error", error_message, server);
-    } else {
-      if(eventReceiver.listeners("error") && eventReceiver.listeners("error").length > 0) eventReceiver.emit("error", error_message, server);
-    }
-
-    // If we are a single server connection fire errors correctly
-    if(!server.isSetMember()) {
-      // Fire all callback errors
-      server.__executeAllCallbacksWithError(error_message);
-      // Emit error
-      server._emitAcrossAllDbInstances(server, eventReceiver, "error", error_message, server, true);
-    }
-
-    // If we have autoConnect enabled let's fire up an attempt to reconnect
-    if(server.isAutoReconnect() 
-      && !server.isSetMember()
-      && (server._serverState != 'destroyed')
-      && !server._reconnectInProgreess) {
-
-      // Set the number of retries
-      server._reconnect_retries = server.db.numberOfRetries;
-      // Attempt reconnect
-      server._reconnectInProgreess = true;
-      setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds);
-    }    
-  });
-
-  // Handle close events
-  connectionPool.on("close", function() {
-    // If pool connection is already closed
-    if(server._serverState === 'disconnected' 
-      || server._serverState === 'destroyed') return;
-    // Set server state to disconnected
-    server._serverState = 'disconnected';
-    // If we have a callback return the error
-    if(typeof callback == 'function') {
-      // ensure no callbacks get called twice
-      var internalCallback = callback;
-      callback = null;
-      // Perform callback
-      internalCallback(new Error("connection closed"), null, server);
-    } else if(server.isSetMember()) {
-      if(server.listeners("close") && server.listeners("close").length > 0) server.emit("close", new Error("connection closed"), server);
-    } else {
-      if(eventReceiver.listeners("close") && eventReceiver.listeners("close").length > 0) eventReceiver.emit("close", new Error("connection closed"), server);
-    }
-
-    // If we are a single server connection fire errors correctly
-    if(!server.isSetMember()) {
-      // Fire all callback errors
-      server.__executeAllCallbacksWithError(new Error("connection closed"));
-      // Emit error
-      server._emitAcrossAllDbInstances(server, eventReceiver, "close", server, null, true);
-    }
-
-    // If we have autoConnect enabled let's fire up an attempt to reconnect
-    if(server.isAutoReconnect() 
-      && !server.isSetMember()
-      && (server._serverState != 'destroyed')
-      && !server._reconnectInProgreess) {
-
-      // Set the number of retries
-      server._reconnect_retries = server.db.numberOfRetries;  
-      // Attempt reconnect
-      server._reconnectInProgreess = true;
-      setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds);
-    }    
-  });
-
-  /**
-   * @ignore
-   */
-  var __attemptReconnect = function(server) {
-    return function() {
-      // Attempt reconnect
-      server.connect(server.db, server.options, function(err, result) {
-        server._reconnect_retries = server._reconnect_retries - 1;
-
-        if(err) {
-          // Retry
-          if(server._reconnect_retries == 0 || server._serverState == 'destroyed') {
-            server._serverState = 'connected';
-            server._reconnectInProgreess = false
-            // Fire all callback errors
-            return server.__executeAllCallbacksWithError(new Error("failed to reconnect to server"));
-          } else {
-            return setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds);
-          }
-        } else {
-          // Set as authenticating (isConnected will be false)
-          server._serverState = 'authenticating';
-          // Apply any auths, we don't try to catch any errors here
-          // as there are nowhere to simply propagate them to
-          self._apply_auths(server.db, function(err, result) {            
-            server._serverState = 'connected';
-            server._reconnectInProgreess = false;
-            server._commandsStore.execute_queries();
-            server._commandsStore.execute_writes();
-          });
-        } 
-      });      
-    }
-  }
-
-  // If we have a parser error we are in an unknown state, close everything and emit
-  // error
-  connectionPool.on("parseError", function(err) {
-    // If pool connection is already closed
-    if(server._serverState === 'disconnected' 
-      || server._serverState === 'destroyed') return;
-    // Set server state to disconnected
-    server._serverState = 'disconnected';
-    // If we have a callback return the error
-    if(typeof callback === 'function') {
-      // ensure no callbacks get called twice
-      var internalCallback = callback;
-      callback = null;
-      // Perform callback
-      internalCallback(utils.toError(err), null, server);
-    } else if(server.isSetMember()) {
-      if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", utils.toError(err), server);
-    } else {
-      if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", utils.toError(err), server);
-    }
-
-    // If we are a single server connection fire errors correctly
-    if(!server.isSetMember()) {
-      // Fire all callback errors
-      server.__executeAllCallbacksWithError(utils.toError(err));
-      // Emit error
-      server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true);
-    }
-  });
-
-  // Boot up connection poole, pass in a locator of callbacks
-  connectionPool.start();
-}
-
-/**
- * @ignore
- */
-Server.prototype.allRawConnections = function() {
-  return this.connectionPool != null ? this.connectionPool.getAllConnections() : [];
-}
-
-/**
- * Check if a writer can be provided
- * @ignore
- */
-var canCheckoutWriter = function(self, read) {
-  // We cannot write to an arbiter or secondary server
-  if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true) {
-    return new Error("Cannot write to an arbiter");
-  } if(self.isMasterDoc && self.isMasterDoc['secondary'] == true) {
-    return new Error("Cannot write to a secondary");
-  } else if(read == true && self._readPreference == ReadPreference.SECONDARY && self.isMasterDoc && self.isMasterDoc['ismaster'] == true) {
-    return new Error("Cannot read from primary when secondary only specified");
-  } else if(!self.isMasterDoc) {
-    return new Error("Cannot determine state of server");
-  }
-
-  // Return no error
-  return null;
-}
-
-/**
- * @ignore
- */
-Server.prototype.checkoutWriter = function(read) {
-  if(read == true) return this.connectionPool.checkoutConnection();
-  // Check if are allowed to do a checkout (if we try to use an arbiter f.ex)
-  var result = canCheckoutWriter(this, read);
-  // If the result is null check out a writer
-  if(result == null && this.connectionPool != null) {
-    var connection = this.connectionPool.checkoutConnection();
-    // Add server capabilities to the connection
-    if(connection)
-      connection.serverCapabilities = this.serverCapabilities;
-    return connection;
-  } else if(result == null) {
-    return null;
-  } else {
-    return result;
-  }
-}
-
-/**
- * Check if a reader can be provided
- * @ignore
- */
-var canCheckoutReader = function(self) {
-  // We cannot write to an arbiter or secondary server
-  if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true) {
-    return new Error("Cannot write to an arbiter");
-  } else if(self._readPreference != null) {
-    // If the read preference is Primary and the instance is not a master return an error
-    if((self._readPreference == ReadPreference.PRIMARY) && self.isMasterDoc && self.isMasterDoc['ismaster'] != true) {
-      return new Error("Read preference is Server.PRIMARY and server is not master");
-    } else if(self._readPreference == ReadPreference.SECONDARY && self.isMasterDoc && self.isMasterDoc['ismaster'] == true) {
-      return new Error("Cannot read from primary when secondary only specified");
-    }
-  } else if(!self.isMasterDoc) {
-    return new Error("Cannot determine state of server");
-  }
-
-  // Return no error
-  return null;
-}
-
-/**
- * @ignore
- */
-Server.prototype.checkoutReader = function(read) {
-  // Check if are allowed to do a checkout (if we try to use an arbiter f.ex)
-  var result = canCheckoutReader(this);
-  // If the result is null check out a writer
-  if(result == null && this.connectionPool != null) {
-    var connection = this.connectionPool.checkoutConnection();
-    // Add server capabilities to the connection
-    if(connection)
-      connection.serverCapabilities = this.serverCapabilities;
-    return connection;
-  } else if(result == null) {
-    return null;
-  } else {
-    return result;
-  }
-}
-
-/**
- * @ignore
- */
-Server.prototype.enableRecordQueryStats = function(enable) {
-  this.recordQueryStats = enable;
-}
-
-/**
- * Internal statistics object used for calculating average and standard devitation on
- * running queries
- * @ignore
- */
-var RunningStats = function() {
-  var self = this;
-  this.m_n = 0;
-  this.m_oldM = 0.0;
-  this.m_oldS = 0.0;
-  this.m_newM = 0.0;
-  this.m_newS = 0.0;
-
-  // Define getters
-  Object.defineProperty(this, "numDataValues", { enumerable: true
-    , get: function () { return this.m_n; }
-  });
-
-  Object.defineProperty(this, "mean", { enumerable: true
-    , get: function () { return (this.m_n > 0) ? this.m_newM : 0.0; }
-  });
-
-  Object.defineProperty(this, "variance", { enumerable: true
-    , get: function () { return ((this.m_n > 1) ? this.m_newS/(this.m_n - 1) : 0.0); }
-  });
-
-  Object.defineProperty(this, "standardDeviation", { enumerable: true
-    , get: function () { return Math.sqrt(this.variance); }
-  });
-
-  Object.defineProperty(this, "sScore", { enumerable: true
-    , get: function () {
-      var bottom = this.mean + this.standardDeviation;
-      if(bottom == 0) return 0;
-      return ((2 * this.mean * this.standardDeviation)/(bottom));
-    }
-  });
-}
-
-/**
- * @ignore
- */
-RunningStats.prototype.push = function(x) {
-  // Update the number of samples
-  this.m_n = this.m_n + 1;
-  // See Knuth TAOCP vol 2, 3rd edition, page 232
-  if(this.m_n == 1) {
-    this.m_oldM = this.m_newM = x;
-    this.m_oldS = 0.0;
-  } else {
-    this.m_newM = this.m_oldM + (x - this.m_oldM) / this.m_n;
-    this.m_newS = this.m_oldS + (x - this.m_oldM) * (x - this.m_newM);
-
-    // set up for next iteration
-    this.m_oldM = this.m_newM;
-    this.m_oldS = this.m_newS;
-  }
-}
-
-/**
- * @ignore
- */
-Object.defineProperty(Server.prototype, "autoReconnect", { enumerable: true
-  , get: function () {
-      return this.options['auto_reconnect'] == null ? false : this.options['auto_reconnect'];
-    }
-});
-
-/**
- * @ignore
- */
-Object.defineProperty(Server.prototype, "connection", { enumerable: true
-  , get: function () {
-      return this.internalConnection;
-    }
-  , set: function(connection) {
-      this.internalConnection = connection;
-    }
-});
-
-/**
- * @ignore
- */
-Object.defineProperty(Server.prototype, "master", { enumerable: true
-  , get: function () {
-      return this.internalMaster;
-    }
-  , set: function(value) {
-      this.internalMaster = value;
-    }
-});
-
-/**
- * @ignore
- */
-Object.defineProperty(Server.prototype, "primary", { enumerable: true
-  , get: function () {
-      return this;
-    }
-});
-
-/**
- * Getter for query Stats
- * @ignore
- */
-Object.defineProperty(Server.prototype, "queryStats", { enumerable: true
-  , get: function () {
-      return this._state.runtimeStats.queryStats;
-    }
-});
-
-/**
- * @ignore
- */
-Object.defineProperty(Server.prototype, "runtimeStats", { enumerable: true
-  , get: function () {
-      return this._state.runtimeStats;
-    }
-});
-
-/**
- * Get Read Preference method
- * @ignore
- */
-Object.defineProperty(Server.prototype, "readPreference", { enumerable: true
-  , get: function () {
-      if(this._readPreference == null && this.readSecondary) {
-        return Server.READ_SECONDARY;
-      } else if(this._readPreference == null && !this.readSecondary) {
-        return Server.READ_PRIMARY;
-      } else {
-        return this._readPreference;
-      }
-    }
-});
-
-/**
- * @ignore
- */
-exports.Server = Server;

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js
----------------------------------------------------------------------
diff --git a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js b/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js
deleted file mode 100644
index 88bdf9f..0000000
--- a/web/demos/package/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js
+++ /dev/null
@@ -1,48 +0,0 @@
-var ServerCapabilities = function(isMasterResult) {  
-  // Capabilities
-  var aggregationCursor = false;
-  var writeCommands = false;
-  var textSearch = false;
-  var authCommands = false;
-  var maxNumberOfDocsInBatch = 1000;
-
-  if(isMasterResult.minWireVersion >= 0) {
-  	textSearch = true;
-  }
-
-  if(isMasterResult.maxWireVersion >= 1) {
-  	aggregationCursor = true;
-    authCommands = true;
-  }
-
-  if(isMasterResult.maxWireVersion >= 2) {
-    writeCommands = true;
-  }
-
-  // If no min or max wire version set to 0
-  if(isMasterResult.minWireVersion == null) {
-    isMasterResult.minWireVersion = 0;
-  }
-
-  if(isMasterResult.maxWireVersion == null) {
-    isMasterResult.maxWireVersion = 0;
-  }
-
-  // Map up read only parameters
-  setup_get_property(this, "hasAggregationCursor", aggregationCursor);
-  setup_get_property(this, "hasWriteCommands", writeCommands);
-  setup_get_property(this, "hasTextSearch", textSearch);
-  setup_get_property(this, "hasAuthCommands", authCommands);
-  setup_get_property(this, "minWireVersion", isMasterResult.minWireVersion);
-  setup_get_property(this, "maxWireVersion", isMasterResult.maxWireVersion);
-  setup_get_property(this, "maxNumberOfDocsInBatch", maxNumberOfDocsInBatch);
-}
-
-var setup_get_property = function(object, name, value) {
-  Object.defineProperty(object, name, {
-      enumerable: true
-    , get: function () { return value; }
-  });  
-}
-
-exports.ServerCapabilities = ServerCapabilities;
\ No newline at end of file