Files
mongo/jstests/sharding/dump_coll_metadata.js
Steve McClure 1ffbc6c2e9 SERVER-109432: Autofix JS var usage to favor let (#40637)
GitOrigin-RevId: 9674b7db36a0f3f650d39c1e3fb2ad6ff2141cfb
2025-08-28 19:21:01 +00:00

61 lines
2.3 KiB
JavaScript

//
// Tests that we can dump collection metadata via getShardVersion()
//
import {ShardingTest} from "jstests/libs/shardingtest.js";
let st = new ShardingTest({shards: 2});
let coll = st.s.getCollection("foo.bar");
let shardAdmin = st.shard0.getDB("admin");
assert.commandWorked(st.s.adminCommand({enableSharding: coll.getDB() + "", primaryShard: st.shard0.shardName}));
assert.commandWorked(st.s.adminCommand({shardCollection: coll + "", key: {_id: 1}}));
assert.commandWorked(shardAdmin.runCommand({getShardVersion: coll + ""}));
function getCollMetadataWithRefresh(node, collName) {
let shardVersionRes;
assert.soon(() => {
assert.commandWorked(node.adminCommand({_flushRoutingTableCacheUpdates: collName}));
let res = assert.commandWorked(node.adminCommand({getShardVersion: collName, fullMetadata: true}));
assert(res.hasOwnProperty("global"), `Did not found 'global' property in metadata object: ${tojson(res)}`);
if (res.global === "UKNOWN") {
return false;
}
shardVersionRes = res;
return true;
});
return shardVersionRes;
}
// Make sure we have chunks information on the shard after the shard collection call
let svRes = getCollMetadataWithRefresh(st.shard0, coll.getFullName());
assert.eq(svRes.metadata.chunks.length, 1);
assert.eq(svRes.metadata.chunks[0][0]._id, MinKey);
assert.eq(svRes.metadata.chunks[0][1]._id, MaxKey);
assert.eq(svRes.metadata.shardVersion, svRes.global);
// Make sure a collection with no metadata still returns the metadata field
assert.neq(shardAdmin.runCommand({getShardVersion: coll + "xyz", fullMetadata: true}).metadata, undefined);
// Make sure we get multiple chunks after a split and refresh -- splits by themselves do not
// cause the shard to refresh.
assert.commandWorked(st.s.adminCommand({split: coll + "", middle: {_id: 0}}));
assert.commandWorked(shardAdmin.runCommand({getShardVersion: coll + ""}));
svRes = getCollMetadataWithRefresh(st.shard0, coll.getFullName());
assert.eq(svRes.metadata.chunks.length, 2);
assert(svRes.metadata.chunks[0][0]._id + "" == MinKey + "");
assert(svRes.metadata.chunks[0][1]._id == 0);
assert(svRes.metadata.chunks[1][0]._id == 0);
assert(svRes.metadata.chunks[1][1]._id + "" == MaxKey + "");
assert(tojson(svRes.metadata.shardVersion) == tojson(svRes.global));
st.stop();