diff options
author | Martin Bligh <mbligh@mongodb.com> | 2015-08-04 15:43:47 -0400 |
---|---|---|
committer | Martin Bligh <mbligh@mongodb.com> | 2015-08-04 15:44:58 -0400 |
commit | 84182ff1575cbe868a89e7209f12ca665f4bda19 (patch) | |
tree | 9dd0d27ebb81a6ccfbfcac6dcd27de0cbb6a31d9 /src | |
parent | 1febdbe599d63268fbc5b8415587a0c489f48874 (diff) | |
download | mongo-84182ff1575cbe868a89e7209f12ca665f4bda19.tar.gz |
SERVER-19551: Revert sizeStorer updates only on commited - the capped collection code relies on this being incremented pre-commit
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp | 32 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h | 4 |
2 files changed, 15 insertions, 21 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp index 5bca69c12dc..392706f511f 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp @@ -1125,10 +1125,10 @@ WiredTigerRecoveryUnit* WiredTigerRecordStore::_getRecoveryUnit(OperationContext class WiredTigerRecordStore::NumRecordsChange : public RecoveryUnit::Change { public: NumRecordsChange(WiredTigerRecordStore* rs, int64_t diff) : _rs(rs), _diff(diff) {} - virtual void commit() { - _rs->_changeNumRecordsCommit(_diff); + virtual void commit() {} + virtual void rollback() { + _rs->_numRecords.fetchAndAdd(-_diff); } - virtual void rollback() {} private: WiredTigerRecordStore* _rs; @@ -1137,9 +1137,6 @@ private: void WiredTigerRecordStore::_changeNumRecords(OperationContext* txn, int64_t diff) { txn->recoveryUnit()->registerChange(new NumRecordsChange(this, diff)); -} - -void WiredTigerRecordStore::_changeNumRecordsCommit(int64_t diff) { if (diff > 0) { if (_numRecords.fetchAndAdd(diff) < diff) _numRecords.store(diff); @@ -1150,25 +1147,24 @@ void WiredTigerRecordStore::_changeNumRecordsCommit(int64_t diff) { class WiredTigerRecordStore::DataSizeChange : public RecoveryUnit::Change { public: - DataSizeChange(WiredTigerRecordStore* rs, int64_t diff) : _rs(rs), _diff(diff) {} - virtual void commit() { - _rs->_increaseDataSizeCommit(_diff); + DataSizeChange(WiredTigerRecordStore* rs, int amount) : _rs(rs), _amount(amount) {} + virtual void commit() {} + virtual void rollback() { + _rs->_increaseDataSize(NULL, -_amount); } - virtual void rollback() {} private: WiredTigerRecordStore* _rs; - int64_t _diff; + bool _amount; }; -void WiredTigerRecordStore::_increaseDataSize(OperationContext* txn, int64_t diff) { - txn->recoveryUnit()->registerChange(new DataSizeChange(this, diff)); -} +void WiredTigerRecordStore::_increaseDataSize(OperationContext* txn, int amount) { + if (txn) + txn->recoveryUnit()->registerChange(new DataSizeChange(this, amount)); -void WiredTigerRecordStore::_increaseDataSizeCommit(int64_t diff) { - if (_dataSize.fetchAndAdd(diff) < 0) { - if (diff > 0) { - _dataSize.store(diff); + if (_dataSize.fetchAndAdd(amount) < 0) { + if (amount > 0) { + _dataSize.store(amount); } else { _dataSize.store(0); } diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h index feff2108e0d..c6f98f64dd5 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h @@ -230,9 +230,7 @@ private: void _setId(RecordId loc); bool cappedAndNeedDelete() const; void _changeNumRecords(OperationContext* txn, int64_t diff); - void _changeNumRecordsCommit(int64_t diff); - void _increaseDataSize(OperationContext* txn, int64_t diff); - void _increaseDataSizeCommit(int64_t diff); + void _increaseDataSize(OperationContext* txn, int amount); RecordData _getData(const WiredTigerCursor& cursor) const; StatusWith<RecordId> extractAndCheckLocForOplog(const char* data, int len); void _oplogSetStartHack(WiredTigerRecoveryUnit* wru) const; |