diff options
author | Eliot Horowitz <eliot@10gen.com> | 2012-12-12 00:18:43 -0500 |
---|---|---|
committer | Dan Pasette <dan@10gen.com> | 2012-12-14 13:13:03 -0500 |
commit | d03939e182aec740fb83a65400ee02ce572752ff (patch) | |
tree | 24788c7f9da5bfc7dcac014efb7fc65552d43890 | |
parent | 27588421361e5627d9a77667a79c7d0cb4864cce (diff) | |
download | mongo-d03939e182aec740fb83a65400ee02ce572752ff.tar.gz |
SERVER-4532 can't call ClientInfo::addShard on things you don't really use
Conflicts:
src/mongo/s/s_only.cpp
-rw-r--r-- | jstests/sharding/gle_with_conf_servers.js | 8 | ||||
-rw-r--r-- | jstests/sharding/noUpdateButN1inAnotherCollection.js | 60 | ||||
-rw-r--r-- | src/mongo/s/d_state.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/s_only.cpp | 14 | ||||
-rw-r--r-- | src/mongo/s/shard.h | 1 | ||||
-rw-r--r-- | src/mongo/s/shardconnection.cpp | 3 |
6 files changed, 75 insertions, 15 deletions
diff --git a/jstests/sharding/gle_with_conf_servers.js b/jstests/sharding/gle_with_conf_servers.js index 7fefc9d650b..1fa7bde17bc 100644 --- a/jstests/sharding/gle_with_conf_servers.js +++ b/jstests/sharding/gle_with_conf_servers.js @@ -11,14 +11,6 @@ function writeToConfigTest(){ assert( gleObj.ok ); - printjson( gleObj ); - assert( gleObj.hasOwnProperty( 'shardRawGLE' ), - 'missing shardRawGLE from get last error fields!' ); - - var shardGLE = gleObj.shardRawGLE[ st.config0.host ]; - assert( shardGLE.ok ); - assert.neq( null, shardGLE.err ); - st.stop(); } diff --git a/jstests/sharding/noUpdateButN1inAnotherCollection.js b/jstests/sharding/noUpdateButN1inAnotherCollection.js new file mode 100644 index 00000000000..c8b7ef50f7e --- /dev/null +++ b/jstests/sharding/noUpdateButN1inAnotherCollection.js @@ -0,0 +1,60 @@ + +function debug( str ) { + print( "---\n" + str + "\n-----" ); +} + +var name = "badNonUpdate"; +debug("Starting sharded cluster test stuff"); + +s = new ShardingTest( {name: name, shards : 2, mongos : 2, separateConfig : true, verbose:5, nopreallocj : true }); + +var mongosA=s.s0; +var mongosB=s.s1; + +ns = "test.coll"; +ns2 = "test.coll2"; + +adminSA = mongosA.getDB( "admin" ); +adminSA.runCommand({ enableSharding : "test"}); + +adminSA.runCommand( { moveprimary : "test", to : "shard0000" } ); +adminSA.runCommand( { moveprimary : "test2", to : "shard0001" } ); + +adminSA.runCommand({ shardCollection : ns, key : { _id : 1 } }); + +try { + s.stopBalancer(); +} catch (e) { + print("coundn't stop balancer via command"); +} + +adminSA.settings.update({ _id: 'balancer' }, { $set: { stopped: true }}); + +var db = mongosA.getDB( "test" ); +var coll = db.coll; +var coll2 = db.coll2; + +numDocs = 10; +for (var i = 1; i < numDocs; i++) { + coll.insert({_id:i, control:0}); + coll2.insert({_id:i, control:0}); +} + +debug("Inserted docs, now split chunks"); + +adminSA.runCommand( { split: ns, find : { _id : 3} }); +adminSA.runCommand( { movechunk: ns, find : { _id : 10}, to: "shard0001" }); + +var command = 'db.coll.update({_id:9},{$set:{"a":"9"}},true);printjson(db.getLastErrorObj())'; + +// without this first query through mongo, the second time doesn't "fail" +debug("Try query first time"); +var GLE2=runMongoProgram( "mongo", "--quiet", "--port", "" + s._mongos[1].port, "--eval", command ); + +mongosB.getDB("test").coll2.update({_id:0}, {$set:{"c":"333"}}); +var GLE3=mongosB.getDB("test").getLastErrorObj(); +assert.eq( 0, GLE3.n ); + + +s.stop(); + diff --git a/src/mongo/s/d_state.cpp b/src/mongo/s/d_state.cpp index 37adfe8131b..556a090bbd3 100644 --- a/src/mongo/s/d_state.cpp +++ b/src/mongo/s/d_state.cpp @@ -820,7 +820,7 @@ namespace mongo { } - void ShardingConnectionHook::onHandedOut( DBClientBase * conn ) { - // no-op for mongod + void usingAShardConnection( const string& addr ) { } + } diff --git a/src/mongo/s/s_only.cpp b/src/mongo/s/s_only.cpp index 7fa2d55cd83..ef62b532421 100644 --- a/src/mongo/s/s_only.cpp +++ b/src/mongo/s/s_only.cpp @@ -28,10 +28,16 @@ */ namespace mongo { - void ShardingConnectionHook::onHandedOut( DBClientBase * conn ) { - if( _shardedConnections ){ - ClientInfo::get()->addShard( conn->getServerAddress() ); - } + void* remapPrivateView(void *oldPrivateAddr) { + log() << "remapPrivateView called in mongos, aborting" << endl; + fassertFailed(16462); + } + + /** When this callback is run, we record a shard that we've used for useful work + * in an operation to be read later by getLastError() + */ + void usingAShardConnection( const string& addr ) { + ClientInfo::get()->addShard( addr ); } TSP_DEFINE(Client,currentClient) diff --git a/src/mongo/s/shard.h b/src/mongo/s/shard.h index 1f06ae35e29..3d4c7d05d5a 100644 --- a/src/mongo/s/shard.h +++ b/src/mongo/s/shard.h @@ -314,7 +314,6 @@ namespace mongo { } virtual void onCreate( DBClientBase * conn ); - virtual void onHandedOut( DBClientBase * conn ); virtual void onDestroy( DBClientBase * conn ); bool _shardedConnections; diff --git a/src/mongo/s/shardconnection.cpp b/src/mongo/s/shardconnection.cpp index 8b3891ea522..0c9019bb7bc 100644 --- a/src/mongo/s/shardconnection.cpp +++ b/src/mongo/s/shardconnection.cpp @@ -177,10 +177,13 @@ namespace mongo { _init(); } + void usingAShardConnection( const string& addr ); + void ShardConnection::_init() { verify( _addr.size() ); _conn = ClientConnections::threadInstance()->get( _addr , _ns ); _finishedInit = false; + usingAShardConnection( _addr ); } void ShardConnection::_finishInit() { |