Files
mongo/jstests/sharding/key_string.js
Igor Praznik 23076aa926 SERVER-97411 Make cluster split check idempotent (#29590)
GitOrigin-RevId: 6c583daf74bd5855cf6c817226651545156d3ddc
2024-11-28 14:45:20 +00:00

74 lines
2.6 KiB
JavaScript

import {ShardingTest} from "jstests/libs/shardingtest.js";
import {findChunksUtil} from "jstests/sharding/libs/find_chunks_util.js";
var 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.
const fcvDoc = db.adminCommand({getParameter: 1, featureCompatibilityVersion: 1});
if (MongoRunner.compareBinVersions(fcvDoc.featureCompatibilityVersion.version, "8.1") >= 0) {
// 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();