summaryrefslogtreecommitdiff
path: root/src/mongo/rpc/legacy_reply_builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/rpc/legacy_reply_builder.cpp')
-rw-r--r--src/mongo/rpc/legacy_reply_builder.cpp165
1 files changed, 81 insertions, 84 deletions
diff --git a/src/mongo/rpc/legacy_reply_builder.cpp b/src/mongo/rpc/legacy_reply_builder.cpp
index 0712c0d5fee..4448f1e9810 100644
--- a/src/mongo/rpc/legacy_reply_builder.cpp
+++ b/src/mongo/rpc/legacy_reply_builder.cpp
@@ -38,91 +38,88 @@
namespace mongo {
namespace rpc {
- LegacyReplyBuilder::LegacyReplyBuilder()
- : LegacyReplyBuilder(stdx::make_unique<Message>())
- {}
-
- LegacyReplyBuilder::LegacyReplyBuilder(std::unique_ptr<Message> message)
- : _message{std::move(message)} {
- _builder.skip(sizeof(QueryResult::Value));
- }
-
- LegacyReplyBuilder::~LegacyReplyBuilder() {}
-
- LegacyReplyBuilder& LegacyReplyBuilder::setMetadata(BSONObj metadata) {
- invariant(_state == State::kMetadata);
- _metadata = std::move(metadata);
- _state = State::kCommandReply;
- return *this;
- }
-
- LegacyReplyBuilder& LegacyReplyBuilder::setRawCommandReply(BSONObj commandReply) {
- invariant(_state == State::kCommandReply);
- BSONObj downconvertedCommandReply = uassertStatusOK(
- rpc::downconvertReplyMetadata(std::move(commandReply), std::move(_metadata))
- );
- downconvertedCommandReply.appendSelfToBufBuilder(_builder);
- _state = State::kOutputDocs;
- return *this;
- }
-
- LegacyReplyBuilder& LegacyReplyBuilder::addOutputDocs(DocumentRange outputDocs) {
- invariant(_state == State::kOutputDocs);
- // no op
- return *this;
- }
-
- LegacyReplyBuilder& LegacyReplyBuilder::addOutputDoc(BSONObj outputDoc) {
- invariant(_state == State::kOutputDocs);
- // no op
- return *this;
- }
-
- ReplyBuilderInterface::State LegacyReplyBuilder::getState() const {
- return _state;
- }
-
- Protocol LegacyReplyBuilder::getProtocol() const {
- return rpc::Protocol::kOpQuery;
- }
-
- void LegacyReplyBuilder::reset() {
- // If we are in State::kMetadata, we are already in the 'start' state, so by
- // immediately returning, we save a heap allocation.
- if (_state == State::kMetadata) {
- return;
- }
- _builder.reset();
- _metadata = BSONObj();
- _message = stdx::make_unique<Message>();
- _state = State::kMetadata;
- }
-
-
- std::unique_ptr<Message> LegacyReplyBuilder::done() {
- invariant(_state == State::kOutputDocs);
- std::unique_ptr<Message> message = stdx::make_unique<Message>();
-
- QueryResult::View qr = _builder.buf();
- qr.setResultFlagsToOk();
- qr.msgdata().setLen(_builder.len());
- qr.msgdata().setOperation(opReply);
- qr.setCursorId(0);
- qr.setStartingFrom(0);
- qr.setNReturned(1);
- _builder.decouple();
-
- message->setData(qr.view2ptr(), true);
-
- _state = State::kDone;
- return std::move(message);
- }
-
- std::size_t LegacyReplyBuilder::availableSpaceForOutputDocs() const {
- invariant (State::kDone != _state);
- // LegacyReplyBuilder currently does not support addOutputDoc(s)
- return 0u;
+LegacyReplyBuilder::LegacyReplyBuilder() : LegacyReplyBuilder(stdx::make_unique<Message>()) {}
+
+LegacyReplyBuilder::LegacyReplyBuilder(std::unique_ptr<Message> message)
+ : _message{std::move(message)} {
+ _builder.skip(sizeof(QueryResult::Value));
+}
+
+LegacyReplyBuilder::~LegacyReplyBuilder() {}
+
+LegacyReplyBuilder& LegacyReplyBuilder::setMetadata(BSONObj metadata) {
+ invariant(_state == State::kMetadata);
+ _metadata = std::move(metadata);
+ _state = State::kCommandReply;
+ return *this;
+}
+
+LegacyReplyBuilder& LegacyReplyBuilder::setRawCommandReply(BSONObj commandReply) {
+ invariant(_state == State::kCommandReply);
+ BSONObj downconvertedCommandReply = uassertStatusOK(
+ rpc::downconvertReplyMetadata(std::move(commandReply), std::move(_metadata)));
+ downconvertedCommandReply.appendSelfToBufBuilder(_builder);
+ _state = State::kOutputDocs;
+ return *this;
+}
+
+LegacyReplyBuilder& LegacyReplyBuilder::addOutputDocs(DocumentRange outputDocs) {
+ invariant(_state == State::kOutputDocs);
+ // no op
+ return *this;
+}
+
+LegacyReplyBuilder& LegacyReplyBuilder::addOutputDoc(BSONObj outputDoc) {
+ invariant(_state == State::kOutputDocs);
+ // no op
+ return *this;
+}
+
+ReplyBuilderInterface::State LegacyReplyBuilder::getState() const {
+ return _state;
+}
+
+Protocol LegacyReplyBuilder::getProtocol() const {
+ return rpc::Protocol::kOpQuery;
+}
+
+void LegacyReplyBuilder::reset() {
+ // If we are in State::kMetadata, we are already in the 'start' state, so by
+ // immediately returning, we save a heap allocation.
+ if (_state == State::kMetadata) {
+ return;
}
+ _builder.reset();
+ _metadata = BSONObj();
+ _message = stdx::make_unique<Message>();
+ _state = State::kMetadata;
+}
+
+
+std::unique_ptr<Message> LegacyReplyBuilder::done() {
+ invariant(_state == State::kOutputDocs);
+ std::unique_ptr<Message> message = stdx::make_unique<Message>();
+
+ QueryResult::View qr = _builder.buf();
+ qr.setResultFlagsToOk();
+ qr.msgdata().setLen(_builder.len());
+ qr.msgdata().setOperation(opReply);
+ qr.setCursorId(0);
+ qr.setStartingFrom(0);
+ qr.setNReturned(1);
+ _builder.decouple();
+
+ message->setData(qr.view2ptr(), true);
+
+ _state = State::kDone;
+ return std::move(message);
+}
+
+std::size_t LegacyReplyBuilder::availableSpaceForOutputDocs() const {
+ invariant(State::kDone != _state);
+ // LegacyReplyBuilder currently does not support addOutputDoc(s)
+ return 0u;
+}
} // namespace rpc
} // namespace mongo