summaryrefslogtreecommitdiff
path: root/s/shard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 's/shard.cpp')
-rw-r--r--s/shard.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/s/shard.cpp b/s/shard.cpp
index 75326e0..7d06a31 100644
--- a/s/shard.cpp
+++ b/s/shard.cpp
@@ -365,12 +365,26 @@ namespace mongo {
conn->auth("local", internalSecurity.user, internalSecurity.pwd, err, false));
}
- if ( _shardedConnections ) {
- conn->simpleCommand( "admin" , 0 , "setShardVersion" );
+ if ( _shardedConnections && isVersionableCB( conn ) ) {
+
+ // We must initialize sharding on all connections, so that we get exceptions if sharding is enabled on
+ // the collection.
+ BSONObj result;
+ bool ok = initShardVersionCB( *conn, result );
+
+ // assert that we actually successfully setup sharding
+ uassert( 15907, str::stream() << "could not initialize sharding on connection " << (*conn).toString() <<
+ ( result["errmsg"].type() == String ? causedBy( result["errmsg"].String() ) :
+ causedBy( (string)"unknown failure : " + result.toString() ) ), ok );
+
}
}
- void ShardingConnectionHook::onDestory( DBClientBase * conn ) {
- resetShardVersionCB( conn );
+ void ShardingConnectionHook::onDestroy( DBClientBase * conn ) {
+
+ if( _shardedConnections && isVersionableCB( conn ) ){
+ resetShardVersionCB( conn );
+ }
+
}
}