diff options
author | Jordi Serra Torrens <jordi.serra-torrens@mongodb.com> | 2021-05-19 14:13:18 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-05-21 14:35:15 +0000 |
commit | 3d7a8f50f37f2a4b549e6fc132a5840ad3f04276 (patch) | |
tree | 80cd0b82485ca2ecf3c3c271b3a7dd89949d3eb2 | |
parent | 3551ba198271e30cddab4a99c767562af3077f2d (diff) | |
download | mongo-3d7a8f50f37f2a4b549e6fc132a5840ad3f04276.tar.gz |
SERVER-56957 Extend drop_database_sharded.js FSM to perform FCV changes on top of it
(cherry picked from commit a603516c55a06b1e94a62b4fc693d5fe2ec2c274)
-rw-r--r-- | jstests/concurrency/fsm_workloads/drop_database_sharded.js | 5 | ||||
-rw-r--r-- | jstests/concurrency/fsm_workloads/drop_database_sharded_setFCV.js | 69 |
2 files changed, 73 insertions, 1 deletions
diff --git a/jstests/concurrency/fsm_workloads/drop_database_sharded.js b/jstests/concurrency/fsm_workloads/drop_database_sharded.js index 12113daea04..b46d5aebb60 100644 --- a/jstests/concurrency/fsm_workloads/drop_database_sharded.js +++ b/jstests/concurrency/fsm_workloads/drop_database_sharded.js @@ -63,12 +63,15 @@ var $config = (function() { shardCollection: {enableSharding: 0.35, dropDatabase: 0.35, shardCollection: 0.3}, }; + let teardown = function(db, collName, cluster) {}; + return { threadCount: 12, iterations: 64, startState: 'init', data: {}, states: states, - transitions: transitions + transitions: transitions, + teardown: teardown }; })(); diff --git a/jstests/concurrency/fsm_workloads/drop_database_sharded_setFCV.js b/jstests/concurrency/fsm_workloads/drop_database_sharded_setFCV.js new file mode 100644 index 00000000000..213a1bff5c4 --- /dev/null +++ b/jstests/concurrency/fsm_workloads/drop_database_sharded_setFCV.js @@ -0,0 +1,69 @@ +'use strict'; + +/** + * Repeatedly creates and drops a database in concurrency with FCV changes + * + * @tags: [ + * requires_sharding, + * # TODO (SERVER-57017) Enable on stepdown suites + * does_not_support_stepdowns, + * # Requires all nodes to be running the latest binary. + * multiversion_incompatible, + * ] + */ + +load('jstests/concurrency/fsm_libs/extend_workload.js'); +load('jstests/concurrency/fsm_workloads/drop_database_sharded.js'); +load("jstests/libs/override_methods/mongos_manual_intervention_actions.js"); + +var $config = extendWorkload($config, function($config, $super) { + $config.states.setFCV = function(db, collName) { + const fcvValues = [lastLTSFCV, lastContinuousFCV, latestFCV]; + const targetFCV = fcvValues[Random.randInt(3)]; + jsTestLog('Executing FCV state, setting to:' + targetFCV); + try { + assertAlways.commandWorked( + db.adminCommand({setFeatureCompatibilityVersion: targetFCV})); + } catch (e) { + if (e.code === 5147403) { + // Invalid fcv transition (e.g lastContinuous -> lastLTS) + jsTestLog('setFCV: Invalid transition'); + return; + } + throw e; + } + jsTestLog('setFCV state finished'); + }; + + $config.states.shardCollection = function(db, collName) { + assert.soon(() => { + try { + $super.states.shardCollection.apply(this, arguments); + return true; + } catch (e) { + if (e.code === ErrorCodes.ConflictingOperationInProgress) { + // Legacy dropCollection (as part of dropDatabase) interferes with catalog cache + // refreshes done as part of shardCollection. Retry. + // TODO SERVER-54879: No longer needed after 5.0 has branched out + return false; + } + throw e; + } + }); + }; + + $config.transitions = { + init: {enableSharding: 0.3, dropDatabase: 0.3, shardCollection: 0.3, setFCV: 0.1}, + enableSharding: {enableSharding: 0.3, dropDatabase: 0.3, shardCollection: 0.3, setFCV: 0.1}, + dropDatabase: {enableSharding: 0.3, dropDatabase: 0.3, shardCollection: 0.3, setFCV: 0.1}, + shardCollection: + {enableSharding: 0.3, dropDatabase: 0.3, shardCollection: 0.3, setFCV: 0.1}, + setFCV: {enableSharding: 0.3, dropDatabase: 0.3, shardCollection: 0.3, setFCV: 0.1}, + }; + + $config.teardown = function(db, collName) { + assert.commandWorked(db.adminCommand({setFeatureCompatibilityVersion: latestFCV})); + }; + + return $config; +}); |