From 8e027b4f36fdfe6fbe9c1949e2aaef19b64224cc Mon Sep 17 00:00:00 2001 From: dwight Date: Sat, 30 Oct 2010 14:56:56 -0400 Subject: [PATCH] comments and cleaning and safer --- db/repl/rs_config.cpp | 8 +++++++- db/repl/rs_sync.cpp | 32 +++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/db/repl/rs_config.cpp b/db/repl/rs_config.cpp index 8e9ac80dc8f..a6802f5dc2c 100644 --- a/db/repl/rs_config.cpp +++ b/db/repl/rs_config.cpp @@ -137,7 +137,8 @@ namespace mongo { /** @param o old config @param n new config */ - /*static*/ bool ReplSetConfig::legalChange(const ReplSetConfig& o, const ReplSetConfig& n, string& errmsg) { + /*static*/ + bool ReplSetConfig::legalChange(const ReplSetConfig& o, const ReplSetConfig& n, string& errmsg) { assert( theReplSet ); if( o._id != n._id ) { @@ -170,6 +171,11 @@ namespace mongo { log() << "replSet reconfig error with member: " << m.h.toString() << rsLog; uasserted(13476, "buildIndexes may not change for members"); } + if( oldCfg.arbiterOnly != m.arbiterOnly ) { + log() << "replSet reconfig error with member: " << m.h.toString() << " arbiterOnly cannot change. remove and readd the member instead " << rsLog; + uasserted(13510, "arbiterOnly may not change for members"); + } + } } if( m.h.isSelf() ) me++; diff --git a/db/repl/rs_sync.cpp b/db/repl/rs_sync.cpp index 7307f492ab7..6a4122510cc 100644 --- a/db/repl/rs_sync.cpp +++ b/db/repl/rs_sync.cpp @@ -23,23 +23,10 @@ namespace mongo { using namespace bson; - extern unsigned replSetForceInitialSyncFailure; - void startSyncThread() { - static int n; - assert( n == 0 ); - n++; - - Client::initThread("rs_sync"); - cc().iAmSyncThread(); - theReplSet->syncThread(); - cc().shutdown(); - } - + /* apply the log op that is in param o */ void ReplSetImpl::syncApply(const BSONObj &o) { - //const char *op = o.getStringField("op"); - char db[MaxDatabaseNameLen]; const char *ns = o.getStringField("ns"); nsToDatabase(ns, db); @@ -58,6 +45,10 @@ namespace mongo { applyOperation_inlock(o); } + /* initial oplog application, during initial sync, after cloning. + @return false on failure. + this method returns an error and doesn't throw exceptions (i think). + */ bool ReplSetImpl::initialSyncOplogApplication( string hn, const Member *primary, @@ -397,7 +388,7 @@ namespace mongo { } catch(...) { sethbmsg("unexpected exception in syncThread()"); - // TODO : SET NOT SECONDARY here. + // TODO : SET NOT SECONDARY here? sleepsecs(60); } sleepsecs(1); @@ -410,4 +401,15 @@ namespace mongo { } } + void startSyncThread() { + static int n; + assert( n == 0 ); + n++; + + Client::initThread("rs_sync"); + cc().iAmSyncThread(); + theReplSet->syncThread(); + cc().shutdown(); + } + }