diff options
author | Greg Studer <greg@10gen.com> | 2011-12-09 16:51:07 -0500 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2011-12-11 00:06:04 -0500 |
commit | 9179db2dc807de8bb860f7a7800de2630ad04eab (patch) | |
tree | f1f632512b579b7f803b37b8f560b0958c3e4b17 | |
parent | f8a4019253010f3d0bbca3b66e89707c961d6620 (diff) | |
download | mongo-9179db2dc807de8bb860f7a7800de2630ad04eab.tar.gz |
SERVER-4465 don't abort on local version reset unless it's a meaningful reset
-rw-r--r-- | jstests/sharding/bouncing_count.js | 49 | ||||
-rw-r--r-- | s/commands_public.cpp | 17 |
2 files changed, 59 insertions, 7 deletions
diff --git a/jstests/sharding/bouncing_count.js b/jstests/sharding/bouncing_count.js new file mode 100644 index 00000000000..d9630a4e930 --- /dev/null +++ b/jstests/sharding/bouncing_count.js @@ -0,0 +1,49 @@ +// Tests whether new sharding is detected on insert by mongos + +var st = new ShardingTest( name = "test", shards = 10, verbose = 0, mongos = 3 ) + +var mongosA = st.s0 +var mongosB = st.s1 +var mongosC = st.s2 + +var admin = mongosA.getDB("admin") +var config = mongosA.getDB("config") + +var collA = mongosA.getCollection( "foo.bar" ) +var collB = mongosB.getCollection( "" + collA ) +var collC = mongosB.getCollection( "" + collA ) + +admin.runCommand({ enableSharding : "" + collA.getDB() }) +admin.runCommand({ shardCollection : "" + collA, key : { _id : 1 } }) + +var shards = config.shards.find().sort({ _id : 1 }).toArray() + +jsTestLog( "Splitting up the collection..." ) + +// Split up the collection +for( var i = 0; i < shards.length; i++ ){ + printjson( admin.runCommand({ split : "" + collA, middle : { _id : i } }) ) + printjson( admin.runCommand({ moveChunk : "" + collA, find : { _id : i }, to : shards[i]._id }) ) +} + +mongosB.getDB("admin").runCommand({ flushRouterConfig : 1 }) +mongosC.getDB("admin").runCommand({ flushRouterConfig : 1 }) +printjson( collB.count() ) +printjson( collC.count() ) + +// Change up all the versions... +for( var i = 0; i < shards.length; i++ ){ + printjson( admin.runCommand({ moveChunk : "" + collA, find : { _id : i }, to : shards[ (i + 1) % shards.length ]._id }) ) +} + +// Make sure mongos A is up-to-date +mongosA.getDB("admin").runCommand({ flushRouterConfig : 1 }) + +config.printShardingStatus( true ) + +jsTestLog( "Running count!" ) + +printjson( collB.count() ) +printjson( collC.find().toArray() ) + +st.stop()
\ No newline at end of file diff --git a/s/commands_public.cpp b/s/commands_public.cpp index b7feedcf058..d962e9c7a3f 100644 --- a/s/commands_public.cpp +++ b/s/commands_public.cpp @@ -452,13 +452,16 @@ namespace mongo { for (set<Shard>::iterator it=shards.begin(), end=shards.end(); it != end; ++it) { ShardConnection conn(*it, fullns); - if ( conn.setVersion() ) { - total = 0; - shardCounts.clear(); - cm = conf->getChunkManagerIfExists( fullns ); - conn.done(); - hadToBreak = true; - break; + if ( conn.setVersion() ){ + ChunkManagerPtr newCM = conf->getChunkManagerIfExists( fullns ); + if( newCM->getVersion() != cm->getVersion() ){ + cm = newCM; + total = 0; + shardCounts.clear(); + conn.done(); + hadToBreak = true; + break; + } } BSONObj temp; |