From 12fc3ef71b375ce012ad639ee1adfed555819503 Mon Sep 17 00:00:00 2001 From: Denis Grebennicov Date: Mon, 4 Apr 2022 17:04:22 +0000 Subject: SERVER-65217 Run expired pre-images deletion job with multi-deletes support only if feature flag is enabled --- .../noPassthrough/change_streams_pre_image_removal_job.js | 13 ++++++++++--- .../db/pipeline/change_stream_expired_pre_image_remover.cpp | 4 +--- 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> batchParams; - if (isMultiDeletesFeatureFlagEnabled && isBatchedRemoval) { + if (isBatchedRemoval) { batchParams = std::make_unique(); } -- cgit v1.2.1