mirror of https://github.com/mongodb/mongo
59 lines
2.1 KiB
JavaScript
59 lines
2.1 KiB
JavaScript
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
import {findChunksUtil} from "jstests/sharding/libs/find_chunks_util.js";
|
|
|
|
let st = new ShardingTest({shards: 2, chunkSize: 1});
|
|
|
|
assert.commandWorked(st.s0.adminCommand({enableSharding: "test", primaryShard: st.shard1.shardName}));
|
|
assert.commandWorked(st.s0.adminCommand({shardCollection: "test.user", key: {x: "hashed"}}));
|
|
|
|
let configDB = st.s0.getDB("config");
|
|
let chunkCountBefore = findChunksUtil.countChunksForNs(configDB, "test.user");
|
|
assert.gt(chunkCountBefore, 1);
|
|
|
|
let testDB = st.s0.getDB("test");
|
|
for (let x = 0; x < 1000; x++) {
|
|
testDB.user.insert({x: x});
|
|
}
|
|
|
|
let chunkDoc = findChunksUtil.findChunksByNs(configDB, "test.user").sort({min: 1}).next();
|
|
let min = chunkDoc.min;
|
|
let max = chunkDoc.max;
|
|
|
|
// Assumption: There are documents in the MinKey chunk, otherwise, splitVector will fail.
|
|
//
|
|
// Note: This chunk will have 267 documents if collection was presplit to 4.
|
|
let cmdRes = assert.commandWorked(
|
|
st.s0.adminCommand({split: "test.user", bounds: [min, max]}),
|
|
"Split on bounds failed for chunk [" + tojson(chunkDoc) + "]",
|
|
);
|
|
|
|
chunkDoc = findChunksUtil.findChunksByNs(configDB, "test.user").sort({min: 1}).skip(1).next();
|
|
|
|
let middle = NumberLong(chunkDoc.min.x + 1000000);
|
|
cmdRes = assert.commandWorked(
|
|
st.s0.adminCommand({split: "test.user", middle: {x: middle}}),
|
|
"Split failed with middle [" + middle + "]",
|
|
);
|
|
|
|
cmdRes = assert.commandWorked(st.s0.adminCommand({split: "test.user", find: {x: 7}}), "Split failed with find.");
|
|
|
|
let chunkList = findChunksUtil.findChunksByNs(configDB, "test.user").sort({min: 1}).toArray();
|
|
assert.eq(chunkCountBefore + 3, chunkList.length);
|
|
|
|
chunkList.forEach(function (chunkToMove) {
|
|
let toShard = configDB.shards.findOne({_id: {$ne: chunkToMove.shard}})._id;
|
|
|
|
print("Moving chunk " + chunkToMove._id + " from shard " + chunkToMove.shard + " to " + toShard + " ...");
|
|
|
|
assert.commandWorked(
|
|
st.s0.adminCommand({
|
|
moveChunk: "test.user",
|
|
bounds: [chunkToMove.min, chunkToMove.max],
|
|
to: toShard,
|
|
_waitForDelete: true,
|
|
}),
|
|
);
|
|
});
|
|
|
|
st.stop();
|