summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Noma <gregory.noma@gmail.com>2021-04-22 13:45:25 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-05-07 18:50:19 +0000
commitc363d1da0bad994427214d5086825f163ef21cc8 (patch)
tree4c9ca2f27ea01bdbd5978f7d7c95e70546f3741d
parent23334d09cd768898b6524cfe6499d7d036f20d21 (diff)
downloadmongo-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.h2
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp9
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;