mongodb 2.1.0-alpha → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/HISTORY.md +574 -429
  2. package/Makefile +2 -5
  3. package/README.md +108 -15
  4. package/conf.json +17 -13
  5. package/index.js +13 -2
  6. package/lib/admin.js +113 -47
  7. package/lib/aggregation_cursor.js +56 -28
  8. package/lib/apm.js +608 -0
  9. package/lib/bulk/common.js +7 -7
  10. package/lib/bulk/ordered.js +56 -17
  11. package/lib/bulk/unordered.js +52 -14
  12. package/lib/collection.js +671 -212
  13. package/lib/command_cursor.js +60 -32
  14. package/lib/cursor.js +313 -115
  15. package/lib/db.js +264 -105
  16. package/lib/gridfs/chunk.js +26 -29
  17. package/lib/gridfs/grid_store.js +150 -64
  18. package/lib/gridfs-stream/download.js +310 -0
  19. package/lib/gridfs-stream/index.js +335 -0
  20. package/lib/gridfs-stream/upload.js +450 -0
  21. package/lib/metadata.js +64 -0
  22. package/lib/mongo_client.js +69 -39
  23. package/lib/mongos.js +65 -20
  24. package/lib/replset.js +69 -34
  25. package/lib/server.js +35 -1
  26. package/lib/topology_base.js +22 -10
  27. package/lib/url_parser.js +111 -13
  28. package/lib/utils.js +9 -8
  29. package/mongolabs.js +427 -0
  30. package/package.json +8 -6
  31. package/t.js +68 -51
  32. package/test.js +12 -0
  33. package/test_boot/boot.sh +3 -0
  34. package/test_boot/ca.pem +49 -0
  35. package/test_boot/client.pem +48 -0
  36. package/test_boot/client_password.pem +51 -0
  37. package/test_boot/connect.js +29 -0
  38. package/test_boot/data/WiredTiger +2 -0
  39. package/test_boot/data/WiredTiger.lock +1 -0
  40. package/test_boot/data/WiredTiger.turtle +6 -0
  41. package/test_boot/data/WiredTiger.wt +0 -0
  42. package/test_boot/data/WiredTigerLAS.wt +0 -0
  43. package/test_boot/data/_mdb_catalog.wt +0 -0
  44. package/test_boot/data/collection-0-757073248613337118.wt +0 -0
  45. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-44-37Z-00000 +0 -0
  46. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-45-15Z-00000 +0 -0
  47. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-46-31Z-00000 +0 -0
  48. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-47-25Z-00000 +0 -0
  49. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-49-07Z-00000 +0 -0
  50. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-50-41Z-00000 +0 -0
  51. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-50-53Z-00000 +0 -0
  52. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-52-31Z-00000 +0 -0
  53. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-54-53Z-00000 +0 -0
  54. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-55-09Z-00000 +0 -0
  55. package/test_boot/data/diagnostic.data/metrics.2015-10-07T14-55-38Z-00000 +0 -0
  56. package/test_boot/data/index-1-757073248613337118.wt +0 -0
  57. package/test_boot/data/mongod.lock +0 -0
  58. package/test_boot/data/sizeStorer.wt +0 -0
  59. package/test_boot/data/storage.bson +0 -0
  60. package/test_boot/server_password.pem +51 -0
  61. package/.travis.yml +0 -10
  62. package/t1.js +0 -59
  63. package/wercker.yml +0 -19
package/lib/replset.js CHANGED
@@ -6,11 +6,14 @@ var EventEmitter = require('events').EventEmitter
6
6
  , Server = require('./server')
7
7
  , Mongos = require('./mongos')
8
8
  , Cursor = require('./cursor')
9
+ , AggregationCursor = require('./aggregation_cursor')
10
+ , CommandCursor = require('./command_cursor')
9
11
  , ReadPreference = require('./read_preference')
10
12
  , MongoCR = require('mongodb-core').MongoCR
11
13
  , MongoError = require('mongodb-core').MongoError
12
14
  , ServerCapabilities = require('./topology_base').ServerCapabilities
13
15
  , Store = require('./topology_base').Store
16
+ , Define = require('./metadata')
14
17
  , CServer = require('mongodb-core').Server
