summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Grebennicov <denis.grebennicov@mongodb.com>2022-04-04 17:04:22 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-04-04 17:37:27 +0000
commit12fc3ef71b375ce012ad639ee1adfed555819503 (patch)
tree11c04d1cf6f195a562cf35552c78e0898d2b40ba
parent27c4c25165c03997820fde543a9d726df220826c (diff)
downloadmongo-12fc3ef71b375ce012ad639ee1adfed555819503.tar.gz
SERVER-65217 Run expired pre-images deletion job with multi-deletes support only if feature flag is enabled
-rw-r--r--jstests/noPassthrough/change_streams_pre_image_removal_job.js13
-rw-r--r--src/mongo/db/pipeline/change_stream_expired_pre_image_remover.cpp4
2 files changed, 11 insertions, 6 deletions
diff --git a/jstests/noPassthrough/change_streams_pre_image_removal_job.js b/jstests/noPassthrough/change_streams_pre_image_removal_job.js
index 7b87be92ca7..914283e1929 100644
--- a/jstests/noPassthrough/change_streams_pre_image_removal_job.js
+++ b/jstests/noPassthrough/change_streams_pre_image_removal_job.js
@@ -124,15 +124,22 @@ function testPreImageRemovalJob(batchedDelete) {
// Because the pre-images collection is implicitly replicated, validate that writes do not
// generate oplog entries, with the exception of deletions.
const preimagesNs = 'config.system.preimages';
- assert.eq(preImagesToExpire, localDB.oplog.rs.find({op: 'd', ns: preimagesNs}).itcount());
- assert.eq(0, localDB.oplog.rs.find({op: {'$ne': 'd'}, ns: preimagesNs}).itcount());
-
if (batchedDelete) {
const serverStatusBatches = testDB.serverStatus()['batchedDeletes']['batches'];
const serverStatusDocs = testDB.serverStatus()['batchedDeletes']['docs'];
assert.eq(serverStatusBatches, 2);
assert.eq(serverStatusDocs, preImagesToExpire);
+
+ // Multi-deletes are batched base on time before performing the deletion, therefore the
+ // deleted pre-images can span through multiple applyOps oplog entries.
+ assert.gte(preImagesToExpire,
+ localDB.oplog.rs
+ .find({ns: 'admin.$cmd', 'o.applyOps.op': 'd', 'o.applyOps.ns': preimagesNs})
+ .itcount());
+ } else {
+ assert.eq(preImagesToExpire, localDB.oplog.rs.find({op: 'd', ns: preimagesNs}).itcount());
}
+ assert.eq(0, localDB.oplog.rs.find({op: {'$ne': 'd'}, ns: preimagesNs}).itcount());
// Verify that pre-images collection content on the primary node is the same as on the
// secondary.
diff --git a/src/mongo/db/pipeline/change_stream_expired_pre_image_remover.cpp b/src/mongo/db/pipeline/change_stream_expired_pre_image_remover.cpp
index ed65baf5abb..1ee6d154052 100644
--- a/src/mongo/db/pipeline/change_stream_expired_pre_image_remover.cpp
+++ b/src/mongo/db/pipeline/change_stream_expired_pre_image_remover.cpp
@@ -346,8 +346,6 @@ void deleteExpiredChangeStreamPreImages(Client* client, Date_t currentTimeForTim
->getEarliestOplogTimestamp(opCtx.get());
const bool isBatchedRemoval = gBatchedExpiredChangeStreamPreImageRemoval.load();
- const bool isMultiDeletesFeatureFlagEnabled =
- feature_flags::gBatchMultiDeletes.isEnabled(serverGlobalParams.featureCompatibility);
size_t numberOfRemovals = 0;
ChangeStreamExpiredPreImageIterator expiredPreImages(
@@ -367,7 +365,7 @@ void deleteExpiredChangeStreamPreImages(Client* client, Date_t currentTimeForTim
params->isMulti = true;
boost::optional<std::unique_ptr<BatchedDeleteStageBatchParams>> batchParams;
- if (isMultiDeletesFeatureFlagEnabled && isBatchedRemoval) {
+ if (isBatchedRemoval) {
batchParams = std::make_unique<BatchedDeleteStageBatchParams>();
}