Skip to content

Commit 375b4ff

Browse files
committed
Recompute dataSize and numRecords if numbers don't make sense
1 parent 4efa44d commit 375b4ff

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/mongo/db/storage/rocks/rocks_record_store.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,10 @@ namespace mongo {
231231
// load metadata
232232
_numRecords.store(_counterManager->loadCounter(_numRecordsKey));
233233
_dataSize.store(_counterManager->loadCounter(_dataSizeKey));
234-
invariant(_dataSize.load() >= 0);
235-
invariant(_numRecords.load() >= 0);
236234

237-
if (!emptyCollection && !_counterManager->crashSafe() &&
238-
_numRecords.load() < kCollectionScanOnCreationThreshold) {
235+
if ((!emptyCollection && !_counterManager->crashSafe() &&
236+
_numRecords.load() < kCollectionScanOnCreationThreshold) ||
237+
_numRecords.load() < 0 || _dataSize.load() < 0) {
239238
LOG(1) << "doing scan of collection " << ns << " to get info";
240239

241240
_numRecords.store(0);
@@ -306,14 +305,16 @@ namespace mongo {
306305

307306
long long RocksRecordStore::dataSize(OperationContext* txn) const {
308307
RocksRecoveryUnit* ru = RocksRecoveryUnit::getRocksRecoveryUnit(txn);
309-
return _dataSize.load(std::memory_order::memory_order_relaxed) +
310-
ru->getDeltaCounter(_dataSizeKey);
308+
return std::max(_dataSize.load(std::memory_order::memory_order_relaxed) +
309+
ru->getDeltaCounter(_dataSizeKey),
310+
static_cast<long long>(0));
311311
}
312312

313313
long long RocksRecordStore::numRecords(OperationContext* txn) const {
314314
RocksRecoveryUnit* ru = RocksRecoveryUnit::getRocksRecoveryUnit( txn );
315-
return _numRecords.load(std::memory_order::memory_order_relaxed) +
316-
ru->getDeltaCounter(_numRecordsKey);
315+
return std::max(_numRecords.load(std::memory_order::memory_order_relaxed) +
316+
ru->getDeltaCounter(_numRecordsKey),
317+
static_cast<long long>(0));
317318
}
318319

319320
bool RocksRecordStore::cappedAndNeedDelete(long long dataSizeDelta,

0 commit comments

Comments
 (0)