summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2016-03-30 14:30:27 -0400
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2016-03-30 16:47:02 -0400
commit2a09ba86b4812c37ea167328dbf528bd1c245b4e (patch)
treeaf7b05f068d1a7c8eeb234c919d3d1758555bd70
parente47ce9f899d09eba1cbdb45cc433786f5510e41a (diff)
downloadmongo-2a09ba86b4812c37ea167328dbf528bd1c245b4e.tar.gz
SERVER-23435 Sharded count command should fail at invalid collection name
-rw-r--r--src/mongo/db/s/move_chunk_command.cpp2
-rw-r--r--src/mongo/s/commands/cluster_count_cmd.cpp4
-rw-r--r--src/mongo/s/commands/cluster_explain_cmd.cpp12
3 files changed, 11 insertions, 7 deletions
diff --git a/src/mongo/db/s/move_chunk_command.cpp b/src/mongo/db/s/move_chunk_command.cpp
index 2f1533ef5fc..48dc6285345 100644
--- a/src/mongo/db/s/move_chunk_command.cpp
+++ b/src/mongo/db/s/move_chunk_command.cpp
@@ -171,7 +171,7 @@ public:
std::string& errmsg,
BSONObjBuilder& result) override {
const NamespaceString nss = NamespaceString(parseNs(dbname, cmdObj));
- uassert(ErrorCodes::InvalidOptions, "need to specify a valid namespace", nss.isValid());
+ uassert(ErrorCodes::InvalidNamespace, "need to specify a valid namespace", nss.isValid());
MoveChunkRequest moveChunkRequest =
uassertStatusOK(MoveChunkRequest::createFromCommand(nss, cmdObj));
diff --git a/src/mongo/s/commands/cluster_count_cmd.cpp b/src/mongo/s/commands/cluster_count_cmd.cpp
index 70a678b987b..fa20f4f1447 100644
--- a/src/mongo/s/commands/cluster_count_cmd.cpp
+++ b/src/mongo/s/commands/cluster_count_cmd.cpp
@@ -195,6 +195,10 @@ public:
const rpc::ServerSelectionMetadata& serverSelectionMetadata,
BSONObjBuilder* out) const {
const NamespaceString nss(parseNs(dbname, cmdObj));
+ if (!nss.isValid()) {
+ return Status{ErrorCodes::InvalidNamespace,
+ str::stream() << "Invalid collection name: " << nss.ns()};
+ }
// Extract the targeting query.
BSONObj targetingQuery;
diff --git a/src/mongo/s/commands/cluster_explain_cmd.cpp b/src/mongo/s/commands/cluster_explain_cmd.cpp
index 5ddada38664..2801984c8c7 100644
--- a/src/mongo/s/commands/cluster_explain_cmd.cpp
+++ b/src/mongo/s/commands/cluster_explain_cmd.cpp
@@ -56,13 +56,13 @@ class ClusterExplainCmd : public Command {
public:
ClusterExplainCmd() : Command("explain") {}
-
/**
* Running an explain on a secondary requires explicitly setting slaveOk.
*/
virtual bool slaveOk() const {
return false;
}
+
virtual bool slaveOverrideOk() const {
return true;
}
@@ -120,11 +120,11 @@ public:
const std::string cmdName = explainObj.firstElementFieldName();
Command* commToExplain = Command::findCommand(cmdName);
- if (NULL == commToExplain) {
- mongoutils::str::stream ss;
- ss << "Explain failed due to unknown command: " << cmdName;
- Status explainStatus(ErrorCodes::CommandNotFound, ss);
- return appendCommandStatus(result, explainStatus);
+ if (!commToExplain) {
+ return appendCommandStatus(
+ result,
+ Status{ErrorCodes::CommandNotFound,
+ str::stream() << "Explain failed due to unknown command: " << cmdName});
}
auto readPref =