Files
mongo/jstests/sharding/listDatabases.js
Randolph Tan 4ec5842d77 SERVER-21193 mongos claims that config db is empty on CSRS cluster
dbStats don't support readConcern since database metadata in the server are not synchronized with the snapshots. This makes the listDatabase command in mongos to send listDatabase instead with primaryPreferred and without the readConcern option.

This also changed the listDatabase behavior to not include the config or admin in the result if they don't actually exist.
2015-11-11 10:52:01 -05:00

62 lines
2.0 KiB
JavaScript

// tests that listDatabases doesn't show config db on a shard, even if it is there
var test = new ShardingTest({shards: 1, mongos: 1, other: {chunksize:1}})
var mongos = test.s0
var mongod = test.shard0;
//grab the config db instance by name
var getDBSection = function (dbsArray, dbToFind) {
for(var pos in dbsArray) {
if (dbsArray[pos].name && dbsArray[pos].name === dbToFind)
return dbsArray[pos];
}
return null;
};
var dbInConfigEntryCheck = function(dbEntry) {
assert.neq(null, dbEntry);
assert(!dbEntry.shards); // db should not be in shard.
assert.neq(null, dbEntry.sizeOnDisk);
assert.eq(false, dbEntry.empty);
};
assert.writeOK(mongos.getDB("blah").foo.insert({ _id: 1 }));
assert.writeOK(mongos.getDB("foo").foo.insert({ _id: 1 }));
assert.writeOK(mongos.getDB("raw").foo.insert({ _id: 1 }));
//verify that the config db is not on a shard
var res = mongos.adminCommand("listDatabases");
var dbArray = res.databases;
dbInConfigEntryCheck(getDBSection(dbArray, "config"));
// Should not have admin entry if it doesn't exists.
var adminSection = getDBSection(dbArray, 'admin');
assert(!adminSection);
// add doc in admin db on the config server.
mongos.getDB('admin').test.insert({ _id: 1 });
res = mongos.adminCommand("listDatabases");
dbArray = res.databases;
dbInConfigEntryCheck(getDBSection(dbArray, "config"));
dbInConfigEntryCheck(getDBSection(dbArray, 'admin'));
//add doc in config/admin db on the shard
mongod.getDB("config").foo.insert({_id:1})
mongod.getDB("admin").foo.insert({_id:1})
//add doc in admin db (via mongos)
mongos.getDB("admin").foo.insert({_id:1})
//verify that the config db is not on a shard
res = mongos.adminCommand("listDatabases");
dbArray = res.databases;
//check config db
assert(getDBSection(dbArray, "config"), "config db not found! 2")
assert(!getDBSection(dbArray, "config").shards, "config db is on a shard! 2")
//check admin db
assert(getDBSection(dbArray, "admin"), "admin db not found! 2")
assert(!getDBSection(dbArray, "admin").shards, "admin db is on a shard! 2")
test.stop()