72 lines
2.3 KiB
JavaScript
72 lines
2.3 KiB
JavaScript
// SERVER-16498 d_migrate.cpp should not rely on system.namespaces
|
|
//
|
|
// This test creates a sharded collection with wiredtiger options.
|
|
// When the chunks of this collection get migrated to the other shard,
|
|
// the other shard should create the collection with the same options.
|
|
// However, before SERVER-16498, the receiver relies on checking
|
|
// system.namespaces on the donor, which is empty on wiredtiger.
|
|
// As a result, the new collection created on receiver has different
|
|
// options.
|
|
//
|
|
// P.S. wiredtiger options are not valid for MMAPv1, but MMAPv1 will
|
|
// keep and ignore them.
|
|
|
|
var st = new ShardingTest({ shards : 2 });
|
|
|
|
var db = st.s.getDB("test");
|
|
var coll = db.sharding_system_namespaces;
|
|
|
|
// This test relies on the wiredTiger storage engine being compiled
|
|
// into the server. Must check shard member for WT as it is not built into mongos.
|
|
|
|
var storageEngines = st.shard0.getDB("local").serverBuildInfo().storageEngines;
|
|
|
|
print("Supported storage engines: " + storageEngines);
|
|
|
|
if (Array.contains(storageEngines, "wiredTiger")) {
|
|
|
|
function checkCollectionOptions(database) {
|
|
var collectionsInfos = database.getCollectionInfos();
|
|
printjson(collectionsInfos);
|
|
var info = collectionsInfos.filter(function(c) {
|
|
return c.name == "sharding_system_namespaces";
|
|
})[0];
|
|
assert.eq(info.options.storageEngine.wiredTiger.configString, "block_compressor=zlib");
|
|
}
|
|
|
|
db.createCollection("sharding_system_namespaces",
|
|
{
|
|
storageEngine: {
|
|
wiredTiger: { configString: "block_compressor=zlib" }
|
|
}
|
|
});
|
|
|
|
checkCollectionOptions(db);
|
|
|
|
assert.commandWorked(db.adminCommand({ enableSharding: 'test' }));
|
|
st.ensurePrimaryShard('test', 'shard0001');
|
|
assert.commandWorked(db.adminCommand({ shardCollection: coll + '', key: { x: 1 }}));
|
|
|
|
coll.insert({x: 0});
|
|
coll.insert({x: 10});
|
|
|
|
assert.commandWorked(db.adminCommand({ split: coll + '', middle: { x: 5 }}));
|
|
|
|
printShardingStatus();
|
|
|
|
var primaryShard = st.getServer("test");
|
|
anotherShard = st.getOther( primaryShard );
|
|
assert.commandWorked(db.adminCommand({
|
|
movechunk: coll + '',
|
|
find: { x: 5 },
|
|
to: anotherShard.name
|
|
}));
|
|
|
|
printShardingStatus();
|
|
|
|
checkCollectionOptions(anotherShard.getDB("test"));
|
|
}
|
|
else {
|
|
print("Skipping test. wiredTiger engine not supported by mongod binary.")
|
|
}
|