summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2023-01-31 13:59:49 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-02-11 18:28:07 +0000
commit2c754d856173e399f21e2c2d8164b8cd319f5c19 (patch)
treef06a761d311caab6be1cdafcabe0ea4f61d98a39
parentbcf0c75c8dbed2a84ad69ba5bd7aa200115f8cb9 (diff)
downloadmongo-2c754d856173e399f21e2c2d8164b8cd319f5c19.tar.gz
SERVER-71950 Fail and log the operation when out-of-order keys are detected in WiredTiger
(cherry picked from commit b2085e2d422278733bb6925614eb0c2f36348034)
-rw-r--r--src/mongo/base/error_codes.err1
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp14
2 files changed, 8 insertions, 7 deletions
diff --git a/src/mongo/base/error_codes.err b/src/mongo/base/error_codes.err
index 9a671903839..31988cd161b 100644
--- a/src/mongo/base/error_codes.err
+++ b/src/mongo/base/error_codes.err
@@ -293,6 +293,7 @@ error_code("WaitForMajorityServiceEarlierOpTimeAvailable", 289)
# 290 is TransactionExceededLifetimeLimitSeconds, but not used.
error_code("NoQueryExecutionPlans", 291)
error_code("HierarchicalAcquisitionLevelViolation", 297)
+error_code("DataCorruptionDetected", 301)
error_code("PeriodicJobIsStopped", 310)
error_code("OplogQueryMinTsMissing", 326)
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
index 30ba0eb4c45..df23a0ab1a9 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
@@ -1980,16 +1980,16 @@ boost::optional<Record> WiredTigerRecordStoreCursorBase::next() {
}
if (_forward && _lastReturnedId >= id) {
- log() << "WTCursor::next -- c->next_key ( " << id
- << ") was not greater than _lastReturnedId (" << _lastReturnedId
- << ") which is a bug.";
-
// Crash when test commands are enabled.
invariant(!getTestCommandsEnabled());
- // Force a retry of the operation from our last known position by acting as-if
- // we received a WT_ROLLBACK error.
- throw WriteConflictException();
+ // uassert with 'DataCorruptionDetected' after logging.
+ std::stringstream ss;
+ ss << "WT_Cursor::next -- returned out-of-order keys. Forward: " << _forward
+ << ", next: " << id << ", last: " << _lastReturnedId << ", ident: " << _rs._ident
+ << ", ns: " << _rs._ns;
+ log() << ss.str();
+ uasserted(ErrorCodes::DataCorruptionDetected, ss.str());
}
WT_ITEM value;