summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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>();
}