diff options
-rw-r--r-- | etc/evergreen.yml | 2 | ||||
-rw-r--r-- | src/mongo/db/dbmessage.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/dbmessage.h | 17 | ||||
-rw-r--r-- | src/mongo/rpc/legacy_reply_builder.cpp | 2 | ||||
-rw-r--r-- | src/mongo/rpc/message.cpp | 11 | ||||
-rw-r--r-- | src/mongo/rpc/message.h | 26 |
6 files changed, 29 insertions, 31 deletions
diff --git a/etc/evergreen.yml b/etc/evergreen.yml index 36fdfba1382..8b4ed2b1d71 100644 --- a/etc/evergreen.yml +++ b/etc/evergreen.yml @@ -7952,7 +7952,7 @@ buildvariants: - ubuntu2104-small expansions: &enterprise-ubuntu2104-dynamic-gcc11-debug-experimental-expansions additional_package_targets: archive-mongocryptd archive-mongocryptd-debug archive-mh archive-mh-debug - compile_flags: --dbg=on --opt=on -j$(grep -c ^processor /proc/cpuinfo) --link-model=dynamic CC=/usr/bin/gcc-11 CXX=/usr/bin/g++-11 --disable-warnings-as-errors + compile_flags: --dbg=on --opt=on -j$(grep -c ^processor /proc/cpuinfo) --link-model=dynamic CC=/usr/bin/gcc-11 CXX=/usr/bin/g++-11 has_packages: false scons_cache_scope: shared scons_cache_mode: all diff --git a/src/mongo/db/dbmessage.cpp b/src/mongo/db/dbmessage.cpp index 5a92832a108..9e45805d521 100644 --- a/src/mongo/db/dbmessage.cpp +++ b/src/mongo/db/dbmessage.cpp @@ -183,9 +183,9 @@ DbResponse makeErrorResponseToDeprecatedOpQuery(StringData errorMsg) { buffer.appendBuf(errObj.objdata(), errObj.objsize()); QueryResult::View qr = buffer.buf(); - qr.setResultFlags(ResultFlag_ErrSet); qr.msgdata().setLen(buffer.len()); qr.msgdata().setOperation(opReply); + qr.setResultFlags(ResultFlag_ErrSet); qr.setCursorId(0); qr.setStartingFrom(0); qr.setNReturned(1); diff --git a/src/mongo/db/dbmessage.h b/src/mongo/db/dbmessage.h index 41168cce628..3beb85991b3 100644 --- a/src/mongo/db/dbmessage.h +++ b/src/mongo/db/dbmessage.h @@ -100,6 +100,7 @@ namespace QueryResult { */ struct Layout { MsgData::Layout msgdata; + int32_t resultFlags; int64_t cursorId; int32_t startingFrom; int32_t nReturned; @@ -118,6 +119,10 @@ public: return storage().view(offsetof(Layout, msgdata)); } + int32_t getResultFlags() const { + return storage().read<LittleEndian<int32_t>>(offsetof(Layout, resultFlags)); + } + int64_t getCursorId() const { return storage().read<LittleEndian<int64_t>>(offsetof(Layout, cursorId)); } @@ -161,6 +166,10 @@ public: return storage().view(offsetof(Layout, msgdata)); } + void setResultFlags(int32_t value) { + storage().write(tagLittleEndian(value), offsetof(Layout, resultFlags)); + } + void setCursorId(int64_t value) { storage().write(tagLittleEndian(value), offsetof(Layout, cursorId)); } @@ -173,14 +182,6 @@ public: storage().write(tagLittleEndian(value), offsetof(Layout, nReturned)); } - int32_t getResultFlags() { - return DataView(msgdata().data()).read<LittleEndian<int32_t>>(); - } - - void setResultFlags(int32_t value) { - DataView(msgdata().data()).write(tagLittleEndian(value)); - } - void setResultFlagsToOk() { setResultFlags(ResultFlag_AwaitCapable); } diff --git a/src/mongo/rpc/legacy_reply_builder.cpp b/src/mongo/rpc/legacy_reply_builder.cpp index 39dc8265548..c9e970707de 100644 --- a/src/mongo/rpc/legacy_reply_builder.cpp +++ b/src/mongo/rpc/legacy_reply_builder.cpp @@ -107,9 +107,9 @@ Message LegacyReplyBuilder::done() { invariant(_haveCommandReply); QueryResult::View qr = _builder.buf(); - qr.setResultFlagsToOk(); qr.msgdata().setLen(_builder.len()); qr.msgdata().setOperation(opReply); + qr.setResultFlagsToOk(); qr.setCursorId(0); qr.setStartingFrom(0); qr.setNReturned(1); diff --git a/src/mongo/rpc/message.cpp b/src/mongo/rpc/message.cpp index ac4a3dac03b..69c8972f9d6 100644 --- a/src/mongo/rpc/message.cpp +++ b/src/mongo/rpc/message.cpp @@ -46,6 +46,17 @@ int32_t nextMessageId() { return NextMsgId.fetchAndAdd(1); } +void Message::setData(int operation, const char* msgdata, size_t len) { + const size_t dataLen = sizeof(MsgData::Value) + len; + auto buf = SharedBuffer::allocate(dataLen); + MsgData::View d = buf.get(); + d.setLen(dataLen); + d.setOperation(operation); + if (len) + memcpy(d.data(), msgdata, len); + setData(std::move(buf)); +} + std::string Message::opMsgDebugString() const { MsgData::ConstView headerView = header(); auto opMsgRequest = OpMsgRequest::parse(*this); diff --git a/src/mongo/rpc/message.h b/src/mongo/rpc/message.h index 38ecf8b12e7..20db670d6a1 100644 --- a/src/mongo/rpc/message.h +++ b/src/mongo/rpc/message.h @@ -272,7 +272,6 @@ namespace MsgData { #pragma pack(1) struct Layout { MSGHEADER::Layout header; - char data[4]; }; #pragma pack() @@ -301,7 +300,7 @@ public: } const char* data() const { - return storage().view(offsetof(Layout, data)); + return storage().view(sizeof(Layout)); } bool valid() const { @@ -312,12 +311,6 @@ public: return true; } - int64_t getCursor() const { - verify(getResponseToMsgId() > 0); - verify(getNetworkOp() == opReply); - return ConstDataView(data() + sizeof(int32_t)).read<LittleEndian<int64_t>>(); - } - int dataLen() const; // len without header protected: @@ -360,7 +353,7 @@ public: using ConstView::data; char* data() { - return storage().view(offsetof(Layout, data)); + return storage().view(sizeof(Layout)); } private: @@ -382,7 +375,7 @@ public: Value(ZeroInitTag_t zit) : EncodedValueStorage<Layout, ConstView, View>(zit) {} }; -const int MsgDataHeaderSize = sizeof(Value) - 4; +const int MsgDataHeaderSize = sizeof(Value); inline int ConstView::dataLen() const { return getLen() - MsgDataHeaderSize; @@ -441,19 +434,12 @@ public: verify(empty()); _buf = std::move(buf); } + void setData(int operation, const char* msgtxt) { setData(operation, msgtxt, strlen(msgtxt) + 1); } - void setData(int operation, const char* msgdata, size_t len) { - verify(empty()); - size_t dataLen = len + sizeof(MsgData::Value) - 4; - _buf = SharedBuffer::allocate(dataLen); - MsgData::View d = _buf.get(); - if (len) - memcpy(d.data(), msgdata, len); - d.setLen(dataLen); - d.setOperation(operation); - } + + void setData(int operation, const char* msgdata, size_t len); char* buf() { return _buf.get(); |