summaryrefslogtreecommitdiff
path: root/jstests/sharding
diff options
context:
space:
mode:
authorJaume Moragues <jaume.moragues@mongodb.com>2020-12-15 09:54:16 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-01-20 01:08:57 +0000
commitf364f9617c5e731d3b048242a2a35e8ef7e62353 (patch)
tree10313dc567f109c32f5851c662d02b9084cf0989 /jstests/sharding
parent7bfed517d2545820e41e05f1855da254de673e28 (diff)
downloadmongo-f364f9617c5e731d3b048242a2a35e8ef7e62353.tar.gz
SERVER-52809 Implement the new drop collection path in _shardsvrDropCollection
Diffstat (limited to 'jstests/sharding')
-rw-r--r--jstests/sharding/change_stream_metadata_notifications.js2
-rw-r--r--jstests/sharding/invalid_system_views_sharded_collection.js4
-rw-r--r--jstests/sharding/libs/mongos_api_params_util.js2
-rw-r--r--jstests/sharding/move_primary_with_drop_collection.js75
-rw-r--r--jstests/sharding/read_write_concern_defaults_application.js1
-rw-r--r--jstests/sharding/zero_shard_version.js16
6 files changed, 89 insertions, 11 deletions
diff --git a/jstests/sharding/change_stream_metadata_notifications.js b/jstests/sharding/change_stream_metadata_notifications.js
index ebd56dd63d7..b81ec733df2 100644
--- a/jstests/sharding/change_stream_metadata_notifications.js
+++ b/jstests/sharding/change_stream_metadata_notifications.js
@@ -66,7 +66,7 @@ assert.eq(next.documentKey.shardKey, 1);
assert.soon(() => changeStream.hasNext());
next = changeStream.next();
assert.eq(next.operationType, "insert");
-assert.eq(next.documentKey, {_id: 2});
+assert.eq(next.documentKey._id, 2);
assert.soon(() => changeStream.hasNext());
next = changeStream.next();
diff --git a/jstests/sharding/invalid_system_views_sharded_collection.js b/jstests/sharding/invalid_system_views_sharded_collection.js
index ae97b49d0ab..1574abebedb 100644
--- a/jstests/sharding/invalid_system_views_sharded_collection.js
+++ b/jstests/sharding/invalid_system_views_sharded_collection.js
@@ -111,7 +111,9 @@ function runTest(st, badViewDefinition) {
assert.commandWorked(db.runCommand({drop: unshardedColl.getName()}), makeErrorMessage("drop"));
// Drop the offending view so that the validate hook succeeds.
- assert(db.system.views.drop());
+ [st.shard0, st.shard1].forEach(shard => {
+ assert(shard.getDB(db.getName())["system.views"].drop());
+ });
}
const st = new ShardingTest({name: "views_sharded", shards: 2, other: {enableBalancer: false}});
diff --git a/jstests/sharding/libs/mongos_api_params_util.js b/jstests/sharding/libs/mongos_api_params_util.js
index fa12c1a1b23..57c32fd30dd 100644
--- a/jstests/sharding/libs/mongos_api_params_util.js
+++ b/jstests/sharding/libs/mongos_api_params_util.js
@@ -350,7 +350,7 @@ let MongosAPIParametersUtil = (function() {
commandName: "drop",
run: {
inAPIVersion1: true,
- shardCommandName: "drop",
+ shardCommandName: "_shardsvrDropCollection",
permittedInTxn: false,
command: () => ({drop: "collection"})
}
diff --git a/jstests/sharding/move_primary_with_drop_collection.js b/jstests/sharding/move_primary_with_drop_collection.js
new file mode 100644
index 00000000000..9f5eb9aafad
--- /dev/null
+++ b/jstests/sharding/move_primary_with_drop_collection.js
@@ -0,0 +1,75 @@
+(function() {
+"use strict";
+
+var st = new ShardingTest({shards: 2});
+var configDB = st.s.getDB('config');
+
+/*
+ * Test that moving database primary works after dropping a recreating the same sharded collection,
+ * the new primary never owned a chunk of the sharded collection.
+ */
+var testDB = st.s.getDB(jsTest.name() + "_db1");
+var coll = testDB['coll'];
+
+assert.commandWorked(st.s.adminCommand({enableSharding: testDB.getName()}));
+
+jsTest.log("Create sharded collection with on chunk on shad 0");
+st.ensurePrimaryShard(testDB.getName(), st.shard0.shardName);
+st.shardColl(coll, {skey: 1}, false, false);
+
+jsTest.log("Move database primary back and forth shard 1");
+st.ensurePrimaryShard(testDB.getName(), st.shard1.shardName);
+st.ensurePrimaryShard(testDB.getName(), st.shard0.shardName);
+
+jsTest.log("Drop sharded collection");
+coll.drop();
+
+jsTest.log("Re-Create sharded collection on shard 0");
+st.shardColl(coll, {skey: 1}, false, false);
+
+jsTest.log("Move database primary to shard 1");
+st.ensurePrimaryShard(testDB.getName(), st.shard1.shardName);
+
+jsTest.log("Drop sharded collection");
+coll.drop();
+
+/*
+ * Test that moving database primary works after dropping a recreating the same sharded collection,
+ * the new primary previously owned a chunk of the original collection.
+ */
+var testDB = st.s.getDB(jsTest.name() + "_db2");
+var coll = testDB['coll'];
+
+assert.commandWorked(st.s.adminCommand({enableSharding: testDB.getName()}));
+
+jsTest.log("Create sharded collection with two chunks on each shard");
+st.ensurePrimaryShard(testDB.getName(), st.shard0.shardName);
+st.shardColl(coll, {skey: 1}, {skey: 0}, {skey: 0});
+
+assert.eq(1, configDB.chunks.count({ns: coll.getFullName(), shard: st.shard0.shardName}));
+assert.eq(1, configDB.chunks.count({ns: coll.getFullName(), shard: st.shard1.shardName}));
+jsTest.log("Move all chunks to shard 0");
+assert.commandWorked(st.s.adminCommand({
+ moveChunk: coll.getFullName(),
+ find: {skey: 10},
+ to: st.shard0.shardName,
+ _waitForDelete: true
+}));
+assert.eq(2, configDB.chunks.count({ns: coll.getFullName(), shard: st.shard0.shardName}));
+assert.eq(0, configDB.chunks.count({ns: coll.getFullName(), shard: st.shard1.shardName}));
+
+jsTest.log("Drop sharded collection");
+coll.drop();
+
+jsTest.log("Re-Create sharded collection with one chunk on shard 0");
+st.shardColl(coll, {skey: 1}, false, false);
+assert.eq(1, configDB.chunks.count({ns: coll.getFullName(), shard: st.shard0.shardName}));
+
+jsTest.log("Move primary of DB to shard 1");
+st.ensurePrimaryShard(testDB.getName(), st.shard1.shardName);
+
+jsTest.log("Drop sharded collection");
+coll.drop();
+
+st.stop();
+})();
diff --git a/jstests/sharding/read_write_concern_defaults_application.js b/jstests/sharding/read_write_concern_defaults_application.js
index 3b2a1644d19..5e334ff749e 100644
--- a/jstests/sharding/read_write_concern_defaults_application.js
+++ b/jstests/sharding/read_write_concern_defaults_application.js
@@ -116,6 +116,7 @@ let testCases = {
_shardsvrCloneCatalogData: {skip: "internal command"},
_shardsvrCreateCollection: {skip: "internal command"},
_shardsvrDropCollection: {skip: "internal command"},
+ _shardsvrDropCollectionParticipant: {skip: "internal command"},
_shardsvrDropDatabase: {skip: "internal command"},
_shardsvrMovePrimary: {skip: "internal command"},
_shardsvrRefineCollectionShardKey: {skip: "internal command"},
diff --git a/jstests/sharding/zero_shard_version.js b/jstests/sharding/zero_shard_version.js
index d8501d27476..94ddde7fb60 100644
--- a/jstests/sharding/zero_shard_version.js
+++ b/jstests/sharding/zero_shard_version.js
@@ -12,9 +12,13 @@ assert.commandWorked(testDB_s0.adminCommand({enableSharding: 'test'}));
st.ensurePrimaryShard('test', st.shard1.shardName);
assert.commandWorked(testDB_s0.adminCommand({shardCollection: 'test.user', key: {x: 1}}));
-var checkShardMajorVersion = function(conn, expectedVersion) {
- var shardVersionInfo = conn.adminCommand({getShardVersion: 'test.user'});
- assert.eq(expectedVersion, shardVersionInfo.global.getTime());
+var checkShardMajorVersion = function(conn, expectedMajorVersion) {
+ const shardVersion =
+ assert.commandWorked(conn.adminCommand({getShardVersion: 'test.user'})).global;
+ assert.eq(shardVersion.getTime(),
+ expectedMajorVersion,
+ "Node " + conn + " expected to have major version " + expectedMajorVersion +
+ " but has version " + tojson(shardVersion));
};
///////////////////////////////////////////////////////
@@ -64,11 +68,10 @@ assert.neq(null, testDB_s3.user.findOne({x: 1}));
testDB_s1.user.drop();
assert.commandWorked(testDB_s1.user.insert({x: 10}));
-// shard0: 0|0|0
+// shard0: UNKNOWN
// shard1: 0|0|0
// mongos0: 2|0|a
-checkShardMajorVersion(st.rs0.getPrimary(), 0);
checkShardMajorVersion(st.rs1.getPrimary(), 0);
// mongos0 still thinks { x: 10 } belong to st.shard0.shardName, but since coll is dropped,
@@ -143,9 +146,6 @@ assert.neq(null, testDB_s3.user.findOne({x: 1}));
// Set mongos0 to version 0|0|0
testDB_s0.user.drop();
-checkShardMajorVersion(st.rs0.getPrimary(), 0);
-checkShardMajorVersion(st.rs1.getPrimary(), 0);
-
assert.eq(null, testDB_s0.user.findOne({x: 1}));
// Needs to also set mongos1 to version 0|0|0, otherwise it'll complain that collection is