diff options
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.js | 103 |
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; +}); |