summaryrefslogtreecommitdiff
path: root/src/mongo/db/cloner.cpp
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2016-10-31 18:03:43 -0400
committerTess Avitabile <tess.avitabile@mongodb.com>2016-11-09 14:05:46 -0500
commit80f8ffa2121c264ead069f3ed39a34a57ac3f5a7 (patch)
treedf189182bdfb2a07c4eb738fab4e0dcdbb0f8eee /src/mongo/db/cloner.cpp
parentcdaa9c22ed65bede44afca6e696cf5ee20224302 (diff)
downloadmongo-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.cpp19
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);
+ }
+ }
+ }
}
}