summaryrefslogtreecommitdiff
path: root/src/mongo/client/dbclient.cpp
diff options
context:
space:
mode:
authorJason Carey <jcarey@argv.me>2017-07-25 19:10:48 -0400
committerJason Carey <jcarey@argv.me>2017-08-01 17:57:19 -0400
commit009fdc7dfcc0197632cef5e3fdc250fdba68f7a5 (patch)
treec8b1ebb23f9e67a10feb79b14130bf71e7c940c0 /src/mongo/client/dbclient.cpp
parentad30a49a33b8773cbc07388bb257d605cbd6aa12 (diff)
downloadmongo-009fdc7dfcc0197632cef5e3fdc250fdba68f7a5.tar.gz
SERVER-30080 LogicalSessions in the shell
Basic logical session implementation for the shell
Diffstat (limited to 'src/mongo/client/dbclient.cpp')
-rw-r--r--src/mongo/client/dbclient.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mongo/client/dbclient.cpp b/src/mongo/client/dbclient.cpp
index 6e95116c13e..74d26aac7d5 100644
--- a/src/mongo/client/dbclient.cpp
+++ b/src/mongo/client/dbclient.cpp
@@ -38,6 +38,7 @@
#include "mongo/base/status.h"
#include "mongo/base/status_with.h"
+#include "mongo/bson/util/bson_extract.h"
#include "mongo/bson/util/builder.h"
#include "mongo/client/authenticate.h"
#include "mongo/client/constants.h"
@@ -774,6 +775,19 @@ Status DBClientConnection::connect(const HostAndPort& serverAddress, StringData
return swProtocolSet.getStatus();
}
+ {
+ std::string msgField;
+ auto msgFieldExtractStatus = bsonExtractStringField(swIsMasterReply.data, "msg", &msgField);
+
+ if (msgFieldExtractStatus == ErrorCodes::NoSuchKey) {
+ _isMongos = false;
+ } else if (!msgFieldExtractStatus.isOK()) {
+ return msgFieldExtractStatus;
+ } else {
+ _isMongos = (msgField == "isdbgrid");
+ }
+ }
+
auto validateStatus =
rpc::validateWireVersion(WireSpec::instance().outgoing, swProtocolSet.getValue().version);
if (!validateStatus.isOK()) {