mongo/jstests/sharding/split_with_force.js

66 lines
1.7 KiB
JavaScript

//
// Tests split vector locations with force : true
//
import {ShardingTest} from "jstests/libs/shardingtest.js";
// TODO (SERVER-87574): Performing splitVector across dbs isn't supported via mongos.
TestData.replicaSetEndpointIncompatible = true;
let options = {
chunkSize: 1, // MB
};
let st = new ShardingTest({shards: 1, mongos: 1, other: options});
let mongos = st.s0;
let admin = mongos.getDB("admin");
let shardAdmin = st.shard0.getDB("admin");
let coll = mongos.getCollection("foo.bar");
assert(admin.runCommand({enableSharding: coll.getDB() + ""}).ok);
assert(admin.runCommand({shardCollection: coll + "", key: {_id: 1}}).ok);
assert(admin.runCommand({split: coll + "", middle: {_id: 0}}).ok);
jsTest.log("Insert a bunch of data into a chunk of the collection...");
let bulk = coll.initializeUnorderedBulkOp();
for (let i = 0; i < 250 * 1000 + 10; i++) {
bulk.insert({_id: i});
}
assert.commandWorked(bulk.execute());
jsTest.log("Insert a bunch of data into the rest of the collection...");
bulk = coll.initializeUnorderedBulkOp();
for (let i = 1; i <= 250 * 1000; i++) {
bulk.insert({_id: -i});
}
assert.commandWorked(bulk.execute());
jsTest.log("Get split points of the chunk using force : true...");
let splitKeys = assert.commandWorked(
shardAdmin.runCommand({
splitVector: coll + "",
keyPattern: {_id: 1},
min: {_id: 0},
max: {_id: MaxKey},
force: true,
}),
).splitKeys;
printjson(splitKeys);
printjson(coll.stats());
st.printShardingStatus();
jsTest.log("Make sure our split is approximately in half...");
assert.eq(splitKeys.length, 1);
let splitKey = splitKeys[0]._id;
assert.gt(splitKey, (250 * 1000) / 2 - 50);
assert.lt(splitKey, (250 * 1000) / 2 + 50);
st.stop();