a801fbe2c6e6037f92777281ebd260696fb123ed
[aai/esr-gui.git] /
1 "use strict";
2
3 var needSlaveOk = ['primaryPreferred', 'secondary', 'secondaryPreferred', 'nearest'];
4
5 /**
6  * @fileOverview The **ReadPreference** class is a class that represents a MongoDB ReadPreference and is
7  * used to construct connections.
8  *
9  * @example
10  * var ReplSet = require('mongodb-core').ReplSet
11  *   , ReadPreference = require('mongodb-core').ReadPreference
12  *   , assert = require('assert');
13  *
14  * var server = new ReplSet([{host: 'localhost', port: 30000}], {setName: 'rs'});
15  * // Wait for the connection event
16  * server.on('connect', function(server) {
17  *   var cursor = server.cursor('db.test'
18  *     , {find: 'db.test', query: {}}
19  *     , {readPreference: new ReadPreference('secondary')});
20  *   cursor.next(function(err, doc) {
21  *     server.destroy();
22  *   });
23  * });
24  *
25  * // Start connecting
26  * server.connect();
27  */
28
29 /**
30  * Creates a new Pool instance
31  * @class
32  * @param {string} preference A string describing the preference (primary|primaryPreferred|secondary|secondaryPreferred|nearest)
33  * @param {array} tags The tags object
34  * @param {object} [options] Additional read preference options
35  * @param {number} [options.maxStalenessMS] Max Secondary Read Stalleness in Miliseconds
36  * @property {string} preference The preference string (primary|primaryPreferred|secondary|secondaryPreferred|nearest)
37  * @property {array} tags The tags object
38  * @property {object} options Additional read preference options
39  * @property {number} maxStalenessMS MaxStalenessMS value for the read preference
40  * @return {ReadPreference}
41  */
42 var ReadPreference = function(preference, tags, options) {
43   this.preference = preference;
44   this.tags = tags;
45   this.options = options;
46
47   // If no tags were passed in
48   if(tags && typeof tags == 'object') {
49     this.options = tags, tags = null;
50   }
51
52   // Add the maxStalenessMS value to the read Preference
53   if(this.options && this.options.maxStalenessMS) {
54     this.maxStalenessMS = this.options.maxStalenessMS;
55   }
56 }
57
58 /**
59  * This needs slaveOk bit set
60  * @method
61  * @return {boolean}
62  */
63 ReadPreference.prototype.slaveOk = function() {
64   return needSlaveOk.indexOf(this.preference) != -1;
65 }
66
67 /**
68  * Are the two read preference equal
69  * @method
70  * @return {boolean}
71  */
72 ReadPreference.prototype.equals = function(readPreference) {
73   return readPreference.preference == this.preference;
74 }
75
76 /**
77  * Return JSON representation
78  * @method
79  * @return {Object}
80  */
81 ReadPreference.prototype.toJSON = function() {
82   var readPreference = {mode: this.preference};
83   if(Array.isArray(this.tags)) readPreference.tags = this.tags;
84   if(this.maxStalenessMS) readPreference.maxStalenessMS = this.maxStalenessMS;
85   return readPreference;
86 }
87
88 /**
89  * Primary read preference
90  * @method
91  * @return {ReadPreference}
92  */
93 ReadPreference.primary = new ReadPreference('primary');
94 /**
95  * Primary Preferred read preference
96  * @method
97  * @return {ReadPreference}
98  */
99 ReadPreference.primaryPreferred = new ReadPreference('primaryPreferred');
100 /**
101  * Secondary read preference
102  * @method
103  * @return {ReadPreference}
104  */
105 ReadPreference.secondary = new ReadPreference('secondary');
106 /**
107  * Secondary Preferred read preference
108  * @method
109  * @return {ReadPreference}
110  */
111 ReadPreference.secondaryPreferred = new ReadPreference('secondaryPreferred');
112 /**
113  * Nearest read preference
114  * @method
115  * @return {ReadPreference}
116  */
117 ReadPreference.nearest = new ReadPreference('nearest');
118
119 module.exports = ReadPreference;