summaryrefslogtreecommitdiff
path: root/src/mongo/db/dbmessage.h
diff options
context:
space:
mode:
authorJonathan Reams <jbreams@mongodb.com>2017-04-17 12:09:33 -0400
committerJonathan Reams <jbreams@mongodb.com>2017-04-21 11:22:53 -0400
commitf929d2cfcfe48f051c32bdded11566b885816932 (patch)
tree2d4e17c2dd4cceaa95dfcb41c773962341e7a5ec /src/mongo/db/dbmessage.h
parentc2cb98f46c70772d054ab0885720b666ae318cf0 (diff)
downloadmongo-f929d2cfcfe48f051c32bdded11566b885816932.tar.gz
SERVER-28749 Unify ServiceEntryPointMongod and ServiceEntryPointMongos
Diffstat (limited to 'src/mongo/db/dbmessage.h')
-rw-r--r--src/mongo/db/dbmessage.h74
1 files changed, 26 insertions, 48 deletions
diff --git a/src/mongo/db/dbmessage.h b/src/mongo/db/dbmessage.h
index d6ed3a68684..959dc59edd0 100644
--- a/src/mongo/db/dbmessage.h
+++ b/src/mongo/db/dbmessage.h
@@ -35,8 +35,6 @@
#include "mongo/client/constants.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/server_options.h"
-#include "mongo/transport/session.h"
-#include "mongo/util/net/abstract_message_port.h"
#include "mongo/util/net/message.h"
namespace mongo {
@@ -317,13 +315,12 @@ public:
/**
* A response to a DbMessage.
+ *
+ * Order of fields makes DbResponse{funcReturningMessage()} valid.
*/
struct DbResponse {
- Message response;
- int32_t responseToMsgId;
- std::string exhaustNS; /* points to ns if exhaust mode. 0=normal mode*/
- DbResponse(Message r, int32_t rtId) : response(std::move(r)), responseToMsgId(rtId) {}
- DbResponse() = default;
+ Message response; // If empty, nothing will be returned to the client.
+ std::string exhaustNS; // Namespace of cursor if exhaust mode, else "".
};
/**
@@ -348,58 +345,39 @@ public:
}
/**
- * Finishes the reply and transfers the message buffer into 'out'.
+ * Finishes the reply and returns the message buffer.
*/
- void putInMessage(Message* out,
- int queryResultFlags,
- int nReturned,
- int startingFrom = 0,
- long long cursorId = 0);
+ Message toQueryReply(int queryResultFlags,
+ int nReturned,
+ int startingFrom = 0,
+ long long cursorId = 0);
/**
- * Finishes the reply and sends the message out to 'destination'.
+ * Similar to toQueryReply() but used for replying to a command.
*/
- void send(const transport::SessionHandle& session,
- int queryResultFlags,
- const Message& requestMsg,
- int nReturned,
- int startingFrom = 0,
- long long cursorId = 0);
-
- /**
- * Similar to send() but used for replying to a command.
- */
- void sendCommandReply(const transport::SessionHandle& session, const Message& requestMsg);
+ Message toCommandReply() {
+ return toQueryReply(0, 1);
+ }
private:
BufBuilder _buffer;
};
-void replyToQuery(int queryResultFlags,
- const transport::SessionHandle& session,
- const Message& requestMsg,
- const void* data,
- int size,
- int nReturned,
- int startingFrom = 0,
- long long cursorId = 0);
-
-/* object reply helper. */
-void replyToQuery(int queryResultFlags,
- const transport::SessionHandle& session,
- const Message& requestMsg,
- const BSONObj& responseObj);
+/**
+ * Helper to build a DbResponse from a buffer containing an OP_QUERY response.
+ */
+DbResponse replyToQuery(int queryResultFlags,
+ const void* data,
+ int size,
+ int nReturned,
+ int startingFrom = 0,
+ long long cursorId = 0);
-/* helper to do a reply using a DbResponse object */
-void replyToQuery(int queryResultFlags, const Message& m, DbResponse& dbresponse, BSONObj obj);
/**
- * Helper method for setting up a response object.
- *
- * @param queryResultFlags The flags to set to the response object.
- * @param response The object to be used for building the response. The internal buffer of
- * this object will contain the raw data from resultObj after a successful call.
- * @param resultObj The bson object that contains the reply data.
+ * Helper to build a DbRespose for OP_QUERY with a single reply object.
*/
-void replyToQuery(int queryResultFlags, Message& response, const BSONObj& resultObj);
+inline DbResponse replyToQuery(const BSONObj& obj, int queryResultFlags = 0) {
+ return replyToQuery(queryResultFlags, obj.objdata(), obj.objsize(), /*nReturned*/ 1);
+}
} // namespace mongo