Socket
Socket
Sign inDemoInstall

mongodb-core

Package Overview
Dependencies
Maintainers
1
Versions
177
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mongodb-core - npm Package Compare versions

Comparing version 2.1.11 to 2.1.12

11

HISTORY.md

@@ -0,1 +1,12 @@

2.1.12 2017-06-02
-----------------
* NODE-1019 Set keepAlive to 300 seconds or 1/2 of socketTimeout if socketTimeout < keepAlive.
* Minor fix to report the correct state on error.
* NODE-1020 'family' was added to options to provide high priority for ipv6 addresses (Issue #1518, https://github.com/firej).
* Fix require_optional loading of bson-ext.
* Ensure no errors are thrown by replset if topology is destroyed before it finished connecting.
* NODE-999 SDAM fixes for Mongos and single Server event emitting.
* NODE-1014 Set socketTimeout to default to 360 seconds.
* NODE-1019 Set keepAlive to 300 seconds or 1/2 of socketTimeout if socketTimeout < keepAlive.
2.1.11 2017-05-22

@@ -2,0 +13,0 @@ -----------------

11

index.js
var BSON = require('bson');
var require_optional = require('require_optional');
try {
// try { BSON = require('bson-ext'); } catch(err) {
BSON = require_optional('bson-ext');
// }
// Attempt to grab the native BSON parser
var BSONNative = require_optional('bson-ext');
// If we got the native parser, use it instead of the
// Javascript one
if(BSONNative) {
BSON = BSONNative
}
} catch(err) {}

@@ -8,0 +13,0 @@

@@ -26,7 +26,8 @@ "use strict";

* @param {number} options.port The server port
* @param {number} [options.family=4] Version of IP stack. Defaults to 4.
* @param {boolean} [options.keepAlive=true] TCP Connection keep alive enabled
* @param {number} [options.keepAliveInitialDelay=0] Initial delay before TCP keep alive enabled
* @param {number} [options.keepAliveInitialDelay=300000] Initial delay before TCP keep alive enabled
* @param {boolean} [options.noDelay=true] TCP Connection no delay
* @param {number} [options.connectionTimeout=0] TCP Connection timeout setting
* @param {number} [options.socketTimeout=0] TCP Socket timeout setting
* @param {number} [options.connectionTimeout=30000] TCP Connection timeout setting
* @param {number} [options.socketTimeout=360000] TCP Socket timeout setting
* @param {boolean} [options.singleBufferSerializtion=true] Serialize into single buffer, trade of peak memory for serialization speed

@@ -77,8 +78,17 @@ * @param {boolean} [options.ssl=false] Use SSL for connection

this.host = options.host || 'localhost';
this.family = typeof options.family == 'number' ? options.family : 4;
this.keepAlive = typeof options.keepAlive == 'boolean' ? options.keepAlive : true;
this.keepAliveInitialDelay = options.keepAliveInitialDelay || 0;
this.keepAliveInitialDelay = typeof options.keepAliveInitialDelay == 'number'
? options.keepAliveInitialDelay : 300000;
this.noDelay = typeof options.noDelay == 'boolean' ? options.noDelay : true;
this.connectionTimeout = options.connectionTimeout || 0;
this.socketTimeout = options.socketTimeout || 0;
this.connectionTimeout = typeof options.connectionTimeout == 'number'
? options.connectionTimeout : 30000;
this.socketTimeout = typeof options.socketTimeout == 'number'
? options.socketTimeout : 360000;
// Is the keepAliveInitialDelay > socketTimeout set it to half of socketTimeout
if(this.keepAliveInitialDelay > this.socketTimeout) {
this.keepAliveInitialDelay = Math.round(this.socketTimeout/2);
}
// If connection was destroyed

@@ -401,5 +411,6 @@ this.destroyed = false;

// Create new connection instance
self.connection = self.domainSocket
? net.createConnection(self.host)
: net.createConnection(self.port, self.host);
var connection_options = self.domainSocket
? {path: self.host}
: {port: self.port, host: self.host, family: self.family};
self.connection = net.createConnection(connection_options);

@@ -406,0 +417,0 @@ // Set the options for the connection

@@ -38,6 +38,6 @@ "use strict";

* @param {boolean} [options.keepAlive=true] TCP Connection keep alive enabled
* @param {number} [options.keepAliveInitialDelay=0] Initial delay before TCP keep alive enabled
* @param {number} [options.keepAliveInitialDelay=300000] Initial delay before TCP keep alive enabled
* @param {boolean} [options.noDelay=true] TCP Connection no delay
* @param {number} [options.connectionTimeout=0] TCP Connection timeout setting
* @param {number} [options.socketTimeout=0] TCP Socket timeout setting
* @param {number} [options.connectionTimeout=30000] TCP Connection timeout setting
* @param {number} [options.socketTimeout=360000] TCP Socket timeout setting
* @param {number} [options.monitoringSocketTimeout=30000] TCP Socket timeout setting for replicaset monitoring socket

@@ -75,5 +75,5 @@ * @param {boolean} [options.ssl=false] Use SSL for connection

connectionTimeout: 30000,
socketTimeout: 30000,
socketTimeout: 360000,
keepAlive: true,
keepAliveInitialDelay: 0,
keepAliveInitialDelay: 300000,
noDelay: true,

@@ -80,0 +80,0 @@ // SSL Settings

@@ -71,12 +71,7 @@ "use strict";

try {
// try {
// BSON = require('bson-ext');
// BSON.native = true;
// } catch(err) {
var optionalBSON = require_optional('bson-ext');
if(optionalBSON) {
optionalBSON.native = true;
return optionalBSON;
}
// }
var optionalBSON = require_optional('bson-ext');
if(optionalBSON) {
optionalBSON.native = true;
return optionalBSON;
}
} catch(err) {}

@@ -83,0 +78,0 @@

@@ -13,2 +13,4 @@ "use strict"

clone = require('./shared').clone,
sdam = require('./shared'),
diff = require('./shared').diff,
cloneOptions = require('./shared').cloneOptions,

@@ -195,2 +197,7 @@ createClientInfo = require('./shared').createClientInfo;

// Description of the Replicaset
this.topologyDescription = {
"topologyType": "Unknown", "servers": []
};
// Add event listener

@@ -242,2 +249,6 @@ EventEmitter.call(this);

servers.forEach(function(server) {
server.on('serverDescriptionChanged', function(event) { self.emit('serverDescriptionChanged', event); });
});
// Emit the topology opening event

@@ -255,4 +266,11 @@ emitSDAMEvent(this, 'topologyOpening', { topologyId: this.id });

moveServerFrom(self.connectedProxies, self.disconnectedProxies, this);
// Emit the initial topology
emitTopologyDescriptionChanged(self);
// Emit the left signal
self.emit('left', 'mongos', this);
// Emit the sdam event
self.emit('serverClosed', {
topologyId: self.id,
address: this.name
});
}

