summaryrefslogtreecommitdiff
path: root/jstests/sharding/lookup_change_stream_post_image_id_shard_key.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/lookup_change_stream_post_image_id_shard_key.js')
-rw-r--r--jstests/sharding/lookup_change_stream_post_image_id_shard_key.js176
1 files changed, 87 insertions, 89 deletions
diff --git a/jstests/sharding/lookup_change_stream_post_image_id_shard_key.js b/jstests/sharding/lookup_change_stream_post_image_id_shard_key.js
index 843dda1c524..f6235d1082c 100644
--- a/jstests/sharding/lookup_change_stream_post_image_id_shard_key.js
+++ b/jstests/sharding/lookup_change_stream_post_image_id_shard_key.js
@@ -2,94 +2,92 @@
// sharded with a key which is just the "_id" field.
// @tags: [uses_change_streams]
(function() {
- "use strict";
-
- // For supportsMajorityReadConcern().
- load("jstests/multiVersion/libs/causal_consistency_helpers.js");
-
- if (!supportsMajorityReadConcern()) {
- jsTestLog("Skipping test since storage engine doesn't support majority read concern.");
- return;
+"use strict";
+
+// For supportsMajorityReadConcern().
+load("jstests/multiVersion/libs/causal_consistency_helpers.js");
+
+if (!supportsMajorityReadConcern()) {
+ jsTestLog("Skipping test since storage engine doesn't support majority read concern.");
+ return;
+}
+
+const st = new ShardingTest({
+ shards: 2,
+ rs: {
+ nodes: 1,
+ enableMajorityReadConcern: '',
+ // Use a higher frequency for periodic noops to speed up the test.
+ setParameter: {writePeriodicNoops: true, periodicNoopIntervalSecs: 1}
}
-
- const st = new ShardingTest({
- shards: 2,
- rs: {
- nodes: 1,
- enableMajorityReadConcern: '',
- // Use a higher frequency for periodic noops to speed up the test.
- setParameter: {writePeriodicNoops: true, periodicNoopIntervalSecs: 1}
- }
- });
-
- const mongosDB = st.s0.getDB(jsTestName());
- const mongosColl = mongosDB['coll'];
-
- assert.commandWorked(mongosDB.dropDatabase());
-
- // Enable sharding on the test DB and ensure its primary is st.shard0.shardName.
- assert.commandWorked(mongosDB.adminCommand({enableSharding: mongosDB.getName()}));
- st.ensurePrimaryShard(mongosDB.getName(), st.rs0.getURL());
-
- // Shard the test collection on _id.
- assert.commandWorked(
- mongosDB.adminCommand({shardCollection: mongosColl.getFullName(), key: {_id: 1}}));
-
- // Split the collection into 2 chunks: [MinKey, 0), [0, MaxKey).
- assert.commandWorked(
- mongosDB.adminCommand({split: mongosColl.getFullName(), middle: {_id: 0}}));
-
- // Move the [0, MaxKey) chunk to st.shard1.shardName.
- assert.commandWorked(mongosDB.adminCommand(
- {moveChunk: mongosColl.getFullName(), find: {_id: 1}, to: st.rs1.getURL()}));
-
- // Write a document to each chunk.
- assert.writeOK(mongosColl.insert({_id: -1}));
- assert.writeOK(mongosColl.insert({_id: 1}));
-
- const changeStream = mongosColl.aggregate([{$changeStream: {fullDocument: "updateLookup"}}]);
-
- // Do some writes.
- assert.writeOK(mongosColl.insert({_id: 1000}));
- assert.writeOK(mongosColl.insert({_id: -1000}));
- assert.writeOK(mongosColl.update({_id: 1000}, {$set: {updatedCount: 1}}));
- assert.writeOK(mongosColl.update({_id: -1000}, {$set: {updatedCount: 1}}));
-
- for (let nextId of[1000, -1000]) {
- assert.soon(() => changeStream.hasNext());
- let next = changeStream.next();
- assert.eq(next.operationType, "insert");
- assert.eq(next.documentKey, {_id: nextId});
- }
-
- for (let nextId of[1000, -1000]) {
- assert.soon(() => changeStream.hasNext());
- let next = changeStream.next();
- assert.eq(next.operationType, "update");
- // Only the "_id" field is present in next.documentKey because the shard key is the _id.
- assert.eq(next.documentKey, {_id: nextId});
- assert.docEq(next.fullDocument, {_id: nextId, updatedCount: 1});
- }
-
- // Test that the change stream can still see the updated post image, even if a chunk is
- // migrated.
- assert.writeOK(mongosColl.update({_id: 1000}, {$set: {updatedCount: 2}}));
- assert.writeOK(mongosColl.update({_id: -1000}, {$set: {updatedCount: 2}}));
-
- // Split the [0, MaxKey) chunk into 2: [0, 500), [500, MaxKey).
- assert.commandWorked(
- mongosDB.adminCommand({split: mongosColl.getFullName(), middle: {_id: 500}}));
- // Move the [500, MaxKey) chunk back to st.shard0.shardName.
- assert.commandWorked(mongosDB.adminCommand(
- {moveChunk: mongosColl.getFullName(), find: {_id: 1000}, to: st.rs0.getURL()}));
-
- for (let nextId of[1000, -1000]) {
- assert.soon(() => changeStream.hasNext());
- let next = changeStream.next();
- assert.eq(next.operationType, "update");
- assert.eq(next.documentKey, {_id: nextId});
- assert.docEq(next.fullDocument, {_id: nextId, updatedCount: 2});
- }
-
- st.stop();
+});
+
+const mongosDB = st.s0.getDB(jsTestName());
+const mongosColl = mongosDB['coll'];
+
+assert.commandWorked(mongosDB.dropDatabase());
+
+// Enable sharding on the test DB and ensure its primary is st.shard0.shardName.
+assert.commandWorked(mongosDB.adminCommand({enableSharding: mongosDB.getName()}));
+st.ensurePrimaryShard(mongosDB.getName(), st.rs0.getURL());
+
+// Shard the test collection on _id.
+assert.commandWorked(
+ mongosDB.adminCommand({shardCollection: mongosColl.getFullName(), key: {_id: 1}}));
+
+// Split the collection into 2 chunks: [MinKey, 0), [0, MaxKey).
+assert.commandWorked(mongosDB.adminCommand({split: mongosColl.getFullName(), middle: {_id: 0}}));
+
+// Move the [0, MaxKey) chunk to st.shard1.shardName.
+assert.commandWorked(mongosDB.adminCommand(
+ {moveChunk: mongosColl.getFullName(), find: {_id: 1}, to: st.rs1.getURL()}));
+
+// Write a document to each chunk.
+assert.writeOK(mongosColl.insert({_id: -1}));
+assert.writeOK(mongosColl.insert({_id: 1}));
+
+const changeStream = mongosColl.aggregate([{$changeStream: {fullDocument: "updateLookup"}}]);
+
+// Do some writes.
+assert.writeOK(mongosColl.insert({_id: 1000}));
+assert.writeOK(mongosColl.insert({_id: -1000}));
+assert.writeOK(mongosColl.update({_id: 1000}, {$set: {updatedCount: 1}}));
+assert.writeOK(mongosColl.update({_id: -1000}, {$set: {updatedCount: 1}}));
+
+for (let nextId of [1000, -1000]) {
+ assert.soon(() => changeStream.hasNext());
+ let next = changeStream.next();
+ assert.eq(next.operationType, "insert");
+ assert.eq(next.documentKey, {_id: nextId});
+}
+
+for (let nextId of [1000, -1000]) {
+ assert.soon(() => changeStream.hasNext());
+ let next = changeStream.next();
+ assert.eq(next.operationType, "update");
+ // Only the "_id" field is present in next.documentKey because the shard key is the _id.
+ assert.eq(next.documentKey, {_id: nextId});
+ assert.docEq(next.fullDocument, {_id: nextId, updatedCount: 1});
+}
+
+// Test that the change stream can still see the updated post image, even if a chunk is
+// migrated.
+assert.writeOK(mongosColl.update({_id: 1000}, {$set: {updatedCount: 2}}));
+assert.writeOK(mongosColl.update({_id: -1000}, {$set: {updatedCount: 2}}));
+
+// Split the [0, MaxKey) chunk into 2: [0, 500), [500, MaxKey).
+assert.commandWorked(mongosDB.adminCommand({split: mongosColl.getFullName(), middle: {_id: 500}}));
+// Move the [500, MaxKey) chunk back to st.shard0.shardName.
+assert.commandWorked(mongosDB.adminCommand(
+ {moveChunk: mongosColl.getFullName(), find: {_id: 1000}, to: st.rs0.getURL()}));
+
+for (let nextId of [1000, -1000]) {
+ assert.soon(() => changeStream.hasNext());
+ let next = changeStream.next();
+ assert.eq(next.operationType, "update");
+ assert.eq(next.documentKey, {_id: nextId});
+ assert.docEq(next.fullDocument, {_id: nextId, updatedCount: 2});
+}
+
+st.stop();
})();