@@ -231,11 +231,10 @@ namespace mongo {
231
231
// load metadata
232
232
_numRecords.store (_counterManager->loadCounter (_numRecordsKey));
233
233
_dataSize.store (_counterManager->loadCounter (_dataSizeKey));
234
- invariant (_dataSize.load () >= 0 );
235
- invariant (_numRecords.load () >= 0 );
236
234
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 ) {
239
238
LOG (1 ) << " doing scan of collection " << ns << " to get info" ;
240
239
241
240
_numRecords.store (0 );
@@ -306,14 +305,16 @@ namespace mongo {
306
305
307
306
long long RocksRecordStore::dataSize (OperationContext* txn) const {
308
307
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 ));
311
311
}
312
312
313
313
long long RocksRecordStore::numRecords (OperationContext* txn) const {
314
314
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 ));
317
318
}
318
319
319
320
bool RocksRecordStore::cappedAndNeedDelete (long long dataSizeDelta,
0 commit comments