diff options
Diffstat (limited to 'db/repl')
-rw-r--r-- | db/repl/rs.h | 2 | ||||
-rw-r--r-- | db/repl/rs_initialsync.cpp | 17 | ||||
-rw-r--r-- | db/repl/rs_sync.cpp | 2 |
3 files changed, 8 insertions, 13 deletions
diff --git a/db/repl/rs.h b/db/repl/rs.h index 2a0671fbcfa..ed15061f30b 100644 --- a/db/repl/rs.h +++ b/db/repl/rs.h @@ -337,7 +337,7 @@ namespace mongo { private: /* pulling data from primary related - see rs_sync.cpp */ - bool initialSyncOplogApplication(string hn, const Member *primary, OpTime applyGTE, OpTime minValid); + bool initialSyncOplogApplication(const Member *primary, OpTime applyGTE, OpTime minValid); void _syncDoInitialSync(); void syncDoInitialSync(); void _syncThread(); diff --git a/db/repl/rs_initialsync.cpp b/db/repl/rs_initialsync.cpp index 5df10411692..9c29e17c0d1 100644 --- a/db/repl/rs_initialsync.cpp +++ b/db/repl/rs_initialsync.cpp @@ -111,7 +111,7 @@ namespace mongo { const Member *cp = sp.primary; if( cp == 0 ) { - sethbmsg("initial sync need a member to be primary",0); + sethbmsg("initial sync need a member to be primary to do our initial sync", 0); sleepsecs(15); return; } @@ -132,14 +132,6 @@ namespace mongo { } OpTime startingTS = lastOp["ts"]._opTime(); - { - /* make sure things aren't too flappy */ - sleepsecs(5); - isyncassert( "flapping?", box.getPrimary() == cp ); - BSONObj o = r.getLastOp(rsoplog); - isyncassert( "flapping [2]?", !o.isEmpty() ); - } - if (replSettings.fastsync) { log() << "fastsync: skipping database clone" << rsLog; } @@ -171,10 +163,12 @@ namespace mongo { sethbmsg("initial sync query minValid",0); + isyncassert( "initial sync source must remain primary throughout our initial sync", box.getPrimary() == cp ); + /* our cloned copy will be strange until we apply oplog events that occurred through the process. we note that time point here. */ BSONObj minValid = r.getLastOp(rsoplog); - assert( !minValid.isEmpty() ); + isyncassert( "getLastOp is empty ", !minValid.isEmpty() ); OpTime mvoptime = minValid["ts"]._opTime(); assert( !mvoptime.isNull() ); @@ -182,7 +176,8 @@ namespace mongo { */ { sethbmsg("initial sync initial oplog application"); - if( ! initialSyncOplogApplication(masterHostname, cp, startingTS, mvoptime) ) { // note we assume here that this call does not throw + isyncassert( "initial sync source must remain primary throughout our initial sync [2]", box.getPrimary() == cp ); + if( ! initialSyncOplogApplication(/*primary*/cp, /*applyGTE*/startingTS, /*minValid*/mvoptime) ) { // note we assume here that this call does not throw log() << "replSet initial sync failed during applyoplog" << rsLog; emptyOplog(); // otherwise we'll be up! lastOpTimeWritten = OpTime(); diff --git a/db/repl/rs_sync.cpp b/db/repl/rs_sync.cpp index 338b74b8f70..5d18add4939 100644 --- a/db/repl/rs_sync.cpp +++ b/db/repl/rs_sync.cpp @@ -50,13 +50,13 @@ namespace mongo { this method returns an error and doesn't throw exceptions (i think). */ bool ReplSetImpl::initialSyncOplogApplication( - string hn, const Member *primary, OpTime applyGTE, OpTime minValid) { if( primary == 0 ) return false; + const string hn = primary->h().toString(); OpTime ts; try { OplogReader r; |