15
18
  , CReplSet = require('mongodb-core').ReplSet
16
19
  , CoreReadPreference = require('mongodb-core').ReadPreference
@@ -19,7 +22,7 @@ var EventEmitter = require('events').EventEmitter
19
22
  /**
20
23
  * @fileOverview The **ReplSet** class is a class that represents a Replicaset topology and is
21
24
  * used to construct connections.
22
- *
25
+ *
23
26
  * **ReplSet Should not be used, use MongoClient.connect**
24
27
  * @example
25
28
  * var Db = require('mongodb').Db,
@@ -44,20 +47,21 @@ var EventEmitter = require('events').EventEmitter
44
47
  * @param {booelan} [options.ha=true] Turn on high availability monitoring.
45
48
  * @param {number} [options.haInterval=5000] Time between each replicaset status check.
46
49
  * @param {string} options.replicaSet The name of the replicaset to connect to.
47
- * @param {number} [options.secondaryAcceptableLatencyMS=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)
50
+ * @param {number} [options.secondaryAcceptableLatencyMS=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)
48
51
  * @param {boolean} [options.connectWithNoPrimary=false] Sets if the driver should connect even if no primary is available
49
52
  * @param {number} [options.poolSize=5] Number of connections in the connection pool for each server instance, set to 5 as default for legacy reasons.
50
- * @param {boolean} [options.ssl=false] Use ssl connection (needs to have a mongod server with ssl support)
53
+ * @param {boolean} [options.ssl=false] Use ssl connection (needs to have a mongod server with ssl support)
54
+ * @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.
51
55
  * @param {object} [options.sslValidate=true] Validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher)
52
56
  * @param {array} [options.sslCA=null] Array of valid certificates either as Buffers or Strings (needs to have a mongod server with ssl support, 2.4 or higher)
53
57
  * @param {(Buffer|string)} [options.sslCert=null] String or buffer containing the certificate we wish to present (needs to have a mongod server with ssl support, 2.4 or higher)
54
58
  * @param {(Buffer|string)} [options.sslKey=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)
55
59
  * @param {(Buffer|string)} [options.sslPass=null] String or buffer containing the certificate password (needs to have a mongod server with ssl support, 2.4 or higher)
56
- * @param {object} [options.socketOptions=null] Socket options
57
- * @param {boolean} [options.socketOptions.noDelay=true] TCP Socket NoDelay option.
58
- * @param {number} [options.socketOptions.keepAlive=0] TCP KeepAlive on the socket with a X ms delay before start.
59
- * @param {number} [options.socketOptions.connectTimeoutMS=0] TCP Connection timeout setting
60
- * @param {number} [options.socketOptions.socketTimeoutMS=0] TCP Socket timeout setting
60
+ * @param {object} [options.socketOptions=null] Socket options
61
+ * @param {boolean} [options.socketOptions.noDelay=true] TCP Socket NoDelay option.
62
+ * @param {number} [options.socketOptions.keepAlive=0] TCP KeepAlive on the socket with a X ms delay before start.
63
+ * @param {number} [options.socketOptions.connectTimeoutMS=10000] TCP Connection timeout setting
64
+ * @param {number} [options.socketOptions.socketTimeoutMS=0] TCP Socket timeout setting
61
65
  * @fires ReplSet#connect
62
66
  * @fires ReplSet#ha
63
67
  * @fires ReplSet#joined
@@ -70,7 +74,7 @@ var EventEmitter = require('events').EventEmitter
70
74
  * @fires ReplSet#parseError
71
75
  * @return {ReplSet} a ReplSet instance.
72
76
  */
