mongo/jstests/sharding/key_string.js
Pol Piñol Castuera a9b673d3b4 SERVER-118760 Disable featureCompatibilityVersion server parameter on mongos (#47472)
GitOrigin-RevId: d26973283877b1b236bf1071ecfdc6e6f4cede5e
2026-03-16 14:21:33 +00:00

86 lines
2.6 KiB
JavaScript

import {isFCVgte} from "jstests/libs/feature_compatibility_version.js";
import {ShardingTest} from "jstests/libs/shardingtest.js";
import {findChunksUtil} from "jstests/sharding/libs/find_chunks_util.js";
let s = new ShardingTest({name: "keystring", shards: 2});
s.adminCommand({enablesharding: "test", primaryShard: s.shard1.shardName});
s.adminCommand({shardcollection: "test.foo", key: {name: 1}});
let primary = s.getPrimaryShard("test").getDB("test");
let seconday = s.getOther(primary).getDB("test");
assert.eq(1, findChunksUtil.countChunksForNs(s.config, "test.foo"), "sanity check A");
var db = s.getDB("test");
db.foo.save({name: "eliot"});
db.foo.save({name: "sara"});
db.foo.save({name: "bob"});
db.foo.save({name: "joe"});
db.foo.save({name: "mark"});
db.foo.save({name: "allan"});
assert.eq(6, db.foo.find().count(), "basic count");
s.adminCommand({split: "test.foo", middle: {name: "allan"}});
s.adminCommand({split: "test.foo", middle: {name: "sara"}});
s.adminCommand({split: "test.foo", middle: {name: "eliot"}});
s.adminCommand({
movechunk: "test.foo",
find: {name: "eliot"},
to: seconday.getMongo().name,
_waitForDelete: true,
});
s.printChunks();
assert.eq(3, primary.foo.find().toArray().length, "primary count");
assert.eq(3, seconday.foo.find().toArray().length, "secondary count");
assert.eq(6, db.foo.find().toArray().length, "total count");
assert.eq(6, db.foo.find().sort({name: 1}).toArray().length, "total count sorted");
assert.eq(6, db.foo.find().sort({name: 1}).count(), "total count with count()");
assert.eq(
"allan,bob,eliot,joe,mark,sara",
db.foo
.find()
.sort({name: 1})
.toArray()
.map(function (z) {
return z.name;
}),
"sort 1",
);
assert.eq(
"sara,mark,joe,eliot,bob,allan",
db.foo
.find()
.sort({name: -1})
.toArray()
.map(function (z) {
return z.name;
}),
"sort 2",
);
// TODO(SERVER-97588): Remove version check from tests when 8.1 becomes last LTS.
if (isFCVgte(s, "8.1")) {
// Ensure it does not fail on boundaries that are already split.
assert.eq(true, s.adminCommand({split: "test.foo", middle: {name: "allan"}}));
assert.eq(true, s.adminCommand({split: "test.foo", middle: {name: "eliot"}}));
} else {
// make sure we can't force a split on an extreme key
// [allan->joe)
assert.throws(function () {
s.adminCommand({split: "test.foo", middle: {name: "allan"}});
});
assert.throws(function () {
s.adminCommand({split: "test.foo", middle: {name: "eliot"}});
});
}
s.stop();