diff --git a/jstests/sharding/sbe_plan_cache_blocks_range_deletion.js b/jstests/sharding/sbe_plan_cache_blocks_range_deletion.js new file mode 100644 index 00000000000..fe0b67c266a --- /dev/null +++ b/jstests/sharding/sbe_plan_cache_blocks_range_deletion.js @@ -0,0 +1,34 @@ +(function() { +"use strict"; + +const dbName = "test"; +const collName = "foo"; +const ns = dbName + "." + collName; + +let st = new ShardingTest({mongos: 1, config: 1, shards: 2}); + +assert.commandWorked(st.s.adminCommand({enableSharding: dbName})); +st.ensurePrimaryShard(dbName, st.shard0.shardName); +assert.commandWorked(st.s.adminCommand({shardCollection: ns, key: {_id: 1}})); + +const coll = st.s.getDB(dbName)[collName]; + +assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.createIndex({b: 1})); + +assert.commandWorked(coll.insert({a: "abc", b: "123"})); + +// By running this query multiple times, we expect to create an active plan cache entry whose plan +// uses index {a: 1}. +for (let i = 0; i < 2; ++i) { + assert.eq(coll.find({a: "abc", b: "123"}).itcount(), 1); +} + +assert.commandWorked(st.s.adminCommand({moveChunk: ns, find: {_id: 0}, to: st.shard1.name})); + +assert.soon(() => { + return st.shard0.getDB('config')["rangeDeletions"].find().itcount() === 0; +}); + +st.stop(); +})();