diff options
author | nandinibhartiyaMDB <104035932+nandinibhartiyaMDB@users.noreply.github.com> | 2022-06-07 16:35:28 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-07 17:01:37 +0000 |
commit | b0fd7b268a420fc79b7ab4ca358fdbffa434fbda (patch) | |
tree | d576da111cbad96a138c90fa6add9253b9d320f1 /jstests | |
parent | ad54048f491d9ebdc107b8bda1be33106fa4ef7a (diff) | |
download | mongo-b0fd7b268a420fc79b7ab4ca358fdbffa434fbda.tar.gz |
SERVER-62272 : Migration OK for chunks existing before schema validator
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/sharding/chunk_migration_with_schema_validation.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/jstests/sharding/chunk_migration_with_schema_validation.js b/jstests/sharding/chunk_migration_with_schema_validation.js new file mode 100644 index 00000000000..28b8427d45a --- /dev/null +++ b/jstests/sharding/chunk_migration_with_schema_validation.js @@ -0,0 +1,67 @@ +/** + * Ensure that schema validation rules applied after a collection has been populated, does not + * inhibit chunk migration for the data that existed before the rules were applied. + */ + +(function() { +'use strict'; + +load("jstests/libs/fail_point_util.js"); +load('jstests/libs/parallel_shell_helpers.js'); +load("jstests/sharding/libs/create_sharded_collection_util.js"); + +const st = new ShardingTest({mongos: 1, shards: 2, rs: {nodes: 3}}); +const dbName = "test"; +const collName = "foo"; +const ns = "test.foo"; +const testColl = st.s.getCollection(ns); + +assert.commandWorked(st.s.adminCommand({enableSharding: dbName})); +st.ensurePrimaryShard(dbName, st.shard0.shardName); +CreateShardedCollectionUtil.shardCollectionWithChunks(testColl, {x: 1}, [ + {min: {x: MinKey}, max: {x: 50}, shard: st.shard0.shardName}, + {min: {x: 50}, max: {x: MaxKey}, shard: st.shard0.shardName}, +]); + +for (let i = 0; i < 100; i++) { + assert.commandWorked(testColl.insert({x: i, name: "A"})); +} +assert.eq(100, testColl.find().itcount()); + +assert.commandWorked(testColl.runCommand({collMod: "foo", validator: {name: {$type: "int"}}})); + +let failpoint = configureFailPoint(st.shard1, "migrateThreadHangAtStep4"); + +const awaitResult = startParallelShell( + funWithArgs(function(ns, toShardName) { + assert.commandWorked( + db.adminCommand({moveChunk: ns, find: {x: 50}, to: toShardName, _waitForDelete: true})); + }, ns, st.shard1.shardName), st.s.port); + +failpoint.wait(); + +for (let i = 100; i < 200; i++) { + assert.commandWorked(testColl.runCommand( + {insert: collName, documents: [{x: i, name: "B"}], bypassDocumentValidation: true})); +} + +for (let i = 50; i < 75; ++i) { + assert.commandWorked(testColl.remove({x: i})); +} + +failpoint.off(); + +awaitResult(); + +const donor = st.shard0.rs.getPrimary().getDB(dbName); +const recipient = st.shard1.rs.getPrimary().getDB(dbName); +assert.eq(50, + donor.foo.find().itcount(), + "Number of documents on the donor shard after moveChunk is incorrect."); +assert.eq(125, + recipient.foo.find().itcount(), + "Number of documents on the recipient shard after moveChunk is incorrect."); +assert.eq(175, testColl.find().itcount(), "Number of total documents is incorrect"); + +st.stop(); +})(); |