diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2018-12-17 17:59:43 -0500 |
---|---|---|
committer | Jack Mulrow <jack.mulrow@mongodb.com> | 2018-12-20 17:26:34 -0500 |
commit | 27c179577c031eec0b1c71f8e9e2aee7d23cc114 (patch) | |
tree | 14d4e63096223959a213eac7742e89d98f9f8506 /jstests/concurrency | |
parent | ddaa9193bfead92fe833edbeecc63c046d4424fa (diff) | |
download | mongo-27c179577c031eec0b1c71f8e9e2aee7d23cc114.tar.gz |
SERVER-33983 Add concurrency sharded transaction passthroughs using majority read concern
Diffstat (limited to 'jstests/concurrency')
10 files changed, 30 insertions, 15 deletions
diff --git a/jstests/concurrency/fsm_libs/resmoke_runner.js b/jstests/concurrency/fsm_libs/resmoke_runner.js index 4af4555cb82..2b6b1512bed 100644 --- a/jstests/concurrency/fsm_libs/resmoke_runner.js +++ b/jstests/concurrency/fsm_libs/resmoke_runner.js @@ -105,10 +105,17 @@ cluster.awaitReplication(); } + // Transactions run at snapshot read concern unless defaultTransactionReadConcernLevel + // is set to another level. + const transactionsWouldUseSnapshotReadConcern = + !TestData.hasOwnProperty("defaultTransactionReadConcernLevel") || + TestData.defaultTransactionReadConcernLevel === "snapshot"; + // Synchronize the cluster times across all routers if the tests will be overriden to // use transactions, so the earliest global snapshots chosen by each router will include - // the effects of each setup function. - if (cluster.isSharded() && TestData.runInsideTransaction) { + // the effects of each setup function. This is only required for snapshot read concern. + if (cluster.isSharded() && TestData.runInsideTransaction && + transactionsWouldUseSnapshotReadConcern) { cluster.synchronizeMongosClusterTimes(); } @@ -244,12 +251,18 @@ let workloads = TestData.fsmWorkloads; let sessionOptions = {}; - if (TestData.runningWithCausalConsistency) { - sessionOptions = Object.assign( - sessionOptions, {causalConsistency: true, readPreference: {mode: 'secondary'}}); + if (TestData.runningWithCausalConsistency !== undefined) { + // Explicit sessions are causally consistent by default, so causal consistency has to be + // explicitly disabled. + sessionOptions.causalConsistency = TestData.runningWithCausalConsistency; + + if (TestData.runningWithCausalConsistency) { + sessionOptions.readPreference = {mode: 'secondary'}; + } } + if (TestData.runningWithConfigStepdowns || TestData.runningWithShardStepdowns) { - sessionOptions = Object.assign(sessionOptions, {retryWrites: true}); + sessionOptions.retryWrites = true; } const executionOptions = {dbNamePrefix: TestData.dbNamePrefix || ""}; diff --git a/jstests/concurrency/fsm_workload_helpers/auto_retry_transaction.js b/jstests/concurrency/fsm_workload_helpers/auto_retry_transaction.js index faa5418be24..8877363e2a4 100644 --- a/jstests/concurrency/fsm_workload_helpers/auto_retry_transaction.js +++ b/jstests/concurrency/fsm_workload_helpers/auto_retry_transaction.js @@ -31,7 +31,9 @@ var {withTxnAndAutoRetry} = (function() { * after the withTxnAndAutoRetry() function returns. */ function withTxnAndAutoRetry(session, func, { - txnOptions: txnOptions = {readConcern: {level: 'snapshot'}}, + txnOptions: txnOptions = { + readConcern: {level: TestData.defaultTransactionReadConcernLevel || 'snapshot'} + }, retryOnKilledSession: retryOnKilledSession = false, prepareProbability: prepareProbability = 0.0 } = {}) { diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_all_commands_same_session.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_all_commands_same_session.js index 0931ad6ce13..11aaac9cdac 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_all_commands_same_session.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_all_commands_same_session.js @@ -4,7 +4,7 @@ * Runs update, findAndModify, delete, find, and getMore in a transaction with all threads using the * same session. * - * @tags: [uses_transactions, state_functions_share_transaction] + * @tags: [uses_transactions, state_functions_share_transaction, assumes_snapshot_transactions] */ load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation.js index 1d45ed672dc..c2401d6a0a5 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation.js @@ -39,7 +39,7 @@ * (tid, txnNumber) for the thread with threadId == tid. This indicates that there are writes * that exist in the database that were not committed. * - * @tags: [uses_transactions] + * @tags: [uses_transactions, assumes_snapshot_transactions] */ // for Graph diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_metrics_test.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_metrics_test.js index e567ded0e25..8199189293b 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_metrics_test.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_metrics_test.js @@ -4,7 +4,7 @@ * This test checks high level invariants of various transaction related metrics reported in * serverStatus and currentOp. * - * @tags: [uses_transactions, uses_prepare_transaction] + * @tags: [uses_transactions, uses_prepare_transaction, assumes_snapshot_transactions] */ load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_multi_db.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_multi_db.js index 266a7ceb8cb..417cf05aa41 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_multi_db.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_multi_db.js @@ -3,7 +3,7 @@ /** * Test transactions atomicity and isolation guarantees for transactions across multiple DBs. * - * @tags: [uses_transactions] + * @tags: [uses_transactions, assumes_snapshot_transactions] */ load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_repeated_reads.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_repeated_reads.js index d02004acd25..10e76270a3e 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_repeated_reads.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_atomicity_isolation_repeated_reads.js @@ -3,7 +3,7 @@ /** * Performs repeated reads of the documents in the collection to test snapshot isolation. * - * @tags: [uses_transactions] + * @tags: [uses_transactions, assumes_snapshot_transactions] */ load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_kill_sessions_atomicity_isolation.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_kill_sessions_atomicity_isolation.js index 4c66bdbb6ce..bc3680c3a75 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_kill_sessions_atomicity_isolation.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_kill_sessions_atomicity_isolation.js @@ -3,7 +3,7 @@ /** * Tests periodically killing sessions that are running transactions. * - * @tags: [uses_transactions] + * @tags: [uses_transactions, assumes_snapshot_transactions] */ load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple.js index dfc7b7f4335..17acf7c4824 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple.js @@ -5,7 +5,7 @@ * - chooses two accounts and amount of money being transfer * - or checks the balance of each account * - * @tags: [uses_transactions] + * @tags: [uses_transactions, assumes_snapshot_transactions] */ // For withTxnAndAutoRetry. diff --git a/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple_repeated_reads.js b/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple_repeated_reads.js index 4ea2e8df184..a6a821e207a 100644 --- a/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple_repeated_reads.js +++ b/jstests/concurrency/fsm_workloads/multi_statement_transaction_simple_repeated_reads.js @@ -3,7 +3,7 @@ /** * Performs repeated reads of the documents in the collection to test snapshot isolation. * - * @tags: [uses_transactions] + * @tags: [uses_transactions, assumes_snapshot_transactions] */ load('jstests/concurrency/fsm_libs/extend_workload.js'); // for extendWorkload |