diff options
-rw-r--r-- | jstests/noPassthrough/change_streams_pre_image_removal_job.js | 13 | ||||
-rw-r--r-- | src/mongo/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<std::unique_ptr<BatchedDeleteStageBatchParams>> batchParams; - if (isMultiDeletesFeatureFlagEnabled && isBatchedRemoval) { + if (isBatchedRemoval) { batchParams = std::make_unique<BatchedDeleteStageBatchParams>(); } |