Comparing version 1.1.6 to 1.1.7
@@ -727,2 +727,3 @@ /** | ||
* - **tailableRetryInterval** {Number, default:100}, specify the miliseconds between getMores on tailable cursor. | ||
* - **numberOfRetries** {Number, default:5}, specify the number of times to retry the tailable cursor. | ||
* - **awaitdata** {Boolean, default:false} allow the cursor to wait for data, only applicable for tailable cursor. | ||
@@ -729,0 +730,0 @@ * - **exhaust** {Boolean, default:false} have the server send all the documents at once as getMore packets, not recommended. |
@@ -478,2 +478,8 @@ var Connection = require('./connection').Connection, | ||
// Make sure we have the right reference | ||
if (self._state.addresses[instanceServer.host + ":" + instanceServer.port] != instanceServer) { | ||
// Close the connection before deleting | ||
if(self._state.addresses[instanceServer.host + ":" + instanceServer.port]) | ||
self._state.addresses[instanceServer.host + ":" + instanceServer.port].close(); | ||
} | ||
delete self._state.addresses[instanceServer.host + ":" + instanceServer.port]; | ||
@@ -560,2 +566,9 @@ self._state.addresses[me] = instanceServer; | ||
// Set the server | ||
if (addresses[server.host + ":" + server.port] != server) { | ||
if (addresses[server.host + ":" + server.port]) { | ||
// Close the connection before deleting | ||
addresses[server.host + ":" + server.port].close(); | ||
} | ||
delete addresses[server.host + ":" + server.port]; | ||
} | ||
addresses[server.host + ":" + server.port] = server; | ||
@@ -664,4 +677,5 @@ // Connect | ||
var candidateServers = []; | ||
for(var key in addresses) { | ||
candidateServers.push(addresses[key]); | ||
var keys = Object.keys(addresses); | ||
for(var i = 0; i < keys.length; i++) { | ||
candidateServers.push(addresses[keys[i]]); | ||
} | ||
@@ -948,7 +962,12 @@ // Let's connect to the first one on the list | ||
if(this._state && this._state.addresses) { | ||
for(var key in this._state.addresses) { | ||
this._state.addresses[key].close(); | ||
var keys = Object.keys(this._state.addresses); | ||
// Iterate over all server instances | ||
for(var i = 0; i < keys.length; i++) { | ||
this._state.addresses[keys[i]].close(); | ||
} | ||
} | ||
// If we have a strategy stop it | ||
if(this.strategyInstance) this.strategyInstance.stop(); | ||
// If it's a callback | ||
@@ -955,0 +974,0 @@ if(typeof callback == 'function') callback(null, null); |
@@ -10,2 +10,3 @@ var Server = require("../server").Server; | ||
this.state = 'disconnected'; | ||
this.pingInterval = 5000; | ||
// Class instance | ||
@@ -17,3 +18,7 @@ this.Db = require("../../db").Db; | ||
PingStrategy.prototype.start = function(callback) { | ||
// already running? | ||
if ('connected' == this.state) return; | ||
this.state = 'connected'; | ||
// Start ping server | ||
@@ -27,4 +32,5 @@ this._pingServer(callback); | ||
this.state = 'disconnected'; | ||
// Call the callback | ||
callback(null, null); | ||
// optional callback | ||
callback && callback(null, null); | ||
} | ||
@@ -125,55 +131,54 @@ | ||
if(self.state == 'disconnected') return; | ||
var addresses = self.replicaset._state != null && self.replicaset._state.addresses != null ? self.replicaset._state.addresses : null; | ||
var addresses = self.replicaset._state.addresses; | ||
// Grab all servers | ||
var serverKeys = Object.keys(addresses); | ||
// Number of server entries | ||
var numberOfEntries = serverKeys.length; | ||
// We got keys | ||
for(var i = 0; i < serverKeys.length; i++) { | ||
// We got a server instance | ||
var server = addresses[serverKeys[i]]; | ||
// Create a new server object, avoid using internal connections as they might | ||
// be in an illegal state | ||
new function(serverInstance) { | ||
var server = new Server(serverInstance.host, serverInstance.port, {poolSize:1, timeout:500, auto_reconnect:false}); | ||
var options = { poolSize: 1, timeout: 500, auto_reconnect: false }; | ||
var server = new Server(serverInstance.host, serverInstance.port, options); | ||
var db = new self.Db(self.replicaset.db.databaseName, server); | ||
// Add error listener | ||
db.on("error", function(err) { | ||
// Adjust the number of checks | ||
numberOfEntries = numberOfEntries - 1; | ||
// Close connection | ||
db.close(); | ||
// If we are done with all results coming back trigger ping again | ||
if(numberOfEntries == 0 && self.state == 'connected') { | ||
setTimeout(pingFunction, 1000); | ||
} | ||
}) | ||
db.on("error", done); | ||
// Open the db instance | ||
db.open(function(err, p_db) { | ||
if(err != null) { | ||
db.close(); | ||
} else { | ||
// Startup time of the command | ||
var startTime = new Date().getTime(); | ||
// Execute ping on this connection | ||
p_db.executeDbCommand({ping:1}, function(err, result) { | ||
// Adjust the number of checks | ||
numberOfEntries = numberOfEntries - 1; | ||
// Get end time of the command | ||
var endTime = new Date().getTime(); | ||
// Store the ping time in the server instance state variable, if there is one | ||
if(serverInstance != null && serverInstance.runtimeStats != null && serverInstance.isConnected()) { | ||
serverInstance.runtimeStats['pingMs'] = (endTime - startTime); | ||
} | ||
db.open(function(err, _db) { | ||
if(err) return done(_db); | ||
// Close server | ||
p_db.close(); | ||
// If we are done with all results coming back trigger ping again | ||
if(numberOfEntries == 0 && self.state == 'connected') { | ||
setTimeout(pingFunction, 1000); | ||
} | ||
}) | ||
// Startup time of the command | ||
var startTime = Date.now(); | ||
// Execute ping on this connection | ||
db.executeDbCommand({ping:1}, {failFast:true}, function() { | ||
if(null != serverInstance.runtimeStats && serverInstance.isConnected()) { | ||
serverInstance.runtimeStats['pingMs'] = Date.now() - startTime; | ||
} | ||
done(_db); | ||
}) | ||
}) | ||
function done (_db) { | ||
// Close connection | ||
_db.close(true); | ||
// 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); | ||
@@ -180,0 +185,0 @@ } |
@@ -14,6 +14,3 @@ // The Statistics strategy uses the measure of each end-start time for each | ||
StatisticsStrategy.prototype.stop = function(callback) { | ||
// Remove reference to replicaset | ||
this.replicaset = null; | ||
// Perform callback | ||
callback(null, null); | ||
callback && callback(null, null); | ||
} | ||
@@ -20,0 +17,0 @@ |
@@ -22,3 +22,3 @@ /** | ||
if(!(this instanceof CursorStream)) return new CursorStream(cursor); | ||
Stream.call(this); | ||
@@ -113,8 +113,11 @@ | ||
* Resumes the stream. | ||
* | ||
* | ||
* @api public | ||
*/ | ||
CursorStream.prototype.resume = function () { | ||
this.paused = false; | ||
this._next(); | ||
var self = this; | ||
process.nextTick(function() { | ||
self.paused = false; | ||
self._next(); | ||
}) | ||
} | ||
@@ -125,3 +128,3 @@ | ||
* cursor. No more events will be emitted. | ||
* | ||
* | ||
* @api public | ||
@@ -128,0 +131,0 @@ */ |
@@ -15,6 +15,6 @@ var GridStore = require('./gridstore').GridStore, | ||
if(!(this instanceof Grid)) return new Grid(db, fsName); | ||
this.db = db; | ||
this.fsName = fsName == null ? GridStore.DEFAULT_ROOT_COLLECTION : fsName; | ||
} | ||
} | ||
@@ -37,5 +37,5 @@ /** | ||
options['root'] = options['root'] == null ? this.fsName : options['root']; | ||
// Return if we don't have a buffer object as data | ||
if(!(Buffer.isBuffer(data))) return callback(new Error("Data object must be a buffer object"), null); | ||
if(!(Buffer.isBuffer(data))) return callback(new Error("Data object must be a buffer object"), null); | ||
// Get filename if we are using it | ||
@@ -55,3 +55,3 @@ var filename = options['filename']; | ||
}) | ||
}) | ||
}) | ||
}) | ||
@@ -70,3 +70,3 @@ } | ||
// Validate that we have a valid ObjectId | ||
if(!(id instanceof ObjectID)) return callback(new Error("Not a valid ObjectID", null)); | ||
if(!(id instanceof ObjectID)) return callback(new Error("Not a valid ObjectID", null)); | ||
// Create gridstore | ||
@@ -76,7 +76,7 @@ var gridStore = new GridStore(this.db, id, "r", {root:this.fsName}); | ||
if(err) return callback(err, null); | ||
// Return the data | ||
gridStore.read(function(err, data) { | ||
return callback(err, data) | ||
}); | ||
}); | ||
}) | ||
@@ -95,3 +95,3 @@ } | ||
// Validate that we have a valid ObjectId | ||
if(!(id instanceof ObjectID)) return callback(new Error("Not a valid ObjectID", null)); | ||
if(!(id instanceof ObjectID)) return callback(new Error("Not a valid ObjectID", null)); | ||
// Create gridstore | ||
@@ -98,0 +98,0 @@ GridStore.unlink(this.db, id, {root:this.fsName}, function(err, result) { |
@@ -194,3 +194,3 @@ /** | ||
self.internalMd5 = doc.md5; | ||
} else { | ||
} else if (self.mode != 'r') { | ||
self.fileId = self.fileId == null ? new ObjectID() : self.fileId; | ||
@@ -200,2 +200,5 @@ self.contentType = exports.GridStore.DEFAULT_CONTENT_TYPE; | ||
self.length = 0; | ||
} else { | ||
self.length = 0; | ||
return error(new Error((self.referenceBy == REFERENCE_BY_ID ? self.fileId.toHexString() : self.filename) + " does not exist", self)); | ||
} | ||
@@ -202,0 +205,0 @@ |
{ "name" : "mongodb" | ||
, "description" : "A node.js driver for MongoDB" | ||
, "keywords" : ["mongodb", "mongo", "driver", "db"] | ||
, "version" : "1.1.6" | ||
, "version" : "1.1.7" | ||
, "author" : "Christian Amor Kvalheim <christkv@gmail.com>" | ||
@@ -6,0 +6,0 @@ , "contributors" : [ "Aaron Heckmann", |
@@ -30,2 +30,3 @@ Up to date documentation | ||
```javascript | ||
var client = new Db('test', new Server("127.0.0.1", 27017, {})), | ||
@@ -53,2 +54,3 @@ test = function (err, collection) { | ||
}); | ||
``` | ||
@@ -62,2 +64,3 @@ Data types | ||
```javascript | ||
// Get the objectID type | ||
@@ -69,5 +72,7 @@ var ObjectID = require('mongodb').ObjectID; | ||
collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined | ||
``` | ||
Here are the constructors the non-Javascript BSON primitive types: | ||
```javascript | ||
// Fetch the library | ||
@@ -86,2 +91,3 @@ var mongo = require('mongodb'); | ||
new mongo.Double(number) // Force double storage | ||
``` | ||
@@ -93,2 +99,3 @@ The C/C++ bson parser/serializer | ||
```javascript | ||
// using native_parser: | ||
@@ -98,2 +105,3 @@ var client = new Db('integration_tests_20', | ||
{native_parser:true}); | ||
``` | ||
@@ -141,2 +149,3 @@ The C++ parser uses the js objects both for serialization and deserialization. | ||
```javascript | ||
// Custom factory (need to provide a 12 byte array); | ||
@@ -166,2 +175,3 @@ CustomPKFactory = function() {} | ||
}); | ||
``` | ||
@@ -175,2 +185,3 @@ Strict mode | ||
```javascript | ||
var error_client = new Db('integration_tests_', new Server("127.0.0.1", 27017, {auto_reconnect: false}), {strict:true}); | ||
@@ -193,2 +204,3 @@ test.assertEquals(true, error_client.strict); | ||
}); | ||
``` | ||
@@ -216,2 +228,3 @@ Documentation | ||
```javascript | ||
var cursor = collection.find(query, [fields], options); | ||
@@ -225,2 +238,3 @@ cursor.sort(fields).limit(n).skip(m). | ||
cursor.rewind() // reset the cursor to its initial state. | ||
``` | ||
@@ -257,2 +271,3 @@ Useful chainable methods of cursor. These can optionally be options of `find` instead of method calls: | ||
```javascript | ||
var mongodb = require('mongodb'); | ||
@@ -267,2 +282,3 @@ var server = new mongodb.Server("127.0.0.1", 27017, {}); | ||
}); | ||
``` | ||
@@ -274,3 +290,5 @@ Insert | ||
```javascript | ||
collection.insert(docs, options, [callback]); | ||
``` | ||
@@ -285,2 +303,3 @@ where `docs` can be a single document or an array of documents. | ||
```javascript | ||
var mongodb = require('mongodb'); | ||
@@ -299,2 +318,3 @@ var server = new mongodb.Server("127.0.0.1", 27017, {}); | ||
}); | ||
``` | ||
@@ -317,3 +337,5 @@ Note that there's no reason to pass a callback to the insert or update commands | ||
```javascript | ||
collection.update(criteria, objNew, options, [callback]); | ||
``` | ||
@@ -328,2 +350,3 @@ Useful options: | ||
```javascript | ||
var mongodb = require('mongodb'); | ||
@@ -340,2 +363,3 @@ var server = new mongodb.Server("127.0.0.1", 27017, {}); | ||
}); | ||
``` | ||
@@ -354,3 +378,5 @@ Find and modify | ||
```javascript | ||
collection.findAndModify(query, sort, update, options, callback) | ||
``` | ||
@@ -373,2 +399,3 @@ The sort parameter is used to specify which object to operate on, if more than | ||
```javascript | ||
var mongodb = require('mongodb'); | ||
@@ -385,2 +412,3 @@ var server = new mongodb.Server("127.0.0.1", 27017, {}); | ||
}); | ||
``` | ||
@@ -387,0 +415,0 @@ Save |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
442713
10524
439