73
- var ReplSet = function(servers, options) {
77
+ var ReplSet = function(servers, options) {
74
78
  if(!(this instanceof ReplSet)) return new ReplSet(servers, options);
75
79
  options = options || {};
76
80
  var self = this;
@@ -78,7 +82,7 @@ var ReplSet = function(servers, options) {
78
82
  // Ensure all the instances are Server
79
83
  for(var i = 0; i < servers.length; i++) {
80
84
  if(!(servers[i] instanceof Server)) {
81
- throw new MongoError("all seed list instances must be of the Server type");
85
+ throw MongoError.create({message: "all seed list instances must be of the Server type", driver:true});
82
86
  }
83
87
  }
84
88
 
@@ -105,7 +109,7 @@ var ReplSet = function(servers, options) {
105
109
  // Final options
106
110
  var finalOptions = shallowClone(options);
107
111
 
108
- // Default values
112
+ // Default values
109
113
  finalOptions.size = typeof options.poolSize == 'number' ? options.poolSize : 5;
110
114
  finalOptions.reconnect = typeof options.auto_reconnect == 'boolean' ? options.auto_reconnect : true;
111
115
  finalOptions.emitError = typeof options.emitError == 'boolean' ? options.emitError : true;
@@ -120,11 +124,11 @@ var ReplSet = function(servers, options) {
120
124
  this.connectTimeoutMS = options.socketOptions.connectTimeoutMS;
121
125
  finalOptions.connectionTimeout = options.socketOptions.connectTimeoutMS;
122
126
  }
123
-
127
+
124
128
  if(options.socketOptions.socketTimeoutMS) {
125
129
  finalOptions.socketTimeout = options.socketOptions.socketTimeoutMS;
126
130
  }
127
- }
131
+ }
128
132
 
129
133
  // Get the name
130
134
  var replicaSet = options.replicaSet || options.rs_name;
@@ -178,6 +182,7 @@ var ReplSet = function(servers, options) {
178
182
  if(options.sslKey) finalOptions.key = options.sslKey;
179
183
  if(options.sslCert) finalOptions.cert = options.sslCert;
180
184
  if(options.sslPass) finalOptions.passphrase = options.sslPass;
185
+ if(options.checkServerIdentity) finalOptions.checkServerIdentity = options.checkServerIdentity;
181
186
 
182
187
  // Create the ReplSet
183
188
  var replset = new CReplSet(seedlist, finalOptions)
@@ -209,13 +214,13 @@ var ReplSet = function(servers, options) {
209
214
  // Options
210
215
  , options: options
211
216
  }
212
-
217
+
213
218
  // Debug
214
219
  if(debug) {
215
220
  // Last ismaster
216
221
  Object.defineProperty(this, 'replset', {
217
222
  enumerable:true, get: function() { return replset; }
218
- });
223
+ });
219
224
  }
220
225
 
221
226
  // Last ismaster
@@ -224,9 +229,9 @@ var ReplSet = function(servers, options) {
224
229
  });
225
230
 
226
231
  // BSON property
