diff options
Diffstat (limited to 'src/mongo')
96 files changed, 591 insertions, 1133 deletions
diff --git a/src/mongo/client/embedded/embedded_commands.cpp b/src/mongo/client/embedded/embedded_commands.cpp index 5ce6e74dc06..ff288428e73 100644 --- a/src/mongo/client/embedded/embedded_commands.cpp +++ b/src/mongo/client/embedded/embedded_commands.cpp @@ -73,10 +73,8 @@ public: } else if (mode == "conservative") { } else { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidOptions, - "Only conservative|moderate|aggressive are valid options.")); + uasserted(ErrorCodes::InvalidOptions, + "Only conservative|moderate|aggressive are valid options."); } return true; } @@ -122,8 +120,7 @@ public: } else if (mode == "normal") { } else { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::InvalidOptions, "Only low|normal are valid options.")); + uasserted(ErrorCodes::InvalidOptions, "Only low|normal are valid options."); } return true; } diff --git a/src/mongo/client/embedded/embedded_ismaster.cpp b/src/mongo/client/embedded/embedded_ismaster.cpp index 6631b0d1537..eb45ed178b4 100644 --- a/src/mongo/client/embedded/embedded_ismaster.cpp +++ b/src/mongo/client/embedded/embedded_ismaster.cpp @@ -76,18 +76,12 @@ public: BSONElement element = cmdObj[kMetadataDocumentName]; if (!element.eoo()) { if (seenIsMaster) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::ClientMetadataCannotBeMutated, - "The client metadata document may only be sent in the first isMaster")); + uasserted(ErrorCodes::ClientMetadataCannotBeMutated, + "The client metadata document may only be sent in the first isMaster"); } auto swParseClientMetadata = ClientMetadata::parse(element); - - if (!swParseClientMetadata.getStatus().isOK()) { - return CommandHelpers::appendCommandStatus(result, - swParseClientMetadata.getStatus()); - } + uassertStatusOK(swParseClientMetadata.getStatus()); invariant(swParseClientMetadata.getValue()); diff --git a/src/mongo/db/auth/sasl_commands.cpp b/src/mongo/db/auth/sasl_commands.cpp index 00cb221a6cc..aa6a19b840c 100644 --- a/src/mongo/db/auth/sasl_commands.cpp +++ b/src/mongo/db/auth/sasl_commands.cpp @@ -283,10 +283,7 @@ bool CmdSaslStart::run(OperationContext* opCtx, StatusWith<std::unique_ptr<AuthenticationSession>> swSession = doSaslStart(opCtx, db, cmdObj, &result); - CommandHelpers::appendCommandStatus(result, swSession.getStatus()); - if (!swSession.isOK()) { - return false; - } + uassertStatusOK(swSession.getStatus()); auto session = std::move(swSession.getValue()); auto& mechanism = session->getMechanism(); @@ -317,8 +314,7 @@ bool CmdSaslContinue::run(OperationContext* opCtx, AuthenticationSession::swap(client, sessionGuard); if (!sessionGuard) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::ProtocolError, "No SASL session state found")); + uasserted(ErrorCodes::ProtocolError, "No SASL session state found"); } AuthenticationSession* session = static_cast<AuthenticationSession*>(sessionGuard.get()); @@ -327,10 +323,8 @@ bool CmdSaslContinue::run(OperationContext* opCtx, // Authenticating the __system@local user to the admin database on mongos is required // by the auth passthrough test suite. if (mechanism.getAuthenticationDatabase() != db && !getTestCommandsEnabled()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::ProtocolError, - "Attempt to switch database target during SASL authentication.")); + uasserted(ErrorCodes::ProtocolError, + "Attempt to switch database target during SASL authentication."); } Status status = doSaslContinue(opCtx, session, cmdObj, &result); diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp index b24813e9b83..d84a387d7b7 100644 --- a/src/mongo/db/commands.cpp +++ b/src/mongo/db/commands.cpp @@ -185,12 +185,6 @@ Command* CommandHelpers::findCommand(StringData name) { return globalCommandRegistry()->findCommand(name); } -bool CommandHelpers::appendCommandStatus(BSONObjBuilder& result, const Status& status) { - uassertStatusOK(status); - appendSimpleCommandStatus(result, true); - return true; -} - bool CommandHelpers::appendCommandStatusNoThrow(BSONObjBuilder& result, const Status& status) { appendSimpleCommandStatus(result, status.isOK(), status.reason()); BSONObj tmp = result.asTempObj(); diff --git a/src/mongo/db/commands.h b/src/mongo/db/commands.h index 7b0c2e26a36..8d467747a28 100644 --- a/src/mongo/db/commands.h +++ b/src/mongo/db/commands.h @@ -108,9 +108,6 @@ struct CommandHelpers { */ static bool appendCommandStatusNoThrow(BSONObjBuilder& result, const Status& status); - // About to be deleted - static bool appendCommandStatus(BSONObjBuilder& result, const Status& status); - /** * If "ok" field is present in `reply`, uses its truthiness. * Otherwise, the absence of failure is considered success, `reply` is patched to indicate it. diff --git a/src/mongo/db/commands/apply_ops_cmd.cpp b/src/mongo/db/commands/apply_ops_cmd.cpp index d78414e95ea..599f3a52902 100644 --- a/src/mongo/db/commands/apply_ops_cmd.cpp +++ b/src/mongo/db/commands/apply_ops_cmd.cpp @@ -225,9 +225,7 @@ public: maybeDisableValidation.emplace(opCtx); auto status = OplogApplicationChecks::checkOperationArray(cmdObj.firstElement()); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // TODO (SERVER-30217): When a write concern is provided to the applyOps command, we // normally wait on the OpTime of whichever operation successfully completed last. This is @@ -251,20 +249,16 @@ public: auto modeSW = repl::OplogApplication::parseMode(oplogApplicationModeString); if (!modeSW.isOK()) { // Unable to parse the mode argument. - return CommandHelpers::appendCommandStatus( - result, - modeSW.getStatus().withContext( - str::stream() - << "Could not parse " + repl::ApplyOps::kOplogApplicationModeFieldName)); + uassertStatusOK(modeSW.getStatus().withContext( + str::stream() << "Could not parse " + + repl::ApplyOps::kOplogApplicationModeFieldName)); } oplogApplicationMode = modeSW.getValue(); } else if (status != ErrorCodes::NoSuchKey) { // NoSuchKey means the user did not supply a mode. - return CommandHelpers::appendCommandStatus( - result, - status.withContext(str::stream() - << "Could not parse out " - << repl::ApplyOps::kOplogApplicationModeFieldName)); + uassertStatusOK(status.withContext(str::stream() + << "Could not parse out " + << repl::ApplyOps::kOplogApplicationModeFieldName)); } auto applyOpsStatus = CommandHelpers::appendCommandStatusNoThrow( diff --git a/src/mongo/db/commands/authentication_commands.cpp b/src/mongo/db/commands/authentication_commands.cpp index 189416ee125..8c6f414661c 100644 --- a/src/mongo/db/commands/authentication_commands.cpp +++ b/src/mongo/db/commands/authentication_commands.cpp @@ -231,9 +231,7 @@ bool CmdAuthenticate::run(OperationContext* opCtx, } std::string mechanism = cmdObj.getStringField("mechanism"); if (mechanism.empty()) { - CommandHelpers::appendCommandStatus(result, - {ErrorCodes::BadValue, "Auth mechanism not specified"}); - return false; + uasserted(ErrorCodes::BadValue, "Auth mechanism not specified"); } UserName user; auto& sslPeerInfo = SSLPeerInfo::forSession(opCtx->getClient()->session()); @@ -260,15 +258,14 @@ bool CmdAuthenticate::run(OperationContext* opCtx, << (client->hasRemote() ? (" from client " + client->getRemote().toString()) : "") << " with mechanism " << mechanism << ": " << status; } + sleepmillis(saslGlobalParams.authFailedDelay.load()); if (status.code() == ErrorCodes::AuthenticationFailed) { // Statuses with code AuthenticationFailed may contain messages we do not wish to // reveal to the user, so we return a status with the message "auth failed". - CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::AuthenticationFailed, "auth failed")); + uasserted(ErrorCodes::AuthenticationFailed, "auth failed"); } else { - CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } - sleepmillis(saslGlobalParams.authFailedDelay.load()); return false; } result.append("dbname", user.getDB()); diff --git a/src/mongo/db/commands/clone.cpp b/src/mongo/db/commands/clone.cpp index 9bb2624e163..2bc47480310 100644 --- a/src/mongo/db/commands/clone.cpp +++ b/src/mongo/db/commands/clone.cpp @@ -127,7 +127,8 @@ public: barr.append(clonedColls); result.append("clonedColls", barr.arr()); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdClone; diff --git a/src/mongo/db/commands/clone_collection.cpp b/src/mongo/db/commands/clone_collection.cpp index 96e99496b90..f04d9bac576 100644 --- a/src/mongo/db/commands/clone_collection.cpp +++ b/src/mongo/db/commands/clone_collection.cpp @@ -133,13 +133,9 @@ public: // (e.g. system.indexes), so we must check that it is legal to both create and write to the // namespace. auto allowedCreateStatus = userAllowedCreateNS(dbname, nsToCollectionSubstring(ns)); - if (!allowedCreateStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, allowedCreateStatus); - } + uassertStatusOK(allowedCreateStatus); auto allowedWriteStatus = userAllowedWriteNS(dbname, nsToCollectionSubstring(ns)); - if (!allowedWriteStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, allowedWriteStatus); - } + uassertStatusOK(allowedWriteStatus); BSONObj query = cmdObj.getObjectField("query"); if (query.isEmpty()) diff --git a/src/mongo/db/commands/collection_to_capped.cpp b/src/mongo/db/commands/collection_to_capped.cpp index 07da52d1bca..4820dc1608f 100644 --- a/src/mongo/db/commands/collection_to_capped.cpp +++ b/src/mongo/db/commands/collection_to_capped.cpp @@ -121,25 +121,22 @@ public: NamespaceString nss(dbname, to); if (!repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(opCtx, nss)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::NotMaster, - str::stream() << "Not primary while cloning collection " << from << " to " - << to - << " (as capped)")); + uasserted(ErrorCodes::NotMaster, + str::stream() << "Not primary while cloning collection " << from << " to " + << to + << " (as capped)"); } Database* const db = autoDb.getDb(); if (!db) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::NamespaceNotFound, - str::stream() << "database " << dbname << " not found")); + uasserted(ErrorCodes::NamespaceNotFound, + str::stream() << "database " << dbname << " not found"); } Status status = cloneCollectionAsCapped(opCtx, db, from.toString(), to.toString(), size, temp); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdCloneCollectionAsCapped; @@ -181,7 +178,8 @@ public: return false; } - return CommandHelpers::appendCommandStatus(result, convertToCapped(opCtx, nss, size)); + uassertStatusOK(convertToCapped(opCtx, nss, size)); + return true; } } cmdConvertToCapped; diff --git a/src/mongo/db/commands/compact.cpp b/src/mongo/db/commands/compact.cpp index 83ddab63ce1..bffe66dd8c0 100644 --- a/src/mongo/db/commands/compact.cpp +++ b/src/mongo/db/commands/compact.cpp @@ -153,11 +153,9 @@ public: // If db/collection does not exist, short circuit and return. if (!collDB || !collection) { if (view) - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::CommandNotSupportedOnView, "can't compact a view"}); + uasserted(ErrorCodes::CommandNotSupportedOnView, "can't compact a view"); else - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::NamespaceNotFound, "collection does not exist"}); + uasserted(ErrorCodes::NamespaceNotFound, "collection does not exist"); } OldClientContext ctx(opCtx, nss.ns()); @@ -166,8 +164,7 @@ public: log() << "compact " << nss.ns() << " begin, options: " << compactOptions; StatusWith<CompactStats> status = collection->compact(opCtx, &compactOptions); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status.getStatus()); + uassertStatusOK(status.getStatus()); if (status.getValue().corruptDocuments > 0) result.append("invalidObjects", status.getValue().corruptDocuments); diff --git a/src/mongo/db/commands/connection_status.cpp b/src/mongo/db/commands/connection_status.cpp index 0d5a3f63980..bd71bcdbe0f 100644 --- a/src/mongo/db/commands/connection_status.cpp +++ b/src/mongo/db/commands/connection_status.cpp @@ -64,9 +64,7 @@ public: bool showPrivileges; Status status = bsonExtractBooleanFieldWithDefault(cmdObj, "showPrivileges", false, &showPrivileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); BSONObjBuilder authInfo(result.subobjStart("authInfo")); { diff --git a/src/mongo/db/commands/copydb_start_commands.cpp b/src/mongo/db/commands/copydb_start_commands.cpp index 00105a60a9f..fd3cb1c272a 100644 --- a/src/mongo/db/commands/copydb_start_commands.cpp +++ b/src/mongo/db/commands/copydb_start_commands.cpp @@ -125,9 +125,7 @@ public: BSONElement mechanismElement; Status status = bsonExtractField(cmdObj, saslCommandMechanismFieldName, &mechanismElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); BSONElement payloadElement; status = bsonExtractField(cmdObj, saslCommandPayloadFieldName, &payloadElement); @@ -146,7 +144,7 @@ public: if (!authConn->runCommand( fromDb, BSON("saslStart" << 1 << mechanismElement << payloadElement), ret)) { authConn.reset(); - return CommandHelpers::appendCommandStatus(result, getStatusFromCommandResult(ret)); + uassertStatusOK(getStatusFromCommandResult(ret)); } CommandHelpers::filterCommandReplyForPassthrough(ret, &result); diff --git a/src/mongo/db/commands/count_cmd.cpp b/src/mongo/db/commands/count_cmd.cpp index 76a381d239e..45ad89b47b6 100644 --- a/src/mongo/db/commands/count_cmd.cpp +++ b/src/mongo/db/commands/count_cmd.cpp @@ -178,9 +178,7 @@ public: const bool isExplain = false; auto request = CountRequest::parseFromBSON(nss, cmdObj, isExplain); - if (!request.isOK()) { - return CommandHelpers::appendCommandStatus(result, request.getStatus()); - } + uassertStatusOK(request.getStatus()); // Check whether we are allowed to read from this node after acquiring our locks. auto replCoord = repl::ReplicationCoordinator::get(opCtx); @@ -192,9 +190,7 @@ public: ctx.reset(); auto viewAggregation = request.getValue().asAggregationCommand(); - if (!viewAggregation.isOK()) { - return CommandHelpers::appendCommandStatus(result, viewAggregation.getStatus()); - } + uassertStatusOK(viewAggregation.getStatus()); BSONObj aggResult = CommandHelpers::runCommandDirectly( opCtx, OpMsgRequest::fromDBAndBody(dbname, std::move(viewAggregation.getValue()))); @@ -211,9 +207,7 @@ public: auto statusWithPlanExecutor = getExecutorCount(opCtx, collection, request.getValue(), false /*explain*/); - if (!statusWithPlanExecutor.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithPlanExecutor.getStatus()); - } + uassertStatusOK(statusWithPlanExecutor.getStatus()); auto exec = std::move(statusWithPlanExecutor.getValue()); @@ -225,9 +219,7 @@ public: } Status execPlanStatus = exec->executePlan(); - if (!execPlanStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, execPlanStatus); - } + uassertStatusOK(execPlanStatus); PlanSummaryStats summaryStats; Explain::getSummaryStats(*exec, &summaryStats); diff --git a/src/mongo/db/commands/create_indexes.cpp b/src/mongo/db/commands/create_indexes.cpp index 0e08effe965..e36545cddba 100644 --- a/src/mongo/db/commands/create_indexes.cpp +++ b/src/mongo/db/commands/create_indexes.cpp @@ -240,8 +240,7 @@ public: const NamespaceString ns(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); Status status = userAllowedWriteNS(ns); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); // Disallow users from creating new indexes on config.transactions since the sessions // code was optimized to not update indexes. @@ -251,9 +250,7 @@ public: auto specsWithStatus = parseAndValidateIndexSpecs(opCtx, ns, cmdObj, serverGlobalParams.featureCompatibility); - if (!specsWithStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, specsWithStatus.getStatus()); - } + uassertStatusOK(specsWithStatus.getStatus()); auto specs = std::move(specsWithStatus.getValue()); // Index builds cannot currently handle lock interruption. @@ -263,10 +260,8 @@ public: // Do not use AutoGetOrCreateDb because we may relock the DbLock in mode IX. Lock::DBLock dbLock(opCtx, ns.db(), MODE_X); if (!repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(opCtx, ns)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::NotMaster, - str::stream() << "Not primary while creating indexes in " << ns.ns())); + uasserted(ErrorCodes::NotMaster, + str::stream() << "Not primary while creating indexes in " << ns.ns()); } Database* db = DatabaseHolder::getDatabaseHolder().get(opCtx, ns.db()); @@ -281,14 +276,11 @@ public: } else { if (db->getViewCatalog()->lookup(opCtx, ns.ns())) { errmsg = "Cannot create indexes on a view"; - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::CommandNotSupportedOnView, errmsg}); + uasserted(ErrorCodes::CommandNotSupportedOnView, errmsg); } status = userAllowedCreateNS(ns.db(), ns.coll()); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); writeConflictRetry(opCtx, kCommandName, ns.ns(), [&] { WriteUnitOfWork wunit(opCtx); @@ -301,9 +293,7 @@ public: auto indexSpecsWithDefaults = resolveCollectionDefaultProperties(opCtx, collection, std::move(specs)); - if (!indexSpecsWithDefaults.isOK()) { - return CommandHelpers::appendCommandStatus(result, indexSpecsWithDefaults.getStatus()); - } + uassertStatusOK(indexSpecsWithDefaults.getStatus()); specs = std::move(indexSpecsWithDefaults.getValue()); const int numIndexesBefore = collection->getIndexCatalog()->numIndexesTotal(opCtx); @@ -330,10 +320,7 @@ public: const BSONObj& spec = specs[i]; if (spec["unique"].trueValue()) { status = checkUniqueIndexConstraints(opCtx, ns, spec["key"].Obj()); - - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } } @@ -348,11 +335,9 @@ public: opCtx->recoveryUnit()->abandonSnapshot(); dbLock.relockWithMode(MODE_IX); if (!repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesFor(opCtx, ns)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::NotMaster, - str::stream() << "Not primary while creating background indexes in " - << ns.ns())); + uasserted(ErrorCodes::NotMaster, + str::stream() << "Not primary while creating background indexes in " + << ns.ns()); } } diff --git a/src/mongo/db/commands/current_op.cpp b/src/mongo/db/commands/current_op.cpp index a53d7876c2c..47e22ea8296 100644 --- a/src/mongo/db/commands/current_op.cpp +++ b/src/mongo/db/commands/current_op.cpp @@ -75,7 +75,7 @@ public: return status; } - CommandHelpers::appendCommandStatus(responseBuilder, Status::OK()); + CommandHelpers::appendSimpleCommandStatus(responseBuilder, true); return CursorResponse::parseFromBSON(responseBuilder.obj()); } diff --git a/src/mongo/db/commands/current_op_common.cpp b/src/mongo/db/commands/current_op_common.cpp index 35bbadb32a6..de5af29560c 100644 --- a/src/mongo/db/commands/current_op_common.cpp +++ b/src/mongo/db/commands/current_op_common.cpp @@ -112,7 +112,7 @@ bool CurrentOpCommandBase::run(OperationContext* opCtx, // Make any final custom additions to the response object. appendToResponse(&result); - return CommandHelpers::appendCommandStatus(result, Status::OK()); + return true; } } // namespace mongo diff --git a/src/mongo/db/commands/dbcommands.cpp b/src/mongo/db/commands/dbcommands.cpp index 02a279e4653..9fdff86d86a 100644 --- a/src/mongo/db/commands/dbcommands.cpp +++ b/src/mongo/db/commands/dbcommands.cpp @@ -137,37 +137,33 @@ public: // disallow dropping the config database if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer && (dbname == NamespaceString::kConfigDb)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "Cannot drop 'config' database if mongod started " - "with --configsvr")); + uasserted(ErrorCodes::IllegalOperation, + "Cannot drop 'config' database if mongod started " + "with --configsvr"); } if ((repl::ReplicationCoordinator::get(opCtx)->getReplicationMode() != repl::ReplicationCoordinator::modeNone) && (dbname == NamespaceString::kLocalDb)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - str::stream() << "Cannot drop '" << dbname - << "' database while replication is active")); + uasserted(ErrorCodes::IllegalOperation, + str::stream() << "Cannot drop '" << dbname + << "' database while replication is active"); } BSONElement e = cmdObj.firstElement(); int p = (int)e.number(); if (p != 1) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::IllegalOperation, "have to pass 1 as db parameter")); + uasserted(ErrorCodes::IllegalOperation, "have to pass 1 as db parameter"); } Status status = dropDatabase(opCtx, dbname); if (status == ErrorCodes::NamespaceNotFound) { - return CommandHelpers::appendCommandStatus(result, Status::OK()); + return true; } if (status.isOK()) { result.append("dropped", dbname); } - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdDropDatabase; @@ -215,11 +211,9 @@ public: auto db = DatabaseHolder::getDatabaseHolder().get(opCtx, dbname); if (db) { if (db->isDropPending(opCtx)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::DatabaseDropPending, - str::stream() << "Cannot repair database " << dbname - << " since it is pending being dropped.")); + uasserted(ErrorCodes::DatabaseDropPending, + str::stream() << "Cannot repair database " << dbname + << " since it is pending being dropped."); } } else { // If the name doesn't make an exact match, check for a case insensitive match. @@ -259,7 +253,8 @@ public: // Open database before returning DatabaseHolder::getDatabaseHolder().openDb(opCtx, dbname); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdRepairDatabase; @@ -308,13 +303,13 @@ public: return false; } - return CommandHelpers::appendCommandStatus( - result, + uassertStatusOK( dropCollection(opCtx, nsToDrop, result, {}, DropCollectionSystemCollectionMode::kDisallowSystemCollectionDrops)); + return true; } } cmdDrop; @@ -362,24 +357,19 @@ public: // Validate _id index spec and fill in missing fields. if (auto idIndexElem = cmdObj["idIndex"]) { if (cmdObj["viewOn"]) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidOptions, - str::stream() << "'idIndex' is not allowed with 'viewOn': " << idIndexElem}); + uasserted(ErrorCodes::InvalidOptions, + str::stream() << "'idIndex' is not allowed with 'viewOn': " + << idIndexElem); } if (cmdObj["autoIndexId"]) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidOptions, - str::stream() << "'idIndex' is not allowed with 'autoIndexId': " - << idIndexElem}); + uasserted(ErrorCodes::InvalidOptions, + str::stream() << "'idIndex' is not allowed with 'autoIndexId': " + << idIndexElem); } if (idIndexElem.type() != BSONType::Object) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::TypeMismatch, - str::stream() << "'idIndex' has to be a document: " << idIndexElem}); + uasserted(ErrorCodes::TypeMismatch, + str::stream() << "'idIndex' has to be a document: " << idIndexElem); } auto idIndexSpec = idIndexElem.Obj(); @@ -393,16 +383,13 @@ public: std::unique_ptr<CollatorInterface> defaultCollator; if (auto collationElem = cmdObj["collation"]) { if (collationElem.type() != BSONType::Object) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::TypeMismatch, - str::stream() << "'collation' has to be a document: " << collationElem}); + uasserted(ErrorCodes::TypeMismatch, + str::stream() << "'collation' has to be a document: " + << collationElem); } auto collatorStatus = CollatorFactoryInterface::get(opCtx->getServiceContext()) ->makeFromBSON(collationElem.Obj()); - if (!collatorStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, collatorStatus.getStatus()); - } + uassertStatusOK(collatorStatus.getStatus()); defaultCollator = std::move(collatorStatus.getValue()); } idIndexSpec = uassertStatusOK(index_key_validate::validateIndexSpecCollation( @@ -417,22 +404,20 @@ public: idIndexCollator = std::move(collatorStatus.getValue()); } if (!CollatorInterface::collatorsMatch(defaultCollator.get(), idIndexCollator.get())) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::BadValue, - "'idIndex' must have the same collation as the collection."}); + uasserted(ErrorCodes::BadValue, + "'idIndex' must have the same collation as the collection."); } // Remove "idIndex" field from command. auto resolvedCmdObj = cmdObj.removeField("idIndex"); - return CommandHelpers::appendCommandStatus( - result, createCollection(opCtx, dbname, resolvedCmdObj, idIndexSpec)); + uassertStatusOK(createCollection(opCtx, dbname, resolvedCmdObj, idIndexSpec)); + return true; } BSONObj idIndexSpec; - return CommandHelpers::appendCommandStatus( - result, createCollection(opCtx, dbname, cmdObj, idIndexSpec)); + uassertStatusOK(createCollection(opCtx, dbname, cmdObj, idIndexSpec)); + return true; } } cmdCreate; @@ -569,10 +554,8 @@ public: if (PlanExecutor::FAILURE == state || PlanExecutor::DEAD == state) { warning() << "Internal error while reading " << ns; - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(obj).withContext( - "Executor error while reading during dataSize command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(obj).withContext( + "Executor error while reading during dataSize command")); } ostringstream os; @@ -665,7 +648,8 @@ public: const BSONObj& jsobj, BSONObjBuilder& result) { const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, jsobj)); - return CommandHelpers::appendCommandStatus(result, collMod(opCtx, nss, jsobj, &result)); + uassertStatusOK(collMod(opCtx, nss, jsobj, &result)); + return true; } } collectionModCommand; diff --git a/src/mongo/db/commands/dbcommands_d.cpp b/src/mongo/db/commands/dbcommands_d.cpp index 90ab6c70bfa..a323bd2b3d0 100644 --- a/src/mongo/db/commands/dbcommands_d.cpp +++ b/src/mongo/db/commands/dbcommands_d.cpp @@ -275,10 +275,8 @@ public: } if (PlanExecutor::DEAD == state || PlanExecutor::FAILURE == state) { - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(obj).withContext( - "Executor error during filemd5 command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(obj).withContext( + "Executor error during filemd5 command")); } if (partialOk) diff --git a/src/mongo/db/commands/distinct.cpp b/src/mongo/db/commands/distinct.cpp index 2f47166c6e4..8802e4875cb 100644 --- a/src/mongo/db/commands/distinct.cpp +++ b/src/mongo/db/commands/distinct.cpp @@ -181,9 +181,7 @@ public: ctx.reset(); auto viewAggregation = parsedDistinct.asAggregationCommand(); - if (!viewAggregation.isOK()) { - return CommandHelpers::appendCommandStatus(result, viewAggregation.getStatus()); - } + uassertStatusOK(viewAggregation.getStatus()); BSONObj aggResult = CommandHelpers::runCommandDirectly( opCtx, OpMsgRequest::fromDBAndBody(dbname, std::move(viewAggregation.getValue()))); @@ -194,9 +192,7 @@ public: Collection* const collection = ctx->getCollection(); auto executor = getExecutorDistinct(opCtx, collection, nss.ns(), &parsedDistinct); - if (!executor.isOK()) { - return CommandHelpers::appendCommandStatus(result, executor.getStatus()); - } + uassertStatusOK(executor.getStatus()); { stdx::lock_guard<Client> lk(*opCtx->getClient()); @@ -247,10 +243,8 @@ public: << redact(PlanExecutor::statestr(state)) << ", stats: " << redact(Explain::getWinningPlanStats(executor.getValue().get())); - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(obj).withContext( - "Executor error during distinct command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(obj).withContext( + "Executor error during distinct command")); } diff --git a/src/mongo/db/commands/do_txn_cmd.cpp b/src/mongo/db/commands/do_txn_cmd.cpp index 15183f8524c..d9ab5c0df9e 100644 --- a/src/mongo/db/commands/do_txn_cmd.cpp +++ b/src/mongo/db/commands/do_txn_cmd.cpp @@ -145,9 +145,7 @@ public: maybeDisableValidation.emplace(opCtx); auto status = OplogApplicationChecks::checkOperationArray(cmdObj.firstElement()); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // TODO (SERVER-30217): When a write concern is provided to the doTxn command, we // normally wait on the OpTime of whichever operation successfully completed last. This is diff --git a/src/mongo/db/commands/drop_indexes.cpp b/src/mongo/db/commands/drop_indexes.cpp index 8d8fc318eff..269319f0c7a 100644 --- a/src/mongo/db/commands/drop_indexes.cpp +++ b/src/mongo/db/commands/drop_indexes.cpp @@ -89,7 +89,8 @@ public: const BSONObj& jsobj, BSONObjBuilder& result) { const NamespaceString nss = CommandHelpers::parseNsCollectionRequired(dbname, jsobj); - return CommandHelpers::appendCommandStatus(result, dropIndexes(opCtx, nss, jsobj, &result)); + uassertStatusOK(dropIndexes(opCtx, nss, jsobj, &result)); + return true; } } cmdDropIndexes; @@ -130,11 +131,9 @@ public: Collection* collection = autoDb.getDb()->getCollection(opCtx, toReIndexNss); if (!collection) { if (autoDb.getDb()->getViewCatalog()->lookup(opCtx, toReIndexNss.ns())) - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::CommandNotSupportedOnView, "can't re-index a view"}); + uasserted(ErrorCodes::CommandNotSupportedOnView, "can't re-index a view"); else - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::NamespaceNotFound, "collection does not exist"}); + uasserted(ErrorCodes::NamespaceNotFound, "collection does not exist"); } BackgroundOperation::assertNoBgOpInProgForNs(toReIndexNss.ns()); @@ -197,16 +196,12 @@ public: indexer = stdx::make_unique<MultiIndexBlock>(opCtx, collection); swIndexesToRebuild = indexer->init(all); - if (!swIndexesToRebuild.isOK()) { - return CommandHelpers::appendCommandStatus(result, swIndexesToRebuild.getStatus()); - } + uassertStatusOK(swIndexesToRebuild.getStatus()); wunit.commit(); } auto status = indexer->insertAllDocumentsInCollection(); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); { WriteUnitOfWork wunit(opCtx); diff --git a/src/mongo/db/commands/find_cmd.cpp b/src/mongo/db/commands/find_cmd.cpp index 17dce3de227..2acf75442f6 100644 --- a/src/mongo/db/commands/find_cmd.cpp +++ b/src/mongo/db/commands/find_cmd.cpp @@ -229,9 +229,7 @@ public: // Pass parseNs to makeFromFindCommand in case cmdObj does not have a UUID. auto qrStatus = QueryRequest::makeFromFindCommand( NamespaceString(parseNs(dbname, cmdObj)), cmdObj, isExplain); - if (!qrStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, qrStatus.getStatus()); - } + uassertStatusOK(qrStatus.getStatus()); auto replCoord = repl::ReplicationCoordinator::get(opCtx); auto& qr = qrStatus.getValue(); @@ -240,9 +238,7 @@ public: if (auto term = qr->getReplicationTerm()) { Status status = replCoord->updateTerm(opCtx, *term); // Note: updateTerm returns ok if term stayed the same. - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } // Acquire locks. If the query is on a view, we release our locks and convert the query @@ -277,9 +273,7 @@ public: expCtx, extensionsCallback, MatchExpressionParser::kAllowAllSpecialFeatures); - if (!statusWithCQ.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithCQ.getStatus()); - } + uassertStatusOK(statusWithCQ.getStatus()); std::unique_ptr<CanonicalQuery> cq = std::move(statusWithCQ.getValue()); if (ctx->getView()) { @@ -290,19 +284,15 @@ public: // necessary), if possible. const auto& qr = cq->getQueryRequest(); auto viewAggregationCommand = qr.asAggregationCommand(); - if (!viewAggregationCommand.isOK()) - return CommandHelpers::appendCommandStatus(result, - viewAggregationCommand.getStatus()); + uassertStatusOK(viewAggregationCommand.getStatus()); BSONObj aggResult = CommandHelpers::runCommandDirectly( opCtx, OpMsgRequest::fromDBAndBody(dbname, std::move(viewAggregationCommand.getValue()))); auto status = getStatusFromCommandResult(aggResult); if (status.code() == ErrorCodes::InvalidPipelineOperator) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidPipelineOperator, - str::stream() << "Unsupported in view pipeline: " << status.reason()}); + uasserted(ErrorCodes::InvalidPipelineOperator, + str::stream() << "Unsupported in view pipeline: " << status.reason()); } result.resetToEmpty(); result.appendElements(aggResult); @@ -313,9 +303,7 @@ public: // Get the execution plan for the query. auto statusWithPlanExecutor = getExecutorFind(opCtx, collection, nss, std::move(cq)); - if (!statusWithPlanExecutor.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithPlanExecutor.getStatus()); - } + uassertStatusOK(statusWithPlanExecutor.getStatus()); auto exec = std::move(statusWithPlanExecutor.getValue()); @@ -363,10 +351,8 @@ public: error() << "Plan executor error during find command: " << PlanExecutor::statestr(state) << ", stats: " << redact(Explain::getWinningPlanStats(exec.get())); - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(obj).withContext( - "Executor error during find command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(obj).withContext( + "Executor error during find command")); } // Before saving the cursor, ensure that whatever plan we established happened with the diff --git a/src/mongo/db/commands/fsync.cpp b/src/mongo/db/commands/fsync.cpp index 62d25856e38..1af900475e7 100644 --- a/src/mongo/db/commands/fsync.cpp +++ b/src/mongo/db/commands/fsync.cpp @@ -185,7 +185,7 @@ public: if (!status.isOK()) { releaseLock(); warning() << "fsyncLock failed. Lock count reset to 0. Status: " << status; - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } } diff --git a/src/mongo/db/commands/generic_servers.cpp b/src/mongo/db/commands/generic_servers.cpp index c3612a49a26..40f47e42465 100644 --- a/src/mongo/db/commands/generic_servers.cpp +++ b/src/mongo/db/commands/generic_servers.cpp @@ -236,13 +236,11 @@ public: BSONObjBuilder& result) { BSONElement val = cmdObj.firstElement(); if (val.type() != String) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::TypeMismatch, - str::stream() << "Argument to getLog must be of type String; found " - << val.toString(false) - << " of type " - << typeName(val.type()))); + uasserted(ErrorCodes::TypeMismatch, + str::stream() << "Argument to getLog must be of type String; found " + << val.toString(false) + << " of type " + << typeName(val.type())); } string p = val.String(); @@ -306,13 +304,10 @@ public: BSONObjBuilder& result) { std::string logName; Status status = bsonExtractStringField(cmdObj, "clearLog", &logName); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (logName != "global") { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::InvalidOptions, "Only the 'global' log can be cleared")); + uasserted(ErrorCodes::InvalidOptions, "Only the 'global' log can be cleared"); } RamLog* ramlog = RamLog::getIfExists(logName); invariant(ramlog); diff --git a/src/mongo/db/commands/geo_near_cmd.cpp b/src/mongo/db/commands/geo_near_cmd.cpp index f76dbef2a67..7385f6645f5 100644 --- a/src/mongo/db/commands/geo_near_cmd.cpp +++ b/src/mongo/db/commands/geo_near_cmd.cpp @@ -176,7 +176,7 @@ public: Status collationEltStatus = bsonExtractTypedField(cmdObj, "collation", BSONType::Object, &collationElt); if (!collationEltStatus.isOK() && (collationEltStatus != ErrorCodes::NoSuchKey)) { - return CommandHelpers::appendCommandStatus(result, collationEltStatus); + uassertStatusOK(collationEltStatus); } if (collationEltStatus.isOK()) { collation = collationElt.Obj(); @@ -304,10 +304,8 @@ public: log() << "Plan executor error during geoNear command: " << PlanExecutor::statestr(state) << ", stats: " << redact(Explain::getWinningPlanStats(exec.get())); - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(currObj).withContext( - "Executor error during geoNear command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(currObj).withContext( + "Executor error during geoNear command")); } PlanSummaryStats summary; diff --git a/src/mongo/db/commands/get_last_error.cpp b/src/mongo/db/commands/get_last_error.cpp index 2cb45c3b445..abeb8ed2220 100644 --- a/src/mongo/db/commands/get_last_error.cpp +++ b/src/mongo/db/commands/get_last_error.cpp @@ -180,12 +180,10 @@ public: return CommandHelpers::appendCommandStatusNoThrow(result, status); } } else { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::TypeMismatch, - str::stream() << "Expected \"wOpTime\" field in getLastError to " - "have type Date, Timestamp, or OpTime but found type " - << typeName(opTimeElement.type()))); + uasserted(ErrorCodes::TypeMismatch, + str::stream() << "Expected \"wOpTime\" field in getLastError to " + "have type Date, Timestamp, or OpTime but found type " + << typeName(opTimeElement.type())); } diff --git a/src/mongo/db/commands/getmore_cmd.cpp b/src/mongo/db/commands/getmore_cmd.cpp index 9f2904a971d..6047649475f 100644 --- a/src/mongo/db/commands/getmore_cmd.cpp +++ b/src/mongo/db/commands/getmore_cmd.cpp @@ -225,9 +225,7 @@ public: auto replCoord = repl::ReplicationCoordinator::get(opCtx); Status status = replCoord->updateTerm(opCtx, *request.term); // Note: updateTerm returns ok if term stayed the same. - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } // Cursors come in one of two flavors: @@ -273,18 +271,13 @@ public: Collection* collection = readLock->getCollection(); if (!collection) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::OperationFailed, - "collection dropped between getMore calls")); + uasserted(ErrorCodes::OperationFailed, "collection dropped between getMore calls"); } cursorManager = collection->getCursorManager(); } auto ccPin = cursorManager->pinCursor(opCtx, request.cursorid); - if (!ccPin.isOK()) { - return CommandHelpers::appendCommandStatus(result, ccPin.getStatus()); - } + uassertStatusOK(ccPin.getStatus()); ClientCursor* cursor = ccPin.getValue().getCursor(); @@ -315,20 +308,16 @@ public: // authenticated in order to run getMore on the cursor. if (!AuthorizationSession::get(opCtx->getClient()) ->isCoauthorizedWith(cursor->getAuthenticatedUsers())) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::Unauthorized, - str::stream() << "cursor id " << request.cursorid - << " was not created by the authenticated user")); + uasserted(ErrorCodes::Unauthorized, + str::stream() << "cursor id " << request.cursorid + << " was not created by the authenticated user"); } if (request.nss != cursor->nss()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::Unauthorized, - str::stream() << "Requested getMore on namespace '" << request.nss.ns() - << "', but cursor belongs to a different namespace " - << cursor->nss().ns())); + uasserted(ErrorCodes::Unauthorized, + str::stream() << "Requested getMore on namespace '" << request.nss.ns() + << "', but cursor belongs to a different namespace " + << cursor->nss().ns()); } // Ensure the lsid and txnNumber of the getMore match that of the originating command. @@ -336,11 +325,9 @@ public: validateTxnNumber(opCtx, request, cursor); if (request.nss.isOplog() && MONGO_FAIL_POINT(rsStopGetMoreCmd)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::CommandFailed, - str::stream() << "getMore on " << request.nss.ns() - << " rejected due to active fail point rsStopGetMoreCmd")); + uasserted(ErrorCodes::CommandFailed, + str::stream() << "getMore on " << request.nss.ns() + << " rejected due to active fail point rsStopGetMoreCmd"); } // Validation related to awaitData. @@ -351,7 +338,7 @@ public: if (request.awaitDataTimeout && !cursor->isAwaitData()) { Status status(ErrorCodes::BadValue, "cannot set maxTimeMS on getMore command for a non-awaitData cursor"); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } // On early return, get rid of the cursor. @@ -441,9 +428,7 @@ public: } Status batchStatus = generateBatch(opCtx, cursor, request, &nextBatch, &state, &numResults); - if (!batchStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, batchStatus); - } + uassertStatusOK(batchStatus); PlanSummaryStats postExecutionStats; Explain::getSummaryStats(*exec, &postExecutionStats); @@ -506,9 +491,7 @@ public: globalOpCounters.gotGetMore(); StatusWith<GetMoreRequest> parsedRequest = GetMoreRequest::parseFromBSON(dbname, cmdObj); - if (!parsedRequest.isOK()) { - return CommandHelpers::appendCommandStatus(result, parsedRequest.getStatus()); - } + uassertStatusOK(parsedRequest.getStatus()); auto request = parsedRequest.getValue(); return runParsed(opCtx, request.nss, request, cmdObj, result); } diff --git a/src/mongo/db/commands/group_cmd.cpp b/src/mongo/db/commands/group_cmd.cpp index de3811cc6fa..77e5e8e62b5 100644 --- a/src/mongo/db/commands/group_cmd.cpp +++ b/src/mongo/db/commands/group_cmd.cpp @@ -156,17 +156,13 @@ private: GroupRequest groupRequest; Status parseRequestStatus = _parseRequest(dbname, cmdObj, &groupRequest); - if (!parseRequestStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, parseRequestStatus); - } + uassertStatusOK(parseRequestStatus); AutoGetCollectionForReadCommand ctx(opCtx, groupRequest.ns); Collection* coll = ctx.getCollection(); auto statusWithPlanExecutor = getExecutorGroup(opCtx, coll, groupRequest); - if (!statusWithPlanExecutor.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithPlanExecutor.getStatus()); - } + uassertStatusOK(statusWithPlanExecutor.getStatus()); auto planExecutor = std::move(statusWithPlanExecutor.getValue()); @@ -182,10 +178,8 @@ private: if (PlanExecutor::ADVANCED != state) { invariant(PlanExecutor::FAILURE == state || PlanExecutor::DEAD == state); - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(retval).withContext( - "Plan executor error during group command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(retval).withContext( + "Plan executor error during group command")); } invariant(planExecutor->isEOF()); diff --git a/src/mongo/db/commands/index_filter_commands.cpp b/src/mongo/db/commands/index_filter_commands.cpp index 203152d5fec..6b1407d29ac 100644 --- a/src/mongo/db/commands/index_filter_commands.cpp +++ b/src/mongo/db/commands/index_filter_commands.cpp @@ -121,7 +121,8 @@ bool IndexFilterCommand::run(OperationContext* opCtx, BSONObjBuilder& result) { const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); Status status = runIndexFilterCommand(opCtx, nss.ns(), cmdObj, &result); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } diff --git a/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp b/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp index 925695e9b2d..cebc66d0cc4 100644 --- a/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp +++ b/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp @@ -101,10 +101,8 @@ public: for (const auto& pattern : ksc.getKillAllSessionsByPattern()) { if (pattern.getUsers() || pattern.getRoles()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::Unauthorized, - "Not authorized to impersonate in killAllSessionsByPattern")); + uasserted(ErrorCodes::Unauthorized, + "Not authorized to impersonate in killAllSessionsByPattern"); } } } @@ -113,8 +111,8 @@ public: KillAllSessionsByPatternSet patterns{ksc.getKillAllSessionsByPattern().begin(), ksc.getKillAllSessionsByPattern().end()}; - return CommandHelpers::appendCommandStatus(result, - killSessionsCmdHelper(opCtx, result, patterns)); + uassertStatusOK(killSessionsCmdHelper(opCtx, result, patterns)); + return true; } } killAllSessionsByPatternCommand; diff --git a/src/mongo/db/commands/kill_all_sessions_command.cpp b/src/mongo/db/commands/kill_all_sessions_command.cpp index 624d3192968..80b37071e24 100644 --- a/src/mongo/db/commands/kill_all_sessions_command.cpp +++ b/src/mongo/db/commands/kill_all_sessions_command.cpp @@ -101,8 +101,8 @@ public: } } - return CommandHelpers::appendCommandStatus(result, - killSessionsCmdHelper(opCtx, result, patterns)); + uassertStatusOK(killSessionsCmdHelper(opCtx, result, patterns)); + return true; } } killAllSessionsCommand; diff --git a/src/mongo/db/commands/kill_sessions_command.cpp b/src/mongo/db/commands/kill_sessions_command.cpp index 2afcc1588d4..18623529346 100644 --- a/src/mongo/db/commands/kill_sessions_command.cpp +++ b/src/mongo/db/commands/kill_sessions_command.cpp @@ -127,8 +127,8 @@ public: } } - return CommandHelpers::appendCommandStatus(result, - killSessionsCmdHelper(opCtx, result, patterns)); + uassertStatusOK(killSessionsCmdHelper(opCtx, result, patterns)); + return true; } } killSessionsCommand; diff --git a/src/mongo/db/commands/killcursors_common.cpp b/src/mongo/db/commands/killcursors_common.cpp index 17933cf2cad..06928f53eab 100644 --- a/src/mongo/db/commands/killcursors_common.cpp +++ b/src/mongo/db/commands/killcursors_common.cpp @@ -70,9 +70,7 @@ bool KillCursorsCmdBase::run(OperationContext* opCtx, const BSONObj& cmdObj, BSONObjBuilder& result) { auto statusWithRequest = KillCursorsRequest::parseFromBSON(dbname, cmdObj); - if (!statusWithRequest.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithRequest.getStatus()); - } + uassertStatusOK(statusWithRequest.getStatus()); auto killCursorsRequest = std::move(statusWithRequest.getValue()); std::vector<CursorId> cursorsKilled; diff --git a/src/mongo/db/commands/list_collections.cpp b/src/mongo/db/commands/list_collections.cpp index d943086439e..dce39421301 100644 --- a/src/mongo/db/commands/list_collections.cpp +++ b/src/mongo/db/commands/list_collections.cpp @@ -253,17 +253,14 @@ public: BSONElement filterElt = jsobj["filter"]; if (!filterElt.eoo()) { if (filterElt.type() != mongo::Object) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::BadValue, "\"filter\" must be an object")); + uasserted(ErrorCodes::BadValue, "\"filter\" must be an object"); } // The collator is null because collection objects are compared using binary comparison. const CollatorInterface* collator = nullptr; boost::intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext(opCtx, collator)); StatusWithMatchExpression statusWithMatcher = MatchExpressionParser::parse(filterElt.Obj(), std::move(expCtx)); - if (!statusWithMatcher.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithMatcher.getStatus()); - } + uassertStatusOK(statusWithMatcher.getStatus()); matcher = std::move(statusWithMatcher.getValue()); } @@ -271,19 +268,14 @@ public: long long batchSize; Status parseCursorStatus = CursorRequest::parseCommandCursorOptions(jsobj, defaultBatchSize, &batchSize); - if (!parseCursorStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, parseCursorStatus); - } + uassertStatusOK(parseCursorStatus); // Check for 'includePendingDrops' flag. The default is to not include drop-pending // collections. bool includePendingDrops; Status status = bsonExtractBooleanFieldWithDefault( jsobj, "includePendingDrops", false, &includePendingDrops); - - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); AutoGetDb autoDb(opCtx, dbname, MODE_IS); @@ -331,9 +323,7 @@ public: auto statusWithPlanExecutor = PlanExecutor::make( opCtx, std::move(ws), std::move(root), cursorNss, PlanExecutor::NO_YIELD); - if (!statusWithPlanExecutor.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithPlanExecutor.getStatus()); - } + uassertStatusOK(statusWithPlanExecutor.getStatus()); auto exec = std::move(statusWithPlanExecutor.getValue()); BSONArrayBuilder firstBatch; diff --git a/src/mongo/db/commands/list_databases.cpp b/src/mongo/db/commands/list_databases.cpp index 3c93304a370..5643466a32b 100644 --- a/src/mongo/db/commands/list_databases.cpp +++ b/src/mongo/db/commands/list_databases.cpp @@ -92,11 +92,10 @@ public: std::unique_ptr<MatchExpression> filter; if (auto filterElt = jsobj[kFilterField]) { if (filterElt.type() != BSONType::Object) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::TypeMismatch, - str::stream() << "Field '" << kFilterField << "' must be of type Object in: " - << jsobj}); + uasserted(ErrorCodes::TypeMismatch, + str::stream() << "Field '" << kFilterField + << "' must be of type Object in: " + << jsobj); } // The collator is null because database metadata objects are compared using simple // binary comparison. @@ -104,9 +103,7 @@ public: boost::intrusive_ptr<ExpressionContext> expCtx(new ExpressionContext(opCtx, collator)); auto statusWithMatcher = MatchExpressionParser::parse(filterElt.Obj(), std::move(expCtx)); - if (!statusWithMatcher.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithMatcher.getStatus()); - } + uassertStatusOK(statusWithMatcher.getStatus()); filter = std::move(statusWithMatcher.getValue()); } bool nameOnly = jsobj[kNameOnlyField].trueValue(); diff --git a/src/mongo/db/commands/list_indexes.cpp b/src/mongo/db/commands/list_indexes.cpp index 19993d6084b..dce38f51fa5 100644 --- a/src/mongo/db/commands/list_indexes.cpp +++ b/src/mongo/db/commands/list_indexes.cpp @@ -165,9 +165,7 @@ public: auto statusWithPlanExecutor = PlanExecutor::make( opCtx, std::move(ws), std::move(root), cursorNss, PlanExecutor::NO_YIELD); - if (!statusWithPlanExecutor.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithPlanExecutor.getStatus()); - } + uassertStatusOK(statusWithPlanExecutor.getStatus()); auto exec = std::move(statusWithPlanExecutor.getValue()); BSONArrayBuilder firstBatch; diff --git a/src/mongo/db/commands/mr.cpp b/src/mongo/db/commands/mr.cpp index c743a951ba5..36345d98854 100644 --- a/src/mongo/db/commands/mr.cpp +++ b/src/mongo/db/commands/mr.cpp @@ -1414,9 +1414,7 @@ public: auto client = opCtx->getClient(); if (client->isInDirectClient()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, "Cannot run mapReduce command from eval()")); + uasserted(ErrorCodes::IllegalOperation, "Cannot run mapReduce command from eval()"); } auto curOp = CurOp::get(opCtx); @@ -1442,10 +1440,8 @@ public: try { State state(opCtx, config); if (!state.sourceExists()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::NamespaceNotFound, - str::stream() << "namespace does not exist: " << config.nss.ns())); + uasserted(ErrorCodes::NamespaceNotFound, + str::stream() << "namespace does not exist: " << config.nss.ns()); } state.init(); @@ -1580,9 +1576,7 @@ public: scopedAutoDb.reset(new AutoGetDb(opCtx, config.nss.db(), MODE_S)); auto restoreStatus = exec->restoreState(); - if (!restoreStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, restoreStatus); - } + uassertStatusOK(restoreStatus); reduceTime += t.micros(); @@ -1596,11 +1590,9 @@ public: } if (PlanExecutor::DEAD == execState || PlanExecutor::FAILURE == execState) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::OperationFailed, - str::stream() << "Executor error during mapReduce command: " - << WorkingSetCommon::toStatusString(o))); + uasserted(ErrorCodes::OperationFailed, + str::stream() << "Executor error during mapReduce command: " + << WorkingSetCommon::toStatusString(o)); } // Record the indexes used by the PlanExecutor. @@ -1730,11 +1722,9 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::CommandNotSupported, - str::stream() << "Can not execute mapReduce with output database " << dbname - << " which lives on config servers")); + uasserted(ErrorCodes::CommandNotSupported, + str::stream() << "Can not execute mapReduce with output database " << dbname + << " which lives on config servers"); } // Don't let any lock acquisitions get interrupted. @@ -1809,10 +1799,7 @@ public: if (config.outputOptions.outType != Config::OutputType::INMEMORY) { auto outRoutingInfoStatus = Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo( opCtx, config.outputOptions.finalNamespace); - if (!outRoutingInfoStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, - outRoutingInfoStatus.getStatus()); - } + uassertStatusOK(outRoutingInfoStatus.getStatus()); if (auto cm = outRoutingInfoStatus.getValue().cm()) { // Fetch result from other shards 1 chunk at a time. It would be better to do just diff --git a/src/mongo/db/commands/oplog_note.cpp b/src/mongo/db/commands/oplog_note.cpp index 8cd038204d4..09a32cc0f6e 100644 --- a/src/mongo/db/commands/oplog_note.cpp +++ b/src/mongo/db/commands/oplog_note.cpp @@ -119,17 +119,13 @@ public: BSONObjBuilder& result) { auto replCoord = repl::ReplicationCoordinator::get(opCtx); if (!replCoord->isReplEnabled()) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::NoReplicationEnabled, - "Must have replication set up to run \"appendOplogNote\""}); + uasserted(ErrorCodes::NoReplicationEnabled, + "Must have replication set up to run \"appendOplogNote\""); } BSONElement dataElement; auto dataStatus = bsonExtractTypedField(cmdObj, "data", Object, &dataElement); - if (!dataStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, dataStatus); - } + uassertStatusOK(dataStatus); Timestamp maxClusterTime; auto maxClusterTimeStatus = @@ -137,24 +133,23 @@ public: if (!maxClusterTimeStatus.isOK()) { if (maxClusterTimeStatus == ErrorCodes::NoSuchKey) { // no need to use maxClusterTime - return CommandHelpers::appendCommandStatus( - result, _performNoopWrite(opCtx, dataElement.Obj(), "appendOpLogNote")); + uassertStatusOK(_performNoopWrite(opCtx, dataElement.Obj(), "appendOpLogNote")); + return true; } - return CommandHelpers::appendCommandStatus(result, maxClusterTimeStatus); + uassertStatusOK(maxClusterTimeStatus); } auto lastAppliedOpTime = replCoord->getMyLastAppliedOpTime().getTimestamp(); if (maxClusterTime > lastAppliedOpTime) { - return CommandHelpers::appendCommandStatus( - result, _performNoopWrite(opCtx, dataElement.Obj(), "appendOpLogNote")); + uassertStatusOK(_performNoopWrite(opCtx, dataElement.Obj(), "appendOpLogNote")); } else { std::stringstream ss; ss << "Requested maxClusterTime " << LogicalTime(maxClusterTime).toString() << " is less or equal to the last primary OpTime: " << LogicalTime(lastAppliedOpTime).toString(); - return CommandHelpers::appendCommandStatus(result, - {ErrorCodes::StaleClusterTime, ss.str()}); + uasserted(ErrorCodes::StaleClusterTime, ss.str()); } + return true; } }; diff --git a/src/mongo/db/commands/pipeline_command.cpp b/src/mongo/db/commands/pipeline_command.cpp index aac860e8855..24142d7da5d 100644 --- a/src/mongo/db/commands/pipeline_command.cpp +++ b/src/mongo/db/commands/pipeline_command.cpp @@ -92,13 +92,9 @@ public: const auto aggregationRequest = uassertStatusOK(AggregationRequest::parseFromBSON(dbname, cmdObj, boost::none)); - return CommandHelpers::appendCommandStatus( - result, - runAggregate(opCtx, - aggregationRequest.getNamespaceString(), - aggregationRequest, - cmdObj, - result)); + uassertStatusOK(runAggregate( + opCtx, aggregationRequest.getNamespaceString(), aggregationRequest, cmdObj, result)); + return true; } Status explain(OperationContext* opCtx, diff --git a/src/mongo/db/commands/plan_cache_commands.cpp b/src/mongo/db/commands/plan_cache_commands.cpp index e5a5c193368..703526343e7 100644 --- a/src/mongo/db/commands/plan_cache_commands.cpp +++ b/src/mongo/db/commands/plan_cache_commands.cpp @@ -116,7 +116,8 @@ bool PlanCacheCommand::run(OperationContext* opCtx, BSONObjBuilder& result) { const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); Status status = runPlanCacheCommand(opCtx, nss.ns(), cmdObj, &result); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } diff --git a/src/mongo/db/commands/reap_logical_session_cache_now.cpp b/src/mongo/db/commands/reap_logical_session_cache_now.cpp index adb9b15e897..05b1ad665e1 100644 --- a/src/mongo/db/commands/reap_logical_session_cache_now.cpp +++ b/src/mongo/db/commands/reap_logical_session_cache_now.cpp @@ -76,9 +76,7 @@ public: auto client = opCtx->getClient(); auto res = cache->reapNow(client); - if (!res.isOK()) { - return CommandHelpers::appendCommandStatus(result, res); - } + uassertStatusOK(res); return true; } diff --git a/src/mongo/db/commands/refresh_logical_session_cache_now.cpp b/src/mongo/db/commands/refresh_logical_session_cache_now.cpp index f00adb6afb0..4cb54b0c823 100644 --- a/src/mongo/db/commands/refresh_logical_session_cache_now.cpp +++ b/src/mongo/db/commands/refresh_logical_session_cache_now.cpp @@ -77,9 +77,7 @@ public: auto client = opCtx->getClient(); auto res = cache->refreshNow(client); - if (!res.isOK()) { - return CommandHelpers::appendCommandStatus(result, res); - } + uassertStatusOK(res); return true; } diff --git a/src/mongo/db/commands/refresh_sessions_command.cpp b/src/mongo/db/commands/refresh_sessions_command.cpp index 09882f10fe7..c05850eff79 100644 --- a/src/mongo/db/commands/refresh_sessions_command.cpp +++ b/src/mongo/db/commands/refresh_sessions_command.cpp @@ -81,9 +81,7 @@ public: auto cmd = RefreshSessionsCmdFromClient::parse(ctx, cmdObj); auto res = LogicalSessionCache::get(opCtx->getServiceContext())->refreshSessions(opCtx, cmd); - if (!res.isOK()) { - return CommandHelpers::appendCommandStatus(result, res); - } + uassertStatusOK(res); return true; } diff --git a/src/mongo/db/commands/refresh_sessions_command_internal.cpp b/src/mongo/db/commands/refresh_sessions_command_internal.cpp index 8f942feb1c4..e5529754fa9 100644 --- a/src/mongo/db/commands/refresh_sessions_command_internal.cpp +++ b/src/mongo/db/commands/refresh_sessions_command_internal.cpp @@ -78,9 +78,7 @@ public: auto cmd = RefreshSessionsCmdFromClusterMember::parse(ctx, cmdObj); auto res = LogicalSessionCache::get(opCtx->getServiceContext())->refreshSessions(opCtx, cmd); - if (!res.isOK()) { - return CommandHelpers::appendCommandStatus(result, res); - } + uassertStatusOK(res); return true; } diff --git a/src/mongo/db/commands/rename_collection_cmd.cpp b/src/mongo/db/commands/rename_collection_cmd.cpp index e152a1ae7b4..2232104c44e 100644 --- a/src/mongo/db/commands/rename_collection_cmd.cpp +++ b/src/mongo/db/commands/rename_collection_cmd.cpp @@ -149,19 +149,17 @@ public: } if (source.isServerConfigurationCollection()) { - CommandHelpers::appendCommandStatus(result, - Status(ErrorCodes::IllegalOperation, - "renaming the server configuration " - "collection (admin.system.version) is not " - "allowed")); - return false; + uasserted(ErrorCodes::IllegalOperation, + "renaming the server configuration " + "collection (admin.system.version) is not " + "allowed"); } RenameCollectionOptions options; options.dropTarget = cmdObj["dropTarget"].trueValue(); options.stayTemp = cmdObj["stayTemp"].trueValue(); - return CommandHelpers::appendCommandStatus( - result, renameCollection(opCtx, source, target, options)); + uassertStatusOK(renameCollection(opCtx, source, target, options)); + return true; } } cmdrenamecollection; diff --git a/src/mongo/db/commands/repair_cursor.cpp b/src/mongo/db/commands/repair_cursor.cpp index f8d3b058d2d..8df85a45c19 100644 --- a/src/mongo/db/commands/repair_cursor.cpp +++ b/src/mongo/db/commands/repair_cursor.cpp @@ -77,14 +77,12 @@ public: Collection* collection = ctx.getCollection(); if (!collection) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::NamespaceNotFound, "ns does not exist: " + ns.ns())); + uasserted(ErrorCodes::NamespaceNotFound, "ns does not exist: " + ns.ns()); } auto cursor = collection->getRecordStore()->getCursorForRepair(opCtx); if (!cursor) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::CommandNotSupported, "repair iterator not supported")); + uasserted(ErrorCodes::CommandNotSupported, "repair iterator not supported"); } std::unique_ptr<WorkingSet> ws(new WorkingSet()); diff --git a/src/mongo/db/commands/resize_oplog.cpp b/src/mongo/db/commands/resize_oplog.cpp index 726cf043b5d..d743e57cac3 100644 --- a/src/mongo/db/commands/resize_oplog.cpp +++ b/src/mongo/db/commands/resize_oplog.cpp @@ -89,40 +89,32 @@ public: Lock::GlobalWrite global(opCtx); Database* database = DatabaseHolder::getDatabaseHolder().get(opCtx, nss.db()); if (!database) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::NamespaceNotFound, "database local does not exist")); + uasserted(ErrorCodes::NamespaceNotFound, "database local does not exist"); } Collection* coll = database->getCollection(opCtx, nss); if (!coll) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::NamespaceNotFound, "oplog does not exist")); + uasserted(ErrorCodes::NamespaceNotFound, "oplog does not exist"); } if (!coll->isCapped()) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::IllegalOperation, "oplog isn't capped")); + uasserted(ErrorCodes::IllegalOperation, "oplog isn't capped"); } if (!jsobj["size"].isNumber()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidOptions, "invalid size field, size should be a number")); + uasserted(ErrorCodes::InvalidOptions, "invalid size field, size should be a number"); } long long sizeMb = jsobj["size"].numberLong(); long long size = sizeMb * 1024 * 1024; if (sizeMb < 990L) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::InvalidOptions, "oplog size should be 990MB at least")); + uasserted(ErrorCodes::InvalidOptions, "oplog size should be 990MB at least"); } WriteUnitOfWork wunit(opCtx); Status status = coll->getRecordStore()->updateCappedSize(opCtx, size); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); CollectionCatalogEntry* entry = coll->getCatalogEntry(); entry->updateCappedSize(opCtx, size); wunit.commit(); LOG(0) << "replSetResizeOplog success, currentSize:" << size; - return CommandHelpers::appendCommandStatus(result, Status::OK()); + return true; } } cmdReplSetResizeOplog; } diff --git a/src/mongo/db/commands/restart_catalog_command.cpp b/src/mongo/db/commands/restart_catalog_command.cpp index bfa9a27b22c..c1671eaded5 100644 --- a/src/mongo/db/commands/restart_catalog_command.cpp +++ b/src/mongo/db/commands/restart_catalog_command.cpp @@ -97,11 +97,9 @@ public: for (auto&& dbName : allDbs) { const auto db = DatabaseHolder::getDatabaseHolder().get(opCtx, dbName); if (db->isDropPending(opCtx)) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::DatabaseDropPending, - str::stream() << "cannot restart the catalog because database " << dbName - << " is pending removal"}); + uasserted(ErrorCodes::DatabaseDropPending, + str::stream() << "cannot restart the catalog because database " << dbName + << " is pending removal"); } } diff --git a/src/mongo/db/commands/shutdown_d.cpp b/src/mongo/db/commands/shutdown_d.cpp index 77806c0d368..ee2de23a67e 100644 --- a/src/mongo/db/commands/shutdown_d.cpp +++ b/src/mongo/db/commands/shutdown_d.cpp @@ -63,7 +63,7 @@ public: Status status = repl::ReplicationCoordinator::get(opCtx)->stepDown( opCtx, force, Seconds(timeoutSecs), Seconds(120)); if (!status.isOK() && status.code() != ErrorCodes::NotMaster) { // ignore not master - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } // Never returns diff --git a/src/mongo/db/commands/snapshot_management.cpp b/src/mongo/db/commands/snapshot_management.cpp index 84c57af241b..b0b9896eb9b 100644 --- a/src/mongo/db/commands/snapshot_management.cpp +++ b/src/mongo/db/commands/snapshot_management.cpp @@ -73,8 +73,7 @@ public: BSONObjBuilder& result) { auto snapshotManager = getGlobalServiceContext()->getStorageEngine()->getSnapshotManager(); if (!snapshotManager) { - return CommandHelpers::appendCommandStatus(result, - {ErrorCodes::CommandNotSupported, ""}); + uasserted(ErrorCodes::CommandNotSupported, ""); } Lock::GlobalLock lk(opCtx, MODE_IX); @@ -82,7 +81,7 @@ public: auto name = LogicalClock::getClusterTimeForReplicaSet(opCtx).asTimestamp(); result.append("name", static_cast<long long>(name.asULL())); - return CommandHelpers::appendCommandStatus(result, Status::OK()); + return true; } }; @@ -117,8 +116,7 @@ public: BSONObjBuilder& result) { auto snapshotManager = getGlobalServiceContext()->getStorageEngine()->getSnapshotManager(); if (!snapshotManager) { - return CommandHelpers::appendCommandStatus(result, - {ErrorCodes::CommandNotSupported, ""}); + uasserted(ErrorCodes::CommandNotSupported, ""); } Lock::GlobalLock lk(opCtx, MODE_IX); diff --git a/src/mongo/db/commands/start_session_command.cpp b/src/mongo/db/commands/start_session_command.cpp index 710a01d1fb7..01ce7e0be6d 100644 --- a/src/mongo/db/commands/start_session_command.cpp +++ b/src/mongo/db/commands/start_session_command.cpp @@ -77,16 +77,8 @@ public: ServiceContext* serviceContext = client->getServiceContext(); auto lsCache = LogicalSessionCache::get(serviceContext); - boost::optional<LogicalSessionRecord> record; - - try { - record = makeLogicalSessionRecord(opCtx, lsCache->now()); - } catch (...) { - auto status = exceptionToStatus(); - - return CommandHelpers::appendCommandStatus(result, status); - } - + boost::optional<LogicalSessionRecord> record = + makeLogicalSessionRecord(opCtx, lsCache->now()); lsCache->startSession(opCtx, record.get()); makeLogicalSessionToClient(record->getId()).serialize(&result); diff --git a/src/mongo/db/commands/test_commands.cpp b/src/mongo/db/commands/test_commands.cpp index 153fb7d775f..8d8982f3b20 100644 --- a/src/mongo/db/commands/test_commands.cpp +++ b/src/mongo/db/commands/test_commands.cpp @@ -103,7 +103,8 @@ public: if (status.isOK()) { wunit.commit(); } - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } }; @@ -217,33 +218,27 @@ public: BSONObjBuilder& result) { const NamespaceString fullNs = CommandHelpers::parseNsCollectionRequired(dbname, cmdObj); if (!fullNs.isValid()) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidNamespace, - str::stream() << "collection name " << fullNs.ns() << " is not valid"}); + uasserted(ErrorCodes::InvalidNamespace, + str::stream() << "collection name " << fullNs.ns() << " is not valid"); } int n = cmdObj.getIntField("n"); bool inc = cmdObj.getBoolField("inc"); // inclusive range? if (n <= 0) { - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::BadValue, "n must be a positive integer"}); + uasserted(ErrorCodes::BadValue, "n must be a positive integer"); } // Lock the database in mode IX and lock the collection exclusively. AutoGetCollection autoColl(opCtx, fullNs, MODE_IX, MODE_X); Collection* collection = autoColl.getCollection(); if (!collection) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::NamespaceNotFound, - str::stream() << "collection " << fullNs.ns() << " does not exist"}); + uasserted(ErrorCodes::NamespaceNotFound, + str::stream() << "collection " << fullNs.ns() << " does not exist"); } if (!collection->isCapped()) { - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::IllegalOperation, "collection must be capped"}); + uasserted(ErrorCodes::IllegalOperation, "collection must be capped"); } RecordId end; @@ -257,11 +252,9 @@ public: for (int i = 0; i < n + 1; ++i) { PlanExecutor::ExecState state = exec->getNext(nullptr, &end); if (PlanExecutor::ADVANCED != state) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::IllegalOperation, - str::stream() << "invalid n, collection contains fewer than " << n - << " documents"}); + uasserted(ErrorCodes::IllegalOperation, + str::stream() << "invalid n, collection contains fewer than " << n + << " documents"); } } } @@ -293,7 +286,8 @@ public: BSONObjBuilder& result) { const NamespaceString nss = CommandHelpers::parseNsCollectionRequired(dbname, cmdObj); - return CommandHelpers::appendCommandStatus(result, emptyCapped(opCtx, nss)); + uassertStatusOK(emptyCapped(opCtx, nss)); + return true; } }; diff --git a/src/mongo/db/commands/touch.cpp b/src/mongo/db/commands/touch.cpp index bde76e8ceff..4a2d1a7bc5f 100644 --- a/src/mongo/db/commands/touch.cpp +++ b/src/mongo/db/commands/touch.cpp @@ -109,8 +109,8 @@ public: return false; } - return CommandHelpers::appendCommandStatus( - result, collection->touch(opCtx, touch_data, touch_indexes, &result)); + uassertStatusOK(collection->touch(opCtx, touch_data, touch_indexes, &result)); + return true; } }; static TouchCmd touchCmd; diff --git a/src/mongo/db/commands/user_management_commands.cpp b/src/mongo/db/commands/user_management_commands.cpp index 1fb2582eee5..f2c4f3ad6cf 100644 --- a/src/mongo/db/commands/user_management_commands.cpp +++ b/src/mongo/db/commands/user_management_commands.cpp @@ -772,46 +772,35 @@ public: BSONObjBuilder& result) { auth::CreateOrUpdateUserArgs args; Status status = auth::parseCreateOrUpdateUserCommands(cmdObj, "createUser", dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.userName.getDB() == "local") { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::BadValue, "Cannot create users in the local database")); + uasserted(ErrorCodes::BadValue, "Cannot create users in the local database"); } if (!args.hasPassword && args.userName.getDB() != "$external") { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Must provide a 'pwd' field for all user documents, except those" - " with '$external' as the user's source db")); + uasserted(ErrorCodes::BadValue, + "Must provide a 'pwd' field for all user documents, except those" + " with '$external' as the user's source db"); } if ((args.hasPassword) && args.userName.getDB() == "$external") { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Cannot set the password for users defined on the '$external' " - "database")); + uasserted(ErrorCodes::BadValue, + "Cannot set the password for users defined on the '$external' " + "database"); } if (!args.hasRoles) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, "\"createUser\" command requires a \"roles\" array")); + uasserted(ErrorCodes::BadValue, "\"createUser\" command requires a \"roles\" array"); } #ifdef MONGO_CONFIG_SSL if (args.userName.getDB() == "$external" && getSSLManager() && getSSLManager()->getSSLConfiguration().isClusterMember(args.userName.getUser())) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Cannot create an x.509 user with a subjectname " - "that would be recognized as an internal " - "cluster member.")); + uasserted(ErrorCodes::BadValue, + "Cannot create an x.509 user with a subjectname " + "that would be recognized as an internal " + "cluster member."); } #endif @@ -825,15 +814,11 @@ public: AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); int authzVersion; status = authzManager->getAuthorizationVersion(opCtx, &authzVersion); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); BSONObjBuilder credentialsBuilder(userObjBuilder.subobjStart("credentials")); status = buildCredentials(&credentialsBuilder, args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); credentialsBuilder.done(); if (args.authenticationRestrictions && !args.authenticationRestrictions->isEmpty()) { @@ -850,24 +835,18 @@ public: BSONObj userObj = userObjBuilder.obj(); V2UserDocumentParser parser; status = parser.checkValidUserDocument(userObj); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Role existence has to be checked after acquiring the update lock for (size_t i = 0; i < args.roles.size(); ++i) { BSONObj ignored; status = authzManager->getRoleDescription(opCtx, args.roles[i], &ignored); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } audit::logCreateUser(Client::getCurrent(), @@ -877,7 +856,8 @@ public: args.roles, args.authenticationRestrictions); status = insertPrivilegeDocument(opCtx, userObj); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } void redactForLogging(mutablebson::Document* cmdObj) const override { @@ -918,24 +898,18 @@ public: BSONObjBuilder& result) { auth::CreateOrUpdateUserArgs args; Status status = auth::parseCreateOrUpdateUserCommands(cmdObj, "updateUser", dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (!args.hasPassword && !args.hasCustomData && !args.hasRoles && !args.authenticationRestrictions && args.mechanisms.empty()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Must specify at least one field to update in updateUser")); + uasserted(ErrorCodes::BadValue, + "Must specify at least one field to update in updateUser"); } if (args.hasPassword && args.userName.getDB() == "$external") { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Cannot set the password for users defined on the '$external' " - "database")); + uasserted(ErrorCodes::BadValue, + "Cannot set the password for users defined on the '$external' " + "database"); } BSONObjBuilder queryBuilder; @@ -947,15 +921,11 @@ public: if (args.hasPassword) { BSONObjBuilder credentialsBuilder(updateSetBuilder.subobjStart("credentials")); status = buildCredentials(&credentialsBuilder, args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); credentialsBuilder.done(); } else if (!args.mechanisms.empty()) { status = trimCredentials(opCtx, &queryBuilder, &updateUnsetBuilder, args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } if (args.hasCustomData) { @@ -968,10 +938,7 @@ public: } else { auto swParsedRestrictions = parseAuthenticationRestriction(*args.authenticationRestrictions); - if (!swParsedRestrictions.isOK()) { - return CommandHelpers::appendCommandStatus(result, - swParsedRestrictions.getStatus()); - } + uassertStatusOK(swParsedRestrictions.getStatus()); updateSetBuilder.append("authenticationRestrictions", *args.authenticationRestrictions); @@ -997,18 +964,14 @@ public: AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Role existence has to be checked after acquiring the update lock if (args.hasRoles) { for (size_t i = 0; i < args.roles.size(); ++i) { BSONObj ignored; status = authzManager->getRoleDescription(opCtx, args.roles[i], &ignored); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } } @@ -1023,7 +986,8 @@ public: opCtx, args.userName, queryBuilder.done(), updateDocumentBuilder.done()); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserByName(args.userName); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } void redactForLogging(mutablebson::Document* cmdObj) const override { @@ -1064,17 +1028,13 @@ public: BSONObjBuilder& result) { UserName userName; Status status = auth::parseAndValidateDropUserCommand(cmdObj, dbname, &userName); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); audit::logDropUser(Client::getCurrent(), userName); @@ -1087,15 +1047,11 @@ public: &nMatched); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserByName(userName); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (nMatched == 0) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::UserNotFound, - str::stream() << "User '" << userName.getFullName() << "' not found")); + uasserted(ErrorCodes::UserNotFound, + str::stream() << "User '" << userName.getFullName() << "' not found"); } return true; @@ -1134,17 +1090,13 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = auth::parseAndValidateDropAllUsersFromDatabaseCommand(cmdObj, dbname); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); audit::logDropAllUsersFromDatabase(Client::getCurrent(), dbname); @@ -1153,9 +1105,7 @@ public: opCtx, BSON(AuthorizationManager::USER_DB_FIELD_NAME << dbname), &numRemoved); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUsersFromDB(dbname); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); result.append("n", numRemoved); return true; @@ -1197,33 +1147,25 @@ public: std::vector<RoleName> roles; Status status = auth::parseRolePossessionManipulationCommands( cmdObj, "grantRolesToUser", dbname, &userNameString, &roles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); UserName userName(userNameString, dbname); stdx::unordered_set<RoleName> userRoles; status = getCurrentUserRoles(opCtx, authzManager, userName, &userRoles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); for (vector<RoleName>::iterator it = roles.begin(); it != roles.end(); ++it) { RoleName& roleName = *it; BSONObj roleDoc; status = authzManager->getRoleDescription(opCtx, roleName, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); userRoles.insert(roleName); } @@ -1234,7 +1176,8 @@ public: opCtx, userName, BSON("$set" << BSON("roles" << newRolesBSONArray))); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserByName(userName); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdGrantRolesToUser; @@ -1273,33 +1216,25 @@ public: std::vector<RoleName> roles; Status status = auth::parseRolePossessionManipulationCommands( cmdObj, "revokeRolesFromUser", dbname, &userNameString, &roles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); UserName userName(userNameString, dbname); stdx::unordered_set<RoleName> userRoles; status = getCurrentUserRoles(opCtx, authzManager, userName, &userRoles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); for (vector<RoleName>::iterator it = roles.begin(); it != roles.end(); ++it) { RoleName& roleName = *it; BSONObj roleDoc; status = authzManager->getRoleDescription(opCtx, roleName, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); userRoles.erase(roleName); } @@ -1310,7 +1245,8 @@ public: opCtx, userName, BSON("$set" << BSON("roles" << newRolesBSONArray))); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserByName(userName); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdRevokeRolesFromUser; @@ -1343,23 +1279,17 @@ public: BSONObjBuilder& result) { auth::UsersInfoArgs args; Status status = auth::parseUsersInfoCommand(cmdObj, dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); status = requireReadableAuthSchema26Upgrade(opCtx, getGlobalAuthorizationManager()); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if ((args.target != auth::UsersInfoArgs::Target::kExplicitUsers || args.filter) && (args.showPrivileges || args.authenticationRestrictionsFormat == AuthenticationRestrictionsFormat::kShow)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "Privilege or restriction details require exact-match usersInfo " - "queries.")); + uasserted(ErrorCodes::IllegalOperation, + "Privilege or restriction details require exact-match usersInfo " + "queries."); } BSONArrayBuilder usersArrayBuilder; @@ -1375,9 +1305,7 @@ public: if (status.code() == ErrorCodes::UserNotFound) { continue; } - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // getUserDescription always includes credentials and restrictions, which may need // to be stripped out @@ -1459,15 +1387,11 @@ public: aggRequest, aggRequest.serializeToCommandObj().toBson(), responseBuilder); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); CommandHelpers::appendSimpleCommandStatus(responseBuilder, true); auto swResponse = CursorResponse::parseFromBSON(responseBuilder.obj()); - if (!swResponse.isOK()) { - return CommandHelpers::appendCommandStatus(result, swResponse.getStatus()); - } + uassertStatusOK(swResponse.getStatus()); for (const BSONObj& obj : swResponse.getValue().getBatch()) { usersArrayBuilder.append(obj); } @@ -1510,44 +1434,32 @@ public: BSONObjBuilder& result) { auth::CreateOrUpdateRoleArgs args; Status status = auth::parseCreateOrUpdateRoleCommands(cmdObj, "createRole", dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.roleName.getRole().empty()) { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::BadValue, "Role name must be non-empty")); + uasserted(ErrorCodes::BadValue, "Role name must be non-empty"); } if (args.roleName.getDB() == "local") { - return CommandHelpers::appendCommandStatus( - result, Status(ErrorCodes::BadValue, "Cannot create roles in the local database")); + uasserted(ErrorCodes::BadValue, "Cannot create roles in the local database"); } if (args.roleName.getDB() == "$external") { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, "Cannot create roles in the $external database")); + uasserted(ErrorCodes::BadValue, "Cannot create roles in the $external database"); } if (RoleGraph::isBuiltinRole(args.roleName)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Cannot create roles with the same name as a built-in role")); + uasserted(ErrorCodes::BadValue, + "Cannot create roles with the same name as a built-in role"); } if (!args.hasRoles) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, "\"createRole\" command requires a \"roles\" array")); + uasserted(ErrorCodes::BadValue, "\"createRole\" command requires a \"roles\" array"); } if (!args.hasPrivileges) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "\"createRole\" command requires a \"privileges\" array")); + uasserted(ErrorCodes::BadValue, + "\"createRole\" command requires a \"privileges\" array"); } BSONObjBuilder roleObjBuilder; @@ -1559,9 +1471,7 @@ public: BSONArray privileges; status = privilegeVectorToBSONArray(args.privileges, &privileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); roleObjBuilder.append("privileges", privileges); roleObjBuilder.append("roles", rolesVectorToBSONArray(args.roles)); @@ -1576,20 +1486,14 @@ public: AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Role existence has to be checked after acquiring the update lock status = checkOkayToGrantRolesToRole(opCtx, args.roleName, args.roles, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); status = checkOkayToGrantPrivilegesToRole(args.roleName, args.privileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); audit::logCreateRole(Client::getCurrent(), args.roleName, @@ -1598,7 +1502,8 @@ public: args.authenticationRestrictions); status = insertRoleDocument(opCtx, roleObjBuilder.done()); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdCreateRole; @@ -1635,15 +1540,11 @@ public: BSONObjBuilder& result) { auth::CreateOrUpdateRoleArgs args; Status status = auth::parseCreateOrUpdateRoleCommands(cmdObj, "updateRole", dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (!args.hasPrivileges && !args.hasRoles && !args.authenticationRestrictions) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Must specify at least one field to update in updateRole")); + uasserted(ErrorCodes::BadValue, + "Must specify at least one field to update in updateRole"); } BSONObjBuilder updateSetBuilder; @@ -1652,9 +1553,7 @@ public: if (args.hasPrivileges) { BSONArray privileges; status = privilegeVectorToBSONArray(args.privileges, &privileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); updateSetBuilder.append("privileges", privileges); } @@ -1676,29 +1575,21 @@ public: AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Role existence has to be checked after acquiring the update lock BSONObj ignored; status = authzManager->getRoleDescription(opCtx, args.roleName, &ignored); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.hasRoles) { status = checkOkayToGrantRolesToRole(opCtx, args.roleName, args.roles, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } if (args.hasPrivileges) { status = checkOkayToGrantPrivilegesToRole(args.roleName, args.privileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } audit::logUpdateRole(Client::getCurrent(), @@ -1720,7 +1611,8 @@ public: status = updateRoleDocument(opCtx, args.roleName, updateDocumentBuilder.obj()); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdUpdateRole; @@ -1759,31 +1651,23 @@ public: PrivilegeVector privilegesToAdd; Status status = auth::parseAndValidateRolePrivilegeManipulationCommands( cmdObj, "grantPrivilegesToRole", dbname, &roleName, &privilegesToAdd); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (RoleGraph::isBuiltinRole(roleName)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidRoleModification, - str::stream() << roleName.getFullName() - << " is a built-in role and cannot be modified.")); + uasserted(ErrorCodes::InvalidRoleModification, + str::stream() << roleName.getFullName() + << " is a built-in role and cannot be modified."); } status = checkOkayToGrantPrivilegesToRole(roleName, privilegesToAdd); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); BSONObj roleDoc; status = authzManager->getRoleDescription(opCtx, @@ -1791,17 +1675,13 @@ public: PrivilegeFormat::kShowSeparate, AuthenticationRestrictionsFormat::kOmit, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); PrivilegeVector privileges; status = auth::parseAndValidatePrivilegeArray(BSONArray(roleDoc["privileges"].Obj()), &privileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); for (PrivilegeVector::iterator it = privilegesToAdd.begin(); it != privilegesToAdd.end(); ++it) { @@ -1812,18 +1692,12 @@ public: mutablebson::Document updateObj; mutablebson::Element setElement = updateObj.makeElementObject("$set"); status = updateObj.root().pushBack(setElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); mutablebson::Element privilegesElement = updateObj.makeElementArray("privileges"); status = setElement.pushBack(privilegesElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); status = authzManager->getBSONForPrivileges(privileges, privilegesElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); BSONObjBuilder updateBSONBuilder; updateObj.writeTo(&updateBSONBuilder); @@ -1833,7 +1707,8 @@ public: status = updateRoleDocument(opCtx, roleName, updateBSONBuilder.done()); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdGrantPrivilegesToRole; @@ -1872,25 +1747,19 @@ public: PrivilegeVector privilegesToRemove; Status status = auth::parseAndValidateRolePrivilegeManipulationCommands( cmdObj, "revokePrivilegesFromRole", dbname, &roleName, &privilegesToRemove); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (RoleGraph::isBuiltinRole(roleName)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidRoleModification, - str::stream() << roleName.getFullName() - << " is a built-in role and cannot be modified.")); + uasserted(ErrorCodes::InvalidRoleModification, + str::stream() << roleName.getFullName() + << " is a built-in role and cannot be modified."); } BSONObj roleDoc; @@ -1899,16 +1768,12 @@ public: PrivilegeFormat::kShowSeparate, AuthenticationRestrictionsFormat::kOmit, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); PrivilegeVector privileges; status = auth::parseAndValidatePrivilegeArray(BSONArray(roleDoc["privileges"].Obj()), &privileges); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); for (PrivilegeVector::iterator itToRm = privilegesToRemove.begin(); itToRm != privilegesToRemove.end(); @@ -1929,18 +1794,12 @@ public: mutablebson::Document updateObj; mutablebson::Element setElement = updateObj.makeElementObject("$set"); status = updateObj.root().pushBack(setElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); mutablebson::Element privilegesElement = updateObj.makeElementArray("privileges"); status = setElement.pushBack(privilegesElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); status = authzManager->getBSONForPrivileges(privileges, privilegesElement); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); audit::logRevokePrivilegesFromRole(Client::getCurrent(), roleName, privilegesToRemove); @@ -1949,7 +1808,8 @@ public: status = updateRoleDocument(opCtx, roleName, updateBSONBuilder.done()); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdRevokePrivilegesFromRole; @@ -1988,17 +1848,13 @@ public: std::vector<RoleName> rolesToAdd; Status status = auth::parseRolePossessionManipulationCommands( cmdObj, "grantRolesToRole", dbname, &roleNameString, &rolesToAdd); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); RoleName roleName(roleNameString, dbname); if (RoleGraph::isBuiltinRole(roleName)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidRoleModification, - str::stream() << roleName.getFullName() - << " is a built-in role and cannot be modified.")); + uasserted(ErrorCodes::InvalidRoleModification, + str::stream() << roleName.getFullName() + << " is a built-in role and cannot be modified."); } ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); @@ -2006,30 +1862,22 @@ public: AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Role existence has to be checked after acquiring the update lock BSONObj roleDoc; status = authzManager->getRoleDescription(opCtx, roleName, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Check for cycles status = checkOkayToGrantRolesToRole(opCtx, roleName, rolesToAdd, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Add new roles to existing roles std::vector<RoleName> directRoles; status = auth::parseRoleNamesFromBSONArray( BSONArray(roleDoc["roles"].Obj()), roleName.getDB(), &directRoles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); for (vector<RoleName>::iterator it = rolesToAdd.begin(); it != rolesToAdd.end(); ++it) { const RoleName& roleToAdd = *it; if (!sequenceContains(directRoles, roleToAdd)) // Don't double-add role @@ -2042,7 +1890,8 @@ public: opCtx, roleName, BSON("$set" << BSON("roles" << rolesVectorToBSONArray(directRoles)))); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdGrantRolesToRole; @@ -2081,40 +1930,30 @@ public: std::vector<RoleName> rolesToRemove; Status status = auth::parseRolePossessionManipulationCommands( cmdObj, "revokeRolesFromRole", dbname, &roleNameString, &rolesToRemove); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); RoleName roleName(roleNameString, dbname); if (RoleGraph::isBuiltinRole(roleName)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidRoleModification, - str::stream() << roleName.getFullName() - << " is a built-in role and cannot be modified.")); + uasserted(ErrorCodes::InvalidRoleModification, + str::stream() << roleName.getFullName() + << " is a built-in role and cannot be modified."); } BSONObj roleDoc; status = authzManager->getRoleDescription(opCtx, roleName, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); std::vector<RoleName> roles; status = auth::parseRoleNamesFromBSONArray( BSONArray(roleDoc["roles"].Obj()), roleName.getDB(), &roles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); for (vector<RoleName>::const_iterator it = rolesToRemove.begin(); it != rolesToRemove.end(); ++it) { @@ -2130,7 +1969,8 @@ public: opCtx, roleName, BSON("$set" << BSON("roles" << rolesVectorToBSONArray(roles)))); // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdRevokeRolesFromRole; @@ -2170,32 +2010,24 @@ public: BSONObjBuilder& result) { RoleName roleName; Status status = auth::parseDropRoleCommand(cmdObj, dbname, &roleName); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (RoleGraph::isBuiltinRole(roleName)) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::InvalidRoleModification, - str::stream() << roleName.getFullName() - << " is a built-in role and cannot be modified.")); + uasserted(ErrorCodes::InvalidRoleModification, + str::stream() << roleName.getFullName() + << " is a built-in role and cannot be modified."); } BSONObj roleDoc; status = authzManager->getRoleDescription(opCtx, roleName, &roleDoc); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Remove this role from all users long long nMatched; @@ -2216,11 +2048,10 @@ public: // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); if (!status.isOK()) { - return CommandHelpers::appendCommandStatus( - result, - useDefaultCode(status, ErrorCodes::UserModificationFailed) - .withContext(str::stream() << "Failed to remove role " << roleName.getFullName() - << " from all users")); + uassertStatusOK(useDefaultCode(status, ErrorCodes::UserModificationFailed) + .withContext(str::stream() << "Failed to remove role " + << roleName.getFullName() + << " from all users")); } // Remove this role from all other roles @@ -2241,8 +2072,7 @@ public: // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); if (!status.isOK()) { - return CommandHelpers::appendCommandStatus( - result, + uassertStatusOK( useDefaultCode(status, ErrorCodes::RoleModificationFailed) .withContext( str::stream() << "Removed role " << roleName.getFullName() @@ -2260,20 +2090,16 @@ public: // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); if (!status.isOK()) { - return CommandHelpers::appendCommandStatus( - result, - status.withContext( - str::stream() << "Removed role " << roleName.getFullName() - << " from all users and roles but failed to actually delete" - " the role itself")); + uassertStatusOK(status.withContext( + str::stream() << "Removed role " << roleName.getFullName() + << " from all users and roles but failed to actually delete" + " the role itself")); } dassert(nMatched == 0 || nMatched == 1); if (nMatched == 0) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::RoleNotFound, - str::stream() << "Role '" << roleName.getFullName() << "' not found")); + uasserted(ErrorCodes::RoleNotFound, + str::stream() << "Role '" << roleName.getFullName() << "' not found"); } return true; @@ -2316,18 +2142,14 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = auth::parseDropAllRolesFromDatabaseCommand(cmdObj, dbname); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); stdx::lock_guard<stdx::mutex> lk(getAuthzDataMutex(serviceContext)); AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // Remove these roles from all users long long nMatched; @@ -2343,11 +2165,10 @@ public: // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); if (!status.isOK()) { - return CommandHelpers::appendCommandStatus( - result, - useDefaultCode(status, ErrorCodes::UserModificationFailed) - .withContext(str::stream() << "Failed to remove roles from \"" << dbname - << "\" db from all users")); + uassertStatusOK(useDefaultCode(status, ErrorCodes::UserModificationFailed) + .withContext(str::stream() << "Failed to remove roles from \"" + << dbname + << "\" db from all users")); } // Remove these roles from all other roles @@ -2365,11 +2186,10 @@ public: // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); if (!status.isOK()) { - return CommandHelpers::appendCommandStatus( - result, - useDefaultCode(status, ErrorCodes::RoleModificationFailed) - .withContext(str::stream() << "Failed to remove roles from \"" << dbname - << "\" db from all roles")); + uassertStatusOK(useDefaultCode(status, ErrorCodes::RoleModificationFailed) + .withContext(str::stream() << "Failed to remove roles from \"" + << dbname + << "\" db from all roles")); } audit::logDropAllRolesFromDatabase(Client::getCurrent(), dbname); @@ -2379,13 +2199,11 @@ public: // Must invalidate even on bad status - what if the write succeeded but the GLE failed? authzManager->invalidateUserCache(); if (!status.isOK()) { - return CommandHelpers::appendCommandStatus( - result, - status.withContext( - str::stream() << "Removed roles from \"" << dbname - << "\" db " - " from all users and roles but failed to actually delete" - " those roles themselves")); + uassertStatusOK(status.withContext( + str::stream() << "Removed roles from \"" << dbname + << "\" db " + " from all users and roles but failed to actually delete" + " those roles themselves")); } result.append("n", nMatched); @@ -2446,14 +2264,10 @@ public: BSONObjBuilder& result) { auth::RolesInfoArgs args; Status status = auth::parseRolesInfoCommand(cmdObj, dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); status = requireReadableAuthSchema26Upgrade(opCtx, getGlobalAuthorizationManager()); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.allForDB) { std::vector<BSONObj> rolesDocs; @@ -2464,15 +2278,11 @@ public: args.authenticationRestrictionsFormat, args.showBuiltinRoles, &rolesDocs); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.privilegeFormat == PrivilegeFormat::kShowAsUserFragment) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "Cannot get user fragment for all roles in a database")); + uasserted(ErrorCodes::IllegalOperation, + "Cannot get user fragment for all roles in a database"); } BSONArrayBuilder rolesArrayBuilder; for (size_t i = 0; i < rolesDocs.size(); ++i) { @@ -2487,9 +2297,7 @@ public: args.privilegeFormat, args.authenticationRestrictionsFormat, &roleDetails); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.privilegeFormat == PrivilegeFormat::kShowAsUserFragment) { result.append("userFragment", roleDetails); @@ -2940,16 +2748,12 @@ public: BSONObjBuilder& result) { auth::MergeAuthzCollectionsArgs args; Status status = auth::parseMergeAuthzCollectionsCommand(cmdObj, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (args.usersCollName.empty() && args.rolesCollName.empty()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::BadValue, - "Must provide at least one of \"tempUsersCollection\" and " - "\"tempRolescollection\"")); + uasserted(ErrorCodes::BadValue, + "Must provide at least one of \"tempUsersCollection\" and " + "\"tempRolescollection\""); } ServiceContext* serviceContext = opCtx->getClient()->getServiceContext(); @@ -2957,24 +2761,18 @@ public: AuthorizationManager* authzManager = AuthorizationManager::get(serviceContext); status = requireWritableAuthSchema28SCRAM(opCtx, authzManager); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (!args.usersCollName.empty()) { Status status = processUsers(opCtx, authzManager, args.usersCollName, args.db, args.drop); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } if (!args.rolesCollName.empty()) { Status status = processRoles(opCtx, authzManager, args.rolesCollName, args.db, args.drop); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); } return true; diff --git a/src/mongo/db/commands/validate.cpp b/src/mongo/db/commands/validate.cpp index c98c02d629d..4ca9fe21135 100644 --- a/src/mongo/db/commands/validate.cpp +++ b/src/mongo/db/commands/validate.cpp @@ -114,10 +114,8 @@ public: } if (!nss.isNormal() && full) { - CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::CommandFailed, "Can only run full validate on a regular collection"}); - return false; + uasserted(ErrorCodes::CommandFailed, + "Can only run full validate on a regular collection"); } if (!serverGlobalParams.quiet.load()) { @@ -129,13 +127,10 @@ public: Collection* collection = ctx.getDb() ? ctx.getDb()->getCollection(opCtx, nss) : NULL; if (!collection) { if (ctx.getDb() && ctx.getDb()->getViewCatalog()->lookup(opCtx, nss.ns())) { - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::CommandNotSupportedOnView, "Cannot validate a view"}); + uasserted(ErrorCodes::CommandNotSupportedOnView, "Cannot validate a view"); } - CommandHelpers::appendCommandStatus(result, - {ErrorCodes::NamespaceNotFound, "ns not found"}); - return false; + uasserted(ErrorCodes::NamespaceNotFound, "ns not found"); } // Omit background validation logic until it is fully implemented and vetted. @@ -151,18 +146,15 @@ public: } if (!isInRecordIdOrder && background) { - appendCommandStatus(result, - {ErrorCodes::CommandFailed, - "This storage engine does not support the background option, use " - "background:false"}); + uasserted(ErrorCodes::CommandFailed, + "This storage engine does not support the background option, use " + "background:false"); return false; } if (full && background) { - appendCommandStatus(result, - {ErrorCodes::CommandFailed, - "A full validate cannot run in the background, use full:false"}); - return false; + uasserted(ErrorCodes::CommandFailed, + "A full validate cannot run in the background, use full:false"); } */ diff --git a/src/mongo/db/exec/stagedebug_cmd.cpp b/src/mongo/db/exec/stagedebug_cmd.cpp index c6056f5f3a4..a7e0dac8a2d 100644 --- a/src/mongo/db/exec/stagedebug_cmd.cpp +++ b/src/mongo/db/exec/stagedebug_cmd.cpp @@ -210,10 +210,8 @@ public: << PlanExecutor::statestr(state) << ", stats: " << redact(Explain::getWinningPlanStats(exec.get())); - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(obj).withContext( - "Executor error during StageDebug command")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(obj).withContext( + "Executor error during StageDebug command")); } return true; diff --git a/src/mongo/db/free_mon/free_mon_commands.cpp b/src/mongo/db/free_mon/free_mon_commands.cpp index 459559cda38..5f8792fec49 100644 --- a/src/mongo/db/free_mon/free_mon_commands.cpp +++ b/src/mongo/db/free_mon/free_mon_commands.cpp @@ -153,11 +153,11 @@ public: if (optStatus) { // Completed within timeout. - return CommandHelpers::appendCommandStatus(result, *optStatus); + uassertStatusOK(*optStatus); } else { // Pending operation. - return CommandHelpers::appendCommandStatus(result, Status::OK()); } + return true; } } setFreeMonitoringCmd; diff --git a/src/mongo/db/free_mon/free_mon_mongod.cpp b/src/mongo/db/free_mon/free_mon_mongod.cpp index d90f0c37182..17d9b09f559 100644 --- a/src/mongo/db/free_mon/free_mon_mongod.cpp +++ b/src/mongo/db/free_mon/free_mon_mongod.cpp @@ -107,8 +107,7 @@ public: .then([](std::vector<uint8_t> blob) { if (blob.empty()) { - uassertStatusOK( - Status(ErrorCodes::FreeMonHttpTemporaryFailure, "Empty response received")); + uasserted(ErrorCodes::FreeMonHttpTemporaryFailure, "Empty response received"); } ConstDataRange cdr(reinterpret_cast<char*>(blob.data()), blob.size()); @@ -133,8 +132,7 @@ public: .then([](std::vector<uint8_t> blob) { if (blob.empty()) { - uassertStatusOK( - Status(ErrorCodes::FreeMonHttpTemporaryFailure, "Empty response received")); + uasserted(ErrorCodes::FreeMonHttpTemporaryFailure, "Empty response received"); } ConstDataRange cdr(reinterpret_cast<char*>(blob.data()), blob.size()); diff --git a/src/mongo/db/repl/repl_set_commands.cpp b/src/mongo/db/repl/repl_set_commands.cpp index a6a97ceaa48..ded7149946a 100644 --- a/src/mongo/db/repl/repl_set_commands.cpp +++ b/src/mongo/db/repl/repl_set_commands.cpp @@ -107,44 +107,39 @@ public: if (cmdObj.hasElement("waitForMemberState")) { long long stateVal; auto status = bsonExtractIntegerField(cmdObj, "waitForMemberState", &stateVal); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); const auto swMemberState = MemberState::create(stateVal); - if (!swMemberState.isOK()) { - return CommandHelpers::appendCommandStatus(result, swMemberState.getStatus()); - } + uassertStatusOK(swMemberState.getStatus()); const auto expectedState = swMemberState.getValue(); long long timeoutMillis; status = bsonExtractIntegerField(cmdObj, "timeoutMillis", &timeoutMillis); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); Milliseconds timeout(timeoutMillis); log() << "replSetTest: waiting " << timeout << " for member state to become " << expectedState; status = replCoord->waitForMemberState(expectedState, timeout); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } else if (cmdObj.hasElement("waitForDrainFinish")) { long long timeoutMillis; auto status = bsonExtractIntegerField(cmdObj, "waitForDrainFinish", &timeoutMillis); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); Milliseconds timeout(timeoutMillis); log() << "replSetTest: waiting " << timeout << " for applier buffer to finish draining"; status = replCoord->waitForDrainFinish(timeout); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } Status status = replCoord->checkReplEnabledForCommand(&result); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } }; @@ -168,11 +163,10 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); result.append("rbid", ReplicationProcess::get(opCtx)->getRollbackID()); - return CommandHelpers::appendCommandStatus(result, Status::OK()); + return true; } } cmdReplSetRBID; @@ -189,8 +183,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); ReplicationCoordinator::get(opCtx)->processReplSetGetConfig(&result); return true; @@ -312,10 +305,8 @@ public: std::string replSetString = ReplicationCoordinator::get(opCtx)->getSettings().getReplSetString(); if (replSetString.empty()) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::NoReplicationEnabled, - "This node was not started with the replSet option")); + uasserted(ErrorCodes::NoReplicationEnabled, + "This node was not started with the replSet option"); } if (configObj.isEmpty()) { @@ -359,7 +350,8 @@ public: Status status = ReplicationCoordinator::get(opCtx)->processReplSetInitiate(opCtx, configObj, &result); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } private: @@ -381,9 +373,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); if (cmdObj["replSetReconfig"].type() != Object) { result.append("errmsg", "no configuration specified"); @@ -411,7 +401,8 @@ public: } wuow.commit(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } private: @@ -438,12 +429,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); int secs = (int)cmdObj.firstElement().numberInt(); - return CommandHelpers::appendCommandStatus( - result, ReplicationCoordinator::get(opCtx)->processReplSetFreeze(secs, &result)); + uassertStatusOK(ReplicationCoordinator::get(opCtx)->processReplSetFreeze(secs, &result)); + return true; } private: @@ -468,8 +458,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); const bool force = cmdObj["force"].trueValue(); @@ -478,7 +467,7 @@ public: stepDownForSecs = 60; } else if (stepDownForSecs < 0) { status = Status(ErrorCodes::BadValue, "stepdown period must be a positive integer"); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } long long secondaryCatchUpPeriodSecs; @@ -492,26 +481,27 @@ public: secondaryCatchUpPeriodSecs = 10; } } else if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } if (secondaryCatchUpPeriodSecs < 0) { status = Status(ErrorCodes::BadValue, "secondaryCatchUpPeriodSecs period must be a positive or absent"); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } if (stepDownForSecs < secondaryCatchUpPeriodSecs) { status = Status(ErrorCodes::BadValue, "stepdown period must be longer than secondaryCatchUpPeriodSecs"); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } log() << "Attempting to step down in response to replSetStepDown command"; status = ReplicationCoordinator::get(opCtx)->stepDown( opCtx, force, Seconds(secondaryCatchUpPeriodSecs), Seconds(stepDownForSecs)); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } private: @@ -532,13 +522,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); - return CommandHelpers::appendCommandStatus( - result, - ReplicationCoordinator::get(opCtx)->setMaintenanceMode( - cmdObj["replSetMaintenance"].trueValue())); + uassertStatusOK(ReplicationCoordinator::get(opCtx)->setMaintenanceMode( + cmdObj["replSetMaintenance"].trueValue())); + return true; } private: @@ -560,18 +548,15 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); HostAndPort targetHostAndPort; status = targetHostAndPort.initialize(cmdObj["replSetSyncFrom"].valuestrsafe()); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); - return CommandHelpers::appendCommandStatus( - result, - ReplicationCoordinator::get(opCtx)->processReplSetSyncFrom( - opCtx, targetHostAndPort, &result)); + uassertStatusOK(ReplicationCoordinator::get(opCtx)->processReplSetSyncFrom( + opCtx, targetHostAndPort, &result)); + return true; } private: @@ -590,8 +575,7 @@ public: auto replCoord = repl::ReplicationCoordinator::get(opCtx->getClient()->getServiceContext()); Status status = replCoord->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); // accept and ignore handshakes sent from old (3.0-series) nodes without erroring to // enable mixed-version operation, since we no longer use the handshakes @@ -623,8 +607,9 @@ public: return CommandHelpers::appendCommandStatusNoThrow(result, status); } else { // Parsing error from UpdatePositionArgs. - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } + return true; } } cmdReplSetUpdatePosition; @@ -685,7 +670,7 @@ public: checks many things that are pre-initialization. */ if (!ReplicationCoordinator::get(opCtx)->getSettings().usingReplSets()) { status = Status(ErrorCodes::NoReplicationEnabled, "not running with --replSet"); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } // Process heartbeat based on the version of request. The missing fields in mismatched @@ -702,7 +687,8 @@ public: LOG_FOR_HEARTBEATS(2) << "Processed heartbeat from " << cmdObj.getStringField("from") << " and generated response, " << response; - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } // else: fall through to old heartbeat protocol as it is likely that // a new node just joined the set @@ -710,9 +696,7 @@ public: ReplSetHeartbeatArgs args; status = args.initialize(cmdObj); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); // ugh. if (args.getCheckEmpty()) { @@ -726,7 +710,8 @@ public: LOG_FOR_HEARTBEATS(2) << "Processed heartbeat from " << cmdObj.getStringField("from") << " and generated response, " << response; - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdReplSetHeartbeat; @@ -742,8 +727,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); ReplicationCoordinator::ReplSetFreshArgs parsedArgs; parsedArgs.id = cmdObj["id"].Int(); @@ -759,7 +743,8 @@ public: parsedArgs.opTime = Timestamp(cmdObj["opTime"].Date()); status = ReplicationCoordinator::get(opCtx)->processReplSetFresh(parsedArgs, &result); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdReplSetFresh; @@ -776,8 +761,7 @@ private: else LOG(2) << "received elect msg " << cmdObj.toString(); Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); ReplicationCoordinator::ReplSetElectArgs parsedArgs; parsedArgs.set = cmdObj["set"].String(); @@ -792,7 +776,8 @@ private: parsedArgs.round = cmdObj["round"].OID(); status = ReplicationCoordinator::get(opCtx)->processReplSetElect(parsedArgs, &result); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } } cmdReplSetElect; @@ -805,8 +790,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); log() << "Received replSetStepUp request"; @@ -816,7 +800,8 @@ public: log() << "replSetStepUp request failed" << causedBy(status); } - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } private: @@ -840,15 +825,15 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) override { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); log() << "Received replSetAbortPrimaryCatchUp request"; status = ReplicationCoordinator::get(opCtx)->abortCatchupIfNeeded(); if (!status.isOK()) { log() << "replSetAbortPrimaryCatchUp request failed" << causedBy(status); } - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } private: diff --git a/src/mongo/db/repl/repl_set_get_status_cmd.cpp b/src/mongo/db/repl/repl_set_get_status_cmd.cpp index fb6e7fd7006..75b28031c27 100644 --- a/src/mongo/db/repl/repl_set_get_status_cmd.cpp +++ b/src/mongo/db/repl/repl_set_get_status_cmd.cpp @@ -51,15 +51,12 @@ public: LastError::get(opCtx->getClient()).disable(); Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); bool includeInitialSync = false; Status initialSyncStatus = bsonExtractBooleanFieldWithDefault(cmdObj, "initialSync", false, &includeInitialSync); - if (!initialSyncStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, initialSyncStatus); - } + uassertStatusOK(initialSyncStatus); auto responseStyle = ReplicationCoordinator::ReplSetGetStatusResponseStyle::kBasic; if (includeInitialSync) { @@ -67,7 +64,8 @@ public: } status = ReplicationCoordinator::get(opCtx)->processReplSetGetStatus(&result, responseStyle); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } private: diff --git a/src/mongo/db/repl/repl_set_request_votes.cpp b/src/mongo/db/repl/repl_set_request_votes.cpp index 7f7682831ef..6a62caad7ee 100644 --- a/src/mongo/db/repl/repl_set_request_votes.cpp +++ b/src/mongo/db/repl/repl_set_request_votes.cpp @@ -52,15 +52,11 @@ private: const BSONObj& cmdObj, BSONObjBuilder& result) final { Status status = ReplicationCoordinator::get(opCtx)->checkReplEnabledForCommand(&result); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ReplSetRequestVotesArgs parsedArgs; status = parsedArgs.initialize(cmdObj); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); ReplSetRequestVotesResponse response; status = ReplicationCoordinator::get(opCtx)->processReplSetRequestVotes( diff --git a/src/mongo/db/repl/replication_info.cpp b/src/mongo/db/repl/replication_info.cpp index bed3b9aeca2..0b4ea7df501 100644 --- a/src/mongo/db/repl/replication_info.cpp +++ b/src/mongo/db/repl/replication_info.cpp @@ -255,18 +255,13 @@ public: BSONElement element = cmdObj[kMetadataDocumentName]; if (!element.eoo()) { if (seenIsMaster) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::ClientMetadataCannotBeMutated, - "The client metadata document may only be sent in the first isMaster")); + uasserted(ErrorCodes::ClientMetadataCannotBeMutated, + "The client metadata document may only be sent in the first isMaster"); } auto swParseClientMetadata = ClientMetadata::parse(element); - if (!swParseClientMetadata.getStatus().isOK()) { - return CommandHelpers::appendCommandStatus(result, - swParseClientMetadata.getStatus()); - } + uassertStatusOK(swParseClientMetadata.getStatus()); invariant(swParseClientMetadata.getValue()); diff --git a/src/mongo/db/s/check_sharding_index_command.cpp b/src/mongo/db/s/check_sharding_index_command.cpp index f87b527ec28..804cf285001 100644 --- a/src/mongo/db/s/check_sharding_index_command.cpp +++ b/src/mongo/db/s/check_sharding_index_command.cpp @@ -200,10 +200,8 @@ public: } if (PlanExecutor::DEAD == state || PlanExecutor::FAILURE == state) { - return CommandHelpers::appendCommandStatus( - result, - WorkingSetCommon::getMemberObjectStatus(currKey).withContext( - "Executor error while checking sharding index")); + uassertStatusOK(WorkingSetCommon::getMemberObjectStatus(currKey).withContext( + "Executor error while checking sharding index")); } return true; diff --git a/src/mongo/db/s/config/configsvr_add_shard_command.cpp b/src/mongo/db/s/config/configsvr_add_shard_command.cpp index 0b8b39bab93..75fcba534a5 100644 --- a/src/mongo/db/s/config/configsvr_add_shard_command.cpp +++ b/src/mongo/db/s/config/configsvr_add_shard_command.cpp @@ -92,10 +92,8 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) override { if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "_configsvrAddShard can only be run on config servers")); + uasserted(ErrorCodes::IllegalOperation, + "_configsvrAddShard can only be run on config servers"); } // Do not allow adding shards while a featureCompatibilityVersion upgrade or downgrade is in @@ -104,18 +102,14 @@ public: Lock::SharedLock lk(opCtx->lockState(), FeatureCompatibilityVersion::fcvLock); auto swParsedRequest = AddShardRequest::parseFromConfigCommand(cmdObj); - if (!swParsedRequest.isOK()) { - return CommandHelpers::appendCommandStatus(result, swParsedRequest.getStatus()); - } + uassertStatusOK(swParsedRequest.getStatus()); auto parsedRequest = std::move(swParsedRequest.getValue()); auto replCoord = repl::ReplicationCoordinator::get(opCtx); auto rsConfig = replCoord->getConfig(); auto validationStatus = parsedRequest.validate(rsConfig.isLocalHostAllowed()); - if (!validationStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, validationStatus); - } + uassertStatusOK(validationStatus); uassert(ErrorCodes::InvalidOptions, str::stream() << "addShard must be called with majority writeConcern, got " @@ -137,7 +131,7 @@ public: if (!addShardResult.isOK()) { log() << "addShard request '" << parsedRequest << "'" << "failed" << causedBy(addShardResult.getStatus()); - return CommandHelpers::appendCommandStatus(result, addShardResult.getStatus()); + uassertStatusOK(addShardResult.getStatus()); } result << "shardAdded" << addShardResult.getValue(); diff --git a/src/mongo/db/s/config/configsvr_commit_chunk_migration_command.cpp b/src/mongo/db/s/config/configsvr_commit_chunk_migration_command.cpp index a3881e2626b..c80f4bb02a3 100644 --- a/src/mongo/db/s/config/configsvr_commit_chunk_migration_command.cpp +++ b/src/mongo/db/s/config/configsvr_commit_chunk_migration_command.cpp @@ -136,9 +136,7 @@ public: commitRequest.getFromShard(), commitRequest.getToShard(), commitRequest.getValidAfter()); - if (!response.isOK()) { - return CommandHelpers::appendCommandStatus(result, response.getStatus()); - } + uassertStatusOK(response.getStatus()); result.appendElements(response.getValue()); return true; } diff --git a/src/mongo/db/s/config/configsvr_commit_move_primary_command.cpp b/src/mongo/db/s/config/configsvr_commit_move_primary_command.cpp index ecb74cbfa48..a01327befca 100644 --- a/src/mongo/db/s/config/configsvr_commit_move_primary_command.cpp +++ b/src/mongo/db/s/config/configsvr_commit_move_primary_command.cpp @@ -75,10 +75,8 @@ public: BSONObjBuilder& result) override { if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "_configsvrCommitMovePrimary can only be run on config servers")); + uasserted(ErrorCodes::IllegalOperation, + "_configsvrCommitMovePrimary can only be run on config servers"); } uassert(ErrorCodes::InvalidOptions, diff --git a/src/mongo/db/s/config/configsvr_drop_database_command.cpp b/src/mongo/db/s/config/configsvr_drop_database_command.cpp index 7d4cfcbd5a4..9e8f2d092c7 100644 --- a/src/mongo/db/s/config/configsvr_drop_database_command.cpp +++ b/src/mongo/db/s/config/configsvr_drop_database_command.cpp @@ -89,10 +89,8 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "_configsvrDropDatabase can only be run on config servers")); + uasserted(ErrorCodes::IllegalOperation, + "_configsvrDropDatabase can only be run on config servers"); } const std::string dbname = parseNs("", cmdObj); diff --git a/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp b/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp index ba51e302969..5401fd64a1e 100644 --- a/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp +++ b/src/mongo/db/s/config/configsvr_enable_sharding_command.cpp @@ -99,10 +99,8 @@ public: BSONObjBuilder& result) { if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "_configsvrEnableSharding can only be run on config servers")); + uasserted(ErrorCodes::IllegalOperation, + "_configsvrEnableSharding can only be run on config servers"); } const std::string dbname = parseNs("", cmdObj); @@ -113,10 +111,8 @@ public: NamespaceString::validDBName(dbname, NamespaceString::DollarInDbNameBehavior::Allow)); if (dbname == NamespaceString::kAdminDb || dbname == NamespaceString::kLocalDb) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidOptions, - str::stream() << "can't shard " + dbname + " database"}); + uasserted(ErrorCodes::InvalidOptions, + str::stream() << "can't shard " + dbname + " database"); } uassert(ErrorCodes::InvalidOptions, diff --git a/src/mongo/db/s/config/configsvr_merge_chunk_command.cpp b/src/mongo/db/s/config/configsvr_merge_chunk_command.cpp index 3de90801559..6e5853fd14e 100644 --- a/src/mongo/db/s/config/configsvr_merge_chunk_command.cpp +++ b/src/mongo/db/s/config/configsvr_merge_chunk_command.cpp @@ -117,10 +117,7 @@ public: parsedRequest.getShardName(), parsedRequest.getValidAfter()); - if (!mergeChunkResult.isOK()) { - return CommandHelpers::appendCommandStatus(result, mergeChunkResult); - } - + uassertStatusOK(mergeChunkResult); return true; } } configsvrMergeChunkCmd; diff --git a/src/mongo/db/s/config/configsvr_move_primary_command.cpp b/src/mongo/db/s/config/configsvr_move_primary_command.cpp index b8d4e39f108..f84d976283c 100644 --- a/src/mongo/db/s/config/configsvr_move_primary_command.cpp +++ b/src/mongo/db/s/config/configsvr_move_primary_command.cpp @@ -108,10 +108,8 @@ public: BSONObjBuilder& result) override { if (serverGlobalParams.clusterRole != ClusterRole::ConfigServer) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::IllegalOperation, - "_configsvrMovePrimary can only be run on config servers")); + uasserted(ErrorCodes::IllegalOperation, + "_configsvrMovePrimary can only be run on config servers"); } auto movePrimaryRequest = @@ -125,10 +123,8 @@ public: if (dbname == NamespaceString::kAdminDb || dbname == NamespaceString::kConfigDb || dbname == NamespaceString::kLocalDb) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidOptions, - str::stream() << "Can't move primary for " << dbname << " database"}); + uasserted(ErrorCodes::InvalidOptions, + str::stream() << "Can't move primary for " << dbname << " database"); } uassert(ErrorCodes::InvalidOptions, @@ -139,10 +135,8 @@ public: const std::string to = movePrimaryRequest.getTo().toString(); if (to.empty()) { - return CommandHelpers::appendCommandStatus( - result, - {ErrorCodes::InvalidOptions, - str::stream() << "you have to specify where you want to move it"}); + uasserted(ErrorCodes::InvalidOptions, + str::stream() << "you have to specify where you want to move it"); } auto const catalogClient = Grid::get(opCtx)->catalogClient(); @@ -249,8 +243,7 @@ public: if (!worked) { log() << "clone failed" << redact(cloneRes); - return CommandHelpers::appendCommandStatus( - result, {ErrorCodes::OperationFailed, str::stream() << "clone failed"}); + uasserted(ErrorCodes::OperationFailed, str::stream() << "clone failed"); } if (auto wcErrorElem = cloneRes["writeConcernError"]) { diff --git a/src/mongo/db/s/config/configsvr_remove_shard_command.cpp b/src/mongo/db/s/config/configsvr_remove_shard_command.cpp index 2ce5145b355..b77554f419d 100644 --- a/src/mongo/db/s/config/configsvr_remove_shard_command.cpp +++ b/src/mongo/db/s/config/configsvr_remove_shard_command.cpp @@ -109,8 +109,7 @@ public: std::string msg(str::stream() << "Could not drop shard '" << target << "' because it does not exist"); log() << msg; - return CommandHelpers::appendCommandStatus(result, - Status(ErrorCodes::ShardNotFound, msg)); + uasserted(ErrorCodes::ShardNotFound, msg); } const auto& shard = shardStatus.getValue(); @@ -156,9 +155,7 @@ public: boost::none, // return all nullptr, repl::ReadConcernLevel::kMajorityReadConcern); - if (!swChunks.isOK()) { - return CommandHelpers::appendCommandStatus(result, swChunks.getStatus()); - } + uassertStatusOK(swChunks.getStatus()); const auto& chunks = swChunks.getValue(); result.append("msg", "draining ongoing"); diff --git a/src/mongo/db/s/merge_chunks_command.cpp b/src/mongo/db/s/merge_chunks_command.cpp index 97ed3c87c14..a1fab846dc3 100644 --- a/src/mongo/db/s/merge_chunks_command.cpp +++ b/src/mongo/db/s/merge_chunks_command.cpp @@ -373,7 +373,8 @@ public: } auto mergeStatus = mergeChunks(opCtx, nss, minKey, maxKey, epoch); - return CommandHelpers::appendCommandStatus(result, mergeStatus); + uassertStatusOK(mergeStatus); + return true; } } mergeChunksCmd; diff --git a/src/mongo/db/s/migration_destination_manager_legacy_commands.cpp b/src/mongo/db/s/migration_destination_manager_legacy_commands.cpp index c2d70d4476a..4ff6789ec65 100644 --- a/src/mongo/db/s/migration_destination_manager_legacy_commands.cpp +++ b/src/mongo/db/s/migration_destination_manager_legacy_commands.cpp @@ -218,7 +218,7 @@ public: mdm->report(result, opCtx, false); if (!status.isOK()) { log() << status.reason(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } return true; } @@ -266,7 +266,7 @@ public: mdm->report(result, opCtx, false); if (!status.isOK()) { log() << status.reason(); - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } } else if (migrationSessionIdStatus == ErrorCodes::NoSuchKey) { mdm->abortWithoutSessionIdCheck(); diff --git a/src/mongo/db/s/move_chunk_command.cpp b/src/mongo/db/s/move_chunk_command.cpp index cb1fa99fc2c..80b31ba76c7 100644 --- a/src/mongo/db/s/move_chunk_command.cpp +++ b/src/mongo/db/s/move_chunk_command.cpp @@ -145,16 +145,6 @@ public: } else { status = scopedMigration.waitForCompletion(opCtx); } - - if (status == ErrorCodes::ChunkTooBig) { - // This code is for compatibility with pre-3.2 balancer, which does not recognize the - // ChunkTooBig error code and instead uses the "chunkTooBig" field in the response, - // and the 3.4 shard, which failed to set the ChunkTooBig status code. - // TODO: Remove after 3.6 is released. - result.appendBool("chunkTooBig", true); - return CommandHelpers::appendCommandStatus(result, status); - } - uassertStatusOK(status); if (moveChunkRequest.getWaitForDelete()) { diff --git a/src/mongo/db/s/split_chunk_command.cpp b/src/mongo/db/s/split_chunk_command.cpp index b69b33173e0..77b0cbacaf1 100644 --- a/src/mongo/db/s/split_chunk_command.cpp +++ b/src/mongo/db/s/split_chunk_command.cpp @@ -118,8 +118,7 @@ public: string shardName; auto parseShardNameStatus = bsonExtractStringField(cmdObj, "from", &shardName); - if (!parseShardNameStatus.isOK()) - return CommandHelpers::appendCommandStatus(result, parseShardNameStatus); + uassertStatusOK(parseShardNameStatus); log() << "received splitChunk request: " << redact(cmdObj); diff --git a/src/mongo/db/s/split_vector_command.cpp b/src/mongo/db/s/split_vector_command.cpp index a3f275f046e..207358a23dd 100644 --- a/src/mongo/db/s/split_vector_command.cpp +++ b/src/mongo/db/s/split_vector_command.cpp @@ -144,9 +144,7 @@ public: maxChunkObjects, maxChunkSize, maxChunkSizeBytes); - if (!statusWithSplitKeys.isOK()) { - return CommandHelpers::appendCommandStatus(result, statusWithSplitKeys.getStatus()); - } + uassertStatusOK(statusWithSplitKeys.getStatus()); result.append("splitKeys", statusWithSplitKeys.getValue()); return true; diff --git a/src/mongo/db/service_entry_point_mongod.cpp b/src/mongo/db/service_entry_point_mongod.cpp index 4e9cdb89d9c..4ba450faa74 100644 --- a/src/mongo/db/service_entry_point_mongod.cpp +++ b/src/mongo/db/service_entry_point_mongod.cpp @@ -110,7 +110,7 @@ public: void uassertCommandDoesNotSpecifyWriteConcern(const BSONObj& cmd) const override { if (commandSpecifiesWriteConcern(cmd)) { - uassertStatusOK({ErrorCodes::InvalidOptions, "Command does not support writeConcern"}); + uasserted(ErrorCodes::InvalidOptions, "Command does not support writeConcern"); } } diff --git a/src/mongo/rpc/reply_builder_interface.cpp b/src/mongo/rpc/reply_builder_interface.cpp index 461e3edc6a3..8a4460d7247 100644 --- a/src/mongo/rpc/reply_builder_interface.cpp +++ b/src/mongo/rpc/reply_builder_interface.cpp @@ -44,7 +44,7 @@ const char kCodeField[] = "code"; const char kCodeNameField[] = "codeName"; const char kErrorField[] = "errmsg"; -// similar to appendCommandStatus (duplicating logic here to avoid cyclic library +// similar to appendCommandStatusNoThrow (duplicating logic here to avoid cyclic library // dependency) BSONObj augmentReplyWithStatus(const Status& status, BSONObj reply) { auto okField = reply.getField(kOKField); diff --git a/src/mongo/s/commands/cluster_aggregate.cpp b/src/mongo/s/commands/cluster_aggregate.cpp index a5cc67049b7..46badd74eb5 100644 --- a/src/mongo/s/commands/cluster_aggregate.cpp +++ b/src/mongo/s/commands/cluster_aggregate.cpp @@ -612,7 +612,7 @@ BSONObj establishMergingMongosCursor(OperationContext* opCtx, responseBuilder.done(clusterCursorId, requestedNss.ns()); - CommandHelpers::appendCommandStatus(cursorResponse, Status::OK()); + CommandHelpers::appendSimpleCommandStatus(cursorResponse, true); return cursorResponse.obj(); } diff --git a/src/mongo/s/commands/cluster_commands_helpers.cpp b/src/mongo/s/commands/cluster_commands_helpers.cpp index 777cbc141b8..d420afcdfa1 100644 --- a/src/mongo/s/commands/cluster_commands_helpers.cpp +++ b/src/mongo/s/commands/cluster_commands_helpers.cpp @@ -495,7 +495,8 @@ bool appendEmptyResultSet(OperationContext* opCtx, return true; } - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); + return true; } StatusWith<CachedDatabaseInfo> createShardDatabase(OperationContext* opCtx, StringData dbName) { diff --git a/src/mongo/s/commands/cluster_count_cmd.cpp b/src/mongo/s/commands/cluster_count_cmd.cpp index ef0a753359a..f443c297905 100644 --- a/src/mongo/s/commands/cluster_count_cmd.cpp +++ b/src/mongo/s/commands/cluster_count_cmd.cpp @@ -110,7 +110,7 @@ public: if (status.isOK()) { collation = collationElement.Obj(); } else if (status != ErrorCodes::NoSuchKey) { - return CommandHelpers::appendCommandStatus(result, status); + uassertStatusOK(status); } if (cmdObj["limit"].isNumber()) { @@ -158,19 +158,13 @@ public: // Rewrite the count command as an aggregation. auto countRequest = CountRequest::parseFromBSON(nss, cmdObj, false); - if (!countRequest.isOK()) { - return CommandHelpers::appendCommandStatus(result, countRequest.getStatus()); - } + uassertStatusOK(countRequest.getStatus()); auto aggCmdOnView = countRequest.getValue().asAggregationCommand(); - if (!aggCmdOnView.isOK()) { - return CommandHelpers::appendCommandStatus(result, aggCmdOnView.getStatus()); - } + uassertStatusOK(aggCmdOnView.getStatus()); auto aggRequestOnView = AggregationRequest::parseFromBSON(nss, aggCmdOnView.getValue()); - if (!aggRequestOnView.isOK()) { - return CommandHelpers::appendCommandStatus(result, aggRequestOnView.getStatus()); - } + uassertStatusOK(aggRequestOnView.getStatus()); auto resolvedAggRequest = ex->asExpandedViewAggregation(aggRequestOnView.getValue()); auto resolvedAggCmd = resolvedAggRequest.serializeToCommandObj().toBson(); @@ -181,9 +175,7 @@ public: result.resetToEmpty(); ViewResponseFormatter formatter(aggResult); auto formatStatus = formatter.appendAsCountResponse(&result); - if (!formatStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, formatStatus); - } + uassertStatusOK(formatStatus); return true; } catch (const ExceptionFor<ErrorCodes::NamespaceNotFound>&) { @@ -210,8 +202,7 @@ public: shardSubTotal.doneFast(); // Add error context so that you can see on which shard failed as well as details // about that error. - return CommandHelpers::appendCommandStatus( - result, status.withContext(str::stream() << "failed on: " << response.shardId)); + uassertStatusOK(status.withContext(str::stream() << "failed on: " << response.shardId)); } shardSubTotal.doneFast(); diff --git a/src/mongo/s/commands/cluster_current_op.cpp b/src/mongo/s/commands/cluster_current_op.cpp index 9c9a1a08730..8d46da6d193 100644 --- a/src/mongo/s/commands/cluster_current_op.cpp +++ b/src/mongo/s/commands/cluster_current_op.cpp @@ -85,7 +85,7 @@ private: return status; } - CommandHelpers::appendCommandStatus(responseBuilder, Status::OK()); + CommandHelpers::appendSimpleCommandStatus(responseBuilder, true); return CursorResponse::parseFromBSON(responseBuilder.obj()); } diff --git a/src/mongo/s/commands/cluster_distinct_cmd.cpp b/src/mongo/s/commands/cluster_distinct_cmd.cpp index 944ab5befce..284e66398ed 100644 --- a/src/mongo/s/commands/cluster_distinct_cmd.cpp +++ b/src/mongo/s/commands/cluster_distinct_cmd.cpp @@ -183,19 +183,13 @@ public: } catch (const ExceptionFor<ErrorCodes::CommandOnShardedViewNotSupportedOnMongod>& ex) { auto parsedDistinct = ParsedDistinct::parse( opCtx, ex->getNamespace(), cmdObj, ExtensionsCallbackNoop(), true); - if (!parsedDistinct.isOK()) { - return CommandHelpers::appendCommandStatus(result, parsedDistinct.getStatus()); - } + uassertStatusOK(parsedDistinct.getStatus()); auto aggCmdOnView = parsedDistinct.getValue().asAggregationCommand(); - if (!aggCmdOnView.isOK()) { - return CommandHelpers::appendCommandStatus(result, aggCmdOnView.getStatus()); - } + uassertStatusOK(aggCmdOnView.getStatus()); auto aggRequestOnView = AggregationRequest::parseFromBSON(nss, aggCmdOnView.getValue()); - if (!aggRequestOnView.isOK()) { - return CommandHelpers::appendCommandStatus(result, aggRequestOnView.getStatus()); - } + uassertStatusOK(aggRequestOnView.getStatus()); auto resolvedAggRequest = ex->asExpandedViewAggregation(aggRequestOnView.getValue()); auto resolvedAggCmd = resolvedAggRequest.serializeToCommandObj().toBson(); @@ -205,9 +199,8 @@ public: ViewResponseFormatter formatter(aggResult); auto formatStatus = formatter.appendAsDistinctResponse(&result); - if (!formatStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, formatStatus); - } + uassertStatusOK(formatStatus); + return true; } diff --git a/src/mongo/s/commands/cluster_find_cmd.cpp b/src/mongo/s/commands/cluster_find_cmd.cpp index 50050ad9778..c5fbc7e684f 100644 --- a/src/mongo/s/commands/cluster_find_cmd.cpp +++ b/src/mongo/s/commands/cluster_find_cmd.cpp @@ -176,7 +176,7 @@ public: auto status = ClusterAggregate::runAggregate( opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, out); - CommandHelpers::appendCommandStatus(*out, status); + uassertStatusOK(status); return status; } } @@ -192,9 +192,7 @@ public: const bool isExplain = false; auto qr = QueryRequest::makeFromFindCommand(nss, cmdObj, isExplain); - if (!qr.isOK()) { - return CommandHelpers::appendCommandStatus(result, qr.getStatus()); - } + uassertStatusOK(qr.getStatus()); const boost::intrusive_ptr<ExpressionContext> expCtx; auto cq = CanonicalQuery::canonicalize(opCtx, @@ -202,9 +200,7 @@ public: expCtx, ExtensionsCallbackNoop(), MatchExpressionParser::kAllowAllSpecialFeatures); - if (!cq.isOK()) { - return CommandHelpers::appendCommandStatus(result, cq.getStatus()); - } + uassertStatusOK(cq.getStatus()); try { // Do the work to generate the first batch of results. This blocks waiting to get @@ -221,14 +217,10 @@ public: return true; } catch (const ExceptionFor<ErrorCodes::CommandOnShardedViewNotSupportedOnMongod>& ex) { auto aggCmdOnView = cq.getValue()->getQueryRequest().asAggregationCommand(); - if (!aggCmdOnView.isOK()) { - return CommandHelpers::appendCommandStatus(result, aggCmdOnView.getStatus()); - } + uassertStatusOK(aggCmdOnView.getStatus()); auto aggRequestOnView = AggregationRequest::parseFromBSON(nss, aggCmdOnView.getValue()); - if (!aggRequestOnView.isOK()) { - return CommandHelpers::appendCommandStatus(result, aggRequestOnView.getStatus()); - } + uassertStatusOK(aggRequestOnView.getStatus()); auto resolvedAggRequest = ex->asExpandedViewAggregation(aggRequestOnView.getValue()); auto resolvedAggCmd = resolvedAggRequest.serializeToCommandObj().toBson(); @@ -243,8 +235,8 @@ public: auto status = ClusterAggregate::runAggregate( opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, &result); - CommandHelpers::appendCommandStatus(result, status); - return status.isOK(); + uassertStatusOK(status); + return true; } } diff --git a/src/mongo/s/commands/cluster_getmore_cmd.cpp b/src/mongo/s/commands/cluster_getmore_cmd.cpp index 5455eb0f1ec..688cacd28ef 100644 --- a/src/mongo/s/commands/cluster_getmore_cmd.cpp +++ b/src/mongo/s/commands/cluster_getmore_cmd.cpp @@ -106,15 +106,11 @@ public: globalOpCounters.gotGetMore(); StatusWith<GetMoreRequest> parseStatus = GetMoreRequest::parseFromBSON(dbname, cmdObj); - if (!parseStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, parseStatus.getStatus()); - } + uassertStatusOK(parseStatus.getStatus()); const GetMoreRequest& request = parseStatus.getValue(); auto response = ClusterFind::runGetMore(opCtx, request); - if (!response.isOK()) { - return CommandHelpers::appendCommandStatus(result, response.getStatus()); - } + uassertStatusOK(response.getStatus()); response.getValue().addToBSON(CursorResponse::ResponseType::SubsequentResponse, &result); return true; diff --git a/src/mongo/s/commands/cluster_is_master_cmd.cpp b/src/mongo/s/commands/cluster_is_master_cmd.cpp index d94f6abb182..9b1220801cc 100644 --- a/src/mongo/s/commands/cluster_is_master_cmd.cpp +++ b/src/mongo/s/commands/cluster_is_master_cmd.cpp @@ -85,18 +85,12 @@ public: BSONElement element = cmdObj[kMetadataDocumentName]; if (!element.eoo()) { if (seenIsMaster) { - return CommandHelpers::appendCommandStatus( - result, - Status(ErrorCodes::ClientMetadataCannotBeMutated, - "The client metadata document may only be sent in the first isMaster")); + uasserted(ErrorCodes::ClientMetadataCannotBeMutated, + "The client metadata document may only be sent in the first isMaster"); } auto swParseClientMetadata = ClientMetadata::parse(element); - - if (!swParseClientMetadata.getStatus().isOK()) { - return CommandHelpers::appendCommandStatus(result, - swParseClientMetadata.getStatus()); - } + uassertStatusOK(swParseClientMetadata.getStatus()); invariant(swParseClientMetadata.getValue()); diff --git a/src/mongo/s/commands/cluster_kill_op.cpp b/src/mongo/s/commands/cluster_kill_op.cpp index 3e4b38d5bd8..232380d5dfc 100644 --- a/src/mongo/s/commands/cluster_kill_op.cpp +++ b/src/mongo/s/commands/cluster_kill_op.cpp @@ -99,9 +99,7 @@ private: // Will throw if shard id is not found auto shardStatus = Grid::get(opCtx)->shardRegistry()->getShard(opCtx, shardIdent); - if (!shardStatus.isOK()) { - return CommandHelpers::appendCommandStatus(result, shardStatus.getStatus()); - } + uassertStatusOK(shardStatus.getStatus()); auto shard = shardStatus.getValue(); int opId; diff --git a/src/mongo/s/commands/cluster_map_reduce_cmd.cpp b/src/mongo/s/commands/cluster_map_reduce_cmd.cpp index 3e01b229262..c98f8d53a52 100644 --- a/src/mongo/s/commands/cluster_map_reduce_cmd.cpp +++ b/src/mongo/s/commands/cluster_map_reduce_cmd.cpp @@ -500,9 +500,7 @@ public: // Take distributed lock to prevent split / migration. auto scopedDistLock = catalogClient->getDistLockManager()->lock( opCtx, outputCollNss.ns(), "mr-post-process", kNoDistLockTimeout); - if (!scopedDistLock.isOK()) { - return CommandHelpers::appendCommandStatus(result, scopedDistLock.getStatus()); - } + uassertStatusOK(scopedDistLock.getStatus()); BSONObj finalCmdObj = appendAllowImplicitCreate(finalCmd.obj(), true); mrCommandResults.clear(); diff --git a/src/mongo/s/commands/cluster_move_chunk_cmd.cpp b/src/mongo/s/commands/cluster_move_chunk_cmd.cpp index bbb6ca5caa2..d6b53ca5748 100644 --- a/src/mongo/s/commands/cluster_move_chunk_cmd.cpp +++ b/src/mongo/s/commands/cluster_move_chunk_cmd.cpp @@ -121,8 +121,7 @@ public: << toString << "' because that shard does not exist"); log() << msg; - return CommandHelpers::appendCommandStatus(result, - Status(ErrorCodes::ShardNotFound, msg)); + uasserted(ErrorCodes::ShardNotFound, msg); } const auto to = toStatus.getValue(); diff --git a/src/mongo/s/commands/cluster_pipeline_cmd.cpp b/src/mongo/s/commands/cluster_pipeline_cmd.cpp index bb4c6400ec5..576fbb3460f 100644 --- a/src/mongo/s/commands/cluster_pipeline_cmd.cpp +++ b/src/mongo/s/commands/cluster_pipeline_cmd.cpp @@ -80,8 +80,8 @@ public: const std::string& dbname, const BSONObj& cmdObj, BSONObjBuilder& result) override { - return CommandHelpers::appendCommandStatus( - result, _runAggCommand(opCtx, dbname, cmdObj, boost::none, &result)); + uassertStatusOK(_runAggCommand(opCtx, dbname, cmdObj, boost::none, &result)); + return true; } Status explain(OperationContext* opCtx, diff --git a/src/mongo/s/commands/cluster_set_free_monitoring.cpp b/src/mongo/s/commands/cluster_set_free_monitoring.cpp index 6a92763d81a..7f664a43aaa 100644 --- a/src/mongo/s/commands/cluster_set_free_monitoring.cpp +++ b/src/mongo/s/commands/cluster_set_free_monitoring.cpp @@ -64,7 +64,8 @@ public: const std::string& dbname, const BSONObj& cmdObj, BSONObjBuilder& result) final { - return CommandHelpers::appendCommandStatus(result, {ErrorCodes::CommandFailed, help()}); + uasserted(ErrorCodes::CommandFailed, help()); + return true; } } clusterSetFreeMonitoring; diff --git a/src/mongo/s/commands/cluster_user_management_commands.cpp b/src/mongo/s/commands/cluster_user_management_commands.cpp index 9d6bf19d73f..f899393c2f5 100644 --- a/src/mongo/s/commands/cluster_user_management_commands.cpp +++ b/src/mongo/s/commands/cluster_user_management_commands.cpp @@ -129,9 +129,8 @@ public: BSONObjBuilder& result) { auth::CreateOrUpdateUserArgs args; Status status = auth::parseCreateOrUpdateUserCommands(cmdObj, getName(), dbname, &args); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); + const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( opCtx, getName(), @@ -181,9 +180,8 @@ public: BSONObjBuilder& result) { UserName userName; Status status = auth::parseAndValidateDropUserCommand(cmdObj, dbname, &userName); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); + const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( opCtx, getName(), @@ -273,9 +271,8 @@ public: vector<RoleName> roles; Status status = auth::parseRolePossessionManipulationCommands( cmdObj, getName(), dbname, &userNameString, &roles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); + const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( opCtx, getName(), @@ -323,9 +320,8 @@ public: vector<RoleName> unusedRoles; Status status = auth::parseRolePossessionManipulationCommands( cmdObj, getName(), dbname, &userNameString, &unusedRoles); - if (!status.isOK()) { - return CommandHelpers::appendCommandStatus(result, status); - } + uassertStatusOK(status); + const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( opCtx, getName(), diff --git a/src/mongo/s/commands/cluster_validate_cmd.cpp b/src/mongo/s/commands/cluster_validate_cmd.cpp index e73ab7bdd78..505c191c2c0 100644 --- a/src/mongo/s/commands/cluster_validate_cmd.cpp +++ b/src/mongo/s/commands/cluster_validate_cmd.cpp @@ -128,7 +128,8 @@ public: if (firstFailedShardStatus.isOK()) output.appendBool("valid", isValid); - return CommandHelpers::appendCommandStatus(output, firstFailedShardStatus); + uassertStatusOK(firstFailedShardStatus); + return true; } } validateCmd; diff --git a/src/mongo/s/write_ops/batched_command_response.cpp b/src/mongo/s/write_ops/batched_command_response.cpp index 5931afc36be..d08496135bd 100644 --- a/src/mongo/s/write_ops/batched_command_response.cpp +++ b/src/mongo/s/write_ops/batched_command_response.cpp @@ -81,7 +81,7 @@ BSONObj BatchedCommandResponse::toBSON() const { BSONObjBuilder builder; invariant(_isStatusSet); - CommandHelpers::appendCommandStatus(builder, _status); + uassertStatusOK(_status); if (_isNModifiedSet) builder.appendNumber(nModified(), _nModified); diff --git a/src/mongo/s/write_ops/batched_command_response_test.cpp b/src/mongo/s/write_ops/batched_command_response_test.cpp index 8f37da45cb2..32dd9ad8e10 100644 --- a/src/mongo/s/write_ops/batched_command_response_test.cpp +++ b/src/mongo/s/write_ops/batched_command_response_test.cpp @@ -61,18 +61,21 @@ TEST(BatchedCommandResponse, Basic) { << BSON("a" << 1))); BSONObj origResponseObj = - BSON("ok" << 1.0 << BatchedCommandResponse::n(0) << "opTime" << mongo::Timestamp(1ULL) - << BatchedCommandResponse::writeErrors() - << writeErrorsArray - << BatchedCommandResponse::writeConcernError() - << writeConcernError); + BSON(BatchedCommandResponse::n(0) << "opTime" << mongo::Timestamp(1ULL) + << BatchedCommandResponse::writeErrors() + << writeErrorsArray + << BatchedCommandResponse::writeConcernError() + << writeConcernError + << "ok" + << 1.0); string errMsg; BatchedCommandResponse response; bool ok = response.parseBSON(origResponseObj, &errMsg); ASSERT_TRUE(ok); - BSONObj genResponseObj = response.toBSON(); + BSONObj genResponseObj = BSONObjBuilder(response.toBSON()).append("ok", 1.0).obj(); + ASSERT_EQUALS(0, genResponseObj.woCompare(origResponseObj)) << "\nparsed: " << genResponseObj // << "\noriginal: " << origResponseObj; |