diff options
author | Jaume Moragues <jaume.moragues@mongodb.com> | 2020-12-15 09:54:16 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-01-20 01:08:57 +0000 |
commit | f364f9617c5e731d3b048242a2a35e8ef7e62353 (patch) | |
tree | 10313dc567f109c32f5851c662d02b9084cf0989 /jstests/sharding | |
parent | 7bfed517d2545820e41e05f1855da254de673e28 (diff) | |
download | mongo-f364f9617c5e731d3b048242a2a35e8ef7e62353.tar.gz |
SERVER-52809 Implement the new drop collection path in _shardsvrDropCollection
Diffstat (limited to 'jstests/sharding')
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 |