mongo/jstests/sharding/coll_epoch_test1.js

106 lines
2.8 KiB
JavaScript

// Tests various cases of dropping and recreating collections in the same namespace with multiple
// mongoses
import {ShardingTest} from "jstests/libs/shardingtest.js";
let st = new ShardingTest({shards: 3, mongos: 3, causallyConsistent: true});
let config = st.s0.getDB("config");
let admin = st.s0.getDB("admin");
let coll = st.s0.getCollection("foo.bar");
// Use separate mongoses for admin, inserting data, and validating results, so no single-mongos
// tricks will work
let staleMongos = st.s1;
let insertMongos = st.s2;
let shards = [st.shard0, st.shard1, st.shard2];
//
// Test that inserts and queries go to the correct shard even when the collection has been
// sharded from another mongos
//
jsTest.log("Enabling sharding for the first time...");
assert.commandWorked(admin.runCommand({enableSharding: coll.getDB() + "", primaryShard: st.shard1.shardName}));
assert.commandWorked(admin.runCommand({shardCollection: coll + "", key: {_id: 1}}));
let bulk = insertMongos.getCollection(coll + "").initializeUnorderedBulkOp();
for (var i = 0; i < 100; i++) {
bulk.insert({_id: i, test: "a"});
}
assert.commandWorked(bulk.execute());
assert.eq(
100,
staleMongos
.getCollection(coll + "")
.find({test: "a"})
.itcount(),
);
assert(coll.drop());
st.configRS.awaitLastOpCommitted();
//
// Test that inserts and queries go to the correct shard even when the collection has been
// resharded from another mongos, with a different key
//
jsTest.log("Re-enabling sharding with a different key...");
assert.commandWorked(coll.createIndex({notId: 1}));
assert.commandWorked(admin.runCommand({shardCollection: coll + "", key: {notId: 1}}));
bulk = insertMongos.getCollection(coll + "").initializeUnorderedBulkOp();
for (var i = 0; i < 100; i++) {
bulk.insert({notId: i, test: "b"});
}
assert.commandWorked(bulk.execute());
assert.eq(
100,
staleMongos
.getCollection(coll + "")
.find({test: "b"})
.itcount(),
);
assert.eq(
0,
staleMongos
.getCollection(coll + "")
.find({test: {$in: ["a"]}})
.itcount(),
);
assert(coll.drop());
st.configRS.awaitLastOpCommitted();
//
// Test that inserts and queries go to the correct shard even when the collection has been
// unsharded from another mongos
//
jsTest.log("Re-creating unsharded collection from a sharded collection...");
bulk = insertMongos.getCollection(coll + "").initializeUnorderedBulkOp();
for (var i = 0; i < 100; i++) {
bulk.insert({test: "c"});
}
assert.commandWorked(bulk.execute());
assert.eq(
100,
staleMongos
.getCollection(coll + "")
.find({test: "c"})
.itcount(),
);
assert.eq(
0,
staleMongos
.getCollection(coll + "")
.find({test: {$in: ["a", "b"]}})
.itcount(),
);
st.stop();