summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBynn Lee <bynn.lee@mongodb.com>2021-02-10 16:22:55 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-16 23:33:03 +0000
commit408b94f30377eb038272903626c3acbf7b5cd3f7 (patch)
treed41f075b0aa03ebff504ae3c5a6ee8c9be56d845
parent5d0eaf8291050689b970581083abc5d0e6c931d1 (diff)
downloadmongo-408b94f30377eb038272903626c3acbf7b5cd3f7.tar.gz
SERVER-53556 Double-check record existence in validate
-rw-r--r--src/mongo/db/catalog/validate_adaptor.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/validate_adaptor.cpp b/src/mongo/db/catalog/validate_adaptor.cpp
index 2bd6d5bb4d0..fd61311da8e 100644
--- a/src/mongo/db/catalog/validate_adaptor.cpp
+++ b/src/mongo/db/catalog/validate_adaptor.cpp
@@ -463,6 +463,18 @@ void ValidateAdaptor::traverseRecordStore(OperationContext* opCtx,
size_t validatedSize = 0;
Status status = validateRecord(opCtx, record->id, record->data, &validatedSize, results);
+ // TODO SERVER-54481 : Disable double validate.
+ auto doubleValidateRecord = traverseRecordStoreCursor->seekExact(opCtx, record->id);
+ if (!doubleValidateRecord || doubleValidateRecord->id != record->id ||
+ doubleValidateRecord->data.size() != record->data.size()) {
+ LOGV2(
+ 5355600,
+ "Document corruption details - Document validation failure; double validate failed",
+ "recordId"_attr = record->id);
+ results->errors.push_back("Detected one or more invalid documents. See logs.");
+ results->valid = false;
+ }
+
// Checks to ensure isInRecordIdOrder() is being used properly.
if (prevRecordId.isValid()) {
invariant(prevRecordId < record->id);