diff options
author | Kristina <kristina@10gen.com> | 2011-05-06 10:43:39 -0400 |
---|---|---|
committer | Kristina <kristina@10gen.com> | 2011-05-06 10:43:45 -0400 |
commit | ecdef30666605e1891eee276a8afff2eb1be270e (patch) | |
tree | 8543821d6b62287f23d254f0f20e033159e79ef2 | |
parent | 80d6f91f1936d945dcc39a62d575f3f852eba33c (diff) | |
download | mongo-ecdef30666605e1891eee276a8afff2eb1be270e.tar.gz |
don't allow switching from localhost to hostname
-rw-r--r-- | db/repl/rs_config.cpp | 7 | ||||
-rw-r--r-- | jstests/replsets/remove1.js | 19 | ||||
-rw-r--r-- | jstests/replsets/replsetadd.js | 12 |
3 files changed, 26 insertions, 12 deletions
diff --git a/db/repl/rs_config.cpp b/db/repl/rs_config.cpp index 229bddc120e..28b5482b532 100644 --- a/db/repl/rs_config.cpp +++ b/db/repl/rs_config.cpp @@ -158,9 +158,10 @@ namespace mongo { int me = 0; for( vector<ReplSetConfig::MemberCfg>::const_iterator i = n.members.begin(); i != n.members.end(); i++ ) { const ReplSetConfig::MemberCfg& m = *i; - if ( isLocalHost && !m.h.isLocalHost() ) { - log() << "reconfig error: " << m.h.toString() << " cannot be used from localhost replset" << rsLog; - uasserted(13645, "hosts cannot change from localhost to hostname"); + if ( (isLocalHost && !m.h.isLocalHost()) || (!isLocalHost && m.h.isLocalHost())) { + log() << "reconfig error, cannot switch between localhost and hostnames: " + << m.h.toString() << rsLog; + uasserted(13645, "hosts cannot switch between localhost and hostname"); } if( old.count(m.h) ) { const ReplSetConfig::MemberCfg& oldCfg = *old[m.h]; diff --git a/jstests/replsets/remove1.js b/jstests/replsets/remove1.js index d6d36e40f25..9920605760f 100644 --- a/jstests/replsets/remove1.js +++ b/jstests/replsets/remove1.js @@ -33,13 +33,18 @@ var config = replTest.getReplSetConfig(); config.members.pop(); config.version = 2; -try { - master.getDB("admin").runCommand({replSetReconfig:config}); -} -catch(e) { - print(e); -} -reconnect(master); +assert.soon(function() { + try { + master.getDB("admin").runCommand({replSetReconfig:config}); + } + catch(e) { + print(e); + } + + reconnect(master); + var c = master.getDB("local").system.replset.findOne(); + return c.version == 2; + }); print("Remove slave1"); diff --git a/jstests/replsets/replsetadd.js b/jstests/replsets/replsetadd.js index 4343862b5f2..44ef7c61fdf 100644 --- a/jstests/replsets/replsetadd.js +++ b/jstests/replsets/replsetadd.js @@ -8,7 +8,11 @@ doTest = function( signal ) { // Initiate replica set assert.soon(function() { - var res = first.getDB("admin").runCommand({replSetInitiate: null}); + var res = first.getDB("admin").runCommand({replSetInitiate: { + _id : 'testSet', + members : [{_id : 0, host : "localhost:"+replTest.ports[0]}] + } + }); return res['ok'] == 1; }); @@ -18,6 +22,8 @@ doTest = function( signal ) { return result['ok'] == 1; }); + replTest.getMaster(); + // Start a second node var second = replTest.add(); @@ -31,14 +37,16 @@ doTest = function( signal ) { print(e); } - // try to change to hostnames (from localhost) + print("try to change to localhost to "+getHostName()); var master = replTest.getMaster(); + var config = master.getDB("local").system.replset.findOne(); config.version++; config.members.forEach(function(m) { m.host = m.host.replace("localhost", getHostName()); print(m.host); }); + printjson(config); print("trying reconfig that shouldn't work"); var result = master.getDB("admin").runCommand({replSetReconfig: config}); |