summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Milkie <milkie@10gen.com>2014-10-15 10:17:21 -0400
committerEric Milkie <milkie@10gen.com>2014-11-24 17:01:58 -0500
commita724bbb7eb6c046887c1a61516f273cef652f29c (patch)
tree9a7844b12fde41b135d8fd2f8b919f3ca2e187f3
parent24037e138350ca04e2484468978f58355bf1bb96 (diff)
downloadmongo-a724bbb7eb6c046887c1a61516f273cef652f29c.tar.gz
SERVER-12061 optionally abort cloner when corruption detected from source
(cherry picked from commit 6556243ff038a3f9cdc52e6a97684203c8c9ec54) Conflicts: src/mongo/db/cloner.cpp
-rw-r--r--src/mongo/db/cloner.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/mongo/db/cloner.cpp b/src/mongo/db/cloner.cpp
index b7c029452e7..6986cc126d1 100644
--- a/src/mongo/db/cloner.cpp
+++ b/src/mongo/db/cloner.cpp
@@ -51,11 +51,14 @@
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/oplogreader.h"
#include "mongo/db/pdfile.h"
+#include "mongo/db/server_parameters.h"
#include "mongo/db/storage_options.h"
#include "mongo/db/catalog/collection.h"
namespace mongo {
+ MONGO_EXPORT_SERVER_PARAMETER(skipCorruptDocumentsWhenCloning, bool, false);
+
BSONElement getErrField(const BSONObj& o);
/** Selectively release the mutex based on a parameter. */
@@ -163,9 +166,14 @@ namespace mongo {
/* assure object is valid. note this will slow us down a little. */
const Status status = validateBSON(tmp.objdata(), tmp.objsize());
if (!status.isOK()) {
- out() << "Cloner: skipping corrupt object from " << from_collection
+ str::stream ss;
+ ss << "Cloner: found corrupt document in " << from_collection
<< ": " << status.reason();
- continue;
+ if (skipCorruptDocumentsWhenCloning) {
+ warning() << ss.ss.str() << "; skipping";
+ continue;
+ }
+ uasserted(28530, ss);
}
++numSeen;