227
- Object.defineProperty(this, 'bson', {
228
- enumerable: true, get: function() {
229
- return replset.bson;
232
+ Object.defineProperty(this, 'bson', {
233
+ enumerable: true, get: function() {
234
+ return replset.bson;
230
235
  }
231
236
  });
232
237
 
@@ -240,6 +245,8 @@ var ReplSet = function(servers, options) {
240
245
  */
241
246
  inherits(ReplSet, EventEmitter);
242
247
 
248
+ var define = ReplSet.define = new Define('ReplSet', ReplSet, false);
249
+
243
250
  // Ensure the right read Preference object
244
251
  var translateReadPreference = function(options) {
245
252
  if(typeof options.readPreference == 'string') {
@@ -249,13 +256,15 @@ var translateReadPreference = function(options) {
249
256
  , options.readPreference.tags);
250
257
  }
251
258
 
252
- return options;
259
+ return options;
253
260
  }
254
261
 
255
262
  ReplSet.prototype.parserType = function() {
256
263
  return this.s.replset.parserType();
257
264
  }
258
265
 
266
+ define.classMethod('parserType', {callback: false, promise:false, returns: [String]});
267
+
259
268
  // Connect method
260
269
  ReplSet.prototype.connect = function(db, _options, callback) {
261
270
  var self = this;
@@ -304,12 +313,12 @@ ReplSet.prototype.connect = function(db, _options, callback) {
304
313
 
305
314
  // Relay ha
306
315
  var relayHa = function(t, state) {
307
- self.emit('ha', t, state);
316
+ self.emit('ha', t, state);
308
317
 
309
318
  if(t == 'start') {
310
- self.emit('ha_connect', t, state);
319
+ self.emit('ha_connect', t, state);
311
320
  } else if(t == 'end') {
312
- self.emit('ha_ismaster', t, state);
321
+ self.emit('ha_ismaster', t, state);
313
322
  }
314
323
  }
315
324
 
@@ -318,24 +327,24 @@ ReplSet.prototype.connect = function(db, _options, callback) {
318
327
  self.s.replset.on('left', relay('left'));
319
328
  self.s.replset.on('ping', relay('ping'));
320
329
  self.s.replset.on('ha', relayHa);
321
-
330
+
322
331
  self.s.replset.on('fullsetup', function(topology) {
323
332
  self.emit('fullsetup', null, self);
324
333
  });
325
-
334
+
326
335
  self.s.replset.on('all', function(topology) {
327
336
  self.emit('all', null, self);
328
337
  });
329
338
 
330
339
  // Emit open event
331
- self.emit('open', null, self);
340
+ self.emit('open', null, self);
332
341
 
333
342
  // Return correctly
334
343
  try {
335
344
  callback(null, self);
336
- } catch(err) {
345
+ } catch(err) {
337
346
  process.nextTick(function() { throw err; })
338
- }
347
+ }
339
348
  }
340
349
 
341
350
  // Error handler
@@ -352,12 +361,12 @@ ReplSet.prototype.connect = function(db, _options, callback) {
352
361
  // Try to callback
353
362
  try {
354
363
  callback(err);
355
- } catch(err) {
364
+ } catch(err) {
356
365
  if(!self.s.replset.isConnected())
357
366
  process.nextTick(function() { throw err; })
358
367
  }
359
368
  }
360
- }
369
+ }
361
370
 
362
371
  // Set up listeners
363
372
  self.s.replset.once('timeout', connectErrorHandler('timeout'));
@@ -367,44 +376,62 @@ ReplSet.prototype.connect = function(db, _options, callback) {
367
376
 
368
377
  // Start connection
369
378
  self.s.replset.connect(_options);
370
- }
379
+ }
371
380
 
372
381
  // Server capabilities
373
382
  ReplSet.prototype.capabilities = function() {
374
383
  if(this.s.sCapabilities) return this.s.sCapabilities;
384
+ if(this.s.replset.lastIsMaster() == null) return null;
375
385
  this.s.sCapabilities = new ServerCapabilities(this.s.replset.lastIsMaster());
376
386
  return this.s.sCapabilities;
377
387
  }
378
388
 
389
+ define.classMethod('capabilities', {callback: false, promise:false, returns: [ServerCapabilities]});
390
+
379
391
  // Command
380
392
  ReplSet.prototype.command = function(ns, cmd, options, callback) {
381
393
  options = translateReadPreference(options);
382
394
  this.s.replset.command(ns, cmd, options, callback);
383
395
  }
384
396
 
397
+ define.classMethod('command', {callback: true, promise:false});
398
+
385
399
  // Insert
386
400
  ReplSet.prototype.insert = function(ns, ops, options, callback) {
387
401
  this.s.replset.insert(ns, ops, options, callback);
388
402
  }
389
403
 
404
+ define.classMethod('insert', {callback: true, promise:false});
405
+
390
406
  // Update
391
407
  ReplSet.prototype.update = function(ns, ops, options, callback) {
392
408
  this.s.replset.update(ns, ops, options, callback);
393
409
  }
394
410
 
411
+ define.classMethod('update', {callback: true, promise:false});
412
+
395
413
  // Remove
396
414
  ReplSet.prototype.remove = function(ns, ops, options, callback) {
397
415
  this.s.replset.remove(ns, ops, options, callback);
398
416
  }
399
417
 
418
+ define.classMethod('remove', {callback: true, promise:false});
419
+
420
+ // Destroyed
421
+ ReplSet.prototype.isDestroyed = function() {
422
+ return this.s.replset.isDestroyed();
423
+ }
424
+
400
425
  // IsConnected
401
426
  ReplSet.prototype.isConnected = function() {
402
427
  return this.s.replset.isConnected();
403
428
  }
404
429
 
430
+ define.classMethod('isConnected', {callback: false, promise:false, returns: [Boolean]});
431
+
405
432
  ReplSet.prototype.setBSONParserType = function(type) {
406
433
  return this.s.replset.setBSONParserType(type);
407
- }
434
+ }
408
435
 
409
436
  // Insert
410
437
  ReplSet.prototype.cursor = function(ns, cmd, options) {
@@ -413,6 +440,8 @@ ReplSet.prototype.cursor = function(ns, cmd, options) {
413
440
  return this.s.replset.cursor(ns, cmd, options);
414
441
  }
415
442
 
443
+ define.classMethod('cursor', {callback: false, promise:false, returns: [Cursor, AggregationCursor, CommandCursor]});
444
+
416
445
  ReplSet.prototype.lastIsMaster = function() {
417
446
  return this.s.replset.lastIsMaster();
418
447
  }
@@ -429,14 +458,18 @@ ReplSet.prototype.close = function(forceClosed) {
429
458
  var events = ['timeout', 'error', 'close', 'joined', 'left'];
430
459
  events.forEach(function(e) {
431
460
  self.removeAllListeners(e);
432
- });
461
+ });
433
462
  }
