diff options
author | Gregory Noma <gregory.noma@gmail.com> | 2021-04-22 13:45:25 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-05-07 18:50:19 +0000 |
commit | c363d1da0bad994427214d5086825f163ef21cc8 (patch) | |
tree | 4c9ca2f27ea01bdbd5978f7d7c95e70546f3741d | |
parent | 23334d09cd768898b6524cfe6499d7d036f20d21 (diff) | |
download | mongo-c363d1da0bad994427214d5086825f163ef21cc8.tar.gz |
SERVER-52833 Perform capped deletes during startup recovery on documents inserted earlier in startup recovery
-rw-r--r-- | src/mongo/db/server_recovery.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/mongo/db/server_recovery.h b/src/mongo/db/server_recovery.h index 58eb0b133ae..45e79385053 100644 --- a/src/mongo/db/server_recovery.h +++ b/src/mongo/db/server_recovery.h @@ -83,7 +83,7 @@ public: private: mutable stdx::mutex _mutex; - std::set<std::string> _collectionsAlwaysNeedingSizeAdjustment; + stdx::unordered_set<std::string> _collectionsAlwaysNeedingSizeAdjustment; }; /** diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp index c77b440b6ec..c440e25b043 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp @@ -1718,6 +1718,15 @@ void WiredTigerRecordStore::_initNextIdIfNeeded(OperationContext* opCtx) { return; } + // During startup recovery, the collectionAlwaysNeedsSizeAdjustment flag is not set by default + // for the sake of efficiency. However, if we reach this point, we may need to set it in order + // to ensure that capped deletes can occur on documents inserted earlier in startup recovery. + if (inReplicationRecovery(getGlobalServiceContext()) && + !sizeRecoveryState(getGlobalServiceContext()) + .collectionAlwaysNeedsSizeAdjustment(getIdent())) { + checkSize(opCtx); + } + // Need to start at 1 so we are always higher than RecordId::min() int64_t nextId = 1; |