From ecdef30666605e1891eee276a8afff2eb1be270e Mon Sep 17 00:00:00 2001 From: Kristina Date: Fri, 6 May 2011 10:43:39 -0400 Subject: don't allow switching from localhost to hostname --- db/repl/rs_config.cpp | 7 ++++--- jstests/replsets/remove1.js | 19 ++++++++++++------- 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::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}); -- cgit v1.2.1