summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Carey <jcarey@argv.me>2018-01-18 14:45:12 -0500
committerJason Carey <jcarey@argv.me>2018-01-19 14:28:50 -0500
commitd055ce30c42cec1171928f49c1739c0b14e0b455 (patch)
treeefa390c089861f97ce83533f496f143def80cd2b
parent5823009762c40b9632d735f0829ba7328baab0dd (diff)
downloadmongo-d055ce30c42cec1171928f49c1739c0b14e0b455.tar.gz
SERVER-32460 platforms upgrade/downgrade work
-rw-r--r--jstests/noPassthrough/logical_session_feature_compatibility.js119
-rw-r--r--src/mongo/db/commands/end_sessions_command.cpp13
-rw-r--r--src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp13
-rw-r--r--src/mongo/db/commands/kill_all_sessions_command.cpp13
-rw-r--r--src/mongo/db/commands/kill_sessions_command.cpp13
-rw-r--r--src/mongo/db/commands/refresh_logical_session_cache_now.cpp13
-rw-r--r--src/mongo/db/commands/refresh_sessions_command.cpp13
-rw-r--r--src/mongo/db/commands/start_session_command.cpp13
-rw-r--r--src/mongo/db/initialize_operation_session_info.cpp9
-rw-r--r--src/mongo/db/logical_session_cache_impl.cpp8
-rw-r--r--src/mongo/db/logical_session_cache_test.cpp5
-rw-r--r--src/mongo/db/logical_session_id_test.cpp3
-rw-r--r--src/mongo/db/repl/replication_info.cpp6
-rw-r--r--src/mongo/s/commands/cluster_is_master_cmd.cpp6
14 files changed, 3 insertions, 244 deletions
diff --git a/jstests/noPassthrough/logical_session_feature_compatibility.js b/jstests/noPassthrough/logical_session_feature_compatibility.js
deleted file mode 100644
index e4384940f4b..00000000000
--- a/jstests/noPassthrough/logical_session_feature_compatibility.js
+++ /dev/null
@@ -1,119 +0,0 @@
-(function() {
- 'use strict';
- var cases = [
- {
- name: "endSessions",
- cmd: {endSessions: []},
- },
- {
- name: "killAllSessions",
- cmd: {killSessions: []},
- },
- {
- name: "killAllSessionsByPattern",
- cmd: {killAllSessionsByPattern: []},
- },
- {
- name: "killSessions",
- cmd: {killSessions: []},
- },
- {
- name: "refreshLogicalSessionCacheNow",
- cmd: {refreshLogicalSessionCacheNow: 1},
- },
- {
- name: "refreshSessions",
- cmd: {refreshSessions: []},
- },
- {
- name: "startSession",
- cmd: {startSession: 1},
- },
- ];
-
- var casesLength = cases.length;
- var testCases = function(compatibilityVersion, errorCode) {
- assert.commandWorked(
- admin.adminCommand({setFeatureCompatibilityVersion: compatibilityVersion}));
- for (var i = 0; i < casesLength; i++) {
- var testCase = cases[i];
- var result = admin.runCommand(testCase.cmd);
-
- if (!errorCode) {
- assert.commandWorked(result,
- "failed test that we can run " + testCase.name +
- " under featureCompatibilityVersion 3.6");
-
- } else {
- assert.commandFailedWithCode(result,
- errorCode,
- "failed test that we can't run " + testCase.name +
- " under featureCompatibilityVersion 3.4");
- }
- }
-
- const isMasterResult = admin.runCommand({isMaster: 1});
- assert.commandWorked(isMasterResult);
- assert.eq(!errorCode,
- isMasterResult.hasOwnProperty("logicalSessionTimeoutMinutes"),
- "failed test that we " + (errorCode ? "don't " : "") +
- "have logicalSessionTimeoutMinutes under featureCompatibilityVersion " +
- compatibilityVersion);
- };
-
- // First verify the commands without auth, in feature compatibility version 3.6.
-
- var conn = MongoRunner.runMongod({nojournal: ""});
- var admin = conn.getDB("admin");
-
- testCases("3.6");
-
- // Second verify the commands without auth, in feature compatibility version 3.4.
-
- testCases("3.4", ErrorCodes.InvalidOptions);
-
- // Third, verify the commands with auth, in feature compatibility version 3.6
-
- MongoRunner.stopMongod(conn);
-
- conn = MongoRunner.runMongod({auth: "", nojournal: ""});
- admin = conn.getDB("admin");
- admin.createUser({user: 'user0', pwd: 'password', roles: ["root"]});
- admin.auth("user0", "password");
-
- testCases("3.6");
-
- // Third, verify the commands with auth, in feature compatibility version 3.4
-
- testCases("3.4", ErrorCodes.InvalidOptions);
-
- MongoRunner.stopMongod(conn);
-
- // Verify that sessions are vivified for ops that have lsids when fcv is 3.4
-
- var conn = MongoRunner.runMongod({nojournal: ""});
- var admin = conn.getDB("admin");
- var config = conn.getDB("config");
-
- assert.commandWorked(admin.adminCommand({setFeatureCompatibilityVersion: "3.6"}));
-
- for (var i = 0; i < 11; i++) {
- assert.commandWorked(
- admin.runCommand({"insert": "test", "documents": [{a: 1}], "lsid": {"id": UUID()}}));
- }
-
- assert.commandWorked(admin.adminCommand({setFeatureCompatibilityVersion: "3.4"}));
-
- for (var i = 0; i < 13; i++) {
- assert.commandFailedWithCode(
- admin.runCommand({"insert": "test", "documents": [{a: 2}], "lsid": {"id": UUID()}}),
- ErrorCodes.InvalidOptions);
- }
-
- assert.commandWorked(admin.adminCommand({setFeatureCompatibilityVersion: "3.6"}));
-
- assert.commandWorked(admin.runCommand({refreshLogicalSessionCacheNow: 1}));
-
- assert.eq(config.system.sessions.find().count(), 11);
-
-})();
diff --git a/src/mongo/db/commands/end_sessions_command.cpp b/src/mongo/db/commands/end_sessions_command.cpp
index 8f6bb1ded29..74fa70a0f66 100644
--- a/src/mongo/db/commands/end_sessions_command.cpp
+++ b/src/mongo/db/commands/end_sessions_command.cpp
@@ -59,12 +59,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
// It is always ok to run this command, as long as you are authenticated
// as some user, if auth is enabled.
AuthorizationSession* authSession = AuthorizationSession::get(opCtx->getClient());
@@ -81,13 +75,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
auto lsCache = LogicalSessionCache::get(opCtx);
auto cmd = EndSessionsCmdFromClient::parse("EndSessionsCmdFromClient"_sd, cmdObj);
diff --git a/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp b/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp
index 45b01c712be..9388e593be5 100644
--- a/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp
+++ b/src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp
@@ -72,12 +72,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
AuthorizationSession* authSession = AuthorizationSession::get(opCtx->getClient());
if (!authSession->isAuthorizedForPrivilege(
Privilege{ResourcePattern::forClusterResource(), ActionType::killAnySession})) {
@@ -91,13 +85,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
IDLParserErrorContext ctx("KillAllSessionsByPatternCmd");
auto ksc = KillAllSessionsByPatternCmd::parse(ctx, cmdObj);
diff --git a/src/mongo/db/commands/kill_all_sessions_command.cpp b/src/mongo/db/commands/kill_all_sessions_command.cpp
index 907ffbe51d1..70137a4ad28 100644
--- a/src/mongo/db/commands/kill_all_sessions_command.cpp
+++ b/src/mongo/db/commands/kill_all_sessions_command.cpp
@@ -72,12 +72,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
AuthorizationSession* authSession = AuthorizationSession::get(opCtx->getClient());
if (!authSession->isAuthorizedForPrivilege(
Privilege{ResourcePattern::forClusterResource(), ActionType::killAnySession})) {
@@ -91,13 +85,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
IDLParserErrorContext ctx("KillAllSessionsCmd");
auto ksc = KillAllSessionsCmd::parse(ctx, cmdObj);
diff --git a/src/mongo/db/commands/kill_sessions_command.cpp b/src/mongo/db/commands/kill_sessions_command.cpp
index 7b0e5b1375a..f371dc5b80d 100644
--- a/src/mongo/db/commands/kill_sessions_command.cpp
+++ b/src/mongo/db/commands/kill_sessions_command.cpp
@@ -101,12 +101,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
return Status::OK();
}
@@ -114,13 +108,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
IDLParserErrorContext ctx("KillSessionsCmd");
auto ksc = KillSessionsCmdFromClient::parse(ctx, cmdObj);
diff --git a/src/mongo/db/commands/refresh_logical_session_cache_now.cpp b/src/mongo/db/commands/refresh_logical_session_cache_now.cpp
index 7f21f14b952..b98d6a48815 100644
--- a/src/mongo/db/commands/refresh_logical_session_cache_now.cpp
+++ b/src/mongo/db/commands/refresh_logical_session_cache_now.cpp
@@ -65,12 +65,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
return Status::OK();
}
@@ -78,13 +72,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
auto cache = LogicalSessionCache::get(opCtx);
auto client = opCtx->getClient();
diff --git a/src/mongo/db/commands/refresh_sessions_command.cpp b/src/mongo/db/commands/refresh_sessions_command.cpp
index 3f1d3d932cd..894b3d9d1b6 100644
--- a/src/mongo/db/commands/refresh_sessions_command.cpp
+++ b/src/mongo/db/commands/refresh_sessions_command.cpp
@@ -61,12 +61,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
// It is always ok to run this command, as long as you are authenticated
// as some user, if auth is enabled.
AuthorizationSession* authSession = AuthorizationSession::get(opCtx->getClient());
@@ -83,13 +77,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
IDLParserErrorContext ctx("RefreshSessionsCmdFromClient");
auto cmd = RefreshSessionsCmdFromClient::parse(ctx, cmdObj);
auto res =
diff --git a/src/mongo/db/commands/start_session_command.cpp b/src/mongo/db/commands/start_session_command.cpp
index 9d03da70fbe..47e4e7726c3 100644
--- a/src/mongo/db/commands/start_session_command.cpp
+++ b/src/mongo/db/commands/start_session_command.cpp
@@ -66,12 +66,6 @@ public:
Status checkAuthForOperation(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return SessionsCommandFCV34Status(getName());
- }
-
return Status::OK();
}
@@ -79,13 +73,6 @@ public:
const std::string& db,
const BSONObj& cmdObj,
BSONObjBuilder& result) override {
-
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- return CommandHelpers::appendCommandStatus(result,
- SessionsCommandFCV34Status(getName()));
- }
-
auto client = opCtx->getClient();
ServiceContext* serviceContext = client->getServiceContext();
diff --git a/src/mongo/db/initialize_operation_session_info.cpp b/src/mongo/db/initialize_operation_session_info.cpp
index 9db8ab8c0c8..5751f086691 100644
--- a/src/mongo/db/initialize_operation_session_info.cpp
+++ b/src/mongo/db/initialize_operation_session_info.cpp
@@ -35,7 +35,6 @@
#include "mongo/db/logical_session_cache.h"
#include "mongo/db/logical_session_id_helpers.h"
#include "mongo/db/operation_context.h"
-#include "mongo/db/server_options.h"
namespace mongo {
@@ -62,14 +61,6 @@ void initializeOperationSessionInfo(OperationContext* opCtx,
auto osi = OperationSessionInfoFromClient::parse("OperationSessionInfo"_sd, requestBody);
if (osi.getSessionId()) {
- uassert(ErrorCodes::InvalidOptions,
- str::stream() << "cannot pass logical session id unless fully upgraded to "
- "featureCompatibilityVersion 3.6. See "
- << feature_compatibility_version::kDochubLink
- << " .",
- serverGlobalParams.featureCompatibility.getVersion() ==
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36);
-
stdx::lock_guard<Client> lk(*opCtx->getClient());
opCtx->setLogicalSessionId(makeLogicalSessionId(osi.getSessionId().get(), opCtx));
diff --git a/src/mongo/db/logical_session_cache_impl.cpp b/src/mongo/db/logical_session_cache_impl.cpp
index 0462ad36d3f..e0a5e8de314 100644
--- a/src/mongo/db/logical_session_cache_impl.cpp
+++ b/src/mongo/db/logical_session_cache_impl.cpp
@@ -35,7 +35,6 @@
#include "mongo/db/logical_session_id.h"
#include "mongo/db/logical_session_id_helpers.h"
#include "mongo/db/operation_context.h"
-#include "mongo/db/server_options.h"
#include "mongo/db/server_parameters.h"
#include "mongo/db/service_context.h"
#include "mongo/platform/atomic_word.h"
@@ -229,13 +228,6 @@ Status LogicalSessionCacheImpl::_reap(Client* client) {
}
void LogicalSessionCacheImpl::_refresh(Client* client) {
- // Do not run this job if we are not in FCV 3.6
- if (serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- LOG(1) << "Skipping session refresh job while feature compatibility version is not 3.6";
- return;
- }
-
// Stats for serverStatus:
{
stdx::lock_guard<stdx::mutex> lk(_cacheMutex);
diff --git a/src/mongo/db/logical_session_cache_test.cpp b/src/mongo/db/logical_session_cache_test.cpp
index d7f8f064f26..3d1b625aff1 100644
--- a/src/mongo/db/logical_session_cache_test.cpp
+++ b/src/mongo/db/logical_session_cache_test.cpp
@@ -66,8 +66,7 @@ class LogicalSessionCacheTest : public unittest::Test {
public:
LogicalSessionCacheTest()
: _service(std::make_shared<MockServiceLiasonImpl>()),
- _sessions(std::make_shared<MockSessionsCollectionImpl>()),
- _fcv(EnsureFCV::Version::kFullyUpgradedTo36) {}
+ _sessions(std::make_shared<MockSessionsCollectionImpl>()) {}
void setUp() override {
auto localManagerState = stdx::make_unique<AuthzManagerExternalStateMock>();
@@ -140,8 +139,6 @@ private:
std::unique_ptr<LogicalSessionCache> _cache;
Client* _client;
-
- EnsureFCV _fcv;
};
// Test that the getFromCache method does not make calls to the sessions collection
diff --git a/src/mongo/db/logical_session_id_test.cpp b/src/mongo/db/logical_session_id_test.cpp
index beb73f4da0f..0dd9d3c6c95 100644
--- a/src/mongo/db/logical_session_id_test.cpp
+++ b/src/mongo/db/logical_session_id_test.cpp
@@ -48,7 +48,6 @@
#include "mongo/db/logical_session_cache_impl.h"
#include "mongo/db/logical_session_id_helpers.h"
#include "mongo/db/operation_context_noop.h"
-#include "mongo/db/server_options.h"
#include "mongo/db/service_context_noop.h"
#include "mongo/db/service_liason_mock.h"
#include "mongo/db/sessions_collection_mock.h"
@@ -72,8 +71,6 @@ public:
AuthorizationSessionForTest* authzSession;
void setUp() {
- serverGlobalParams.featureCompatibility.setVersion(
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36);
session = transportLayer.createSession();
client = serviceContext.makeClient("testClient", session);
RestrictionEnvironment::set(
diff --git a/src/mongo/db/repl/replication_info.cpp b/src/mongo/db/repl/replication_info.cpp
index 7b5a5288dce..ebcbb8034ab 100644
--- a/src/mongo/db/repl/replication_info.cpp
+++ b/src/mongo/db/repl/replication_info.cpp
@@ -51,7 +51,6 @@
#include "mongo/db/repl/replication_coordinator_global.h"
#include "mongo/db/repl/replication_process.h"
#include "mongo/db/repl/storage_interface.h"
-#include "mongo/db/server_options.h"
#include "mongo/db/server_parameters.h"
#include "mongo/db/storage/storage_options.h"
#include "mongo/db/wire_version.h"
@@ -363,10 +362,7 @@ public:
result.appendNumber("maxMessageSizeBytes", MaxMessageSizeBytes);
result.appendNumber("maxWriteBatchSize", write_ops::kMaxWriteBatchSize);
result.appendDate("localTime", jsTime());
- if (serverGlobalParams.featureCompatibility.getVersion() ==
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- result.append("logicalSessionTimeoutMinutes", localLogicalSessionTimeoutMinutes);
- }
+ result.append("logicalSessionTimeoutMinutes", localLogicalSessionTimeoutMinutes);
if (internalClientElement) {
result.append("minWireVersion",
diff --git a/src/mongo/s/commands/cluster_is_master_cmd.cpp b/src/mongo/s/commands/cluster_is_master_cmd.cpp
index 2e36478d263..4b714e7a447 100644
--- a/src/mongo/s/commands/cluster_is_master_cmd.cpp
+++ b/src/mongo/s/commands/cluster_is_master_cmd.cpp
@@ -33,7 +33,6 @@
#include "mongo/db/logical_session_id.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/ops/write_ops.h"
-#include "mongo/db/server_options.h"
#include "mongo/db/server_parameters.h"
#include "mongo/db/wire_version.h"
#include "mongo/rpc/metadata/client_metadata.h"
@@ -113,10 +112,7 @@ public:
result.appendNumber("maxMessageSizeBytes", MaxMessageSizeBytes);
result.appendNumber("maxWriteBatchSize", write_ops::kMaxWriteBatchSize);
result.appendDate("localTime", jsTime());
- if (serverGlobalParams.featureCompatibility.getVersion() ==
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) {
- result.append("logicalSessionTimeoutMinutes", localLogicalSessionTimeoutMinutes);
- }
+ result.append("logicalSessionTimeoutMinutes", localLogicalSessionTimeoutMinutes);
// Mongos tries to keep exactly the same version range of the server for which
// it is compiled.