test_kind: js_test selector: roots: - jstests/core/**/*.js exclude_files: # Transactions do not support retryability of individual operations. # TODO: Remove this once it is supported (SERVER-33952). - jstests/core/txns/**/*.js # These tests are not expected to pass with replica-sets: - jstests/core/capped_update.js - jstests/core/dbadmin.js - jstests/core/opcounters_write_cmd.js - jstests/core/read_after_optime.js # No-op retries are not ignored by top, the profiler, or opcount. - jstests/core/operation_latency_histogram.js - jstests/core/profile2.js - jstests/core/profile3.js - jstests/core/profile_findandmodify.js - jstests/core/top.js - jstests/core/views/views_stats.js # Uses plan cache commands. - jstests/core/restart_catalog.js # TODO SERVER-31249: getLastError should not be affected by no-op retries. - jstests/core/bulk_legacy_enforce_gle.js # TODO SERVER-31242: findAndModify no-op retry should respect the fields option. - jstests/core/crud_api.js - jstests/core/find_and_modify2.js - jstests/core/find_and_modify_server6865.js # TODO SERVER-31245: Inserts to "system.indexes" bypass the check for retryability. - jstests/core/batch_write_command_insert.js # Stepdown commands during fsync lock will fail. - jstests/core/currentop.js - jstests/core/fsync.js - jstests/core/killop_drop_collection.js # Expect drops/creates to fail or have certain a response: - jstests/core/drop.js - jstests/core/dropdb.js - jstests/core/explain_upsert.js - jstests/core/indexes_multiple_commands.js # Expect certain responses, but retries of successfully completed commands may return # different values: - jstests/core/create_indexes.js - jstests/core/objid5.js # Expect results to return in a certain order, secondaries may apply ops out of order. - jstests/core/coveredIndex1.js - jstests/core/sortc.js # Assert on the ismaster field of an isMaster response. If a primary steps down after accepting # an isMaster command and returns before its connection is closed, the response can contain # ismaster: false. - jstests/core/dbadmin.js - jstests/core/ismaster.js - jstests/core/bench_test*.js # benchRun() used for writes - jstests/core/connection_string_validation.js # Does not expect a replica set connection string. - jstests/core/explain_large_bounds.js # Stepdown can timeout waiting for global lock. - jstests/core/insert2.js # Creates new mongo connection. - jstests/core/list_collections_filter.js # Temporary collections are dropped on failover. - jstests/core/startup_log.js # Checks pid, which is different on each server. - jstests/core/validate_cmd_ns.js # Calls _exec() directly, not retryable. # Creates new mongo connection but won't retry connecting. - jstests/core/shell_connection_strings.js # Explain command runs for 6 seconds in this test, whereas we kill the primary every 8 seconds. If # it takes longer than two seconds for the new primary to step up, there isn't enough time for the # explain command to run. - jstests/core/explain2.js # Starts a parallel shell but won't restart it after unclean shutdown. # TODO SERVER-33229: Remove these exclusions - jstests/core/compact_keeps_indexes.js - jstests/core/find_and_modify_concurrent_update.js - jstests/core/shellstartparallel.js exclude_with_any_tags: ## # The next four tags correspond to the special errors thrown by the auto_retry_on_network_error.js # override when it refuses to run a certain command. Above each tag are the message(s) that cause # the tag to be warranted. ## # "Refusing to run a test that issues a getMore command since if a network error occurs during # it then we won't know whether the cursor was advanced or not" - requires_getmore # "Refusing to run a test that issues non-retryable write operations since the test likely makes # assertions on the write results and can lead to spurious failures if a network error occurs" - requires_non_retryable_writes # "Refusing to run a test that issues commands that are not blindly retryable" # "Refusing to run a test that issues an aggregation command with $out because it is not # retryable" - requires_non_retryable_commands # "Refusing to run a test that issues commands that may return different values after a failover" # "Refusing to run a test that issues an aggregation command with explain because it may return # incomplete results" # "Refusing to run a test that issues an aggregation command with $listLocalCursors or # $listLocalSessions because they rely on in-memory state that may not survive failovers" # "Refusing to run a test that issues a mapReduce command, because it calls std::terminate() if # interrupted by a stepdown" - does_not_support_stepdowns ## # The next three tags correspond to the special errors thrown by the # set_read_and_write_concerns.js override when it refuses to replace the readConcern or # writeConcern of a particular command. Above each tag are the message(s) that cause the tag to be # warranted. ## # "Cowardly refusing to override read concern of command: ..." - assumes_read_concern_unchanged # "Cowardly refusing to override write concern of command: ..." - assumes_write_concern_unchanged # "Cowardly refusing to run test with overridden write concern when it uses a command that can # only perform w=1 writes: ..." - requires_eval_command ## # The next three tags corresponds to the special errors thrown by the error_on_fast_count.js # override when it refuses to run commands that are innacurate after an unclean shutdown. Above # each tag is the message that causes the tag to be warranted. ## # "Cowardly fail if fastcount is run with a mongod that had an unclean shutdown: ..." - requires_fastcount # "Cowardly fail if dbStats is run with a mongod that had an unclean shutdown: ..." - requires_dbstats # "Cowardly fail if collStats is run with a mongod that had an unclean shutdown: ..." - requires_collstats # "Cowardly fail if unbounded dataSize is run with a mongod that had an unclean shutdown: ..." - requires_datasize executor: archive: tests: true hooks: - CheckReplDBHash - CheckReplOplogs - ValidateCollections config: shell_options: # TODO SERVER-33229: Remove override of startParallelShell eval: >- testingReplication = true; load("jstests/libs/override_methods/auto_retry_on_network_error.js"); db = connect(TestData.connectionString); load("jstests/libs/override_methods/enable_sessions.js"); load("jstests/libs/override_methods/set_read_and_write_concerns.js"); load("jstests/libs/override_methods/fail_unclean_shutdown_incompatible_commands.js"); load("jstests/libs/override_methods/fail_unclean_shutdown_start_parallel_shell.js"); global_vars: TestData: alwaysInjectTransactionNumber: true defaultReadConcernLevel: "majority" logRetryAttempts: true overrideRetryAttempts: 3 sessionOptions: readConcern: level: "majority" # Force DBClientRS to find the primary for non-write commands. readPreference: mode: "primary" retryWrites: true # We specify nodb so the shell used by each test will attempt to connect after loading the # retry logic in auto_retry_on_network_error.js. nodb: "" readMode: commands hooks: - class: ContinuousStepdown kill: true # The CheckReplDBHash hook waits until all operations have replicated to and have been applied # on the secondaries, so we run the ValidateCollections hook after it to ensure we're # validating the entire contents of the collection. - class: CheckReplOplogs - class: CheckReplDBHash - class: ValidateCollections - class: CleanEveryN n: 20 fixture: class: ReplicaSetFixture mongod_options: enableMajorityReadConcern: '' syncdelay: 5 set_parameters: enableTestCommands: 1 numInitialSyncAttempts: 1 enableElectionHandoff: 0 logComponentVerbosity: replication: heartbeats: 2 rollback: 2 storage: recovery: 2 all_nodes_electable: true num_nodes: 3 replset_config_options: settings: catchUpTimeoutMillis: 0