@@ -267,2 +285,4 @@ }

if(self.state == DESTROYED) {
// Emit the initial topology
emitTopologyDescriptionChanged(self);
// Move from connectingProxies

@@ -287,2 +307,4 @@ moveServerFrom(self.connectingProxies, self.disconnectedProxies, this);

moveServerFrom(self.connectingProxies, self.disconnectedProxies, _this);
// Emit the initial topology
emitTopologyDescriptionChanged(self);
_this.destroy();

@@ -337,2 +359,5 @@ return self.emit('failed', _this);

// Emit the initial topology
emitTopologyDescriptionChanged(self);
// Trigger topologyMonitor

@@ -374,2 +399,11 @@ if(self.connectingProxies.length == 0) {

setTimeout(function() {
// Emit opening server event
self.emit('serverOpening', {
topologyId: self.id,
address: server.name
});
// Emit the initial topology
emitTopologyDescriptionChanged(self);
// Add event handlers

@@ -381,6 +415,2 @@ server.once('close', handleInitialConnectEvent(self, 'close'));

server.once('connect', handleInitialConnectEvent(self, 'connect'));
// SDAM Monitoring events
server.on('serverOpening', function(e) { self.emit('serverOpening', e); });
server.on('serverDescriptionChanged', function(e) { self.emit('serverDescriptionChanged', e); });
server.on('serverClosed', function(e) { self.emit('serverClosed', e); });
// Start connection

@@ -468,2 +498,3 @@ server.connect(self.s.connectOptions);

moveServerFrom(self.connectingProxies, self.disconnectedProxies, _self);
// Return destroy
return this.destroy();

@@ -494,2 +525,4 @@ }

moveServerFrom(self.disconnectedProxies, self.connectedProxies, _self);
// Emit topology Change
emitTopologyDescriptionChanged(self);
// Emit joined event

@@ -534,2 +567,11 @@ self.emit('joined', 'mongos', _self);

// Relay the server description change
server.on('serverDescriptionChanged', function(event) { self.emit('serverDescriptionChanged', event); });
// Emit opening server event
self.emit('serverOpening', {
topologyId: server.s.topologyId != -1 ? server.s.topologyId : self.id,
address: server.name
});
// Add temp handlers

@@ -542,6 +584,3 @@ server.once('connect', _handleEvent(self, 'connect'));

// SDAM Monitoring events
server.on('serverOpening', function(e) { self.emit('serverOpening', e); });
server.on('serverDescriptionChanged', function(e) { self.emit('serverDescriptionChanged', e); });
server.on('serverClosed', function(e) { self.emit('serverClosed', e); });
// Connect to proxy
server.connect(self.s.connectOptions);

@@ -727,2 +766,3 @@ }, i);

Mongos.prototype.destroy = function(options) {
var self = this;
// Transition state

@@ -739,5 +779,16 @@ stateTransition(this, DESTROYED);

proxies.forEach(function(x) {
// Emit the sdam event
self.emit('serverClosed', {
topologyId: self.id,
address: x.name
});
// Destroy the server
x.destroy(options);
// Move to list of disconnectedProxies
moveServerFrom(self.connectedProxies, self.disconnectedProxies, x);
});
// Emit the final topology change
emitTopologyDescriptionChanged(self);
// Emit toplogy closing event

@@ -1108,2 +1159,56 @@ emitSDAMEvent(this, 'topologyClosed', { topologyId: this.id });

function emitTopologyDescriptionChanged(self) {
if(self.listeners('topologyDescriptionChanged').length > 0) {
var topology = 'Unknown';
var setName = self.setName;
if(self.connectedProxies.length > 0) {
topology = 'Sharded';
}
// Generate description
var description = {
topologyType: topology,
servers: []
}
// All proxies
var proxies = self.disconnectedProxies
.concat(self.connectingProxies);
// Add all the disconnected proxies
description.servers = description.servers.concat(proxies.map(function(x) {
var description = x.getDescription();
description.type = 'Unknown';
return description;
}));
// Add all the connected proxies
description.servers = description.servers.concat(self.connectedProxies.map(function(x) {
var description = x.getDescription();
description.type = 'Mongos';
return description;
}));
// Get the diff
var diffResult = diff(self.topologyDescription, description);
// Create the result
var result = {
topologyId: self.id,
previousDescription: self.topologyDescription,
newDescription: description,
diff: diffResult
};
// Emit the topologyDescription change
if(diffResult.servers.length > 0) {
self.emit('topologyDescriptionChanged', result);
}
// Set the new description
self.topologyDescription = description;
}
}
/**

@@ -1110,0 +1215,0 @@ * A mongos connect event, used to verify that the connection is up and running

@@ -5,2 +5,3 @@ "use strict"

f = require('util').format,
diff = require('./shared').diff,
EventEmitter = require('events').EventEmitter,

@@ -121,2 +122,5 @@ Logger = require('../connection/logger'),

this.set = {};
this.primary = null;
// Emit the topology changed
emitTopologyDescriptionChanged(this);
}

@@ -960,2 +964,5 @@

// Get the diff
var diffResult = diff(self.replicasetDescription, description);
// Create the result

@@ -966,7 +973,9 @@ var result = {

newDescription: description,
diff: diff(self.replicasetDescription, description)
diff: diffResult,
};
// Emit the topologyDescription change
self.emit('topologyDescriptionChanged', result);
// if(diffResult.servers.length > 0) {
self.emit('topologyDescriptionChanged', result);
// }

@@ -978,39 +987,2 @@ // Set the new description

function diff(previous, current) {
// Difference document
var diff = {
servers: []
}
// Previous entry
if(!previous) {
previous = { servers: [] };
}
// Got through all the servers
for(var i = 0; i < previous.servers.length; i++) {
var prevServer = previous.servers[i];
// Go through all current servers
for(var j = 0; j < current.servers.length; j++) {
var currServer = current.servers[j];
// Matching server
if(prevServer.address.toLowerCase() === currServer.address.toLowerCase()) {
// We had a change in state
if(prevServer.type != currServer.type) {
diff.servers.push({
address: prevServer.address,
from: prevServer.type,
to: currServer.type
});
}
}
}
}
// Return difference
return diff;
}
module.exports = ReplSetState;

@@ -553,2 +553,7 @@ "use strict"

return connectNewServers(self, self.s.replicaSetState.unknownServers, function(err) {
// Don't emit errors if the connection was already
if(self.state === DESTROYED || self.state === UNREFERENCED) {
return;
}
if(!self.s.replicaSetState.hasPrimary() && !self.s.options.secondaryOnlyConnectionAllowed) {

@@ -555,0 +560,0 @@ if(err) return self.emit('error', err);

"use strict"
var inherits = require('util').inherits,
require_optional = require('require_optional'),
f = require('util').format,

@@ -47,6 +46,6 @@ EventEmitter = require('events').EventEmitter,

* @param {boolean} [options.keepAlive=true] TCP Connection keep alive enabled
* @param {number} [options.keepAliveInitialDelay=0] Initial delay before TCP keep alive enabled
* @param {number} [options.keepAliveInitialDelay=300000] Initial delay before TCP keep alive enabled
* @param {boolean} [options.noDelay=true] TCP Connection no delay
* @param {number} [options.connectionTimeout=0] TCP Connection timeout setting
* @param {number} [options.socketTimeout=0] TCP Socket timeout setting
* @param {number} [options.connectionTimeout=30000] TCP Connection timeout setting
* @param {number} [options.socketTimeout=360000] TCP Socket timeout setting
* @param {boolean} [options.ssl=false] Use SSL for connection

@@ -286,9 +285,11 @@ * @param {boolean|function} [options.checkServerIdentity=true] Ensure we check server identify during SSL, set to false to disable checking. Only works for Node 0.12.x or higher. You can pass in a boolean or your own checkServerIdentity override function.

sdam.emitServerDescriptionChanged(self, {
address: self.name, arbiters: [], hosts: [], passives: [], type: !self.s.inTopology ? 'Standalone' : sdam.getTopologyType(self)
address: self.name, arbiters: [], hosts: [], passives: [], type: sdam.getTopologyType(self)
});
// Emit topology description changed if something listening
sdam.emitTopologyDescriptionChanged(self, {
topologyType: 'Single', servers: [{address: self.name, arbiters: [], hosts: [], passives: [], type: 'Standalone'}]
});
if(!self.s.inTopology) {
// Emit topology description changed if something listening
sdam.emitTopologyDescriptionChanged(self, {
topologyType: 'Single', servers: [{address: self.name, arbiters: [], hosts: [], passives: [], type: 'Standalone'}]
});
}

@@ -358,3 +359,3 @@ // Log the ismaster if available

if(self.s.pool && !self.s.pool.isDisconnected() && !self.s.pool.isDestroyed()) {
throw MongoError.create(f('server instance in invalid state %s', self.s.state));
throw MongoError.create(f('server instance in invalid state %s', self.s.pool.state));
}

@@ -361,0 +362,0 @@

@@ -126,4 +126,4 @@ "use strict"

if(!ismaster) return 'Unknown';
if(ismaster.ismaster && ismaster.msg == 'isdbgrid') return 'Mongos';
if(ismaster.ismaster && !ismaster.hosts) return 'Standalone';
if(ismaster.ismaster && ismaster.msg == 'isdbgrid') return 'Mongos';
if(ismaster.ismaster) return 'RSPrimary';

@@ -263,2 +263,84 @@ if(ismaster.secondary) return 'RSSecondary';

function diff(previous, current) {
// Difference document
var diff = {
servers: []
}
// Previous entry
if(!previous) {
previous = { servers: [] };
}
// Check if we have any previous servers missing in the current ones
for(var i = 0; i < previous.servers.length; i++) {
var found = false;
for(var j = 0; j < current.servers.length; j++) {
if(current.servers[j].address.toLowerCase()
=== previous.servers[i].address.toLowerCase()) {
found = true;
break;
}
}
if(!found) {
// Add to the diff
diff.servers.push({
address: previous.servers[i].address,
from: previous.servers[i].type,
to: 'Unknown',
});
}
}
// Check if there are any severs that don't exist
for(var j = 0; j < current.servers.length; j++) {
var found = false;
// Go over all the previous servers
for(var i = 0; i < previous.servers.length; i++) {
if(previous.servers[i].address.toLowerCase()
=== current.servers[j].address.toLowerCase()) {
found = true;
break;
}
}
// Add the server to the diff
if(!found) {
diff.servers.push({
address: current.servers[j].address,
from: 'Unknown',
to: current.servers[j].type,
});
}
}
// Got through all the servers
for(var i = 0; i < previous.servers.length; i++) {
var prevServer = previous.servers[i];
// Go through all current servers
for(var j = 0; j < current.servers.length; j++) {
var currServer = current.servers[j];
// Matching server
if(prevServer.address.toLowerCase() === currServer.address.toLowerCase()) {
// We had a change in state
if(prevServer.type != currServer.type) {
diff.servers.push({
address: prevServer.address,
from: prevServer.type,
to: currServer.type
});
}
}
}
}
// Return difference
return diff;
}
module.exports.inquireServerState = inquireServerState

@@ -272,3 +354,4 @@ module.exports.getTopologyType = getTopologyType;

module.exports.clone = clone;
module.exports.diff = diff;
module.exports.Interval = Interval;
module.exports.Timeout = Timeout;
{
"name": "mongodb-core",
"version": "2.1.11",
"version": "2.1.12",
"description": "Core MongoDB driver functionality, no bells and whistles and meant for integration not end applications",

@@ -5,0 +5,0 @@ "main": "index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc