mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
104 lines
3.3 KiB
JavaScript
Executable File
104 lines
3.3 KiB
JavaScript
Executable File
"use strict";
|
|
|
|
/**
|
|
* @fileOverview The **ReadPreference** class is a class that represents a MongoDB ReadPreference and is
|
|
* used to construct connections.
|
|
*
|
|
* @example
|
|
* var Db = require('mongodb').Db,
|
|
* ReplSet = require('mongodb').ReplSet,
|
|
* Server = require('mongodb').Server,
|
|
* ReadPreference = require('mongodb').ReadPreference,
|
|
* test = require('assert');
|
|
* // Connect using ReplSet
|
|
* var server = new Server('localhost', 27017);
|
|
* var db = new Db('test', new ReplSet([server]));
|
|
* db.open(function(err, db) {
|
|
* test.equal(null, err);
|
|
* // Perform a read
|
|
* var cursor = db.collection('t').find({});
|
|
* cursor.setReadPreference(ReadPreference.PRIMARY);
|
|
* cursor.toArray(function(err, docs) {
|
|
* test.equal(null, err);
|
|
* db.close();
|
|
* });
|
|
* });
|
|
*/
|
|
|
|
/**
|
|
* Creates a new ReadPreference instance
|
|
*
|
|
* Read Preferences
|
|
* - **ReadPreference.PRIMARY**, Read from primary only. All operations produce an error (throw an exception where applicable) if primary is unavailable. Cannot be combined with tags (This is the default.).
|
|
* - **ReadPreference.PRIMARY_PREFERRED**, Read from primary if available, otherwise a secondary.
|
|
* - **ReadPreference.SECONDARY**, Read from secondary if available, otherwise error.
|
|
* - **ReadPreference.SECONDARY_PREFERRED**, Read from a secondary if available, otherwise read from the primary.
|
|
* - **ReadPreference.NEAREST**, All modes read from among the nearest candidates, but unlike other modes, NEAREST will include both the primary and all secondaries in the random selection.
|
|
*
|
|
* @class
|
|
* @param {string} mode The ReadPreference mode as listed above.
|
|
* @param {object} tags An object representing read preference tags.
|
|
* @property {string} mode The ReadPreference mode.
|
|
* @property {object} tags The ReadPreference tags.
|
|
* @return {ReadPreference} a ReadPreference instance.
|
|
*/
|
|
var ReadPreference = function(mode, tags) {
|
|
if(!(this instanceof ReadPreference))
|
|
return new ReadPreference(mode, tags);
|
|
this._type = 'ReadPreference';
|
|
this.mode = mode;
|
|
this.tags = tags;
|
|
}
|
|
|
|
/**
|
|
* Validate if a mode is legal
|
|
*
|
|
* @method
|
|
* @param {string} mode The string representing the read preference mode.
|
|
* @return {boolean}
|
|
*/
|
|
ReadPreference.isValid = function(_mode) {
|
|
return (_mode == ReadPreference.PRIMARY || _mode == ReadPreference.PRIMARY_PREFERRED
|
|
|| _mode == ReadPreference.SECONDARY || _mode == ReadPreference.SECONDARY_PREFERRED
|
|
|| _mode == ReadPreference.NEAREST
|
|
|| _mode == true || _mode == false || _mode == null);
|
|
}
|
|
|
|
/**
|
|
* Validate if a mode is legal
|
|
*
|
|
* @method
|
|
* @param {string} mode The string representing the read preference mode.
|
|
* @return {boolean}
|
|
*/
|
|
ReadPreference.prototype.isValid = function(mode) {
|
|
var _mode = typeof mode == 'string' ? mode : this.mode;
|
|
return ReadPreference.isValid(_mode);
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
ReadPreference.prototype.toObject = function() {
|
|
var object = {mode:this.mode};
|
|
|
|
if(this.tags != null) {
|
|
object['tags'] = this.tags;
|
|
}
|
|
|
|
return object;
|
|
}
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
ReadPreference.PRIMARY = 'primary';
|
|
ReadPreference.PRIMARY_PREFERRED = 'primaryPreferred';
|
|
ReadPreference.SECONDARY = 'secondary';
|
|
ReadPreference.SECONDARY_PREFERRED = 'secondaryPreferred';
|
|
ReadPreference.NEAREST = 'nearest'
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
module.exports = ReadPreference; |