434
463
 
464
+ define.classMethod('close', {callback: false, promise:false});
465
+
435
466
  ReplSet.prototype.auth = function() {
436
467
  var args = Array.prototype.slice.call(arguments, 0);
437
468
  this.s.replset.auth.apply(this.s.replset, args);
438
469
  }
439
470
 
471
+ define.classMethod('auth', {callback: true, promise:false});
472
+
440
473
  /**
441
474
  * All raw connections
442
475
  * @method
@@ -444,7 +477,9 @@ ReplSet.prototype.auth = function() {
444
477
  */
445
478
  ReplSet.prototype.connections = function() {
446
479
  return this.s.replset.connections();
447
- }
480
+ }
481
+
482
+ define.classMethod('connections', {callback: false, promise:false, returns:[Array]});
448
483
 
449
484
  /**
450
485
  * A replset connect event, used to verify that the connection is up and running
@@ -524,4 +559,4 @@ ReplSet.prototype.connections = function() {
524
559
  * @type {object}
525
560
  */
526
561
 
527
- module.exports = ReplSet;
562
+ module.exports = ReplSet;
package/lib/server.js CHANGED
@@ -4,9 +4,12 @@ var EventEmitter = require('events').EventEmitter
4
4
  , inherits = require('util').inherits
5
5
  , CServer = require('mongodb-core').Server
6
6
  , Cursor = require('./cursor')
7
+ , AggregationCursor = require('./aggregation_cursor')
8
+ , CommandCursor = require('./command_cursor')
7
9
  , f = require('util').format
8
10
  , ServerCapabilities = require('./topology_base').ServerCapabilities
9
11
  , Store = require('./topology_base').Store
12
+ , Define = require('./metadata')
10
13
  , MongoError = require('mongodb-core').MongoError
11
14
  , shallowClone = require('./utils').shallowClone;
12
15
 
@@ -37,6 +40,7 @@ var EventEmitter = require('events').EventEmitter
37
40
  * @param {number} [options.poolSize=5] Number of connections in the connection pool for each server instance, set to 5 as default for legacy reasons.
38
41
  * @param {boolean} [options.ssl=false] Use ssl connection (needs to have a mongod server with ssl support)
39
42
  * @param {object} [options.sslValidate=true] Validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher)
43
+ * @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.
40
44
  * @param {array} [options.sslCA=null] Array of valid certificates either as Buffers or Strings (needs to have a mongod server with ssl support, 2.4 or higher)
41
45
  * @param {(Buffer|string)} [options.sslCert=null] String or buffer containing the certificate we wish to present (needs to have a mongod server with ssl support, 2.4 or higher)
42
46
  * @param {(Buffer|string)} [options.sslKey=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)
@@ -79,7 +83,7 @@ var Server = function(host, port, options) {
79
83
  port = null;
80
84
  }
81
85
  } else if(port == null) {
82
- throw new MongoError('port must be specified');
86
+ throw MongoError.create({message: 'port must be specified', driver:true});
83
87
  }
