summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2012-12-12 00:18:43 -0500
committerDan Pasette <dan@10gen.com>2012-12-14 13:13:03 -0500
commitd03939e182aec740fb83a65400ee02ce572752ff (patch)
tree24788c7f9da5bfc7dcac014efb7fc65552d43890
parent27588421361e5627d9a77667a79c7d0cb4864cce (diff)
downloadmongo-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.js8
-rw-r--r--jstests/sharding/noUpdateButN1inAnotherCollection.js60
-rw-r--r--src/mongo/s/d_state.cpp4
-rw-r--r--src/mongo/s/s_only.cpp14
-rw-r--r--src/mongo/s/shard.h1
-rw-r--r--src/mongo/s/shardconnection.cpp3
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() {