summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Williams <louis.williams@mongodb.com>2017-09-19 16:17:57 -0400
committerLouis Williams <louis.williams@mongodb.com>2017-09-19 16:37:10 -0400
commitd78666cf8dd33359b4e536e160409ebcbeb2fd24 (patch)
tree6926f0df6c99daf84fc0d43b8caea13dd5e8acc3 /src
parent7cea0293f50dd280be0287c2d744caaf66016d01 (diff)
downloadmongo-d78666cf8dd33359b4e536e160409ebcbeb2fd24.tar.gz
SERVER-29428 Have mongod fail gracefully when featureCompatibilityVersion is of a higher version
(cherry picked from commit b35c6fc183c26bc8a6d7cdfc8f5b970f90d60b56)
Diffstat (limited to 'src')
-rw-r--r--src/mongo/executor/network_interface_asio_auth.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mongo/executor/network_interface_asio_auth.cpp b/src/mongo/executor/network_interface_asio_auth.cpp
index 1f2039dbd1e..81f9ab9d841 100644
--- a/src/mongo/executor/network_interface_asio_auth.cpp
+++ b/src/mongo/executor/network_interface_asio_auth.cpp
@@ -38,6 +38,7 @@
#include "mongo/db/auth/authorization_manager_global.h"
#include "mongo/db/auth/internal_user_auth.h"
#include "mongo/db/commands.h"
+#include "mongo/db/commands/feature_compatibility_version_command_parser.h"
#include "mongo/db/server_options.h"
#include "mongo/db/wire_version.h"
#include "mongo/rpc/factory.h"
@@ -46,8 +47,10 @@
#include "mongo/rpc/metadata/client_metadata.h"
#include "mongo/rpc/reply_interface.h"
#include "mongo/stdx/memory.h"
+#include "mongo/util/exit.h"
#include "mongo/util/log.h"
#include "mongo/util/net/ssl_manager.h"
+#include "mongo/util/quick_exit.h"
#include "mongo/util/version.h"
namespace mongo {
@@ -116,9 +119,19 @@ void NetworkInterfaceASIO::_runIsMaster(AsyncOp* op) {
auto validateStatus =
rpc::validateWireVersion(WireSpec::instance().outgoing, protocolSet.getValue().version);
if (!validateStatus.isOK()) {
- warning() << "remote host has incompatible wire version: " << validateStatus;
- return _completeOperation(op, validateStatus);
+ if (WireSpec::instance().isInternalClient) {
+ severe() << "remote host has incompatible wire version: " << validateStatus;
+ severe() << "Please consult the documentation for upgrading this server: "
+ << "http://dochub.mongodb.org/core/3.6-feature-compatibility";
+
+ // Exit if mongod should be upgraded.
+ quickExit(EXIT_NEED_UPGRADE);
+ } else {
+ warning() << "remote host has incompatible wire version: " << validateStatus;
+
+ return _completeOperation(op, validateStatus);
+ }
}
op->connection().setServerProtocols(protocolSet.getValue().protocolSet);