84
88
 
85
89
  // Clone options
@@ -195,10 +199,14 @@ var Server = function(host, port, options) {
195
199
 
196
200
  inherits(Server, EventEmitter);
197
201
 
202
+ var define = Server.define = new Define('Server', Server, false);
203
+
198
204
  Server.prototype.parserType = function() {
199
205
  return this.s.server.parserType();
200
206
  }
201
207
 
208
+ define.classMethod('parserType', {callback: false, promise:false, returns: [String]});
209
+
202
210
  // Connect
203
211
  Server.prototype.connect = function(db, _options, callback) {
204
212
  var self = this;
@@ -271,6 +279,7 @@ Server.prototype.connect = function(db, _options, callback) {
271
279
  try {
272
280
  callback(null, self);
273
281
  } catch(err) {
282
+ console.log(err.stack)
274
283
  process.nextTick(function() { throw err; })
275
284
  }
276
285
  }
@@ -297,41 +306,60 @@ Server.prototype.connect = function(db, _options, callback) {
297
306
  // Server capabilities
298
307
  Server.prototype.capabilities = function() {
299
308
  if(this.s.sCapabilities) return this.s.sCapabilities;
309
+ if(this.s.server.lastIsMaster() == null) return null;
300
310
  this.s.sCapabilities = new ServerCapabilities(this.s.server.lastIsMaster());
301
311
  return this.s.sCapabilities;
302
312
  }
303
313
 
314
+ define.classMethod('capabilities', {callback: false, promise:false, returns: [ServerCapabilities]});
315
+
304
316
  // Command
305
317
  Server.prototype.command = function(ns, cmd, options, callback) {
306
318
  this.s.server.command(ns, cmd, options, callback);
307
319
  }
308
320
 
321
+ define.classMethod('command', {callback: true, promise:false});
322
+
309
323
  // Insert
310
324
  Server.prototype.insert = function(ns, ops, options, callback) {
311
325
  this.s.server.insert(ns, ops, options, callback);
312
326
  }
313
327
 
328
+ define.classMethod('insert', {callback: true, promise:false});
329
+
314
330
  // Update
315
331
  Server.prototype.update = function(ns, ops, options, callback) {
316
332
  this.s.server.update(ns, ops, options, callback);
317
333
  }
318
334
 
335
+ define.classMethod('update', {callback: true, promise:false});
336
+
319
337
  // Remove
320
338
  Server.prototype.remove = function(ns, ops, options, callback) {
321
339
  this.s.server.remove(ns, ops, options, callback);
322
340
  }
323
341
 
342
+ define.classMethod('remove', {callback: true, promise:false});
343
+
324
344
  // IsConnected
325
345
  Server.prototype.isConnected = function() {
326
346
  return this.s.server.isConnected();
327
347
  }
328
348
 
349
+ Server.prototype.isDestroyed = function() {
350
+ return this.s.server.isDestroyed();
351
+ }
352
+
353
+ define.classMethod('isConnected', {callback: false, promise:false, returns: [Boolean]});
354
+
329
355
  // Insert
330
356
  Server.prototype.cursor = function(ns, cmd, options) {
331
357
  options.disconnectHandler = this.s.store;
332
358
  return this.s.server.cursor(ns, cmd, options);
333
359
  }
334
360
 
361
+ define.classMethod('cursor', {callback: false, promise:false, returns: [Cursor, AggregationCursor, CommandCursor]});
362
+
335
363
  Server.prototype.setBSONParserType = function(type) {
336
364
  return this.s.server.setBSONParserType(type);
337
365
  }
@@ -349,11 +377,15 @@ Server.prototype.close = function(forceClosed) {
349
377
  }
350
378
  }
351
379
 
380
+ define.classMethod('close', {callback: false, promise:false});
381
+
352
382
  Server.prototype.auth = function() {
353
383
  var args = Array.prototype.slice.call(arguments, 0);
354
384
  this.s.server.auth.apply(this.s.server, args);
355
385
  }
356
386
 
387
+ define.classMethod('auth', {callback: true, promise:false});
388
+
357
389
  /**
358
390
  * All raw connections
359
391
  * @method
@@ -363,6 +395,8 @@ Server.prototype.connections = function() {
363
395
  return this.s.server.connections();
364
396
  }
365
397
 
398
+ define.classMethod('connections', {callback: false, promise:false, returns:[Array]});
399
+
366
400
  /**
367
401
  * Server connect event
368
402
  *
@@ -22,12 +22,18 @@ var Store = function(topology, storeOptions) {
22
22
  }
23
23
 
24
24
  Store.prototype.add = function(opType, ns, ops, options, callback) {
25
- if(this.s.storeOptions.force) return callback(new MongoError("db closed by application"));
26
- if(this.s.storeOptions.bufferMaxEntries == 0) return callback(new MongoError(f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries)));
25
+ if(this.s.storeOptions.force) {
26
+ return callback(MongoError.create({message: "db closed by application", driver:true}));
27
+ }
28
+
29
+ if(this.s.storeOptions.bufferMaxEntries == 0) {
30
+ return callback(MongoError.create({message: f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries), driver:true }));
31
+ }
32
+
27
33
  if(this.s.storeOptions.bufferMaxEntries > 0 && this.s.storedOps.length > this.s.storeOptions.bufferMaxEntries) {
28
34
  while(this.s.storedOps.length > 0) {
29
35
  var op = this.s.storedOps.shift();
30
- op.c(new MongoError(f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries)));
36
+ op.c(MongoError.create({message: f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries), driver:true }));
31
37
  }
32
38
 
33
39
  return;
@@ -37,12 +43,18 @@ Store.prototype.add = function(opType, ns, ops, options, callback) {
37
43
  }
38
44
 
39
45
  Store.prototype.addObjectAndMethod = function(opType, object, method, params, callback) {
40
- if(this.s.storeOptions.force) return callback(new MongoError("db closed by application"));
41
- if(this.s.storeOptions.bufferMaxEntries == 0) return callback(new MongoError(f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries)));
46
+ if(this.s.storeOptions.force) {
47
+ return callback(MongoError.create({message: "db closed by application", driver:true }));
48
+ }
49
+
50
+ if(this.s.storeOptions.bufferMaxEntries == 0) {
51
+ return callback(MongoError.create({message: f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries), driver:true }));
52
+ }
53
+
42
54
  if(this.s.storeOptions.bufferMaxEntries > 0 && this.s.storedOps.length > this.s.storeOptions.bufferMaxEntries) {
43
55
  while(this.s.storedOps.length > 0) {
44
56
  var op = this.s.storedOps.shift();
45
- op.c(new MongoError(f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries)));
57
+ op.c(MongoError.create({message: f("no connection available for operation and number of stored operation > %s", this.s.storeOptions.bufferMaxEntries), driver:true }));
46
58
  }
47
59
 
48
60
  return;
@@ -53,7 +65,7 @@ Store.prototype.addObjectAndMethod = function(opType, object, method, params, ca
53
65
 
54
66
  Store.prototype.flush = function() {
55
67
  while(this.s.storedOps.length > 0) {
56
- this.s.storedOps.shift().c(new MongoError(f("no connection available for operation")));
68
+ this.s.storedOps.shift().c(MongoError.create({message: f("no connection available for operation"), driver:true }));
57
69
  }
58
70
  }
59
71
 
@@ -72,7 +84,7 @@ Store.prototype.execute = function() {
72
84
  } else {
73
85
  this.s.topology[op.t](op.n, op.o, op.op, op.c);
74
86
  }
75
- }
87
+ }
76
88
  }
77
89
 
78
90
  Store.prototype.all = function() {
@@ -85,7 +97,7 @@ var ServerCapabilities = function(ismaster) {
85
97
  Object.defineProperty(object, name, {
86
98
  enumerable: true
87
99
  , get: function () { return value; }
88
- });
100
+ });
89
101
  }
90
102
 
91
103
  // Capabilities
@@ -137,4 +149,4 @@ var ServerCapabilities = function(ismaster) {
137
149
  }
138
150
 
139
151
  exports.Store = Store;
140
- exports.ServerCapabilities = ServerCapabilities;
152
+ exports.ServerCapabilities = ServerCapabilities;