summaryrefslogtreecommitdiff
path: root/jstests/sharding/mr_single_reduce_split.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/mr_single_reduce_split.js')
-rw-r--r--jstests/sharding/mr_single_reduce_split.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/jstests/sharding/mr_single_reduce_split.js b/jstests/sharding/mr_single_reduce_split.js
new file mode 100644
index 00000000000..1a6d20f0e1f
--- /dev/null
+++ b/jstests/sharding/mr_single_reduce_split.js
@@ -0,0 +1,55 @@
+/**
+ * This jstest verifies that the mrEnableSingleReduceOptimization flag works properly in a sharded
+ * cluster when there are documents on multiple chunks that need to be merged.
+ * @tags: [
+ * backport_required_multiversion,
+ * ]
+ */
+(function() {
+const st = new ShardingTest({
+ shards: 2,
+ mongos: 1,
+ other: {
+ mongosOptions: {setParameter: {mrEnableSingleReduceOptimization: true}},
+ shardOptions: {setParameter: {mrEnableSingleReduceOptimization: true}},
+ }
+});
+
+const mongosDB = st.s0.getDB(jsTestName());
+const mongosColl = mongosDB[jsTestName()];
+
+assert.commandWorked(mongosDB.dropDatabase());
+assert.commandWorked(mongosDB.adminCommand({enableSharding: mongosDB.getName()}));
+st.ensurePrimaryShard(mongosDB.getName(), st.shard0.shardName);
+
+assert.commandWorked(
+ mongosDB.adminCommand({shardCollection: mongosColl.getFullName(), key: {_id: 1}}));
+
+// Split the collection into 2 chunks: [minKey, 0) and [0, maxKey].
+assert.commandWorked(mongosDB.adminCommand({split: mongosColl.getFullName(), middle: {_id: 0}}));
+
+// Move the [0, MaxKey) chunk to the second shard.
+assert.commandWorked(mongosDB.adminCommand(
+ {moveChunk: mongosColl.getFullName(), find: {_id: 50}, to: st.shard1.shardName}));
+
+assert.commandWorked(mongosColl.insert({_id: -1}));
+const map = function() {
+ emit(0, {val: "mapped value"});
+};
+
+const reduce = function(key, values) {
+ return {val: "reduced value"};
+};
+
+let res = assert.commandWorked(mongosDB.runCommand(
+ {mapReduce: mongosColl.getName(), map: map, reduce: reduce, out: {inline: 1}}));
+assert.eq(res.results[0], {_id: 0, value: {val: "mapped value"}});
+
+assert.commandWorked(mongosColl.insert({_id: 1}));
+
+res = assert.commandWorked(mongosDB.runCommand(
+ {mapReduce: mongosColl.getName(), map: map, reduce: reduce, out: {inline: 1}}));
+assert.eq(res.results[0], {_id: 0, value: {val: "reduced value"}});
+
+st.stop();
+}());