summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/evergreen.yml2
-rw-r--r--src/mongo/db/dbmessage.cpp2
-rw-r--r--src/mongo/db/dbmessage.h17
-rw-r--r--src/mongo/rpc/legacy_reply_builder.cpp2
-rw-r--r--src/mongo/rpc/message.cpp11
-rw-r--r--src/mongo/rpc/message.h26
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();