diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2023-01-31 13:59:49 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-02-11 18:28:07 +0000 |
commit | 2c754d856173e399f21e2c2d8164b8cd319f5c19 (patch) | |
tree | f06a761d311caab6be1cdafcabe0ea4f61d98a39 | |
parent | bcf0c75c8dbed2a84ad69ba5bd7aa200115f8cb9 (diff) | |
download | mongo-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.err | 1 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp | 14 |
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; |