Skip to content

Commit daeda6d

Browse files
committed
Allow reads from arbiter for single server connection, NODE-117
1 parent e88737e commit daeda6d

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

lib/mongodb/connection/server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ Server.prototype.checkoutWriter = function(read) {
744744
*/
745745
var canCheckoutReader = function(self) {
746746
// We cannot write to an arbiter or secondary server
747-
if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true) {
747+
if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true && self.isSetMember()) {
748748
return new Error("Cannot write to an arbiter");
749749
} else if(self._readPreference != null) {
750750
// If the read preference is Primary and the instance is not a master return an error

test/runners/replicaset_runner.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ module.exports = function(configurations) {
5252
, '/test/tests/repl_set/replicaset_examples_tests.js'
5353
, '/test/tests/repl_set/recovering_server_tests.js'
5454
, '/test/tests/repl_set/batch_api_tests.js'
55+
, '/test/tests/repl_set/individual_sets_connections_tests.js'
5556
]
5657
);
5758

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
exports['Should correctly connect to arbiter with single connection'] = function(configuration, test) {
2+
var mongo = configuration.getMongoPackage()
3+
, ReplSetServers = mongo.ReplSetServers
4+
, Server = mongo.Server
5+
, Db = mongo.Db;
6+
7+
// Replset start port
8+
var replicasetManager = configuration.getReplicasetManager();
9+
// Get the arbiters
10+
replicasetManager.arbiters(function(err, arbiters) {
11+
test.equal(1, arbiters.length);
12+
var host = arbiters[0].split(":")[0];
13+
var port = parseInt(arbiters[0].split(":")[1], 10);
14+
var db = new Db('integration_test_', new Server(host, port), {w:1});
15+
db.open(function(err, p_db) {
16+
test.equal(null, err);
17+
18+
p_db.command({ismaster: true}, function(err, result) {
19+
test.equal(null, err);
20+
21+
p_db.close();
22+
test.done();
23+
});
24+
})
25+
});
26+
}

test/tests/repl_set/read_preferences_tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ exports['Connection to a arbiter host with primary preference should give error'
874874
// Grab a collection
875875
p_db.createCollection('read_preference_single_test_0', function(err, collection) {
876876
test.ok(err instanceof Error);
877-
test.equal('Cannot write to an arbiter', err.message);
877+
test.equal('string', typeof err.message);
878878
p_db.close();
879879
test.done();
880880
});

0 commit comments

Comments
 (0)