Skip to content

Commit 84182ff

Browse files
committed
SERVER-19551: Revert sizeStorer updates only on commited - the capped collection code relies on this being incremented pre-commit
1 parent 1febdbe commit 84182ff

File tree

2 files changed

+15
-21
lines changed

2 files changed

+15
-21
lines changed

src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,10 +1125,10 @@ WiredTigerRecoveryUnit* WiredTigerRecordStore::_getRecoveryUnit(OperationContext
11251125
class WiredTigerRecordStore::NumRecordsChange : public RecoveryUnit::Change {
11261126
public:
11271127
NumRecordsChange(WiredTigerRecordStore* rs, int64_t diff) : _rs(rs), _diff(diff) {}
1128-
virtual void commit() {
1129-
_rs->_changeNumRecordsCommit(_diff);
1128+
virtual void commit() {}
1129+
virtual void rollback() {
1130+
_rs->_numRecords.fetchAndAdd(-_diff);
11301131
}
1131-
virtual void rollback() {}
11321132

11331133
private:
11341134
WiredTigerRecordStore* _rs;
@@ -1137,9 +1137,6 @@ class WiredTigerRecordStore::NumRecordsChange : public RecoveryUnit::Change {
11371137

11381138
void WiredTigerRecordStore::_changeNumRecords(OperationContext* txn, int64_t diff) {
11391139
txn->recoveryUnit()->registerChange(new NumRecordsChange(this, diff));
1140-
}
1141-
1142-
void WiredTigerRecordStore::_changeNumRecordsCommit(int64_t diff) {
11431140
if (diff > 0) {
11441141
if (_numRecords.fetchAndAdd(diff) < diff)
11451142
_numRecords.store(diff);
@@ -1150,25 +1147,24 @@ void WiredTigerRecordStore::_changeNumRecordsCommit(int64_t diff) {
11501147

11511148
class WiredTigerRecordStore::DataSizeChange : public RecoveryUnit::Change {
11521149
public:
1153-
DataSizeChange(WiredTigerRecordStore* rs, int64_t diff) : _rs(rs), _diff(diff) {}
1154-
virtual void commit() {
1155-
_rs->_increaseDataSizeCommit(_diff);
1150+
DataSizeChange(WiredTigerRecordStore* rs, int amount) : _rs(rs), _amount(amount) {}
1151+
virtual void commit() {}
1152+
virtual void rollback() {
1153+
_rs->_increaseDataSize(NULL, -_amount);
11561154
}
1157-
virtual void rollback() {}
11581155

11591156
private:
11601157
WiredTigerRecordStore* _rs;
1161-
int64_t _diff;
1158+
bool _amount;
11621159
};
11631160

1164-
void WiredTigerRecordStore::_increaseDataSize(OperationContext* txn, int64_t diff) {
1165-
txn->recoveryUnit()->registerChange(new DataSizeChange(this, diff));
1166-
}
1161+
void WiredTigerRecordStore::_increaseDataSize(OperationContext* txn, int amount) {
1162+
if (txn)
1163+
txn->recoveryUnit()->registerChange(new DataSizeChange(this, amount));
11671164

1168-
void WiredTigerRecordStore::_increaseDataSizeCommit(int64_t diff) {
1169-
if (_dataSize.fetchAndAdd(diff) < 0) {
1170-
if (diff > 0) {
1171-
_dataSize.store(diff);
1165+
if (_dataSize.fetchAndAdd(amount) < 0) {
1166+
if (amount > 0) {
1167+
_dataSize.store(amount);
11721168
} else {
11731169
_dataSize.store(0);
11741170
}

src/mongo/db/storage/wiredtiger/wiredtiger_record_store.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,7 @@ class WiredTigerRecordStore : public RecordStore {
230230
void _setId(RecordId loc);
231231
bool cappedAndNeedDelete() const;
232232
void _changeNumRecords(OperationContext* txn, int64_t diff);
233-
void _changeNumRecordsCommit(int64_t diff);
234-
void _increaseDataSize(OperationContext* txn, int64_t diff);
235-
void _increaseDataSizeCommit(int64_t diff);
233+
void _increaseDataSize(OperationContext* txn, int amount);
236234
RecordData _getData(const WiredTigerCursor& cursor) const;
237235
StatusWith<RecordId> extractAndCheckLocForOplog(const char* data, int len);
238236
void _oplogSetStartHack(WiredTigerRecoveryUnit* wru) const;

0 commit comments

Comments
 (0)