summaryrefslogtreecommitdiff
path: root/client/dbclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/dbclient.cpp')
-rw-r--r--client/dbclient.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/client/dbclient.cpp b/client/dbclient.cpp
index dadf7e4..5faeccf 100644
--- a/client/dbclient.cpp
+++ b/client/dbclient.cpp
@@ -247,6 +247,11 @@ namespace mongo {
return o["ok"].trueValue();
}
+ bool DBClientWithCommands::isNotMasterErrorString( const BSONElement& e ) {
+ return e.type() == String && str::contains( e.valuestr() , "not master" );
+ }
+
+
enum QueryOptions DBClientWithCommands::availableOptions() {
if ( !_haveCachedAvailableOptions ) {
BSONObj ret;
@@ -599,6 +604,19 @@ namespace mongo {
return true;
}
+
+ inline bool DBClientConnection::runCommand(const string &dbname, const BSONObj& cmd, BSONObj &info, int options) {
+ if ( DBClientWithCommands::runCommand( dbname , cmd , info , options ) )
+ return true;
+
+ if ( clientSet && isNotMasterErrorString( info["errmsg"] ) ) {
+ clientSet->isntMaster();
+ }
+
+ return false;
+ }
+
+
void DBClientConnection::_checkConnection() {
if ( !_failed )
return;
@@ -982,8 +1000,7 @@ namespace mongo {
if ( clientSet && nReturned ) {
assert(data);
BSONObj o(data);
- BSONElement e = getErrField(o);
- if ( e.type() == String && str::contains( e.valuestr() , "not master" ) ) {
+ if ( isNotMasterErrorString( getErrField(o) ) ) {
clientSet->isntMaster();
}
}