summaryrefslogtreecommitdiff
path: root/jstests/sharding/features2.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/features2.js')
-rw-r--r--jstests/sharding/features2.js348
1 files changed, 178 insertions, 170 deletions
diff --git a/jstests/sharding/features2.js b/jstests/sharding/features2.js
index b9dc4d6309c..395d782570d 100644
--- a/jstests/sharding/features2.js
+++ b/jstests/sharding/features2.js
@@ -1,202 +1,210 @@
(function() {
-var s = new ShardingTest({ name: "features2", shards: 2, mongos: 1 });
+ var s = new ShardingTest({name: "features2", shards: 2, mongos: 1});
-s.adminCommand( { enablesharding : "test" } );
-s.ensurePrimaryShard('test', 'shard0001');
+ s.adminCommand({enablesharding: "test"});
+ s.ensurePrimaryShard('test', 'shard0001');
-a = s._connections[0].getDB( "test" );
-b = s._connections[1].getDB( "test" );
+ a = s._connections[0].getDB("test");
+ b = s._connections[1].getDB("test");
-db = s.getDB( "test" );
+ db = s.getDB("test");
-// ---- distinct ----
+ // ---- distinct ----
-db.foo.save( { x : 1 } );
-db.foo.save( { x : 2 } );
-db.foo.save( { x : 3 } );
-db.foo.ensureIndex( { x : 1 } );
+ db.foo.save({x: 1});
+ db.foo.save({x: 2});
+ db.foo.save({x: 3});
+ db.foo.ensureIndex({x: 1});
-assert.eq( "1,2,3" , db.foo.distinct( "x" ) , "distinct 1" );
-assert( a.foo.distinct("x").length == 3 || b.foo.distinct("x").length == 3 , "distinct 2" );
-assert( a.foo.distinct("x").length == 0 || b.foo.distinct("x").length == 0 , "distinct 3" );
+ assert.eq("1,2,3", db.foo.distinct("x"), "distinct 1");
+ assert(a.foo.distinct("x").length == 3 || b.foo.distinct("x").length == 3, "distinct 2");
+ assert(a.foo.distinct("x").length == 0 || b.foo.distinct("x").length == 0, "distinct 3");
-assert.eq( 1 , s.onNumShards( "foo" ) , "A1" );
+ assert.eq(1, s.onNumShards("foo"), "A1");
-s.shardColl( "foo" , { x : 1 } , { x : 2 } , { x : 3 }, null, true /* waitForDelete */ );
+ s.shardColl("foo", {x: 1}, {x: 2}, {x: 3}, null, true /* waitForDelete */);
-assert.eq( 2 , s.onNumShards( "foo" ) , "A2" );
+ assert.eq(2, s.onNumShards("foo"), "A2");
-assert.eq( "1,2,3" , db.foo.distinct( "x" ) , "distinct 4" );
+ assert.eq("1,2,3", db.foo.distinct("x"), "distinct 4");
-// ----- delete ---
+ // ----- delete ---
-assert.eq( 3 , db.foo.count() , "D1" );
+ assert.eq(3, db.foo.count(), "D1");
-db.foo.remove( { x : 3 } );
-assert.eq( 2 , db.foo.count() , "D2" );
+ db.foo.remove({x: 3});
+ assert.eq(2, db.foo.count(), "D2");
-db.foo.save( { x : 3 } );
-assert.eq( 3 , db.foo.count() , "D3" );
+ db.foo.save({x: 3});
+ assert.eq(3, db.foo.count(), "D3");
-db.foo.remove( { x : { $gt : 2 } } );
-assert.eq( 2 , db.foo.count() , "D4" );
+ db.foo.remove({x: {$gt: 2}});
+ assert.eq(2, db.foo.count(), "D4");
-db.foo.remove( { x : { $gt : -1 } } );
-assert.eq( 0 , db.foo.count() , "D5" );
+ db.foo.remove({x: {$gt: -1}});
+ assert.eq(0, db.foo.count(), "D5");
-db.foo.save( { x : 1 } );
-db.foo.save( { x : 2 } );
-db.foo.save( { x : 3 } );
-assert.eq( 3 , db.foo.count() , "D6" );
-db.foo.remove( {} );
-assert.eq( 0 , db.foo.count() , "D7" );
+ db.foo.save({x: 1});
+ db.foo.save({x: 2});
+ db.foo.save({x: 3});
+ assert.eq(3, db.foo.count(), "D6");
+ db.foo.remove({});
+ assert.eq(0, db.foo.count(), "D7");
-// --- _id key ---
+ // --- _id key ---
-db.foo2.save( { _id : new ObjectId() } );
-db.foo2.save( { _id : new ObjectId() } );
-db.foo2.save( { _id : new ObjectId() } );
+ db.foo2.save({_id: new ObjectId()});
+ db.foo2.save({_id: new ObjectId()});
+ db.foo2.save({_id: new ObjectId()});
-assert.eq( 1 , s.onNumShards( "foo2" ) , "F1" );
+ assert.eq(1, s.onNumShards("foo2"), "F1");
-printjson( db.foo2.getIndexes() );
-s.adminCommand( { shardcollection : "test.foo2" , key : { _id : 1 } } );
+ printjson(db.foo2.getIndexes());
+ s.adminCommand({shardcollection: "test.foo2", key: {_id: 1}});
-assert.eq( 3 , db.foo2.count() , "F2" );
-db.foo2.insert( {} );
-assert.eq( 4 , db.foo2.count() , "F3" );
+ assert.eq(3, db.foo2.count(), "F2");
+ db.foo2.insert({});
+ assert.eq(4, db.foo2.count(), "F3");
-// --- map/reduce
+ // --- map/reduce
-db.mr.save( { x : 1 , tags : [ "a" , "b" ] } );
-db.mr.save( { x : 2 , tags : [ "b" , "c" ] } );
-db.mr.save( { x : 3 , tags : [ "c" , "a" ] } );
-db.mr.save( { x : 4 , tags : [ "b" , "c" ] } );
-db.mr.ensureIndex( { x : 1 } );
+ db.mr.save({x: 1, tags: ["a", "b"]});
+ db.mr.save({x: 2, tags: ["b", "c"]});
+ db.mr.save({x: 3, tags: ["c", "a"]});
+ db.mr.save({x: 4, tags: ["b", "c"]});
+ db.mr.ensureIndex({x: 1});
-m = function(){
- this.tags.forEach(
- function(z){
- emit( z , { count : 1 } );
+ m = function() {
+ this.tags.forEach(function(z) {
+ emit(z, {count: 1});
+ });
+ };
+
+ r = function(key, values) {
+ var total = 0;
+ for (var i = 0; i < values.length; i++) {
+ total += values[i].count;
}
- );
-};
+ return {
+ count: total
+ };
+ };
+
+ doMR = function(n) {
+ print(n);
+
+ // on-disk
+
+ var res = db.mr.mapReduce(m, r, "smr1_out");
+ printjson(res);
+ assert.eq(4, res.counts.input, "MR T0 " + n);
+
+ var x = db[res.result];
+ assert.eq(3, x.find().count(), "MR T1 " + n);
+
+ var z = {};
+ x.find().forEach(function(a) {
+ z[a._id] = a.value.count;
+ });
+ assert.eq(3, Object.keySet(z).length, "MR T2 " + n);
+ assert.eq(2, z.a, "MR T3 " + n);
+ assert.eq(3, z.b, "MR T4 " + n);
+ assert.eq(3, z.c, "MR T5 " + n);
+
+ x.drop();
+
+ // inline
+
+ var res = db.mr.mapReduce(m, r, {out: {inline: 1}});
+ printjson(res);
+ assert.eq(4, res.counts.input, "MR T6 " + n);
+
+ var z = {};
+ res.find().forEach(function(a) {
+ z[a._id] = a.value.count;
+ });
+ printjson(z);
+ assert.eq(3, Object.keySet(z).length, "MR T7 " + n);
+ assert.eq(2, z.a, "MR T8 " + n);
+ assert.eq(3, z.b, "MR T9 " + n);
+ assert.eq(3, z.c, "MR TA " + n);
+
+ };
+
+ doMR("before");
-r = function( key , values ){
- var total = 0;
- for ( var i=0; i<values.length; i++ ){
- total += values[i].count;
+ assert.eq(1, s.onNumShards("mr"), "E1");
+ s.shardColl("mr", {x: 1}, {x: 2}, {x: 3}, null, true /* waitForDelete */);
+ assert.eq(2, s.onNumShards("mr"), "E1");
+
+ doMR("after");
+
+ s.adminCommand({split: 'test.mr', middle: {x: 3}});
+ s.adminCommand({split: 'test.mr', middle: {x: 4}});
+ s.adminCommand({movechunk: 'test.mr', find: {x: 3}, to: s.getServer('test').name});
+
+ doMR("after extra split");
+
+ cmd = {
+ mapreduce: "mr",
+ map: "emit( ",
+ reduce: "fooz + ",
+ out: "broken1"
+ };
+
+ x = db.runCommand(cmd);
+ y = s._connections[0].getDB("test").runCommand(cmd);
+
+ printjson(x);
+ printjson(y);
+
+ // count
+
+ db.countaa.save({"regex": /foo/i});
+ db.countaa.save({"regex": /foo/i});
+ db.countaa.save({"regex": /foo/i});
+ assert.eq(3, db.countaa.count(), "counta1");
+ assert.eq(3, db.countaa.find().itcount(), "counta1");
+
+ x = null;
+ y = null;
+ try {
+ x = db.runCommand("forceerror");
+ } catch (e) {
+ x = e;
}
- return { count : total };
-};
-
-doMR = function( n ){
- print(n);
-
- // on-disk
-
- var res = db.mr.mapReduce( m , r , "smr1_out" );
- printjson( res );
- assert.eq( 4 , res.counts.input , "MR T0 " + n );
-
- var x = db[res.result];
- assert.eq( 3 , x.find().count() , "MR T1 " + n );
-
- var z = {};
- x.find().forEach( function(a){ z[a._id] = a.value.count; } );
- assert.eq( 3 , Object.keySet( z ).length , "MR T2 " + n );
- assert.eq( 2 , z.a , "MR T3 " + n );
- assert.eq( 3 , z.b , "MR T4 " + n );
- assert.eq( 3 , z.c , "MR T5 " + n );
-
- x.drop();
-
- // inline
-
- var res = db.mr.mapReduce( m , r , { out : { inline : 1 } } );
- printjson( res );
- assert.eq( 4 , res.counts.input , "MR T6 " + n );
-
- var z = {};
- res.find().forEach( function(a){ z[a._id] = a.value.count; } );
- printjson( z );
- assert.eq( 3 , Object.keySet( z ).length , "MR T7 " + n ) ;
- assert.eq( 2 , z.a , "MR T8 " + n );
- assert.eq( 3 , z.b , "MR T9 " + n );
- assert.eq( 3 , z.c , "MR TA " + n );
-
-};
-
-doMR( "before" );
-
-assert.eq( 1 , s.onNumShards( "mr" ) , "E1" );
-s.shardColl( "mr" , { x : 1 } , { x : 2 } , { x : 3 }, null, true /* waitForDelete */ );
-assert.eq( 2 , s.onNumShards( "mr" ) , "E1" );
-
-doMR( "after" );
-
-s.adminCommand({split:'test.mr' , middle:{x:3}} );
-s.adminCommand({split:'test.mr' , middle:{x:4}} );
-s.adminCommand({movechunk:'test.mr', find:{x:3}, to: s.getServer('test').name } );
-
-doMR( "after extra split" );
-
-cmd = { mapreduce : "mr" , map : "emit( " , reduce : "fooz + " , out : "broken1" };
-
-x = db.runCommand( cmd );
-y = s._connections[0].getDB( "test" ).runCommand( cmd );
-
-printjson( x );
-printjson( y );
-
-// count
-
-db.countaa.save({"regex" : /foo/i});
-db.countaa.save({"regex" : /foo/i});
-db.countaa.save({"regex" : /foo/i});
-assert.eq( 3 , db.countaa.count() , "counta1" );
-assert.eq( 3 , db.countaa.find().itcount() , "counta1" );
-
-x = null; y = null;
-try {
- x = db.runCommand( "forceerror" );
-}
-catch ( e ){
- x = e;
-}
-try {
- y = s._connections[0].getDB( "test" ).runCommand( "forceerror" );
-}
-catch ( e ){
- y = e;
-}
-
-// As the forceerror command is written, it doesnt set a code in the reply.
-// OP_COMMAND changes will add a code of 121 (CommandFailed) if a failing command
-// does not set one, so this comparison fails as "undefined" != 121.
-//
-// TODO: Uncomment this line when OP_COMMAND is implemented in mongos (SERVER-18292)
-// as then MongoS should set code 121 as well.
-//
-// assert.eq( x.code , y.code , "assert format" )
-assert.eq( x.errmsg , y.errmsg , "assert format" );
-assert.eq( x.ok , y.ok , "assert format" );
-
-// isMaster and query-wrapped-command
-isMaster = db.runCommand({isMaster:1});
-assert( isMaster.ismaster );
-assert.eq( 'isdbgrid', isMaster.msg );
-delete isMaster.localTime;
-
-im2 = db.runCommand({query: {isMaster:1}});
-delete im2.localTime;
-assert.eq( isMaster, im2 );
-
-im2 = db.runCommand({$query: {isMaster:1}});
-delete im2.localTime;
-assert.eq( isMaster, im2 );
-
-s.stop();
+ try {
+ y = s._connections[0].getDB("test").runCommand("forceerror");
+ } catch (e) {
+ y = e;
+ }
+
+ // As the forceerror command is written, it doesnt set a code in the reply.
+ // OP_COMMAND changes will add a code of 121 (CommandFailed) if a failing command
+ // does not set one, so this comparison fails as "undefined" != 121.
+ //
+ // TODO: Uncomment this line when OP_COMMAND is implemented in mongos (SERVER-18292)
+ // as then MongoS should set code 121 as well.
+ //
+ // assert.eq( x.code , y.code , "assert format" )
+ assert.eq(x.errmsg, y.errmsg, "assert format");
+ assert.eq(x.ok, y.ok, "assert format");
+
+ // isMaster and query-wrapped-command
+ isMaster = db.runCommand({isMaster: 1});
+ assert(isMaster.ismaster);
+ assert.eq('isdbgrid', isMaster.msg);
+ delete isMaster.localTime;
+
+ im2 = db.runCommand({query: {isMaster: 1}});
+ delete im2.localTime;
+ assert.eq(isMaster, im2);
+
+ im2 = db.runCommand({$query: {isMaster: 1}});
+ delete im2.localTime;
+ assert.eq(isMaster, im2);
+
+ s.stop();
})();