summaryrefslogtreecommitdiff
path: root/jstests/sharding/exact_shard_key_target.js
diff options
context:
space:
mode:
authorAntonio Fuschetto <antonio.fuschetto@mongodb.com>2021-12-10 14:44:59 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-12-10 15:09:32 +0000
commitd5d59422cf63d847fc8aa52e922174e2fdad3ed3 (patch)
treef666168caf63bf08bed4deb3f15f6e8ebb39278a /jstests/sharding/exact_shard_key_target.js
parent3b85c7ddb5f240d81711010fbfe91332c000102b (diff)
downloadmongo-d5d59422cf63d847fc8aa52e922174e2fdad3ed3.tar.gz
SERVER-59832 Prevent writes to orphan documents
Diffstat (limited to 'jstests/sharding/exact_shard_key_target.js')
-rw-r--r--jstests/sharding/exact_shard_key_target.js11
1 files changed, 11 insertions, 0 deletions
diff --git a/jstests/sharding/exact_shard_key_target.js b/jstests/sharding/exact_shard_key_target.js
index d0670c20172..4182b06b9e1 100644
--- a/jstests/sharding/exact_shard_key_target.js
+++ b/jstests/sharding/exact_shard_key_target.js
@@ -38,6 +38,14 @@ assert.eq(2,
//
// Non-multi update
coll.remove({});
+// When the 'featureFlagNoChangeStreamEventsDueToOrphans' is enabled, orphaned documents are not
+// actually removed by the 'remove' command to avoid unexpected events on change streams. In this
+// scenario, it is necessary to remove them explicitly from the shards that own them.
+const clusterParams = assert.commandWorked(st.configRS.getPrimary().adminCommand(
+ {getParameter: 1, featureFlagNoChangeStreamEventsDueToOrphans: 1}));
+if (clusterParams.featureFlagNoChangeStreamEventsDueToOrphans.value) {
+ assert.commandWorked(st.shard0.getCollection(coll.toString()).remove({_id: 3}));
+}
assert.commandWorked(coll.insert({_id: 1, a: {b: 1}}));
assert.commandWorked(coll.insert({_id: 2, a: {b: -1}}));
// Need orphaned data to see the impact
@@ -50,6 +58,9 @@ assert.eq(1,
//
// Successive upserts (replacement-style)
coll.remove({});
+if (clusterParams.featureFlagNoChangeStreamEventsDueToOrphans.value) {
+ assert.commandWorked(st.shard0.getCollection(coll.toString()).remove({_id: 3}));
+}
assert.commandWorked(coll.update({a: {b: 1}}, {a: {b: 1}}, {upsert: true}));
assert.commandWorked(coll.update({a: {b: 1}}, {a: {b: 1}}, {upsert: true}));
assert.eq(1,