summaryrefslogtreecommitdiff
path: root/jstests/sharding/limit_push.js
diff options
context:
space:
mode:
authorAlvin Richards <alvin@10gen.com>2010-10-06 16:08:34 -0400
committerAlvin Richards <alvin@10gen.com>2010-10-06 16:08:34 -0400
commitddb16cb7e47806406592a49155e223f5132fd993 (patch)
tree6805ca54fcb220e907f6b386ea29eb53103b8402 /jstests/sharding/limit_push.js
parentb372e20ec85ae4fa9100942c8829501c1737d5be (diff)
downloadmongo-ddb16cb7e47806406592a49155e223f5132fd993.tar.gz
Added jstest for http://jira.mongodb.org/browse/SERVER-1896
Diffstat (limited to 'jstests/sharding/limit_push.js')
-rw-r--r--jstests/sharding/limit_push.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/jstests/sharding/limit_push.js b/jstests/sharding/limit_push.js
new file mode 100644
index 00000000000..c77fee4c842
--- /dev/null
+++ b/jstests/sharding/limit_push.js
@@ -0,0 +1,54 @@
+// This test is to ensure that limit() clauses are pushed down to the shards and evaluated
+// See: http://jira.mongodb.org/browse/SERVER-1896
+
+doTest = function( ) {
+
+ s = new ShardingTest( "limit_push", 2, 1, 1 );
+
+ db = s.getDB( "test" );
+
+ // Create some data
+ for (i=0; i < 100; i++) { db.limit_push.insert({ _id : i, x: i}); }
+ db.limit_push.ensureIndex( { x : 1 } );
+ assert.eq( 100 , db.limit_push.find().length() , "Incorrect number of documents" );
+
+ // Shard the collection
+ s.adminCommand( { enablesharding : "test" } );
+ s.adminCommand( { shardcollection : "test.limit_push" , key : { x : 1 } } );
+
+ // Now split the and move the data between the shards
+ s.adminCommand( { split : "test.limit_push", middle : { x : 50 }} );
+ s.adminCommand( { moveChunk: "test.limit_push", find : { x : 51}, to : "shard0000" })
+
+ // Check that the chunck have split correctly
+ assert.eq( 2 , s.config.chunks.count() , "wrong number of chunks");
+
+ // The query is asking for the maximum value below a given value
+ // db.limit_push.find( { x : { $lt : 60} } ).sort( { x:-1} ).limit(1)
+ q = { x : { $lt : 60} };
+
+ // Make sure the basic queries are correct
+ assert.eq( 60 , db.limit_push.find( q ).count() , "Did not find 60 documents" );
+ //rs = db.limit_push.find( q ).sort( { x:-1} ).limit(1)
+ //assert.eq( rs , { _id : "1" , x : 59 } , "Did not find document with value 59" );
+
+ // Now make sure that the explain shos that each shard is returning a single document as indicated
+ // by the "n" element for each shard
+ exp = db.limit_push.find( q ).sort( { x:-1} ).limit(1).explain();
+
+ assert.eq("ParallelSort", exp.clusteredType, "Not a ParallelSort");
+
+ var k = 0;
+ for (var j in exp.shards) {
+ assert.eq( 1 , exp.shards[j][0].n, "'n' is not 1 from shard000" + k.toString());
+ k++
+ }
+
+ s.stop();
+
+}
+
+// Uncomment this when the bug is fixed
+// doTest();
+
+