summaryrefslogtreecommitdiff
path: root/jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key_kill_sessions.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key_kill_sessions.js')
-rw-r--r--jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key_kill_sessions.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key_kill_sessions.js b/jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key_kill_sessions.js
new file mode 100644
index 00000000000..d4c324f8d95
--- /dev/null
+++ b/jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key_kill_sessions.js
@@ -0,0 +1,103 @@
+'use strict';
+
+/**
+ * Performs updates that will change a document's shard key while migrating chunks and killing
+ * sessions. Only runs updates that cause a document to change shards to increase the odds of
+ * killing an internal transaction.
+ *
+ * @tags: [
+ * requires_sharding,
+ * assumes_balancer_off,
+ * uses_transactions,
+ * ]
+ */
+load('jstests/concurrency/fsm_libs/extend_workload.js');
+load('jstests/concurrency/fsm_workload_helpers/kill_session.js'); // for killSession
+load('jstests/concurrency/fsm_workloads/random_moveChunk_update_shard_key.js');
+load('jstests/libs/override_methods/retry_on_killed_session.js');
+
+var $config = extendWorkload($config, function($config, $super) {
+ $config.data.retryOnKilledSession = true;
+
+ // The base workload uses connCache, so wrap killSessions so the fsm runner doesn't complain
+ // that it only expects 2 arguments.
+ $config.states.killSession = function wrappedKillSession(db, collName, connCache) {
+ return killSession(db, collName);
+ };
+
+ $config.transitions = {
+ init: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.2,
+ findAndModifyWithTransactionAcrossChunks: 0.2,
+ updateWithRetryableWriteAcrossChunks: 0.2,
+ updateWithTransactionAcrossChunks: 0.2,
+ },
+ killSession: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ moveChunk: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ findAndModifyWithRetryableWriteAcrossChunks: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ findAndModifyWithTransactionAcrossChunks: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ updateWithRetryableWriteAcrossChunks: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ updateWithTransactionAcrossChunks: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ verifyDocuments: {
+ killSession: 0.1,
+ moveChunk: 0.1,
+ findAndModifyWithRetryableWriteAcrossChunks: 0.15,
+ findAndModifyWithTransactionAcrossChunks: 0.15,
+ updateWithRetryableWriteAcrossChunks: 0.15,
+ updateWithTransactionAcrossChunks: 0.15,
+ verifyDocuments: 0.2
+ },
+ };
+
+ return $config;
+});