summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp32
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h4
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;