diff options
author | Jason Carey <jcarey@argv.me> | 2018-01-18 14:45:12 -0500 |
---|---|---|
committer | Jason Carey <jcarey@argv.me> | 2018-01-19 14:28:50 -0500 |
commit | d055ce30c42cec1171928f49c1739c0b14e0b455 (patch) | |
tree | efa390c089861f97ce83533f496f143def80cd2b | |
parent | 5823009762c40b9632d735f0829ba7328baab0dd (diff) | |
download | mongo-d055ce30c42cec1171928f49c1739c0b14e0b455.tar.gz |
SERVER-32460 platforms upgrade/downgrade work
-rw-r--r-- | jstests/noPassthrough/logical_session_feature_compatibility.js | 119 | ||||
-rw-r--r-- | src/mongo/db/commands/end_sessions_command.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/commands/kill_all_sessions_by_pattern_command.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/commands/kill_all_sessions_command.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/commands/kill_sessions_command.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/commands/refresh_logical_session_cache_now.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/commands/refresh_sessions_command.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/commands/start_session_command.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/initialize_operation_session_info.cpp | 9 | ||||
-rw-r--r-- | src/mongo/db/logical_session_cache_impl.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/logical_session_cache_test.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/logical_session_id_test.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_info.cpp | 6 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_is_master_cmd.cpp | 6 |
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. |