summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristina <kristina@10gen.com>2011-05-06 10:43:39 -0400
committerKristina <kristina@10gen.com>2011-05-06 10:43:45 -0400
commitecdef30666605e1891eee276a8afff2eb1be270e (patch)
tree8543821d6b62287f23d254f0f20e033159e79ef2
parent80d6f91f1936d945dcc39a62d575f3f852eba33c (diff)
downloadmongo-ecdef30666605e1891eee276a8afff2eb1be270e.tar.gz
don't allow switching from localhost to hostname
-rw-r--r--db/repl/rs_config.cpp7
-rw-r--r--jstests/replsets/remove1.js19
-rw-r--r--jstests/replsets/replsetadd.js12
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});