summaryrefslogtreecommitdiff
path: root/src/mongo/rpc/metadata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/rpc/metadata.cpp')
-rw-r--r--src/mongo/rpc/metadata.cpp175
1 files changed, 82 insertions, 93 deletions
diff --git a/src/mongo/rpc/metadata.cpp b/src/mongo/rpc/metadata.cpp
index c65953790ec..87db6ce5389 100644
--- a/src/mongo/rpc/metadata.cpp
+++ b/src/mongo/rpc/metadata.cpp
@@ -39,122 +39,111 @@
namespace mongo {
namespace rpc {
- BSONObj makeEmptyMetadata() {
- return BSONObj();
+BSONObj makeEmptyMetadata() {
+ return BSONObj();
+}
+
+Status readRequestMetadata(OperationContext* txn, const BSONObj& metadataObj) {
+ auto swServerSelectionMetadata = ServerSelectionMetadata::readFromMetadata(metadataObj);
+ if (!swServerSelectionMetadata.isOK()) {
+ return swServerSelectionMetadata.getStatus();
}
+ ServerSelectionMetadata::get(txn) = std::move(swServerSelectionMetadata.getValue());
- Status readRequestMetadata(OperationContext* txn, const BSONObj& metadataObj) {
- auto swServerSelectionMetadata = ServerSelectionMetadata::readFromMetadata(metadataObj);
- if (!swServerSelectionMetadata.isOK()) {
- return swServerSelectionMetadata.getStatus();
- }
- ServerSelectionMetadata::get(txn) = std::move(swServerSelectionMetadata.getValue());
+ auto swAuditMetadata = AuditMetadata::readFromMetadata(metadataObj);
+ if (!swAuditMetadata.isOK()) {
+ return swAuditMetadata.getStatus();
+ }
+ AuditMetadata::get(txn) = std::move(swAuditMetadata.getValue());
- auto swAuditMetadata = AuditMetadata::readFromMetadata(metadataObj);
- if (!swAuditMetadata.isOK()) {
- return swAuditMetadata.getStatus();
- }
- AuditMetadata::get(txn) = std::move(swAuditMetadata.getValue());
+ return Status::OK();
+}
- return Status::OK();
+Status writeRequestMetadata(OperationContext* txn, BSONObjBuilder* metadataBob) {
+ auto ssStatus = ServerSelectionMetadata::get(txn).writeToMetadata(metadataBob);
+ if (!ssStatus.isOK()) {
+ return ssStatus;
}
-
- Status writeRequestMetadata(OperationContext* txn, BSONObjBuilder* metadataBob) {
- auto ssStatus = ServerSelectionMetadata::get(txn).writeToMetadata(metadataBob);
- if (!ssStatus.isOK()) {
- return ssStatus;
- }
- return Status::OK();
+ return Status::OK();
+}
+
+StatusWith<CommandAndMetadata> upconvertRequestMetadata(BSONObj legacyCmdObj, int queryFlags) {
+ // We can reuse the same metadata BOB for every upconvert call, but we need to keep
+ // making new command BOBs as each metadata bob will need to remove fields. We can not use
+ // mutablebson here because the ServerSelectionMetadata upconvert routine performs
+ // manipulations (replacing a root with its child) that mutablebson doesn't
+ // support.
+ BSONObjBuilder metadataBob;
+
+ // Ordering is important here - ServerSelectionMetadata must be upconverted
+ // first, then AuditMetadata.
+ BSONObjBuilder ssmCommandBob;
+ auto upconvertStatus =
+ ServerSelectionMetadata::upconvert(legacyCmdObj, queryFlags, &ssmCommandBob, &metadataBob);
+ if (!upconvertStatus.isOK()) {
+ return upconvertStatus;
}
- StatusWith<CommandAndMetadata> upconvertRequestMetadata(BSONObj legacyCmdObj, int queryFlags) {
- // We can reuse the same metadata BOB for every upconvert call, but we need to keep
- // making new command BOBs as each metadata bob will need to remove fields. We can not use
- // mutablebson here because the ServerSelectionMetadata upconvert routine performs
- // manipulations (replacing a root with its child) that mutablebson doesn't
- // support.
- BSONObjBuilder metadataBob;
-
- // Ordering is important here - ServerSelectionMetadata must be upconverted
- // first, then AuditMetadata.
- BSONObjBuilder ssmCommandBob;
- auto upconvertStatus = ServerSelectionMetadata::upconvert(legacyCmdObj,
- queryFlags,
- &ssmCommandBob,
- &metadataBob);
- if (!upconvertStatus.isOK()) {
- return upconvertStatus;
- }
-
-
- BSONObjBuilder auditCommandBob;
- upconvertStatus = AuditMetadata::upconvert(ssmCommandBob.done(),
- queryFlags,
- &auditCommandBob,
- &metadataBob);
-
- if (!upconvertStatus.isOK()) {
- return upconvertStatus;
- }
-
-
- return std::make_tuple(auditCommandBob.obj(), metadataBob.obj());
+
+ BSONObjBuilder auditCommandBob;
+ upconvertStatus =
+ AuditMetadata::upconvert(ssmCommandBob.done(), queryFlags, &auditCommandBob, &metadataBob);
+
+ if (!upconvertStatus.isOK()) {
+ return upconvertStatus;
}
- StatusWith<LegacyCommandAndFlags> downconvertRequestMetadata(BSONObj cmdObj, BSONObj metadata) {
- int legacyQueryFlags = 0;
- BSONObjBuilder auditCommandBob;
- // Ordering is important here - AuditingMetadata must be downconverted first,
- // then ServerSelectionMetadata.
- auto downconvertStatus = AuditMetadata::downconvert(cmdObj,
- metadata,
- &auditCommandBob,
- &legacyQueryFlags);
- if (!downconvertStatus.isOK()) {
- return downconvertStatus;
- }
+ return std::make_tuple(auditCommandBob.obj(), metadataBob.obj());
+}
+StatusWith<LegacyCommandAndFlags> downconvertRequestMetadata(BSONObj cmdObj, BSONObj metadata) {
+ int legacyQueryFlags = 0;
+ BSONObjBuilder auditCommandBob;
+ // Ordering is important here - AuditingMetadata must be downconverted first,
+ // then ServerSelectionMetadata.
+ auto downconvertStatus =
+ AuditMetadata::downconvert(cmdObj, metadata, &auditCommandBob, &legacyQueryFlags);
- BSONObjBuilder ssmCommandBob;
- downconvertStatus = ServerSelectionMetadata::downconvert(auditCommandBob.done(),
- metadata,
- &ssmCommandBob,
- &legacyQueryFlags);
- if (!downconvertStatus.isOK()) {
- return downconvertStatus;
- }
+ if (!downconvertStatus.isOK()) {
+ return downconvertStatus;
+ }
- return std::make_tuple(ssmCommandBob.obj(), std::move(legacyQueryFlags));
+ BSONObjBuilder ssmCommandBob;
+ downconvertStatus = ServerSelectionMetadata::downconvert(
+ auditCommandBob.done(), metadata, &ssmCommandBob, &legacyQueryFlags);
+ if (!downconvertStatus.isOK()) {
+ return downconvertStatus;
}
- StatusWith<CommandReplyWithMetadata> upconvertReplyMetadata(BSONObj legacyReply) {
- BSONObjBuilder commandReplyBob;
- BSONObjBuilder metadataBob;
- auto upconvertStatus = ShardingMetadata::upconvert(legacyReply,
- &commandReplyBob,
- &metadataBob);
- if (!upconvertStatus.isOK()) {
- return upconvertStatus;
- }
+ return std::make_tuple(ssmCommandBob.obj(), std::move(legacyQueryFlags));
+}
+
+StatusWith<CommandReplyWithMetadata> upconvertReplyMetadata(BSONObj legacyReply) {
+ BSONObjBuilder commandReplyBob;
+ BSONObjBuilder metadataBob;
- return std::make_tuple(commandReplyBob.obj(), metadataBob.obj());
+ auto upconvertStatus = ShardingMetadata::upconvert(legacyReply, &commandReplyBob, &metadataBob);
+ if (!upconvertStatus.isOK()) {
+ return upconvertStatus;
}
- StatusWith<BSONObj> downconvertReplyMetadata(BSONObj commandReply, BSONObj replyMetadata) {
- BSONObjBuilder legacyCommandReplyBob;
+ return std::make_tuple(commandReplyBob.obj(), metadataBob.obj());
+}
- auto downconvertStatus = ShardingMetadata::downconvert(commandReply,
- replyMetadata,
- &legacyCommandReplyBob);
- if (!downconvertStatus.isOK()) {
- return downconvertStatus;
- }
+StatusWith<BSONObj> downconvertReplyMetadata(BSONObj commandReply, BSONObj replyMetadata) {
+ BSONObjBuilder legacyCommandReplyBob;
- return legacyCommandReplyBob.obj();
+ auto downconvertStatus =
+ ShardingMetadata::downconvert(commandReply, replyMetadata, &legacyCommandReplyBob);
+ if (!downconvertStatus.isOK()) {
+ return downconvertStatus;
}
+ return legacyCommandReplyBob.obj();
+}
+
} // namespace rpc
} // namespace mongo