bool _run(OperationContext* txn, const string& , BSONObj& cmdObj, int, string& errmsg, BSONObjBuilder& result, bool fromRepl) { if( cmdObj["replSetReconfig"].type() != Object ) { errmsg = "no configuration specified"; return false; } ReplicationCoordinator::ReplSetReconfigArgs parsedArgs; parsedArgs.newConfigObj = cmdObj["replSetReconfig"].Obj(); parsedArgs.force = cmdObj.hasField("force") && cmdObj["force"].trueValue(); Status status = getGlobalReplicationCoordinator()->processReplSetReconfig(txn, parsedArgs, &result); if (status.isOK() && !parsedArgs.force) { logOpInitiate(txn, BSON("msg" << "Reconfig set" << "version" << parsedArgs.newConfigObj["version"])); } return appendCommandStatus(result, status); }
/* comment MUST only be set when initiating the set by the initiator */ void ReplSetConfig::saveConfigLocally(bo comment) { checkRsConfig(); log() << "replSet info saving a newer config version to local.system.replset" << rsLog; { writelock lk(""); Client::Context cx( rsConfigNs ); cx.db()->flushFiles(true); //theReplSet->lastOpTimeWritten = ??; //rather than above, do a logOp()? probably BSONObj o = asBson(); Helpers::putSingletonGod(rsConfigNs.c_str(), o, false/*logOp=false; local db so would work regardless...*/); if( !comment.isEmpty() ) logOpInitiate(comment); cx.db()->flushFiles(true); } DEV log() << "replSet saveConfigLocally done" << rsLog; }
void ReplicationCoordinatorExternalStateImpl::initiateOplog(OperationContext* txn) { createOplog(txn); logOpInitiate(txn, BSON("msg" << "initiating set")); }