diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2016-10-31 18:03:43 -0400 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2016-11-09 14:05:46 -0500 |
commit | 80f8ffa2121c264ead069f3ed39a34a57ac3f5a7 (patch) | |
tree | df189182bdfb2a07c4eb738fab4e0dcdbb0f8eee /src/mongo/db/cloner.cpp | |
parent | cdaa9c22ed65bede44afca6e696cf5ee20224302 (diff) | |
download | mongo-80f8ffa2121c264ead069f3ed39a34a57ac3f5a7.tar.gz |
SERVER-26834 replset7.js should cause documents to be seen twice in initial sync
Diffstat (limited to 'src/mongo/db/cloner.cpp')
-rw-r--r-- | src/mongo/db/cloner.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/mongo/db/cloner.cpp b/src/mongo/db/cloner.cpp index d848f981680..331f5716b81 100644 --- a/src/mongo/db/cloner.cpp +++ b/src/mongo/db/cloner.cpp @@ -57,6 +57,7 @@ #include "mongo/db/jsobj.h" #include "mongo/db/namespace_string.h" #include "mongo/db/op_observer.h" +#include "mongo/db/repl/data_replicator.h" #include "mongo/db/repl/isself.h" #include "mongo/db/repl/replication_coordinator_global.h" #include "mongo/db/server_parameters.h" @@ -64,11 +65,13 @@ #include "mongo/db/storage/storage_options.h" #include "mongo/s/grid.h" #include "mongo/util/assert_util.h" +#include "mongo/util/fail_point_service.h" #include "mongo/util/log.h" #include "mongo/util/mongoutils/str.h" namespace mongo { +using repl::initialSyncHangDuringCollectionClone; using std::endl; using std::list; using std::set; @@ -269,13 +272,27 @@ struct Cloner::Fun { << redact(status) << " obj:" << redact(doc); uassertStatusOK(status); } - wunit.commit(); + if (status.isOK()) { + wunit.commit(); + } } MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "cloner insert", to_collection.ns()); RARELY if (time(0) - saveLast > 60) { log() << numSeen << " objects cloned so far from collection " << from_collection; saveLast = time(0); } + + MONGO_FAIL_POINT_BLOCK(initialSyncHangDuringCollectionClone, options) { + const BSONObj& data = options.getData(); + if (data["namespace"].String() == to_collection.ns() && + numSeen >= data["numDocsToClone"].numberInt()) { + log() << "initial sync - initialSyncHangDuringCollectionClone fail point " + "enabled. Blocking until fail point is disabled."; + while (MONGO_FAIL_POINT(initialSyncHangDuringCollectionClone)) { + mongo::sleepsecs(1); + } + } + } } } |