diff options
Diffstat (limited to 'src/mongo/s/commands/cluster_get_shard_version_cmd.cpp')
-rw-r--r-- | src/mongo/s/commands/cluster_get_shard_version_cmd.cpp | 131 |
1 files changed, 64 insertions, 67 deletions
diff --git a/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp b/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp index 486906aaf4a..54d88f7d6bb 100644 --- a/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp +++ b/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp @@ -42,86 +42,83 @@ namespace mongo { - using std::shared_ptr; +using std::shared_ptr; namespace { - class GetShardVersion : public Command { - public: - GetShardVersion() : Command("getShardVersion", false, "getshardversion") { } - - virtual bool slaveOk() const { - return true; +class GetShardVersion : public Command { +public: + GetShardVersion() : Command("getShardVersion", false, "getshardversion") {} + + virtual bool slaveOk() const { + return true; + } + + virtual bool adminOnly() const { + return true; + } + + virtual bool isWriteCommandForConfigServer() const { + return false; + } + + virtual void help(std::stringstream& help) const { + help << " example: { getShardVersion : 'alleyinsider.foo' } "; + } + + virtual Status checkAuthForCommand(ClientBasic* client, + const std::string& dbname, + const BSONObj& cmdObj) { + if (!AuthorizationSession::get(client)->isAuthorizedForActionsOnResource( + ResourcePattern::forExactNamespace(NamespaceString(parseNs(dbname, cmdObj))), + ActionType::getShardVersion)) { + return Status(ErrorCodes::Unauthorized, "Unauthorized"); } - virtual bool adminOnly() const { - return true; + return Status::OK(); + } + + virtual std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const { + return parseNsFullyQualified(dbname, cmdObj); + } + + virtual bool run(OperationContext* txn, + const std::string& dbname, + BSONObj& cmdObj, + int options, + std::string& errmsg, + BSONObjBuilder& result) { + const NamespaceString nss(parseNs(dbname, cmdObj)); + if (nss.size() == 0) { + return appendCommandStatus( + result, Status(ErrorCodes::InvalidNamespace, "no namespace specified")); } - virtual bool isWriteCommandForConfigServer() const { - return false; + auto status = grid.catalogCache()->getDatabase(nss.db().toString()); + if (!status.isOK()) { + return appendCommandStatus(result, status.getStatus()); } - virtual void help(std::stringstream& help) const { - help << " example: { getShardVersion : 'alleyinsider.foo' } "; + std::shared_ptr<DBConfig> config = status.getValue(); + if (!config->isSharded(nss.ns())) { + return appendCommandStatus( + result, + Status(ErrorCodes::NamespaceNotSharded, "ns [" + nss.ns() + " is not sharded.")); } - virtual Status checkAuthForCommand(ClientBasic* client, - const std::string& dbname, - const BSONObj& cmdObj) { - - if (!AuthorizationSession::get(client)->isAuthorizedForActionsOnResource( - ResourcePattern::forExactNamespace( - NamespaceString(parseNs(dbname, - cmdObj))), - ActionType::getShardVersion)) { - return Status(ErrorCodes::Unauthorized, "Unauthorized"); - } - - return Status::OK(); + ChunkManagerPtr cm = config->getChunkManagerIfExists(nss.ns()); + if (!cm) { + errmsg = "no chunk manager?"; + return false; } - virtual std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const { - return parseNsFullyQualified(dbname, cmdObj); - } + cm->_printChunks(); + cm->getVersion().addToBSON(result); - virtual bool run(OperationContext* txn, - const std::string& dbname, - BSONObj& cmdObj, - int options, - std::string& errmsg, - BSONObjBuilder& result) { - - const NamespaceString nss(parseNs(dbname, cmdObj)); - if (nss.size() == 0) { - return appendCommandStatus(result, Status(ErrorCodes::InvalidNamespace, - "no namespace specified")); - } - - auto status = grid.catalogCache()->getDatabase(nss.db().toString()); - if (!status.isOK()) { - return appendCommandStatus(result, status.getStatus()); - } - - std::shared_ptr<DBConfig> config = status.getValue(); - if (!config->isSharded(nss.ns())) { - return appendCommandStatus(result, Status(ErrorCodes::NamespaceNotSharded, - "ns [" + nss.ns() + " is not sharded.")); - } - - ChunkManagerPtr cm = config->getChunkManagerIfExists(nss.ns()); - if (!cm) { - errmsg = "no chunk manager?"; - return false; - } - - cm->_printChunks(); - cm->getVersion().addToBSON(result); - - return true; - } + return true; + } - } getShardVersionCmd; +} getShardVersionCmd; -} // namespace -} // namespace mongo +} // namespace +} // namespace mongo |