diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2016-09-22 14:09:40 -0400 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2016-09-22 18:31:07 -0400 |
commit | 276f006796f8f3abfde86a549cdf9f8cc6ffa974 (patch) | |
tree | d57aa21696c97a6255125e3c61aee5a9b8a25d59 | |
parent | 63864ff42e0402b65f5fa45635b0a76baf671aa8 (diff) | |
download | mongo-276f006796f8f3abfde86a549cdf9f8cc6ffa974.tar.gz |
SERVER-25743 Add dochub links to all featureCompatibilityVersion error messages
5 files changed, 129 insertions, 77 deletions
diff --git a/src/mongo/db/commands/feature_compatibility_version.cpp b/src/mongo/db/commands/feature_compatibility_version.cpp index 366ea78ba5f..943f9cbe93a 100644 --- a/src/mongo/db/commands/feature_compatibility_version.cpp +++ b/src/mongo/db/commands/feature_compatibility_version.cpp @@ -107,60 +107,69 @@ StatusWith<ServerGlobalParams::FeatureCompatibility::Version> FeatureCompatibili } else if (fieldName == FeatureCompatibilityVersion::kVersionField) { foundVersionField = true; if (elem.type() != BSONType::String) { - return Status(ErrorCodes::TypeMismatch, - str::stream() << FeatureCompatibilityVersion::kVersionField - << " must be of type String, but was of type " - << typeName(elem.type()) - << ". Contents of " - << FeatureCompatibilityVersion::kParameterName - << " document in " - << FeatureCompatibilityVersion::kCollection - << ": " - << featureCompatibilityVersionDoc); + return Status( + ErrorCodes::TypeMismatch, + str::stream() + << FeatureCompatibilityVersion::kVersionField + << " must be of type String, but was of type " + << typeName(elem.type()) + << ". Contents of " + << FeatureCompatibilityVersion::kParameterName + << " document in " + << FeatureCompatibilityVersion::kCollection + << ": " + << featureCompatibilityVersionDoc + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } if (elem.String() == FeatureCompatibilityVersion::kVersion34) { version = ServerGlobalParams::FeatureCompatibility::Version::k34; } else if (elem.String() == FeatureCompatibilityVersion::kVersion32) { version = ServerGlobalParams::FeatureCompatibility::Version::k32; } else { - return Status(ErrorCodes::BadValue, - str::stream() << "Invalid value for " - << FeatureCompatibilityVersion::kVersionField - << ", found " - << elem.String() - << ", expected '" - << FeatureCompatibilityVersion::kVersion34 - << "' or '" - << FeatureCompatibilityVersion::kVersion32 - << "'. Contents of " - << FeatureCompatibilityVersion::kParameterName - << " document in " - << FeatureCompatibilityVersion::kCollection - << ": " - << featureCompatibilityVersionDoc); + return Status( + ErrorCodes::BadValue, + str::stream() + << "Invalid value for " + << FeatureCompatibilityVersion::kVersionField + << ", found " + << elem.String() + << ", expected '" + << FeatureCompatibilityVersion::kVersion34 + << "' or '" + << FeatureCompatibilityVersion::kVersion32 + << "'. Contents of " + << FeatureCompatibilityVersion::kParameterName + << " document in " + << FeatureCompatibilityVersion::kCollection + << ": " + << featureCompatibilityVersionDoc + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } } else { - return Status(ErrorCodes::BadValue, - str::stream() << "Unrecognized field '" << elem.fieldName() - << "''. Contents of " - << FeatureCompatibilityVersion::kParameterName - << " document in " - << FeatureCompatibilityVersion::kCollection - << ": " - << featureCompatibilityVersionDoc); + return Status( + ErrorCodes::BadValue, + str::stream() << "Unrecognized field '" << elem.fieldName() << "''. Contents of " + << FeatureCompatibilityVersion::kParameterName + << " document in " + << FeatureCompatibilityVersion::kCollection + << ": " + << featureCompatibilityVersionDoc + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } } if (!foundVersionField) { return Status(ErrorCodes::BadValue, - str::stream() << "Missing required field '" - << FeatureCompatibilityVersion::kVersionField - << "''. Contents of " - << FeatureCompatibilityVersion::kParameterName - << " document in " - << FeatureCompatibilityVersion::kCollection - << ": " - << featureCompatibilityVersionDoc); + str::stream() + << "Missing required field '" + << FeatureCompatibilityVersion::kVersionField + << "''. Contents of " + << FeatureCompatibilityVersion::kParameterName + << " document in " + << FeatureCompatibilityVersion::kCollection + << ": " + << featureCompatibilityVersionDoc + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } return version; @@ -168,7 +177,8 @@ StatusWith<ServerGlobalParams::FeatureCompatibility::Version> FeatureCompatibili void FeatureCompatibilityVersion::set(OperationContext* txn, StringData version) { uassert(40284, - "featureCompatibilityVersion must be '3.4' or '3.2'", + "featureCompatibilityVersion must be '3.4' or '3.2'. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility.", version == FeatureCompatibilityVersion::kVersion34 || version == FeatureCompatibilityVersion::kVersion32); @@ -344,13 +354,15 @@ public: virtual Status set(const BSONElement& newValueElement) { return Status(ErrorCodes::IllegalOperation, str::stream() << FeatureCompatibilityVersion::kParameterName - << " cannot be set via setParameter"); + << " cannot be set via setParameter. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility."); } virtual Status setFromString(const std::string& str) { return Status(ErrorCodes::IllegalOperation, str::stream() << FeatureCompatibilityVersion::kParameterName - << " cannot be set via setParameter"); + << " cannot be set via setParameter. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility."); } } featureCompatibilityVersionParameter; diff --git a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp index 1bcac7bff10..adc00bd7ae5 100644 --- a/src/mongo/db/commands/set_feature_compatibility_version_command.cpp +++ b/src/mongo/db/commands/set_feature_compatibility_version_command.cpp @@ -62,8 +62,10 @@ public: } virtual void help(std::stringstream& help) const { - help << "set the minimum allowed version in the cluster, which determines what features " - "are available"; + help << "Set the API version exposed by this node. If set to \"3.2\", then 3.4 " + "features are disabled. If \"3.4\", then 3.4 features are enabled, and all nodes " + "in the cluster must be version 3.4. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility."; } Status checkAuthForCommand(Client* client, @@ -90,26 +92,37 @@ public: for (auto&& elem : cmdObj) { if (elem.fieldNameStringData() == FeatureCompatibilityVersion::kCommandName) { uassert(ErrorCodes::TypeMismatch, - str::stream() << FeatureCompatibilityVersion::kCommandName - << " must be of type String, but was of type " - << typeName(elem.type()), + str::stream() + << FeatureCompatibilityVersion::kCommandName + << " must be of type String, but was of type " + << typeName(elem.type()) + << " in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility.", elem.type() == BSONType::String); version = elem.String(); } else { uasserted(ErrorCodes::FailedToParse, - str::stream() << "unrecognized field '" << elem.fieldName() << "'"); + str::stream() + << "unrecognized field '" + << elem.fieldName() + << "' in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } } uassert(ErrorCodes::BadValue, str::stream() << "invalid value for " << FeatureCompatibilityVersion::kCommandName - << ", found " - << version << ", expected '" << FeatureCompatibilityVersion::kVersion34 << "' or '" << FeatureCompatibilityVersion::kVersion32 - << "'", + << "', found " + << version + << " in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility.", version == FeatureCompatibilityVersion::kVersion34 || version == FeatureCompatibilityVersion::kVersion32); diff --git a/src/mongo/db/s/config/configsvr_set_feature_compatibility_version_command.cpp b/src/mongo/db/s/config/configsvr_set_feature_compatibility_version_command.cpp index 00fd3b55879..d42e9313c54 100644 --- a/src/mongo/db/s/config/configsvr_set_feature_compatibility_version_command.cpp +++ b/src/mongo/db/s/config/configsvr_set_feature_compatibility_version_command.cpp @@ -54,7 +54,8 @@ public: void help(std::stringstream& help) const override { help << "Internal command, which is exported by the sharding config server. Do not call " - "directly. Sets featureCompatibilityVersion on all shards."; + "directly. Sets featureCompatibilityVersion on all shards. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility."; } bool slaveOk() const override { @@ -86,7 +87,8 @@ public: std::string& errmsg, BSONObjBuilder& result) override { uassert(ErrorCodes::IllegalOperation, - "_configsvrSetFeatureCompatibilityVersion can only be run on config servers", + "_configsvrSetFeatureCompatibilityVersion can only be run on config servers. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility.", serverGlobalParams.clusterRole == ClusterRole::ConfigServer); // Validate command. @@ -94,28 +96,39 @@ public: for (auto&& elem : cmdObj) { if (elem.fieldNameStringData() == "_configsvrSetFeatureCompatibilityVersion") { uassert(ErrorCodes::TypeMismatch, - str::stream() << "_configsvrSetFeatureCompatibilityVersion must be of type " - "String, but was of type " - << typeName(elem.type()), + str::stream() + << "_configsvrSetFeatureCompatibilityVersion must be of type " + "String, but was of type " + << typeName(elem.type()) + << " in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility.", elem.type() == BSONType::String); version = elem.String(); } else { uasserted(ErrorCodes::FailedToParse, - str::stream() << "unrecognized field '" << elem.fieldName() << "'"); + str::stream() + << "unrecognized field '" + << elem.fieldName() + << "' in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } } - uassert( - ErrorCodes::BadValue, - str::stream() << "invalid value for _configsvrSetFeatureCompatibilityVersion , found " - << version - << ", expected '" - << FeatureCompatibilityVersion::kVersion34 - << "' or '" - << FeatureCompatibilityVersion::kVersion32 - << "'", - version == FeatureCompatibilityVersion::kVersion34 || - version == FeatureCompatibilityVersion::kVersion32); + uassert(ErrorCodes::BadValue, + str::stream() + << "invalid value for _configsvrSetFeatureCompatibilityVersion, expected '" + << FeatureCompatibilityVersion::kVersion34 + << "' or '" + << FeatureCompatibilityVersion::kVersion32 + << "', found " + << version + << " in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility.", + version == FeatureCompatibilityVersion::kVersion34 || + version == FeatureCompatibilityVersion::kVersion32); // Forward to all shards. uassertStatusOK( diff --git a/src/mongo/s/catalog/sharding_catalog_manager_impl.cpp b/src/mongo/s/catalog/sharding_catalog_manager_impl.cpp index a2f5805f433..d3809e4ceff 100644 --- a/src/mongo/s/catalog/sharding_catalog_manager_impl.cpp +++ b/src/mongo/s/catalog/sharding_catalog_manager_impl.cpp @@ -826,7 +826,8 @@ StatusWith<string> ShardingCatalogManagerImpl::addShard( if (versionResponse.getStatus().code() == ErrorCodes::CommandNotFound) { return Status(ErrorCodes::OperationFailed, "featureCompatibilityVersion for cluster is 3.4, cannot add a shard " - "with version below 3.4"); + "with version below 3.4. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility."); } return versionResponse.getValue().commandStatus; } diff --git a/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp b/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp index 0ff6eacabf6..d8b47d12b17 100644 --- a/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp +++ b/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp @@ -64,8 +64,10 @@ public: } virtual void help(std::stringstream& help) const { - help << "set the minimum allowed version for the cluster, which determines what features " - "are available"; + help << "Set the API version for the cluster. If set to \"3.2\", then 3.4 features are " + "disabled. If \"3.4\", then 3.4 features are enabled, and all nodes in the cluster " + "must be version 3.4. See " + "http://dochub.mongodb.org/core/3.4-feature-compatibility."; } Status checkAuthForCommand(Client* client, @@ -95,19 +97,30 @@ public: ErrorCodes::TypeMismatch, str::stream() << "setFeatureCompatibilityVersion must be of type String, but was of type " - << typeName(elem.type()), + << typeName(elem.type()) + << " in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility.", elem.type() == BSONType::String); version = elem.String(); } else { uasserted(ErrorCodes::FailedToParse, - str::stream() << "unrecognized field '" << elem.fieldName() << "'"); + str::stream() + << "unrecognized field '" + << elem.fieldName() + << "' in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility."); } } uassert(ErrorCodes::BadValue, - str::stream() << "invalid value for setFeatureCompatibilityVersion, found " + str::stream() << "invalid value for setFeatureCompatibilityVersion, expected '3.4' " + "or '3.2', found " << version - << ", expected '3.4' or '3.2'", + << " in: " + << cmdObj + << ". See http://dochub.mongodb.org/core/3.4-feature-compatibility.", version == "3.4" || version == "3.2"); // Forward to config shard, which will forward to all shards. |