summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordi Serra Torrens <jordi.serra-torrens@mongodb.com>2021-05-19 14:13:18 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-05-21 14:35:15 +0000
commit3d7a8f50f37f2a4b549e6fc132a5840ad3f04276 (patch)
tree80cd0b82485ca2ecf3c3c271b3a7dd89949d3eb2
parent3551ba198271e30cddab4a99c767562af3077f2d (diff)
downloadmongo-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.js5
-rw-r--r--jstests/concurrency/fsm_workloads/drop_database_sharded_setFCV.js69
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;
+});