summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2016-09-22 14:09:40 -0400
committerTess Avitabile <tess.avitabile@mongodb.com>2016-09-22 18:31:07 -0400
commit276f006796f8f3abfde86a549cdf9f8cc6ffa974 (patch)
treed57aa21696c97a6255125e3c61aee5a9b8a25d59
parent63864ff42e0402b65f5fa45635b0a76baf671aa8 (diff)
downloadmongo-276f006796f8f3abfde86a549cdf9f8cc6ffa974.tar.gz
SERVER-25743 Add dochub links to all featureCompatibilityVersion error messages
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.cpp100
-rw-r--r--src/mongo/db/commands/set_feature_compatibility_version_command.cpp31
-rw-r--r--src/mongo/db/s/config/configsvr_set_feature_compatibility_version_command.cpp47
-rw-r--r--src/mongo/s/catalog/sharding_catalog_manager_impl.cpp3
-rw-r--r--src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp25
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.