diff options
author | dwight <dwight@10gen.com> | 2010-07-16 10:43:01 -0400 |
---|---|---|
committer | dwight <dwight@10gen.com> | 2010-07-16 10:43:01 -0400 |
commit | 08aedb04ca4ca8e50788c14dcd95359e158d3889 (patch) | |
tree | cc236def7a8ba86025c4a00b2a7fe059291aac3a | |
parent | 2ac10b237e3681af855096b94a5f4d7068370ad7 (diff) | |
parent | a911b2cb077349d2b1ade6e63cf3f74ab62a140a (diff) | |
download | mongo-08aedb04ca4ca8e50788c14dcd95359e158d3889.tar.gz |
Merge branch 'master' of github.com:mongodb/mongo
-rw-r--r-- | db/dbhelpers.cpp | 5 | ||||
-rw-r--r-- | jstests/slowNightly/sharding_balance1.js | 18 | ||||
-rw-r--r-- | jstests/slowNightly/sharding_balance2.js | 18 | ||||
-rw-r--r-- | jstests/slowNightly/sharding_balance3.js | 18 | ||||
-rw-r--r-- | s/d_migrate.cpp | 11 | ||||
-rw-r--r-- | shell/servers.js | 21 |
6 files changed, 38 insertions, 53 deletions
diff --git a/db/dbhelpers.cpp b/db/dbhelpers.cpp index 1801f4f795f..68715b0652b 100644 --- a/db/dbhelpers.cpp +++ b/db/dbhelpers.cpp @@ -240,7 +240,7 @@ namespace mongo { key = k.obj(); return me.obj(); } - + long long Helpers::removeRange( const string& ns , const BSONObj& min , const BSONObj& max , bool yield ){ BSONObj keya , keyb; BSONObj minClean = toKeyFormat( min , keya ); @@ -249,7 +249,8 @@ namespace mongo { Client::Context ctx(ns); NamespaceDetails* nsd = nsdetails( ns.c_str() ); - assert( nsd ); + if ( ! nsd ) + return 0; int ii = nsd->findIndexByKeyPattern( keya ); assert( ii >= 0 ); diff --git a/jstests/slowNightly/sharding_balance1.js b/jstests/slowNightly/sharding_balance1.js index f8b2b542525..a30a657b439 100644 --- a/jstests/slowNightly/sharding_balance1.js +++ b/jstests/slowNightly/sharding_balance1.js @@ -4,8 +4,6 @@ s = new ShardingTest( "slow_sharding_balance1" , 2 , 2 , 1 , { chunksize : 1 } ) s.adminCommand( { enablesharding : "test" } ); -s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } ); -assert.eq( 1 , s.config.chunks.count() , "setup1" ); s.config.settings.find().forEach( printjson ) @@ -23,23 +21,11 @@ while ( inserted < ( 40 * 1024 * 1024 ) ){ } db.getLastError(); +s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } ); assert.lt( 20 , s.config.chunks.count() , "setup2" ); -function dist(){ - var x = {} - s.config.chunks.find( { ns : "test.foo" } ).forEach( - function(z){ - if ( x[z.shard] ) - x[z.shard]++ - else - x[z.shard] = 1; - } - ); - return x; -} - function diff(){ - var x = dist(); + var x = s.chunkCounts( "foo" ); printjson( x ) return Math.max( x.shard0 , x.shard1 ) - Math.min( x.shard0 , x.shard1 ); } diff --git a/jstests/slowNightly/sharding_balance2.js b/jstests/slowNightly/sharding_balance2.js index 300e664b530..f263ab39a9e 100644 --- a/jstests/slowNightly/sharding_balance2.js +++ b/jstests/slowNightly/sharding_balance2.js @@ -15,8 +15,6 @@ for ( var i=0; i<names.length; i++ ){ } s.adminCommand( { enablesharding : "test" } ); -s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } ); -assert.eq( 1 , s.config.chunks.count() , "setup1" ); s.config.settings.find().forEach( printjson ) @@ -34,23 +32,11 @@ while ( inserted < ( 40 * 1024 * 1024 ) ){ } db.getLastError(); +s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } ); assert.lt( 20 , s.config.chunks.count() , "setup2" ); -function dist(){ - var x = {} - s.config.chunks.find( { ns : "test.foo" } ).forEach( - function(z){ - if ( x[z.shard] ) - x[z.shard]++ - else - x[z.shard] = 1; - } - ); - return x; -} - function diff(){ - var x = dist(); + var x = s.chunkCounts( "foo" ); printjson( x ) return Math.max( x.shard0 , x.shard1 ) - Math.min( x.shard0 , x.shard1 ); } diff --git a/jstests/slowNightly/sharding_balance3.js b/jstests/slowNightly/sharding_balance3.js index db03853e934..efc389d04d8 100644 --- a/jstests/slowNightly/sharding_balance3.js +++ b/jstests/slowNightly/sharding_balance3.js @@ -3,8 +3,6 @@ s = new ShardingTest( "slow_sharding_balance3" , 2 , 2 , 1 , { chunksize : 1 } ); s.adminCommand( { enablesharding : "test" } ); -s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } ); -assert.eq( 1 , s.config.chunks.count() , "setup1" ); s.config.settings.find().forEach( printjson ); @@ -22,23 +20,11 @@ while ( inserted < ( 40 * 1024 * 1024 ) ){ } db.getLastError(); +s.adminCommand( { shardcollection : "test.foo" , key : { _id : 1 } } ); assert.lt( 20 , s.config.chunks.count() , "setup2" ); -function dist(){ - var x = {} - s.config.chunks.find( { ns : "test.foo" } ).forEach( - function(z){ - if ( x[z.shard] ) - x[z.shard]++ - else - x[z.shard] = 1; - } - ); - return x; -} - function diff(){ - var x = dist(); + var x = s.chunkCounts( "foo" ); printjson( x ) return Math.max( x.shard0 , x.shard1 ) - Math.min( x.shard0 , x.shard1 ); } diff --git a/s/d_migrate.cpp b/s/d_migrate.cpp index f710ca03362..6f967c56911 100644 --- a/s/d_migrate.cpp +++ b/s/d_migrate.cpp @@ -551,13 +551,20 @@ namespace mongo { } active = false; } - + void _go(){ assert( active ); assert( state == READY ); assert( ! min.isEmpty() ); assert( ! max.isEmpty() ); + { // delete any data already in range + writelock lk( ns ); + long long num = Helpers::removeRange( ns , min , max , true ); + if ( num ) + log( LL_WARNING ) << "moveChunkCmd deleted data already in chunk # objects: " << num << endl; + } + ScopedDbConnection conn( from ); conn->getLastError(); // just test connection @@ -741,8 +748,6 @@ namespace mongo { migrateStatus.min = cmdObj["min"].Obj().getOwned(); migrateStatus.max = cmdObj["max"].Obj().getOwned(); - // TODO: check data in range currently - boost::thread m( migrateThread ); result.appendBool( "started" , true ); diff --git a/shell/servers.js b/shell/servers.js index 5a08462c91b..b2a19f56c39 100644 --- a/shell/servers.js +++ b/shell/servers.js @@ -428,6 +428,27 @@ ShardingTest.prototype.shardCounts = function( collName , dbName ){ return counts; } +ShardingTest.prototype.chunkCounts = function( collName , dbName ){ + dbName = dbName || "test"; + var x = {} + + s.config.shards.find().forEach( + function(z){ + x[z._id] = 0; + } + ); + + s.config.chunks.find( { ns : dbName + "." + collName } ).forEach( + function(z){ + if ( x[z.shard] ) + x[z.shard]++ + else + x[z.shard] = 1; + } + ); + return x; + +} ShardingTest.prototype.shardGo = function( collName , key , split , move , dbName ){ split = split || key; |