From 870e5cf7e25951c6dc8ed75e2d7343db4f0bfd8c Mon Sep 17 00:00:00 2001 From: Aaron Date: Sun, 15 Apr 2012 23:26:01 -0700 Subject: SERVER-5301 Clear query plan cache when an index becomes multikey. --- jstests/queryoptimizer9.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 jstests/queryoptimizer9.js (limited to 'jstests/queryoptimizer9.js') diff --git a/jstests/queryoptimizer9.js b/jstests/queryoptimizer9.js new file mode 100644 index 00000000000..c439e494d2b --- /dev/null +++ b/jstests/queryoptimizer9.js @@ -0,0 +1,31 @@ +// When an index becomes multikey the query plan cache is cleared. SERVER-5301 + +t = db.jstests_queryoptimizer9; +t.drop(); + +function recordQueryPlan() { + t.find( { a:1, b:1 } ).explain(); +} + +function hasCachedPlan() { + return !!t.find( { a:1, b:1 } ).explain( true ).oldPlan; +} + +t.ensureIndex( { a:1 } ); +t.save( { a:1 } ); + +recordQueryPlan(); +assert( hasCachedPlan() ); + +// While the index is not multikey the cached query plan is not cleared. +t.save( { a:2 } ); +assert( hasCachedPlan() ); + +// When the index becomes multikey the cached query plan is cleared. +t.save( { a:[ 3, 4 ] } ); +assert( !hasCachedPlan() ); + +// When the index remains multikey the cached query plan is not cleared. +recordQueryPlan(); +t.save( { a:[ 5, 6 ] } ); +assert( hasCachedPlan() ); -- cgit v1.2.1