summaryrefslogtreecommitdiff
path: root/db/repl/rs_sync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'db/repl/rs_sync.cpp')
-rw-r--r--db/repl/rs_sync.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/db/repl/rs_sync.cpp b/db/repl/rs_sync.cpp
index 95bbe2040a6..5fe3075c0f7 100644
--- a/db/repl/rs_sync.cpp
+++ b/db/repl/rs_sync.cpp
@@ -188,6 +188,16 @@ namespace mongo {
*/
bool ReplSetImpl::tryToGoLiveAsASecondary(OpTime& /*out*/ minvalid) {
bool golive = false;
+
+ {
+ lock lk( this );
+
+ if (_maintenanceMode > 0) {
+ // we're not actually going live
+ return true;
+ }
+ }
+
{
readlock lk("local.replset.minvalid");
BSONObj mv;
@@ -211,7 +221,7 @@ namespace mongo {
BSONObj remoteOldestOp = r.findOne(rsoplog, Query());
OpTime ts = remoteOldestOp["ts"]._opTime();
DEV log() << "replSet remoteOldestOp: " << ts.toStringLong() << rsLog;
- else log(3) << "replSet remoteOldestOp: " << ts.toStringLong() << rsLog;
+ else LOG(3) << "replSet remoteOldestOp: " << ts.toStringLong() << rsLog;
DEV {
log() << "replSet lastOpTimeWritten: " << lastOpTimeWritten.toStringLong() << rsLog;
log() << "replSet our state: " << state().toString() << rsLog;
@@ -251,7 +261,7 @@ namespace mongo {
assert(r.conn() == 0);
if( !r.connect(hn) ) {
- log(2) << "replSet can't connect to " << hn << " to read operations" << rsLog;
+ LOG(2) << "replSet can't connect to " << hn << " to read operations" << rsLog;
r.resetConnection();
return false;
}
@@ -407,7 +417,7 @@ namespace mongo {
}
- {
+ try {
writelock lk("");
/* if we have become primary, we dont' want to apply things from elsewhere
@@ -421,11 +431,16 @@ namespace mongo {
syncApply(o);
_logOpObjRS(o); // with repl sets we write the ops to our oplog too
}
+ catch (DBException& e) {
+ sethbmsg(str::stream() << "syncTail: " << e.toString() << ", syncing: " << o);
+ sleepsecs(30);
+ return;
+ }
}
}
r.tailCheck();
if( !r.haveCursor() ) {
- log(1) << "replSet end syncTail pass with " << hn << rsLog;
+ LOG(1) << "replSet end syncTail pass with " << hn << rsLog;
// TODO : reuse our connection to the primary.
return;
}
@@ -475,9 +490,7 @@ namespace mongo {
_syncThread();
}
catch(DBException& e) {
- sethbmsg(str::stream() << "syncThread: " << e.toString() <<
- ", try 'use local; db.oplog.rs.findOne({ts : {$gt : new Timestamp(" <<
- lastOpTimeWritten.getSecs() << "000," << lastOpTimeWritten.getInc() << ")}});' on the primary");
+ sethbmsg(str::stream() << "syncThread: " << e.toString());
sleepsecs(10);
}
catch(...) {
@@ -580,7 +593,7 @@ namespace mongo {
// the target might end up with a new Member, but s.slave never
// changes so we'll compare the names
|| target == slave->slave || target->fullName() == slave->slave->fullName()) {
- log(1) << "replica set ghost target no good" << endl;
+ LOG(1) << "replica set ghost target no good" << endl;
return;
}
@@ -593,8 +606,7 @@ namespace mongo {
slave->reader.ghostQueryGTE(rsoplog, last);
}
- log(1) << "last: " << slave->last.toString() << " to " << last.toString() << rsLog;
-
+ LOG(1) << "replSet last: " << slave->last.toString() << " to " << last.toString() << rsLog;
if (slave->last > last) {
return;
}
@@ -608,11 +620,11 @@ namespace mongo {
BSONObj o = slave->reader.nextSafe();
slave->last = o["ts"]._opTime();
}
- log(2) << "now last is " << slave->last.toString() << rsLog;
+ LOG(2) << "now last is " << slave->last.toString() << rsLog;
}
catch (DBException& e) {
// we'll be back
- log(2) << "replSet ghost sync error: " << e.what() << " for "
+ LOG(2) << "replSet ghost sync error: " << e.what() << " for "
<< slave->slave->fullName() << rsLog;
slave->reader.resetConnection();
}