summaryrefslogtreecommitdiff
path: root/jstests/core
diff options
context:
space:
mode:
authorJack Mulrow <jack.mulrow@mongodb.com>2017-11-28 10:10:44 -0500
committerJack Mulrow <jack.mulrow@mongodb.com>2017-12-07 14:36:15 -0500
commit00d92ece19c5c4057d21eb237a2f9905b196191d (patch)
treec8b512f732cb4a2b77f6d24eb41ee0da731dfd18 /jstests/core
parent332ae576ef6e24080c0f8e9755f1574bbb90fdab (diff)
downloadmongo-00d92ece19c5c4057d21eb237a2f9905b196191d.tar.gz
SERVER-31194 Add jscore tags for retryable_writes_jscore_stepdown_passthrough.yml suite
The actual suite will come in a follow-up commit.
Diffstat (limited to 'jstests/core')
-rw-r--r--jstests/core/agg_hint.js2
-rw-r--r--jstests/core/aggregation_getmore_batchsize.js2
-rw-r--r--jstests/core/all3.js2
-rw-r--r--jstests/core/apitest_db.js2
-rw-r--r--jstests/core/apply_ops1.js2
-rw-r--r--jstests/core/apply_ops2.js2
-rw-r--r--jstests/core/apply_ops_atomicity.js2
-rw-r--r--jstests/core/apply_ops_dups.js2
-rw-r--r--jstests/core/apply_ops_index_collation.js2
-rw-r--r--jstests/core/array_match2.js1
-rw-r--r--jstests/core/arrayfind4.js2
-rw-r--r--jstests/core/auth1.js2
-rw-r--r--jstests/core/auth_copydb.js2
-rw-r--r--jstests/core/automation_setparameter.js2
-rw-r--r--jstests/core/basic1.js1
-rw-r--r--jstests/core/basic2.js1
-rw-r--r--jstests/core/batch_size.js2
-rw-r--r--jstests/core/batch_write_collation_estsize.js2
-rw-r--r--jstests/core/batch_write_command_delete.js2
-rw-r--r--jstests/core/batch_write_command_update.js5
-rw-r--r--jstests/core/bulk_api_ordered.js2
-rw-r--r--jstests/core/bulk_api_unordered.js2
-rw-r--r--jstests/core/bypass_doc_validation.js2
-rw-r--r--jstests/core/capped6.js2
-rw-r--r--jstests/core/capped_convertToCapped1.js2
-rw-r--r--jstests/core/capped_empty.js1
-rw-r--r--jstests/core/check_shard_index.js2
-rw-r--r--jstests/core/cleanup_orphaned.js2
-rw-r--r--jstests/core/clone_as_capped_nonexistant.js2
-rw-r--r--jstests/core/collation.js3
-rw-r--r--jstests/core/collation_convert_to_capped.js2
-rw-r--r--jstests/core/collation_plan_cache.js2
-rw-r--r--jstests/core/collection_truncate.js2
-rw-r--r--jstests/core/collmod.js2
-rw-r--r--jstests/core/collmod_bad_spec.js2
-rw-r--r--jstests/core/collmod_without_uuid.js2
-rw-r--r--jstests/core/commands_namespace_parsing.js3
-rw-r--r--jstests/core/commands_that_do_not_write_do_not_accept_wc.js2
-rw-r--r--jstests/core/connection_status.js2
-rw-r--r--jstests/core/constructors.js2
-rw-r--r--jstests/core/convert_to_capped_nonexistant.js2
-rw-r--r--jstests/core/copydatabase_no_id_index.js2
-rw-r--r--jstests/core/copydb.js2
-rw-r--r--jstests/core/count10.js2
-rw-r--r--jstests/core/count2.js2
-rw-r--r--jstests/core/count7.js2
-rw-r--r--jstests/core/count_plan_summary.js2
-rw-r--r--jstests/core/coveredIndex4.js2
-rw-r--r--jstests/core/currentop_predicate.js2
-rw-r--r--jstests/core/cursor1.js1
-rw-r--r--jstests/core/cursora.js2
-rw-r--r--jstests/core/delx.js1
-rw-r--r--jstests/core/distinct3.js2
-rw-r--r--jstests/core/doc_validation.js3
-rw-r--r--jstests/core/doc_validation_invalid_validators.js2
-rw-r--r--jstests/core/doc_validation_options.js2
-rw-r--r--jstests/core/drop3.js2
-rw-r--r--jstests/core/dropdb_race.js2
-rw-r--r--jstests/core/elemMatchProjection.js2
-rw-r--r--jstests/core/ensure_sorted.js2
-rw-r--r--jstests/core/error2.js2
-rw-r--r--jstests/core/eval0.js2
-rw-r--r--jstests/core/eval1.js2
-rw-r--r--jstests/core/eval3.js2
-rw-r--r--jstests/core/eval4.js3
-rw-r--r--jstests/core/eval5.js2
-rw-r--r--jstests/core/eval6.js2
-rw-r--r--jstests/core/eval7.js2
-rw-r--r--jstests/core/eval9.js2
-rw-r--r--jstests/core/eval_mr.js3
-rw-r--r--jstests/core/eval_nolock.js2
-rw-r--r--jstests/core/evala.js2
-rw-r--r--jstests/core/evalb.js2
-rw-r--r--jstests/core/evald.js3
-rw-r--r--jstests/core/evale.js2
-rw-r--r--jstests/core/evalg.js2
-rw-r--r--jstests/core/evalh.js2
-rw-r--r--jstests/core/evalj.js2
-rw-r--r--jstests/core/exhaust.js2
-rw-r--r--jstests/core/exists7.js1
-rw-r--r--jstests/core/exists8.js2
-rw-r--r--jstests/core/explain6.js2
-rw-r--r--jstests/core/explain_agg_write_concern.js3
-rw-r--r--jstests/core/explain_delete.js2
-rw-r--r--jstests/core/explain_execution_error.js2
-rw-r--r--jstests/core/explain_shell_helpers.js2
-rw-r--r--jstests/core/expr.js2
-rw-r--r--jstests/core/find9.js2
-rw-r--r--jstests/core/find_and_modify_empty_update.js2
-rw-r--r--jstests/core/find_getmore_bsonsize.js2
-rw-r--r--jstests/core/find_getmore_cmd.js2
-rw-r--r--jstests/core/finda.js2
-rw-r--r--jstests/core/fts_index2.js2
-rw-r--r--jstests/core/fts_querylang.js2
-rw-r--r--jstests/core/function_string_representations.js2
-rw-r--r--jstests/core/geo_big_polygon.js2
-rw-r--r--jstests/core/geo_big_polygon2.js2
-rw-r--r--jstests/core/geo_big_polygon3.js2
-rw-r--r--jstests/core/geo_box1.js1
-rw-r--r--jstests/core/geo_box1_noindex.js2
-rw-r--r--jstests/core/geo_center_sphere2.js2
-rw-r--r--jstests/core/geo_circle5.js2
-rw-r--r--jstests/core/geo_mapreduce.js2
-rw-r--r--jstests/core/geo_mapreduce2.js2
-rw-r--r--jstests/core/geo_operator_crs.js2
-rw-r--r--jstests/core/geo_s2cursorlimitskip.js2
-rw-r--r--jstests/core/geo_s2descindex.js2
-rw-r--r--jstests/core/geo_s2near.js2
-rw-r--r--jstests/core/geo_s2nearComplex.js2
-rw-r--r--jstests/core/geo_uniqueDocs2.js2
-rw-r--r--jstests/core/geo_update1.js1
-rw-r--r--jstests/core/geo_update2.js1
-rw-r--r--jstests/core/geo_update_btree.js2
-rw-r--r--jstests/core/geo_update_btree2.js2
-rw-r--r--jstests/core/geo_update_dedup.js2
-rw-r--r--jstests/core/geo_withinquery.js2
-rw-r--r--jstests/core/geoc.js2
-rw-r--r--jstests/core/getlog1.js2
-rw-r--r--jstests/core/getlog2.js2
-rw-r--r--jstests/core/getmore_cmd_maxtimems.js2
-rw-r--r--jstests/core/getmore_invalidated_cursors.js2
-rw-r--r--jstests/core/getmore_invalidated_documents.js2
-rw-r--r--jstests/core/idhack.js1
-rw-r--r--jstests/core/in4.js2
-rw-r--r--jstests/core/index1.js1
-rw-r--r--jstests/core/index13.js2
-rw-r--r--jstests/core/index_arr2.js2
-rw-r--r--jstests/core/index_bigkeys_nofail.js2
-rw-r--r--jstests/core/index_bigkeys_validation.js2
-rw-r--r--jstests/core/index_check2.js1
-rw-r--r--jstests/core/index_dropdups_ignore.js2
-rw-r--r--jstests/core/index_filter_commands.js2
-rw-r--r--jstests/core/index_many.js2
-rw-r--r--jstests/core/index_multiple_compatibility.js2
-rw-r--r--jstests/core/index_partial_read_ops.js2
-rw-r--r--jstests/core/index_partial_write_ops.js2
-rw-r--r--jstests/core/index_sparse1.js2
-rw-r--r--jstests/core/index_stats.js2
-rw-r--r--jstests/core/indexe.js1
-rw-r--r--jstests/core/indexr.js2
-rw-r--r--jstests/core/indexu.js2
-rw-r--r--jstests/core/isolated.js2
-rw-r--r--jstests/core/js1.js2
-rw-r--r--jstests/core/js2.js1
-rw-r--r--jstests/core/js3.js2
-rw-r--r--jstests/core/js7.js2
-rw-r--r--jstests/core/js9.js2
-rw-r--r--jstests/core/json_schema/additional_items.js2
-rw-r--r--jstests/core/json_schema/additional_properties.js2
-rw-r--r--jstests/core/json_schema/bsontype.js2
-rw-r--r--jstests/core/json_schema/dependencies.js2
-rw-r--r--jstests/core/json_schema/items.js2
-rw-r--r--jstests/core/json_schema/json_schema.js2
-rw-r--r--jstests/core/json_schema/logical_keywords.js2
-rw-r--r--jstests/core/json_schema/min_max_items.js2
-rw-r--r--jstests/core/json_schema/min_max_properties.js2
-rw-r--r--jstests/core/json_schema/misc_validation.js3
-rw-r--r--jstests/core/json_schema/pattern_properties.js2
-rw-r--r--jstests/core/json_schema/required.js2
-rw-r--r--jstests/core/json_schema/unique_items.js2
-rw-r--r--jstests/core/kill_cursors.js2
-rw-r--r--jstests/core/list_collections1.js2
-rw-r--r--jstests/core/list_indexes.js2
-rw-r--r--jstests/core/list_indexes_invalidation.js2
-rw-r--r--jstests/core/list_namespaces_invalidation.js2
-rw-r--r--jstests/core/loadserverscripts.js1
-rw-r--r--jstests/core/logprocessdetails.js2
-rw-r--r--jstests/core/max_time_ms.js2
-rw-r--r--jstests/core/mr1.js1
-rw-r--r--jstests/core/mr2.js2
-rw-r--r--jstests/core/mr3.js1
-rw-r--r--jstests/core/mr4.js1
-rw-r--r--jstests/core/mr5.js1
-rw-r--r--jstests/core/mr_bigobject.js1
-rw-r--r--jstests/core/mr_bigobject_replace.js2
-rw-r--r--jstests/core/mr_comments.js1
-rw-r--r--jstests/core/mr_errorhandling.js2
-rw-r--r--jstests/core/mr_index.js1
-rw-r--r--jstests/core/mr_index2.js1
-rw-r--r--jstests/core/mr_index3.js1
-rw-r--r--jstests/core/mr_killop.js2
-rw-r--r--jstests/core/mr_merge.js2
-rw-r--r--jstests/core/mr_merge2.js2
-rw-r--r--jstests/core/mr_mutable_properties.js2
-rw-r--r--jstests/core/mr_optim.js2
-rw-r--r--jstests/core/mr_outreduce.js2
-rw-r--r--jstests/core/mr_outreduce2.js2
-rw-r--r--jstests/core/mr_replaceIntoDB.js1
-rw-r--r--jstests/core/mr_sort.js2
-rw-r--r--jstests/core/mr_stored.js1
-rw-r--r--jstests/core/mr_tolerates_js_exception.js2
-rw-r--r--jstests/core/mr_undef.js1
-rw-r--r--jstests/core/nestedarr1.js2
-rw-r--r--jstests/core/nestedobj1.js2
-rw-r--r--jstests/core/nin2.js2
-rw-r--r--jstests/core/no_db_created.js2
-rw-r--r--jstests/core/not2.js2
-rw-r--r--jstests/core/notablescan.js2
-rw-r--r--jstests/core/ns_length.js2
-rw-r--r--jstests/core/numberlong2.js2
-rw-r--r--jstests/core/optimized_match_explain.js2
-rw-r--r--jstests/core/or4.js3
-rw-r--r--jstests/core/or5.js2
-rw-r--r--jstests/core/or7.js2
-rw-r--r--jstests/core/or8.js2
-rw-r--r--jstests/core/or9.js2
-rw-r--r--jstests/core/orc.js2
-rw-r--r--jstests/core/org.js2
-rw-r--r--jstests/core/orh.js2
-rw-r--r--jstests/core/oro.js2
-rw-r--r--jstests/core/plan_cache_clear.js2
-rw-r--r--jstests/core/plan_cache_list_plans.js2
-rw-r--r--jstests/core/plan_cache_list_shapes.js2
-rw-r--r--jstests/core/plan_cache_shell_helpers.js2
-rw-r--r--jstests/core/profile1.js2
-rw-r--r--jstests/core/profile_agg.js2
-rw-r--r--jstests/core/profile_count.js2
-rw-r--r--jstests/core/profile_delete.js2
-rw-r--r--jstests/core/profile_distinct.js2
-rw-r--r--jstests/core/profile_find.js2
-rw-r--r--jstests/core/profile_geonear.js2
-rw-r--r--jstests/core/profile_getmore.js2
-rw-r--r--jstests/core/profile_group.js2
-rw-r--r--jstests/core/profile_insert.js2
-rw-r--r--jstests/core/profile_list_collections.js2
-rw-r--r--jstests/core/profile_list_indexes.js2
-rw-r--r--jstests/core/profile_mapreduce.js2
-rw-r--r--jstests/core/profile_no_such_db.js2
-rw-r--r--jstests/core/profile_parallel_collection_scan.js2
-rw-r--r--jstests/core/profile_repair_cursor.js2
-rw-r--r--jstests/core/profile_sampling.js1
-rw-r--r--jstests/core/profile_update.js2
-rw-r--r--jstests/core/proj_key1.js1
-rw-r--r--jstests/core/push_sort.js2
-rw-r--r--jstests/core/queryoptimizer3.js2
-rw-r--r--jstests/core/queryoptimizera.js2
-rw-r--r--jstests/core/recursion.js2
-rw-r--r--jstests/core/remove.js2
-rw-r--r--jstests/core/remove2.js2
-rw-r--r--jstests/core/remove3.js1
-rw-r--r--jstests/core/remove4.js2
-rw-r--r--jstests/core/remove6.js1
-rw-r--r--jstests/core/remove7.js1
-rw-r--r--jstests/core/remove8.js3
-rw-r--r--jstests/core/remove9.js2
-rw-r--r--jstests/core/remove_justone.js2
-rw-r--r--jstests/core/remove_undefined.js2
-rw-r--r--jstests/core/removea.js2
-rw-r--r--jstests/core/removeb.js2
-rw-r--r--jstests/core/removec.js2
-rw-r--r--jstests/core/rename.js2
-rw-r--r--jstests/core/rename2.js2
-rw-r--r--jstests/core/rename3.js2
-rw-r--r--jstests/core/rename4.js2
-rw-r--r--jstests/core/rename5.js2
-rw-r--r--jstests/core/rename6.js2
-rw-r--r--jstests/core/rename7.js2
-rw-r--r--jstests/core/rename8.js2
-rw-r--r--jstests/core/rename_stayTemp.js2
-rw-r--r--jstests/core/repair_database.js2
-rw-r--r--jstests/core/role_management_helpers.js2
-rw-r--r--jstests/core/server1470.js2
-rw-r--r--jstests/core/set_param1.js2
-rw-r--r--jstests/core/shell_writeconcern.js2
-rw-r--r--jstests/core/show_record_id.js2
-rw-r--r--jstests/core/snapshot_queries.js2
-rw-r--r--jstests/core/sort7.js2
-rw-r--r--jstests/core/sort_array.js2
-rw-r--r--jstests/core/sortd.js2
-rw-r--r--jstests/core/sortf.js2
-rw-r--r--jstests/core/sortg.js2
-rw-r--r--jstests/core/sortk.js2
-rw-r--r--jstests/core/stages_and_hash.js2
-rw-r--r--jstests/core/stages_and_sorted.js2
-rw-r--r--jstests/core/stages_collection_scan.js2
-rw-r--r--jstests/core/stages_delete.js2
-rw-r--r--jstests/core/stages_fetch.js2
-rw-r--r--jstests/core/stages_ixscan.js2
-rw-r--r--jstests/core/stages_limit_skip.js2
-rw-r--r--jstests/core/stages_mergesort.js2
-rw-r--r--jstests/core/stages_or.js2
-rw-r--r--jstests/core/stages_text.js2
-rw-r--r--jstests/core/storefunc.js2
-rw-r--r--jstests/core/system_profile.js3
-rw-r--r--jstests/core/tailable_cursor_invalidation.js2
-rw-r--r--jstests/core/tailable_getmore_batch_size.js2
-rw-r--r--jstests/core/tailable_skip_limit.js2
-rw-r--r--jstests/core/temp_cleanup.js1
-rw-r--r--jstests/core/type3.js2
-rw-r--r--jstests/core/type_array.js2
-rw-r--r--jstests/core/update7.js2
-rw-r--r--jstests/core/update_arrayFilters.js2
-rw-r--r--jstests/core/update_arraymatch2.js2
-rw-r--r--jstests/core/update_arraymatch3.js1
-rw-r--r--jstests/core/update_arraymatch5.js1
-rw-r--r--jstests/core/update_arraymatch7.js2
-rw-r--r--jstests/core/update_bit_examples.js2
-rw-r--r--jstests/core/update_currentdate_examples.js2
-rw-r--r--jstests/core/update_modifier_pop.js2
-rw-r--r--jstests/core/update_mul_examples.js2
-rw-r--r--jstests/core/update_multi3.js1
-rw-r--r--jstests/core/update_multi4.js1
-rw-r--r--jstests/core/update_multi5.js2
-rw-r--r--jstests/core/update_multi6.js2
-rw-r--r--jstests/core/updatef.js2
-rw-r--r--jstests/core/updatei.js2
-rw-r--r--jstests/core/updatej.js2
-rw-r--r--jstests/core/updatel.js2
-rw-r--r--jstests/core/updatem.js2
-rw-r--r--jstests/core/upsert_and.js2
-rw-r--r--jstests/core/user_management_helpers.js2
-rw-r--r--jstests/core/validate_user_documents.js2
-rw-r--r--jstests/core/verify_update_mods.js2
-rw-r--r--jstests/core/views/duplicate_ns.js2
-rw-r--r--jstests/core/views/invalid_system_views.js2
-rw-r--r--jstests/core/views/views_aggregation.js3
-rw-r--r--jstests/core/views/views_all_commands.js3
-rw-r--r--jstests/core/views/views_change.js2
-rw-r--r--jstests/core/views/views_collation.js2
-rw-r--r--jstests/core/views/views_find.js2
-rw-r--r--jstests/core/views/views_rename.js2
-rw-r--r--jstests/core/views/views_validation.js2
-rw-r--r--jstests/core/where4.js2
-rw-r--r--jstests/core/write_commands_reject_unknown_fields.js2
-rw-r--r--jstests/core/write_result.js2
325 files changed, 537 insertions, 91 deletions
diff --git a/jstests/core/agg_hint.js b/jstests/core/agg_hint.js
index e578448d4d6..6a376a6c385 100644
--- a/jstests/core/agg_hint.js
+++ b/jstests/core/agg_hint.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, does_not_support_stepdowns]
// Confirms correct behavior for hinted aggregation execution. This includes tests for scenarios
// where agg execution differs from query. It also includes confirmation that hint works for find
diff --git a/jstests/core/aggregation_getmore_batchsize.js b/jstests/core/aggregation_getmore_batchsize.js
index 9072afbc9b8..c0e12cfced3 100644
--- a/jstests/core/aggregation_getmore_batchsize.js
+++ b/jstests/core/aggregation_getmore_batchsize.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// this is a simple test to make sure that batchSize gets propagated to the cursors returned
// from the aggregate sell helper
diff --git a/jstests/core/all3.js b/jstests/core/all3.js
index ae1a9460089..37cb6c690b2 100644
--- a/jstests/core/all3.js
+++ b/jstests/core/all3.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check that $all matching null is consistent with $in - SERVER-3820
t = db.jstests_all3;
diff --git a/jstests/core/apitest_db.js b/jstests/core/apitest_db.js
index be90b9eb877..8d5d71b70be 100644
--- a/jstests/core/apitest_db.js
+++ b/jstests/core/apitest_db.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
/**
* Tests for the db object enhancement
*/
diff --git a/jstests/core/apply_ops1.js b/jstests/core/apply_ops1.js
index 6dc551e766f..94a9bb22420 100644
--- a/jstests/core/apply_ops1.js
+++ b/jstests/core/apply_ops1.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
(function() {
"use strict";
diff --git a/jstests/core/apply_ops2.js b/jstests/core/apply_ops2.js
index 4e99cee37ff..b46f119d4f7 100644
--- a/jstests/core/apply_ops2.js
+++ b/jstests/core/apply_ops2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Test applyops upsert flag SERVER-7452
var t = db.apply_ops2;
diff --git a/jstests/core/apply_ops_atomicity.js b/jstests/core/apply_ops_atomicity.js
index e704815a889..ad494a2f7c1 100644
--- a/jstests/core/apply_ops_atomicity.js
+++ b/jstests/core/apply_ops_atomicity.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// SERVER-23326: Make applyOps atomic for CRUD operations
(function() {
'use strict';
diff --git a/jstests/core/apply_ops_dups.js b/jstests/core/apply_ops_dups.js
index bdca02a605c..01e25cbe802 100644
--- a/jstests/core/apply_ops_dups.js
+++ b/jstests/core/apply_ops_dups.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
(function() {
"use strict";
var t = db.apply_ops_dups;
diff --git a/jstests/core/apply_ops_index_collation.js b/jstests/core/apply_ops_index_collation.js
index 6ac326c6851..f05080bc819 100644
--- a/jstests/core/apply_ops_index_collation.js
+++ b/jstests/core/apply_ops_index_collation.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands]
// Tests creation of indexes using applyOps for collections with a non-simple default collation.
// Indexes created through applyOps should be built exactly according to their index spec, without
diff --git a/jstests/core/array_match2.js b/jstests/core/array_match2.js
index 44cbfe33941..3e0dde8f5f5 100644
--- a/jstests/core/array_match2.js
+++ b/jstests/core/array_match2.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.jstests_array_match2;
t.drop();
diff --git a/jstests/core/arrayfind4.js b/jstests/core/arrayfind4.js
index a43a914b930..545f9e9acac 100644
--- a/jstests/core/arrayfind4.js
+++ b/jstests/core/arrayfind4.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test query empty array SERVER-2258
t = db.jstests_arrayfind4;
diff --git a/jstests/core/auth1.js b/jstests/core/auth1.js
index 525785b74b7..d6b7bf152e6 100644
--- a/jstests/core/auth1.js
+++ b/jstests/core/auth1.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
var mydb = db.getSiblingDB('auth1_db');
mydb.dropAllUsers();
diff --git a/jstests/core/auth_copydb.js b/jstests/core/auth_copydb.js
index ae0e6888c01..176061b423e 100644
--- a/jstests/core/auth_copydb.js
+++ b/jstests/core/auth_copydb.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
a = db.getSisterDB("copydb2-test-a");
b = db.getSisterDB("copydb2-test-b");
diff --git a/jstests/core/automation_setparameter.js b/jstests/core/automation_setparameter.js
index d869baf4c97..d2bc41b676a 100644
--- a/jstests/core/automation_setparameter.js
+++ b/jstests/core/automation_setparameter.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Tests that using setParameter to update the parameter 'automationServiceDescriptor' causes a
// field with that name to be echoed back in isMaster. See SERVER-18399 for more details.
diff --git a/jstests/core/basic1.js b/jstests/core/basic1.js
index f4ca8a283d9..cc2917fb5a3 100644
--- a/jstests/core/basic1.js
+++ b/jstests/core/basic1.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.getCollection("basic1");
t.drop();
diff --git a/jstests/core/basic2.js b/jstests/core/basic2.js
index 50b3db323ce..7c68a3e4f3a 100644
--- a/jstests/core/basic2.js
+++ b/jstests/core/basic2.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.getCollection("basic2");
t.drop();
diff --git a/jstests/core/batch_size.js b/jstests/core/batch_size.js
index 3dfbe0face6..b715f936052 100644
--- a/jstests/core/batch_size.js
+++ b/jstests/core/batch_size.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test subtleties of batchSize and limit.
var t = db.jstests_batch_size;
diff --git a/jstests/core/batch_write_collation_estsize.js b/jstests/core/batch_write_collation_estsize.js
index 594517da9f9..819060ec37e 100644
--- a/jstests/core/batch_write_collation_estsize.js
+++ b/jstests/core/batch_write_collation_estsize.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Tests that the update and delete batch write operations account for the size of the collation
// specification in the write operation document.
diff --git a/jstests/core/batch_write_command_delete.js b/jstests/core/batch_write_command_delete.js
index 0a05749fae3..4e272571a34 100644
--- a/jstests/core/batch_write_command_delete.js
+++ b/jstests/core/batch_write_command_delete.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
//
// Ensures that mongod respects the batch write protocols for delete
diff --git a/jstests/core/batch_write_command_update.js b/jstests/core/batch_write_command_update.js
index 7c9bf29fae5..8a37d77067e 100644
--- a/jstests/core/batch_write_command_update.js
+++ b/jstests/core/batch_write_command_update.js
@@ -1,10 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// MMap doesn't implement RecordStore::oplogStartHack so it uses the OplogStart stage instead when
-// performing ts queries on the oplog during retry. This is considerable slower since it will
-// have to perform table scans within an extent.
-// @tags: [assumes_unsharded_collection, skip_in_retryable_writes_mmapv1_passthrough]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
//
// Ensures that mongod respects the batch write protocols for updates
diff --git a/jstests/core/bulk_api_ordered.js b/jstests/core/bulk_api_ordered.js
index 45450eee388..2957195065d 100644
--- a/jstests/core/bulk_api_ordered.js
+++ b/jstests/core/bulk_api_ordered.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
var collectionName = "bulk_api_ordered";
var coll = db.getCollection(collectionName);
diff --git a/jstests/core/bulk_api_unordered.js b/jstests/core/bulk_api_unordered.js
index 2cbbeef5920..6db2a607a25 100644
--- a/jstests/core/bulk_api_unordered.js
+++ b/jstests/core/bulk_api_unordered.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
var collectionName = "bulk_api_unordered";
var coll = db.getCollection(collectionName);
diff --git a/jstests/core/bypass_doc_validation.js b/jstests/core/bypass_doc_validation.js
index a627a1749c9..6a9bbde8ffc 100644
--- a/jstests/core/bypass_doc_validation.js
+++ b/jstests/core/bypass_doc_validation.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands]
+
/**
* Tests that various database commands respect the 'bypassDocumentValidation' flag:
*
diff --git a/jstests/core/capped6.js b/jstests/core/capped6.js
index e94e7ea44e8..945567ee976 100644
--- a/jstests/core/capped6.js
+++ b/jstests/core/capped6.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Test NamespaceDetails::cappedTruncateAfter via "captrunc" command
(function() {
var coll = db.capped6;
diff --git a/jstests/core/capped_convertToCapped1.js b/jstests/core/capped_convertToCapped1.js
index 269a33f89a5..d3f35a7fa4d 100644
--- a/jstests/core/capped_convertToCapped1.js
+++ b/jstests/core/capped_convertToCapped1.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// test cloneCollectionAsCapped
source = db.capped_convertToCapped1;
diff --git a/jstests/core/capped_empty.js b/jstests/core/capped_empty.js
index 63272a4e546..e43170405e3 100644
--- a/jstests/core/capped_empty.js
+++ b/jstests/core/capped_empty.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_commands]
t = db.capped_empty;
t.drop();
diff --git a/jstests/core/check_shard_index.js b/jstests/core/check_shard_index.js
index 6551699c65c..28a9027b72c 100644
--- a/jstests/core/check_shard_index.js
+++ b/jstests/core/check_shard_index.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// -------------------------
// CHECKSHARDINGINDEX TEST UTILS
// -------------------------
diff --git a/jstests/core/cleanup_orphaned.js b/jstests/core/cleanup_orphaned.js
index 2ece4316fa2..344d603eb72 100644
--- a/jstests/core/cleanup_orphaned.js
+++ b/jstests/core/cleanup_orphaned.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Test that cleanupOrphaned cannot be run on stand alone mongod.
var res = db.adminCommand({cleanupOrphaned: 'unsharded.coll'});
assert(!res.ok, tojson(res));
diff --git a/jstests/core/clone_as_capped_nonexistant.js b/jstests/core/clone_as_capped_nonexistant.js
index f9e68ee9648..a307f008ec3 100644
--- a/jstests/core/clone_as_capped_nonexistant.js
+++ b/jstests/core/clone_as_capped_nonexistant.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
(function() {
"use strict";
// This test ensures that CloneCollectionAsCapped()ing a nonexistent collection will not
diff --git a/jstests/core/collation.js b/jstests/core/collation.js
index 98da1ba8ebf..1a871d97c22 100644
--- a/jstests/core/collation.js
+++ b/jstests/core/collation.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, does_not_support_stepdowns,
+// requires_non_retryable_commands, requires_non_retryable_writes]
// Integration tests for the collation feature.
(function() {
diff --git a/jstests/core/collation_convert_to_capped.js b/jstests/core/collation_convert_to_capped.js
index db79288f51b..9366d6a0e03 100644
--- a/jstests/core/collation_convert_to_capped.js
+++ b/jstests/core/collation_convert_to_capped.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Test that the collection created with the "convertToCapped" command inherits the default
// collation of the corresponding collection.
(function() {
diff --git a/jstests/core/collation_plan_cache.js b/jstests/core/collation_plan_cache.js
index 6cb938dbc36..b28747a88cf 100644
--- a/jstests/core/collation_plan_cache.js
+++ b/jstests/core/collation_plan_cache.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Integration testing for the plan cache and index filter commands with collation.
(function() {
'use strict';
diff --git a/jstests/core/collection_truncate.js b/jstests/core/collection_truncate.js
index 08de3e8c1ed..c4e868046c8 100644
--- a/jstests/core/collection_truncate.js
+++ b/jstests/core/collection_truncate.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// SERVER-15033 truncate on a regular collection
var t = db.getCollection('collection_truncate');
diff --git a/jstests/core/collmod.js b/jstests/core/collmod.js
index 8ed2ee503e4..60cf17ceb05 100644
--- a/jstests/core/collmod.js
+++ b/jstests/core/collmod.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands]
// Basic js tests for the collMod command.
// Test setting the usePowerOf2Sizes flag, and modifying TTL indexes.
diff --git a/jstests/core/collmod_bad_spec.js b/jstests/core/collmod_bad_spec.js
index 0402a248f30..a41e3c4f46e 100644
--- a/jstests/core/collmod_bad_spec.js
+++ b/jstests/core/collmod_bad_spec.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands]
// This is a regression test for SERVER-21545.
//
diff --git a/jstests/core/collmod_without_uuid.js b/jstests/core/collmod_without_uuid.js
index 87d65d398b2..43ecd9852d8 100644
--- a/jstests/core/collmod_without_uuid.js
+++ b/jstests/core/collmod_without_uuid.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* SERVER-32125 Check that applyOps commands with collMod without UUID don't strip it
*/
diff --git a/jstests/core/commands_namespace_parsing.js b/jstests/core/commands_namespace_parsing.js
index ea515df6ba7..51b68ff9eaf 100644
--- a/jstests/core/commands_namespace_parsing.js
+++ b/jstests/core/commands_namespace_parsing.js
@@ -1,7 +1,8 @@
// Cannot implicitly shard accessed collections because the error response from the shard about
// using the empty string as the out collection name is converted to an error and no longer retains
// the "code" property.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns, requires_getmore,
+// requires_non_retryable_commands]
// This file tests that commands namespace parsing rejects embedded null bytes.
// Note that for each command, a properly formatted command object must be passed to the helper
diff --git a/jstests/core/commands_that_do_not_write_do_not_accept_wc.js b/jstests/core/commands_that_do_not_write_do_not_accept_wc.js
index 4b882c95fc0..a87a38d8ae4 100644
--- a/jstests/core/commands_that_do_not_write_do_not_accept_wc.js
+++ b/jstests/core/commands_that_do_not_write_do_not_accept_wc.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
/**
* This file tests commands that do not support write concern. It passes both valid and invalid
* writeConcern fields to commands and expects the commands to fail with a writeConcernNotSupported
diff --git a/jstests/core/connection_status.js b/jstests/core/connection_status.js
index 47aab3f0f43..c769aabf284 100644
--- a/jstests/core/connection_status.js
+++ b/jstests/core/connection_status.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Tests the connectionStatus command
(function() {
"use strict";
diff --git a/jstests/core/constructors.js b/jstests/core/constructors.js
index b1a6b144896..52ce8f04065 100644
--- a/jstests/core/constructors.js
+++ b/jstests/core/constructors.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands]
+
// Tests to see what validity checks are done for 10gen specific object construction
// Takes a list of constructors and returns a new list with an extra entry for each constructor with
diff --git a/jstests/core/convert_to_capped_nonexistant.js b/jstests/core/convert_to_capped_nonexistant.js
index 08996087da7..6f878a3e372 100644
--- a/jstests/core/convert_to_capped_nonexistant.js
+++ b/jstests/core/convert_to_capped_nonexistant.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// This test ensures that ConvertToCapped()ing a nonexistent collection will not cause the server to
// abort (SERVER-13750)
diff --git a/jstests/core/copydatabase_no_id_index.js b/jstests/core/copydatabase_no_id_index.js
index 2cd1225d78b..0776626f643 100644
--- a/jstests/core/copydatabase_no_id_index.js
+++ b/jstests/core/copydatabase_no_id_index.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* This test creates a collection with autoIndexId: false. It then copies the database and expects
* the new collection to not have an _id index either.
diff --git a/jstests/core/copydb.js b/jstests/core/copydb.js
index 4494bcc4716..5939f62d975 100644
--- a/jstests/core/copydb.js
+++ b/jstests/core/copydb.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Basic tests for the copydb command. These only test copying from the same server; these do not
// test the ability of copydb to pull a database from another server (with or without auth).
diff --git a/jstests/core/count10.js b/jstests/core/count10.js
index 2578411b594..5e3bf10a8af 100644
--- a/jstests/core/count10.js
+++ b/jstests/core/count10.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test that interrupting a count returns an error code.
t = db.count10;
diff --git a/jstests/core/count2.js b/jstests/core/count2.js
index 0999a27e9ff..356e03ab6dd 100644
--- a/jstests/core/count2.js
+++ b/jstests/core/count2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
t = db.count2;
t.drop();
diff --git a/jstests/core/count7.js b/jstests/core/count7.js
index 8a3255d712a..95417e241de 100644
--- a/jstests/core/count7.js
+++ b/jstests/core/count7.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check normal count matching and deduping.
t = db.jstests_count7;
diff --git a/jstests/core/count_plan_summary.js b/jstests/core/count_plan_summary.js
index 0220eb435f2..d252c00919a 100644
--- a/jstests/core/count_plan_summary.js
+++ b/jstests/core/count_plan_summary.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test that the plan summary string appears in db.currentOp() for
// count operations. SERVER-14064.
diff --git a/jstests/core/coveredIndex4.js b/jstests/core/coveredIndex4.js
index e7c6cc93a76..1f03c387f3b 100644
--- a/jstests/core/coveredIndex4.js
+++ b/jstests/core/coveredIndex4.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test covered index projection with $or clause, specifically in getMore
// SERVER-4980
diff --git a/jstests/core/currentop_predicate.js b/jstests/core/currentop_predicate.js
index efc1f921e6e..049d7d3ab30 100644
--- a/jstests/core/currentop_predicate.js
+++ b/jstests/core/currentop_predicate.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Tests the use of a match predicate with the currentOp command.
(function() {
// Test a predicate that matches the currentOp operation we are running.
diff --git a/jstests/core/cursor1.js b/jstests/core/cursor1.js
index c98bec5044c..b6b577e2153 100644
--- a/jstests/core/cursor1.js
+++ b/jstests/core/cursor1.js
@@ -1,3 +1,4 @@
+// @tags: [requires_getmore]
t = db.cursor1;
t.drop();
diff --git a/jstests/core/cursora.js b/jstests/core/cursora.js
index 1ee0a6d3e69..ec9d39442dd 100644
--- a/jstests/core/cursora.js
+++ b/jstests/core/cursora.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore, requires_non_retryable_writes]
+
t = db.cursora;
function run(n, atomic) {
diff --git a/jstests/core/delx.js b/jstests/core/delx.js
index 004b54ee6ca..f8a0b68f380 100644
--- a/jstests/core/delx.js
+++ b/jstests/core/delx.js
@@ -1,3 +1,4 @@
+// @tags: [requires_getmore, requires_non_retryable_writes]
a = db.getSisterDB("delxa");
b = db.getSisterDB("delxb");
diff --git a/jstests/core/distinct3.js b/jstests/core/distinct3.js
index 6ab21599f97..94a289c8fa6 100644
--- a/jstests/core/distinct3.js
+++ b/jstests/core/distinct3.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Yield and delete test case for query optimizer cursor. SERVER-4401
t = db.jstests_distinct3;
diff --git a/jstests/core/doc_validation.js b/jstests/core/doc_validation.js
index 9d33626ae1e..1addda2168c 100644
--- a/jstests/core/doc_validation.js
+++ b/jstests/core/doc_validation.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands,
+// requires_non_retryable_writes]
// Test basic inserts and updates with document validation.
(function() {
diff --git a/jstests/core/doc_validation_invalid_validators.js b/jstests/core/doc_validation_invalid_validators.js
index 0a923bd8cb8..102f2c2afe3 100644
--- a/jstests/core/doc_validation_invalid_validators.js
+++ b/jstests/core/doc_validation_invalid_validators.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands]
// Verify invalid validator statements won't work and that we
// can't create validated collections on restricted databases.
diff --git a/jstests/core/doc_validation_options.js b/jstests/core/doc_validation_options.js
index 8e4f34c3602..e9ba64d8029 100644
--- a/jstests/core/doc_validation_options.js
+++ b/jstests/core/doc_validation_options.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands]
(function() {
"use strict";
diff --git a/jstests/core/drop3.js b/jstests/core/drop3.js
index a3807faab12..e06cad28e73 100644
--- a/jstests/core/drop3.js
+++ b/jstests/core/drop3.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
t = db.jstests_drop3;
sub = t.sub;
diff --git a/jstests/core/dropdb_race.js b/jstests/core/dropdb_race.js
index bd5e7e5ddba..9366df68a9b 100644
--- a/jstests/core/dropdb_race.js
+++ b/jstests/core/dropdb_race.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// test dropping a db with simultaneous commits
m = db.getMongo();
diff --git a/jstests/core/elemMatchProjection.js b/jstests/core/elemMatchProjection.js
index 7114959b6ca..ec623793ba7 100644
--- a/jstests/core/elemMatchProjection.js
+++ b/jstests/core/elemMatchProjection.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Tests for $elemMatch projections and $ positional operator projection.
(function() {
"use strict";
diff --git a/jstests/core/ensure_sorted.js b/jstests/core/ensure_sorted.js
index 13c48708aff..c2d29728c59 100644
--- a/jstests/core/ensure_sorted.js
+++ b/jstests/core/ensure_sorted.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_getmore]
// SERVER-17011 Tests whether queries which specify sort and batch size can generate results out of
// order due to the ntoreturn hack. The EnsureSortedStage should solve this problem.
diff --git a/jstests/core/error2.js b/jstests/core/error2.js
index 6f0b95bc17e..7c26f5688d7 100644
--- a/jstests/core/error2.js
+++ b/jstests/core/error2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Test that client gets stack trace on failed invoke
f = db.jstests_error2;
diff --git a/jstests/core/eval0.js b/jstests/core/eval0.js
index 5802f2597cb..4592f3c9d60 100644
--- a/jstests/core/eval0.js
+++ b/jstests/core/eval0.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
assert.writeOK(db.evalprep.insert({}), "db must exist for eval to succeed");
db.evalprep.drop();
assert.eq(17,
diff --git a/jstests/core/eval1.js b/jstests/core/eval1.js
index 237bd4bb020..a18b6176c5c 100644
--- a/jstests/core/eval1.js
+++ b/jstests/core/eval1.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.eval1;
t.drop();
diff --git a/jstests/core/eval3.js b/jstests/core/eval3.js
index 8cdd3723977..eacb6d70203 100644
--- a/jstests/core/eval3.js
+++ b/jstests/core/eval3.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.eval3;
t.drop();
diff --git a/jstests/core/eval4.js b/jstests/core/eval4.js
index b67aa4b4445..b7d19a4ac3b 100644
--- a/jstests/core/eval4.js
+++ b/jstests/core/eval4.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands,
+// requires_non_retryable_writes]
t = db.eval4;
t.drop();
diff --git a/jstests/core/eval5.js b/jstests/core/eval5.js
index 3b367f00fe3..fc495d86403 100644
--- a/jstests/core/eval5.js
+++ b/jstests/core/eval5.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.eval5;
t.drop();
diff --git a/jstests/core/eval6.js b/jstests/core/eval6.js
index fdb72d96a9a..751bdbf9e34 100644
--- a/jstests/core/eval6.js
+++ b/jstests/core/eval6.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.eval6;
t.drop();
diff --git a/jstests/core/eval7.js b/jstests/core/eval7.js
index 80197fcdde6..32c37139e53 100644
--- a/jstests/core/eval7.js
+++ b/jstests/core/eval7.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
assert.writeOK(db.evalprep.insert({}), "db must exist for eval to succeed");
db.evalprep.drop();
diff --git a/jstests/core/eval9.js b/jstests/core/eval9.js
index 3338a34fc60..2f015b46485 100644
--- a/jstests/core/eval9.js
+++ b/jstests/core/eval9.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
assert.writeOK(db.evalprep.insert({}), "db must exist for eval to succeed");
db.evalprep.drop();
diff --git a/jstests/core/eval_mr.js b/jstests/core/eval_mr.js
index 04de66affb0..9c3ac3c7efe 100644
--- a/jstests/core/eval_mr.js
+++ b/jstests/core/eval_mr.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: Cannot output to a
// non-sharded collection because sharded collection exists already.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns,
+// requires_non_retryable_commands]
// Test that the eval command can't be used to invoke the mapReduce command. SERVER-17889.
(function() {
diff --git a/jstests/core/eval_nolock.js b/jstests/core/eval_nolock.js
index 979a6ddc6dc..8ae7f41f815 100644
--- a/jstests/core/eval_nolock.js
+++ b/jstests/core/eval_nolock.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.eval_nolock;
t.drop();
diff --git a/jstests/core/evala.js b/jstests/core/evala.js
index 8ee0a3bc05f..00c2b548636 100644
--- a/jstests/core/evala.js
+++ b/jstests/core/evala.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.evala;
t.drop();
diff --git a/jstests/core/evalb.js b/jstests/core/evalb.js
index 3391c4cc4f2..a3d9251af57 100644
--- a/jstests/core/evalb.js
+++ b/jstests/core/evalb.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands]
+
// Check the return value of a db.eval function running a database query, and ensure the function's
// contents are logged in the profile log.
diff --git a/jstests/core/evald.js b/jstests/core/evald.js
index 27df8c08973..b4317c4a24a 100644
--- a/jstests/core/evald.js
+++ b/jstests/core/evald.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns,
+// requires_non_retryable_commands]
t = db.jstests_evald;
t.drop();
diff --git a/jstests/core/evale.js b/jstests/core/evale.js
index 59dce866935..8e20ee5177e 100644
--- a/jstests/core/evale.js
+++ b/jstests/core/evale.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.jstests_evale;
t.drop();
diff --git a/jstests/core/evalg.js b/jstests/core/evalg.js
index 0ee0e230264..dcb5b98f000 100644
--- a/jstests/core/evalg.js
+++ b/jstests/core/evalg.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
// SERVER-17499: Test behavior of getMore on aggregation cursor under eval command.
db.evalg.drop();
diff --git a/jstests/core/evalh.js b/jstests/core/evalh.js
index 11e672f6bf4..3881c92be80 100644
--- a/jstests/core/evalh.js
+++ b/jstests/core/evalh.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Test that db.eval does not support auth.
*/
diff --git a/jstests/core/evalj.js b/jstests/core/evalj.js
index f2326fff365..fa5e3305501 100644
--- a/jstests/core/evalj.js
+++ b/jstests/core/evalj.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
(function() {
"use strict";
diff --git a/jstests/core/exhaust.js b/jstests/core/exhaust.js
index cef3b32fcd2..264c8a849b6 100644
--- a/jstests/core/exhaust.js
+++ b/jstests/core/exhaust.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
(function() {
'use strict';
diff --git a/jstests/core/exists7.js b/jstests/core/exists7.js
index ab02a41d445..74ea4e9719c 100644
--- a/jstests/core/exists7.js
+++ b/jstests/core/exists7.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
// Test that non boolean value types are allowed with $explain spec. SERVER-2322
diff --git a/jstests/core/exists8.js b/jstests/core/exists8.js
index 4a8f66461a3..f22a3be44f4 100644
--- a/jstests/core/exists8.js
+++ b/jstests/core/exists8.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test $exists with array element field names SERVER-2897
t = db.jstests_exists8;
diff --git a/jstests/core/explain6.js b/jstests/core/explain6.js
index 4b8c75fa4eb..bd57b19b6cf 100644
--- a/jstests/core/explain6.js
+++ b/jstests/core/explain6.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Basic test which checks the number of documents returned, keys examined, and documents
// examined as reported by explain.
diff --git a/jstests/core/explain_agg_write_concern.js b/jstests/core/explain_agg_write_concern.js
index bd744785082..e007eb5d6d3 100644
--- a/jstests/core/explain_agg_write_concern.js
+++ b/jstests/core/explain_agg_write_concern.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// for output collection of aggregation pipeline.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns,
+// requires_non_retryable_commands]
/**
* Tests related to the aggregate commands behavior with writeConcern and writeConcern + explain.
diff --git a/jstests/core/explain_delete.js b/jstests/core/explain_delete.js
index eeee5c23c14..ce8fd59363b 100644
--- a/jstests/core/explain_delete.js
+++ b/jstests/core/explain_delete.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Tests for explaining the delete command.
var collName = "jstests_explain_delete";
diff --git a/jstests/core/explain_execution_error.js b/jstests/core/explain_execution_error.js
index 1eb08c9cc21..98de41289df 100644
--- a/jstests/core/explain_execution_error.js
+++ b/jstests/core/explain_execution_error.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test that even when the execution of a query fails, explain reports query
// planner information.
diff --git a/jstests/core/explain_shell_helpers.js b/jstests/core/explain_shell_helpers.js
index cfeb9451567..6786e33c80b 100644
--- a/jstests/core/explain_shell_helpers.js
+++ b/jstests/core/explain_shell_helpers.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because the explain output from a mongod when run
// against a sharded collection is wrapped in a "shards" object with keys for each shard.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
// Tests for the .explain() shell helper, which provides syntactic sugar for the explain command.
diff --git a/jstests/core/expr.js b/jstests/core/expr.js
index 174cda3c542..d8636ded871 100644
--- a/jstests/core/expr.js
+++ b/jstests/core/expr.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore, requires_non_retryable_writes]
+
// Tests for $expr in the CRUD commands.
(function() {
"use strict";
diff --git a/jstests/core/find9.js b/jstests/core/find9.js
index 1c56e8c850d..c7a6fbf996e 100644
--- a/jstests/core/find9.js
+++ b/jstests/core/find9.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test that the MaxBytesToReturnToClientAtOnce limit is enforced.
t = db.jstests_find9;
diff --git a/jstests/core/find_and_modify_empty_update.js b/jstests/core/find_and_modify_empty_update.js
index a9b8cb55b34..8bdd7fd43e0 100644
--- a/jstests/core/find_and_modify_empty_update.js
+++ b/jstests/core/find_and_modify_empty_update.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Test passing update:{} to findAndModify. SERVER-13883.
diff --git a/jstests/core/find_getmore_bsonsize.js b/jstests/core/find_getmore_bsonsize.js
index fdad2b1f1d6..6b9008cec51 100644
--- a/jstests/core/find_getmore_bsonsize.js
+++ b/jstests/core/find_getmore_bsonsize.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Ensure that the find and getMore commands can handle documents nearing the 16 MB size limit for
// user-stored BSON documents.
(function() {
diff --git a/jstests/core/find_getmore_cmd.js b/jstests/core/find_getmore_cmd.js
index 3f3d50993e7..5f815fb1d4c 100644
--- a/jstests/core/find_getmore_cmd.js
+++ b/jstests/core/find_getmore_cmd.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Tests that explicitly invoke the find and getMore commands.
(function() {
'use strict';
diff --git a/jstests/core/finda.js b/jstests/core/finda.js
index 711b70f2e25..eeb482318c5 100644
--- a/jstests/core/finda.js
+++ b/jstests/core/finda.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Tests where the QueryOptimizerCursor enters takeover mode during a query rather than a get more.
t = db.jstests_finda;
diff --git a/jstests/core/fts_index2.js b/jstests/core/fts_index2.js
index ecae5edb3a8..51a92e09876 100644
--- a/jstests/core/fts_index2.js
+++ b/jstests/core/fts_index2.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because renameCollection command not supported
// on sharded collections.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
// Test that collections with text indexes can be renamed. SERVER-14027.
diff --git a/jstests/core/fts_querylang.js b/jstests/core/fts_querylang.js
index 148292fbf91..5fb1b8e606c 100644
--- a/jstests/core/fts_querylang.js
+++ b/jstests/core/fts_querylang.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test $text query operator.
var t = db.getSiblingDB("test").getCollection("fts_querylang");
diff --git a/jstests/core/function_string_representations.js b/jstests/core/function_string_representations.js
index af66e9160a9..211733e88fb 100644
--- a/jstests/core/function_string_representations.js
+++ b/jstests/core/function_string_representations.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
/** Demonstrate that mapReduce can accept functions represented by strings.
* Some drivers do not have a type which represents a Javascript function. These languages represent
* the arguments to mapReduce as strings.
diff --git a/jstests/core/geo_big_polygon.js b/jstests/core/geo_big_polygon.js
index c973903863d..2c749486dab 100644
--- a/jstests/core/geo_big_polygon.js
+++ b/jstests/core/geo_big_polygon.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
//
// Test of sample big polygon functionality
//
diff --git a/jstests/core/geo_big_polygon2.js b/jstests/core/geo_big_polygon2.js
index 6576811a57e..fabb31d5b8b 100644
--- a/jstests/core/geo_big_polygon2.js
+++ b/jstests/core/geo_big_polygon2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
//
// Big Polygon related tests
// - Tests the capability for a geo query with a big polygon object (strictCRS)
diff --git a/jstests/core/geo_big_polygon3.js b/jstests/core/geo_big_polygon3.js
index d957664565f..ce2ecd55da3 100644
--- a/jstests/core/geo_big_polygon3.js
+++ b/jstests/core/geo_big_polygon3.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_writes]
+
//
// Big Polygon edge cases
//
diff --git a/jstests/core/geo_box1.js b/jstests/core/geo_box1.js
index b1949063568..c724b0a8b5d 100644
--- a/jstests/core/geo_box1.js
+++ b/jstests/core/geo_box1.js
@@ -1,3 +1,4 @@
+// @tags: [requires_getmore]
t = db.geo_box1;
t.drop();
diff --git a/jstests/core/geo_box1_noindex.js b/jstests/core/geo_box1_noindex.js
index a953149c59f..3bc7b5ad3e2 100644
--- a/jstests/core/geo_box1_noindex.js
+++ b/jstests/core/geo_box1_noindex.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// SERVER-7343: allow $within without a geo index.
t = db.geo_box1_noindex;
t.drop();
diff --git a/jstests/core/geo_center_sphere2.js b/jstests/core/geo_center_sphere2.js
index e2847e8a8b0..a01d7da6fb4 100644
--- a/jstests/core/geo_center_sphere2.js
+++ b/jstests/core/geo_center_sphere2.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of use of $near query instead of geoNear
// command.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_getmore]
//
// Tests the error handling of spherical queries
diff --git a/jstests/core/geo_circle5.js b/jstests/core/geo_circle5.js
index 1b3d67e91b0..1296e68073e 100644
--- a/jstests/core/geo_circle5.js
+++ b/jstests/core/geo_circle5.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// reported as server-1238.
db.server1238.drop();
diff --git a/jstests/core/geo_mapreduce.js b/jstests/core/geo_mapreduce.js
index ebea034d00c..ea83d1e4474 100644
--- a/jstests/core/geo_mapreduce.js
+++ b/jstests/core/geo_mapreduce.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test script from SERVER-1742
// MongoDB test script for mapreduce with geo query
diff --git a/jstests/core/geo_mapreduce2.js b/jstests/core/geo_mapreduce2.js
index 679b6474cc9..9a62d5222d7 100644
--- a/jstests/core/geo_mapreduce2.js
+++ b/jstests/core/geo_mapreduce2.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Geo mapreduce 2 from SERVER-3478
var coll = db.geoMR2;
diff --git a/jstests/core/geo_operator_crs.js b/jstests/core/geo_operator_crs.js
index 13353f2262d..89fb7ca8585 100644
--- a/jstests/core/geo_operator_crs.js
+++ b/jstests/core/geo_operator_crs.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
//
// Tests that the correct CRSes are used for geo queries (based on input geometry)
//
diff --git a/jstests/core/geo_s2cursorlimitskip.js b/jstests/core/geo_s2cursorlimitskip.js
index 427fbf8fe29..dab23124e86 100644
--- a/jstests/core/geo_s2cursorlimitskip.js
+++ b/jstests/core/geo_s2cursorlimitskip.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore]
+
// Test various cursor behaviors
var testDB = db.getSiblingDB("geo_s2cursorlimitskip");
diff --git a/jstests/core/geo_s2descindex.js b/jstests/core/geo_s2descindex.js
index daf5531b31d..5ef5758ae8a 100644
--- a/jstests/core/geo_s2descindex.js
+++ b/jstests/core/geo_s2descindex.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
//
// Tests 2dsphere with descending fields, ensures correct lookup
//
diff --git a/jstests/core/geo_s2near.js b/jstests/core/geo_s2near.js
index 75572483144..fb1ade96c07 100644
--- a/jstests/core/geo_s2near.js
+++ b/jstests/core/geo_s2near.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of use of $near query instead of geoNear
// command.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_getmore]
// Test 2dsphere near search, called via find and geoNear.
t = db.geo_s2near;
diff --git a/jstests/core/geo_s2nearComplex.js b/jstests/core/geo_s2nearComplex.js
index b8c34c16310..9b5111e31d5 100644
--- a/jstests/core/geo_s2nearComplex.js
+++ b/jstests/core/geo_s2nearComplex.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of use of $near query instead of geoNear
// command.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_getmore, requires_non_retryable_writes]
var t = db.get_s2nearcomplex;
t.drop();
diff --git a/jstests/core/geo_uniqueDocs2.js b/jstests/core/geo_uniqueDocs2.js
index 8965a475c93..32caebf4864 100644
--- a/jstests/core/geo_uniqueDocs2.js
+++ b/jstests/core/geo_uniqueDocs2.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of use of $near query instead of geoNear
// command.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Additional checks for geo uniqueDocs and includeLocs SERVER-3139.
// SERVER-12120 uniqueDocs is deprecated.
diff --git a/jstests/core/geo_update1.js b/jstests/core/geo_update1.js
index e966afa7ea9..4bb18256a57 100644
--- a/jstests/core/geo_update1.js
+++ b/jstests/core/geo_update1.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.geo_update1;
t.drop();
diff --git a/jstests/core/geo_update2.js b/jstests/core/geo_update2.js
index ffcf02617be..fe59c55357b 100644
--- a/jstests/core/geo_update2.js
+++ b/jstests/core/geo_update2.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.geo_update2;
t.drop();
diff --git a/jstests/core/geo_update_btree.js b/jstests/core/geo_update_btree.js
index a85d4274415..d40c5ad8719 100644
--- a/jstests/core/geo_update_btree.js
+++ b/jstests/core/geo_update_btree.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Tests whether the geospatial search is stable under btree updates
var coll = db.getCollection("jstests_geo_update_btree");
diff --git a/jstests/core/geo_update_btree2.js b/jstests/core/geo_update_btree2.js
index de867bf8e14..972b579163d 100644
--- a/jstests/core/geo_update_btree2.js
+++ b/jstests/core/geo_update_btree2.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore, requires_non_retryable_writes]
+
// Tests whether the geospatial search is stable under btree updates
//
// Tests the implementation of the 2d search, not the behavior we promise. MongoDB currently
diff --git a/jstests/core/geo_update_dedup.js b/jstests/core/geo_update_dedup.js
index da84e9879a2..2f66e2346cd 100644
--- a/jstests/core/geo_update_dedup.js
+++ b/jstests/core/geo_update_dedup.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of use of $near query instead of geoNear
// command.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Test that updates with geo queries which match
// the same document multiple times only apply
diff --git a/jstests/core/geo_withinquery.js b/jstests/core/geo_withinquery.js
index 7f712ba1e86..24e463d8a9d 100644
--- a/jstests/core/geo_withinquery.js
+++ b/jstests/core/geo_withinquery.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// SERVER-7343: allow $within without a geo index.
t = db.geo_withinquery;
t.drop();
diff --git a/jstests/core/geoc.js b/jstests/core/geoc.js
index 93f3f5c374a..6d24430db54 100644
--- a/jstests/core/geoc.js
+++ b/jstests/core/geoc.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of use of $near query instead of geoNear
// command.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_getmore]
t = db.geoc;
t.drop();
diff --git a/jstests/core/getlog1.js b/jstests/core/getlog1.js
index d19ba7cdde8..d55e68740dd 100644
--- a/jstests/core/getlog1.js
+++ b/jstests/core/getlog1.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// to run:
// ./mongo jstests/<this-file>
diff --git a/jstests/core/getlog2.js b/jstests/core/getlog2.js
index ee9d86198c6..987992dbd67 100644
--- a/jstests/core/getlog2.js
+++ b/jstests/core/getlog2.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// tests getlog as well as slow querying logging
// We turn off gossiping the mongo shell's clusterTime because it causes the slow command log
diff --git a/jstests/core/getmore_cmd_maxtimems.js b/jstests/core/getmore_cmd_maxtimems.js
index 9ea4a872043..755885b800d 100644
--- a/jstests/core/getmore_cmd_maxtimems.js
+++ b/jstests/core/getmore_cmd_maxtimems.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_getmore]
// Test attaching maxTimeMS to a getMore command.
(function() {
diff --git a/jstests/core/getmore_invalidated_cursors.js b/jstests/core/getmore_invalidated_cursors.js
index 2d0bc20952d..527b6bf81e7 100644
--- a/jstests/core/getmore_invalidated_cursors.js
+++ b/jstests/core/getmore_invalidated_cursors.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore, requires_non_retryable_commands]
+
// Tests that running a getMore on a cursor that has been invalidated by something like a collection
// drop will return an appropriate error message.
(function() {
diff --git a/jstests/core/getmore_invalidated_documents.js b/jstests/core/getmore_invalidated_documents.js
index 3eefcd4f231..7d00748bbce 100644
--- a/jstests/core/getmore_invalidated_documents.js
+++ b/jstests/core/getmore_invalidated_documents.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_getmore, requires_non_retryable_writes]
// Tests for invalidation during a getmore. This behavior is storage-engine dependent.
// See SERVER-16675.
diff --git a/jstests/core/idhack.js b/jstests/core/idhack.js
index e26427f4b3c..0855a8ccbeb 100644
--- a/jstests/core/idhack.js
+++ b/jstests/core/idhack.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.idhack;
t.drop();
diff --git a/jstests/core/in4.js b/jstests/core/in4.js
index c2f47bf8ed4..df9eea2577b 100644
--- a/jstests/core/in4.js
+++ b/jstests/core/in4.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// SERVER-2343 Test $in empty array matching.
t = db.jstests_in9;
diff --git a/jstests/core/index1.js b/jstests/core/index1.js
index 1bcc23be135..2efb9d22189 100644
--- a/jstests/core/index1.js
+++ b/jstests/core/index1.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.embeddedIndexTest;
diff --git a/jstests/core/index13.js b/jstests/core/index13.js
index 920061dd6f5..cea4671c540 100644
--- a/jstests/core/index13.js
+++ b/jstests/core/index13.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Top level match fields within an $elemMatch clause may constrain multiple subfields from a
// compound multikey index. SERVER-3104
//
diff --git a/jstests/core/index_arr2.js b/jstests/core/index_arr2.js
index a7e541add09..ae1f3a12283 100644
--- a/jstests/core/index_arr2.js
+++ b/jstests/core/index_arr2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
NUM = 20;
M = 5;
diff --git a/jstests/core/index_bigkeys_nofail.js b/jstests/core/index_bigkeys_nofail.js
index 10d8a0791c0..ffbfea53779 100644
--- a/jstests/core/index_bigkeys_nofail.js
+++ b/jstests/core/index_bigkeys_nofail.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_writes]
+
// SERVER-16497: Check that failIndexKeyTooLong setting works
(function() {
"use strict";
diff --git a/jstests/core/index_bigkeys_validation.js b/jstests/core/index_bigkeys_validation.js
index af3f47272c3..bfe620e174a 100644
--- a/jstests/core/index_bigkeys_validation.js
+++ b/jstests/core/index_bigkeys_validation.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Tests that index validation succeeds for long keys when failIndexKeyTooLong is set to false.
// See: SERVER-22234
'use strict';
diff --git a/jstests/core/index_check2.js b/jstests/core/index_check2.js
index f8590229d39..534784e6579 100644
--- a/jstests/core/index_check2.js
+++ b/jstests/core/index_check2.js
@@ -1,3 +1,4 @@
+// @tags: [requires_getmore]
t = db.index_check2;
t.drop();
diff --git a/jstests/core/index_dropdups_ignore.js b/jstests/core/index_dropdups_ignore.js
index af75f57a601..aabea228c26 100644
--- a/jstests/core/index_dropdups_ignore.js
+++ b/jstests/core/index_dropdups_ignore.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of not being able to create unique index
// using hashed shard key pattern.
-// @tags: [cannot_create_unique_index_when_using_hashed_shard_key]
+// @tags: [cannot_create_unique_index_when_using_hashed_shard_key, requires_non_retryable_writes]
// SERVER-14710 dropDups is ignored and stripped from the spec when building an index.
diff --git a/jstests/core/index_filter_commands.js b/jstests/core/index_filter_commands.js
index 644707fa199..cc50f65ca39 100644
--- a/jstests/core/index_filter_commands.js
+++ b/jstests/core/index_filter_commands.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, does_not_support_stepdowns]
/**
* Index Filter commands
diff --git a/jstests/core/index_many.js b/jstests/core/index_many.js
index 3fae520fe81..f95d4ac50de 100644
--- a/jstests/core/index_many.js
+++ b/jstests/core/index_many.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because renameCollection command not supported
// on sharded collections.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
/* test using lots of indexes on one collection */
diff --git a/jstests/core/index_multiple_compatibility.js b/jstests/core/index_multiple_compatibility.js
index 15f47d773e0..1ebe785abfc 100644
--- a/jstests/core/index_multiple_compatibility.js
+++ b/jstests/core/index_multiple_compatibility.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of not being able to create unique index
// using hashed shard key pattern.
-// @tags: [cannot_create_unique_index_when_using_hashed_shard_key]
+// @tags: [cannot_create_unique_index_when_using_hashed_shard_key, requires_non_retryable_writes]
// Test that multiple indexes behave correctly together.
(function() {
diff --git a/jstests/core/index_partial_read_ops.js b/jstests/core/index_partial_read_ops.js
index bef51700b27..fc8ab0233a7 100644
--- a/jstests/core/index_partial_read_ops.js
+++ b/jstests/core/index_partial_read_ops.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because the explain output from a mongod when run
// against a sharded collection is wrapped in a "shards" object with keys for each shard.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
// Read ops tests for partial indexes.
diff --git a/jstests/core/index_partial_write_ops.js b/jstests/core/index_partial_write_ops.js
index 41e0e0263ef..a88989883d1 100644
--- a/jstests/core/index_partial_write_ops.js
+++ b/jstests/core/index_partial_write_ops.js
@@ -1,5 +1,5 @@
// Write ops tests for partial indexes.
-// @tags: [cannot_create_unique_index_when_using_hashed_shard_key]
+// @tags: [cannot_create_unique_index_when_using_hashed_shard_key, requires_non_retryable_writes]
(function() {
"use strict";
diff --git a/jstests/core/index_sparse1.js b/jstests/core/index_sparse1.js
index 49decd3783c..9322415e04e 100644
--- a/jstests/core/index_sparse1.js
+++ b/jstests/core/index_sparse1.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of extra shard key index in sharded
// collection.
-// @tags: [assumes_no_implicit_index_creation]
+// @tags: [assumes_no_implicit_index_creation, requires_non_retryable_writes]
t = db.index_sparse1;
t.drop();
diff --git a/jstests/core/index_stats.js b/jstests/core/index_stats.js
index b8187e76de2..4781484132f 100644
--- a/jstests/core/index_stats.js
+++ b/jstests/core/index_stats.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns, requires_non_retryable_writes]
(function() {
"use strict";
diff --git a/jstests/core/indexe.js b/jstests/core/indexe.js
index 55e256b9df9..3b55c4fb85a 100644
--- a/jstests/core/indexe.js
+++ b/jstests/core/indexe.js
@@ -1,3 +1,4 @@
+// @tags: [requires_getmore]
t = db.indexe;
t.drop();
diff --git a/jstests/core/indexr.js b/jstests/core/indexr.js
index d242ad87316..9d8f9a29ea8 100644
--- a/jstests/core/indexr.js
+++ b/jstests/core/indexr.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check multikey index cases with parallel nested fields SERVER-958.
t = db.jstests_indexr;
diff --git a/jstests/core/indexu.js b/jstests/core/indexu.js
index 088f0b86d44..953d178fff5 100644
--- a/jstests/core/indexu.js
+++ b/jstests/core/indexu.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test index key generation with duplicate values addressed by array index and
// object field. SERVER-2902
diff --git a/jstests/core/isolated.js b/jstests/core/isolated.js
index 9295b9e38b7..3bfbcae09c6 100644
--- a/jstests/core/isolated.js
+++ b/jstests/core/isolated.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Tests for the $isolated update/delete operator.
(function() {
"use strict";
diff --git a/jstests/core/js1.js b/jstests/core/js1.js
index 66462237417..5d00cee28f9 100644
--- a/jstests/core/js1.js
+++ b/jstests/core/js1.js
@@ -1,4 +1,4 @@
-
+// @tags: [requires_non_retryable_writes]
t = db.jstests_js1;
t.remove({});
diff --git a/jstests/core/js2.js b/jstests/core/js2.js
index e3d20a3e205..bd5379f7df1 100644
--- a/jstests/core/js2.js
+++ b/jstests/core/js2.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.jstests_js2;
t.remove({});
diff --git a/jstests/core/js3.js b/jstests/core/js3.js
index 7a612a1bdee..db7668243a3 100644
--- a/jstests/core/js3.js
+++ b/jstests/core/js3.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
t = db.jstests_js3;
diff --git a/jstests/core/js7.js b/jstests/core/js7.js
index 810f4692d4f..78a84cafa95 100644
--- a/jstests/core/js7.js
+++ b/jstests/core/js7.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
t = db.jstests_js7;
t.drop();
diff --git a/jstests/core/js9.js b/jstests/core/js9.js
index 808ae9a0998..c26c3544eb3 100644
--- a/jstests/core/js9.js
+++ b/jstests/core/js9.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
c = db.jstests_js9;
c.drop();
diff --git a/jstests/core/json_schema/additional_items.js b/jstests/core/json_schema/additional_items.js
index e204dd8c31f..c3866c88565 100644
--- a/jstests/core/json_schema/additional_items.js
+++ b/jstests/core/json_schema/additional_items.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests the JSON Schema "additionalItems" keyword.
*/
diff --git a/jstests/core/json_schema/additional_properties.js b/jstests/core/json_schema/additional_properties.js
index da5553391ce..ce699a6036c 100644
--- a/jstests/core/json_schema/additional_properties.js
+++ b/jstests/core/json_schema/additional_properties.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for the JSON Schema 'additionalProperties' keyword.
*/
diff --git a/jstests/core/json_schema/bsontype.js b/jstests/core/json_schema/bsontype.js
index 60163b4748f..f5ec15a06a8 100644
--- a/jstests/core/json_schema/bsontype.js
+++ b/jstests/core/json_schema/bsontype.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for the non-standard 'bsonType' keyword in JSON Schema, as well as some tests for 'type'.
*/
diff --git a/jstests/core/json_schema/dependencies.js b/jstests/core/json_schema/dependencies.js
index 98c8c6e0c0b..442976aa5fc 100644
--- a/jstests/core/json_schema/dependencies.js
+++ b/jstests/core/json_schema/dependencies.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for the JSON Schema 'dependencies' keyword.
*/
diff --git a/jstests/core/json_schema/items.js b/jstests/core/json_schema/items.js
index a81d8c09fcb..57974a3d612 100644
--- a/jstests/core/json_schema/items.js
+++ b/jstests/core/json_schema/items.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests the JSON Schema "items" keyword.
*/
diff --git a/jstests/core/json_schema/json_schema.js b/jstests/core/json_schema/json_schema.js
index d7767d1bcc3..613b14af226 100644
--- a/jstests/core/json_schema/json_schema.js
+++ b/jstests/core/json_schema/json_schema.js
@@ -1,5 +1,5 @@
// listCollections tests expect that a collection is not implicitly created after a drop.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands]
/**
* Tests for JSON Schema document validation.
diff --git a/jstests/core/json_schema/logical_keywords.js b/jstests/core/json_schema/logical_keywords.js
index fd10a54ea06..507123e2c69 100644
--- a/jstests/core/json_schema/logical_keywords.js
+++ b/jstests/core/json_schema/logical_keywords.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for the JSON Schema logical keywords, including:
*
diff --git a/jstests/core/json_schema/min_max_items.js b/jstests/core/json_schema/min_max_items.js
index e403b39421e..1dff469747d 100644
--- a/jstests/core/json_schema/min_max_items.js
+++ b/jstests/core/json_schema/min_max_items.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests the JSON Schema keywords "minItems" and "maxItems".
*/
diff --git a/jstests/core/json_schema/min_max_properties.js b/jstests/core/json_schema/min_max_properties.js
index ec11b615329..fbfffceb96c 100644
--- a/jstests/core/json_schema/min_max_properties.js
+++ b/jstests/core/json_schema/min_max_properties.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for the JSON Schema 'minProperties' and 'maxProperties' keywords.
*/
diff --git a/jstests/core/json_schema/misc_validation.js b/jstests/core/json_schema/misc_validation.js
index 90d25fff0e2..ddb7092a44a 100644
--- a/jstests/core/json_schema/misc_validation.js
+++ b/jstests/core/json_schema/misc_validation.js
@@ -12,7 +12,8 @@
* - applyOps
* - $elemMatch projection
*
- * @tags: [assumes_no_implicit_collection_creation_after_drop]
+ * @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_commands,
+ * requires_non_retryable_writes]
*/
(function() {
"use strict";
diff --git a/jstests/core/json_schema/pattern_properties.js b/jstests/core/json_schema/pattern_properties.js
index 8e79342ff4c..b94987f2a4a 100644
--- a/jstests/core/json_schema/pattern_properties.js
+++ b/jstests/core/json_schema/pattern_properties.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for the JSON Schema 'patternProperties' keyword.
*/
diff --git a/jstests/core/json_schema/required.js b/jstests/core/json_schema/required.js
index 92d8a453a13..4ffc7438b48 100644
--- a/jstests/core/json_schema/required.js
+++ b/jstests/core/json_schema/required.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests for handling of the JSON Schema 'required' keyword.
*/
diff --git a/jstests/core/json_schema/unique_items.js b/jstests/core/json_schema/unique_items.js
index 08c8ae84211..4e558b5db73 100644
--- a/jstests/core/json_schema/unique_items.js
+++ b/jstests/core/json_schema/unique_items.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
/**
* Tests the JSON Schema "uniqueItems" keyword.
*/
diff --git a/jstests/core/kill_cursors.js b/jstests/core/kill_cursors.js
index c78dd1c86db..e825c6bd8bf 100644
--- a/jstests/core/kill_cursors.js
+++ b/jstests/core/kill_cursors.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test the killCursors command.
(function() {
'use strict';
diff --git a/jstests/core/list_collections1.js b/jstests/core/list_collections1.js
index 89499e534c0..ef6f6240d67 100644
--- a/jstests/core/list_collections1.js
+++ b/jstests/core/list_collections1.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_getmore]
// Basic functional tests for the listCollections command.
//
diff --git a/jstests/core/list_indexes.js b/jstests/core/list_indexes.js
index 08972d723a7..544a4b868a2 100644
--- a/jstests/core/list_indexes.js
+++ b/jstests/core/list_indexes.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_getmore]
// Basic functional tests for the listIndexes command.
diff --git a/jstests/core/list_indexes_invalidation.js b/jstests/core/list_indexes_invalidation.js
index 0a5727d0cbb..68742007bbf 100644
--- a/jstests/core/list_indexes_invalidation.js
+++ b/jstests/core/list_indexes_invalidation.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because renameCollection command not supported
// on sharded collections.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
// SERVER-24963/SERVER-27930 Missing invalidation for system.indexes writes
(function() {
diff --git a/jstests/core/list_namespaces_invalidation.js b/jstests/core/list_namespaces_invalidation.js
index fb6fcd68ff6..a97633c7ca9 100644
--- a/jstests/core/list_namespaces_invalidation.js
+++ b/jstests/core/list_namespaces_invalidation.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// SERVER-27996/SERVER-28022 Missing invalidation for system.namespaces writes
(function() {
'use strict';
diff --git a/jstests/core/loadserverscripts.js b/jstests/core/loadserverscripts.js
index daf87b2475b..17ab816f1fe 100644
--- a/jstests/core/loadserverscripts.js
+++ b/jstests/core/loadserverscripts.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
// Test db.loadServerScripts()
diff --git a/jstests/core/logprocessdetails.js b/jstests/core/logprocessdetails.js
index 1ff4fff1112..1987393341e 100644
--- a/jstests/core/logprocessdetails.js
+++ b/jstests/core/logprocessdetails.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
/**
* SERVER-7140 test. Checks that process info is re-logged on log rotation
*/
diff --git a/jstests/core/max_time_ms.js b/jstests/core/max_time_ms.js
index b1a9f0e2f9c..468a474aef3 100644
--- a/jstests/core/max_time_ms.js
+++ b/jstests/core/max_time_ms.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Tests query/command option $maxTimeMS.
var t = db.max_time_ms;
diff --git a/jstests/core/mr1.js b/jstests/core/mr1.js
index 00a5726db0d..12aeaf0cd7f 100644
--- a/jstests/core/mr1.js
+++ b/jstests/core/mr1.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns, requires_getmore]
t = db.mr1;
t.drop();
diff --git a/jstests/core/mr2.js b/jstests/core/mr2.js
index be17658ffd7..53da098835d 100644
--- a/jstests/core/mr2.js
+++ b/jstests/core/mr2.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because the "jsMode" option to the "mapReduce"
// command cannot be used on a sharded collection.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
t = db.mr2;
t.drop();
diff --git a/jstests/core/mr3.js b/jstests/core/mr3.js
index f5a45e0fd1c..3aaf43c12a5 100644
--- a/jstests/core/mr3.js
+++ b/jstests/core/mr3.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr3;
t.drop();
diff --git a/jstests/core/mr4.js b/jstests/core/mr4.js
index 683583acecd..9db2d998604 100644
--- a/jstests/core/mr4.js
+++ b/jstests/core/mr4.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr4;
t.drop();
diff --git a/jstests/core/mr5.js b/jstests/core/mr5.js
index 8552f891358..25aa387594a 100644
--- a/jstests/core/mr5.js
+++ b/jstests/core/mr5.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr5;
t.drop();
diff --git a/jstests/core/mr_bigobject.js b/jstests/core/mr_bigobject.js
index 1311af5883a..bf85c39c7b6 100644
--- a/jstests/core/mr_bigobject.js
+++ b/jstests/core/mr_bigobject.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_bigobject;
t.drop();
diff --git a/jstests/core/mr_bigobject_replace.js b/jstests/core/mr_bigobject_replace.js
index da7c08c0e3a..6b7c2724686 100644
--- a/jstests/core/mr_bigobject_replace.js
+++ b/jstests/core/mr_bigobject_replace.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of following errmsg: Cannot output to a
// non-sharded collection because sharded collection exists already.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
/**
* Test that the server returns an error response for map-reduce operations that attempt to insert a
diff --git a/jstests/core/mr_comments.js b/jstests/core/mr_comments.js
index 503bded9bd0..127a7cb5da1 100644
--- a/jstests/core/mr_comments.js
+++ b/jstests/core/mr_comments.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_comments;
t.drop();
diff --git a/jstests/core/mr_errorhandling.js b/jstests/core/mr_errorhandling.js
index 8da061459d2..2ded89baecf 100644
--- a/jstests/core/mr_errorhandling.js
+++ b/jstests/core/mr_errorhandling.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, does_not_support_stepdowns]
t = db.mr_errorhandling;
t.drop();
diff --git a/jstests/core/mr_index.js b/jstests/core/mr_index.js
index 796dbe5c562..de509a357cd 100644
--- a/jstests/core/mr_index.js
+++ b/jstests/core/mr_index.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_index;
t.drop();
diff --git a/jstests/core/mr_index2.js b/jstests/core/mr_index2.js
index 99741fedcbd..c3e514e699b 100644
--- a/jstests/core/mr_index2.js
+++ b/jstests/core/mr_index2.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_index2;
t.drop();
diff --git a/jstests/core/mr_index3.js b/jstests/core/mr_index3.js
index 885089ade4d..64ab0d1aea8 100644
--- a/jstests/core/mr_index3.js
+++ b/jstests/core/mr_index3.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_index3;
t.drop();
diff --git a/jstests/core/mr_killop.js b/jstests/core/mr_killop.js
index b7ea2c6cbf8..25675fa64ab 100644
--- a/jstests/core/mr_killop.js
+++ b/jstests/core/mr_killop.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because the "command" field in the currentOp()
// output is reported as {"mapreduce.shardedfinish": { mapreduce: "jstests_mr_killop", ... }, ... }
// when the "finalize" option to the "mapReduce" command is used on a sharded collection.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
// Test killop applied to m/r operations and child ops of m/r operations.
diff --git a/jstests/core/mr_merge.js b/jstests/core/mr_merge.js
index e81e8f57b0d..70445b89cf5 100644
--- a/jstests/core/mr_merge.js
+++ b/jstests/core/mr_merge.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of following errmsg: Cannot output to a
// non-sharded collection because sharded collection exists already.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
t = db.mr_merge;
t.drop();
diff --git a/jstests/core/mr_merge2.js b/jstests/core/mr_merge2.js
index db4e83377ab..8bdc2a90216 100644
--- a/jstests/core/mr_merge2.js
+++ b/jstests/core/mr_merge2.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of following errmsg: Cannot output to a
// non-sharded collection because sharded collection exists already.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
t = db.mr_merge2;
t.drop();
diff --git a/jstests/core/mr_mutable_properties.js b/jstests/core/mr_mutable_properties.js
index 84066bf76c0..8c9eacd6e97 100644
--- a/jstests/core/mr_mutable_properties.js
+++ b/jstests/core/mr_mutable_properties.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// See SERVER-9448
// Test argument and receiver (aka 'this') objects and their children can be mutated
// in Map, Reduce and Finalize functions
diff --git a/jstests/core/mr_optim.js b/jstests/core/mr_optim.js
index 7437753ca67..19ec4e55b6b 100644
--- a/jstests/core/mr_optim.js
+++ b/jstests/core/mr_optim.js
@@ -1,4 +1,4 @@
-
+// @tags: [does_not_support_stepdowns, requires_getmore]
t = db.mr_optim;
t.drop();
diff --git a/jstests/core/mr_outreduce.js b/jstests/core/mr_outreduce.js
index 01fcb1704ba..089faf4a87b 100644
--- a/jstests/core/mr_outreduce.js
+++ b/jstests/core/mr_outreduce.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of following errmsg: Cannot output to a
// non-sharded collection because sharded collection exists already.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
t = db.mr_outreduce;
t.drop();
diff --git a/jstests/core/mr_outreduce2.js b/jstests/core/mr_outreduce2.js
index cb9f3379d07..1a7a7597ff7 100644
--- a/jstests/core/mr_outreduce2.js
+++ b/jstests/core/mr_outreduce2.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of following errmsg: Cannot output to a
// non-sharded collection because sharded collection exists already.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
normal = "mr_outreduce2";
out = normal + "_out";
diff --git a/jstests/core/mr_replaceIntoDB.js b/jstests/core/mr_replaceIntoDB.js
index 6ffc8546c2d..2fbac26665b 100644
--- a/jstests/core/mr_replaceIntoDB.js
+++ b/jstests/core/mr_replaceIntoDB.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_replace;
t.drop();
diff --git a/jstests/core/mr_sort.js b/jstests/core/mr_sort.js
index fe1a5a48beb..d53b741f5c5 100644
--- a/jstests/core/mr_sort.js
+++ b/jstests/core/mr_sort.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because the "limit" option to the "mapReduce"
// command cannot be used on a sharded collection.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns]
t = db.mr_sort;
t.drop();
diff --git a/jstests/core/mr_stored.js b/jstests/core/mr_stored.js
index 5969638b8b9..3da288f0259 100644
--- a/jstests/core/mr_stored.js
+++ b/jstests/core/mr_stored.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_writes]
t = db.mr_stored;
t.drop();
diff --git a/jstests/core/mr_tolerates_js_exception.js b/jstests/core/mr_tolerates_js_exception.js
index 5b4fcba879d..47536a3cc3f 100644
--- a/jstests/core/mr_tolerates_js_exception.js
+++ b/jstests/core/mr_tolerates_js_exception.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
/**
* Test that the mapReduce command fails gracefully when user-provided JavaScript code throws.
*/
diff --git a/jstests/core/mr_undef.js b/jstests/core/mr_undef.js
index de3b61543d7..88e5936af4e 100644
--- a/jstests/core/mr_undef.js
+++ b/jstests/core/mr_undef.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
t = db.mr_undef;
t.drop();
diff --git a/jstests/core/nestedarr1.js b/jstests/core/nestedarr1.js
index 239502202e3..049e09980d7 100644
--- a/jstests/core/nestedarr1.js
+++ b/jstests/core/nestedarr1.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
/**
* Inserts documents with an indexed nested array field, progressively increasing the nesting
* depth until the key is too large to index. This tests that we support at least the minimum
diff --git a/jstests/core/nestedobj1.js b/jstests/core/nestedobj1.js
index 3eb4b04dd1c..70575b2d3a6 100644
--- a/jstests/core/nestedobj1.js
+++ b/jstests/core/nestedobj1.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
/**
* Inserts documents with an indexed nested document field, progressively increasing the nesting
* depth until the key is too large to index. This tests that we support at least the minimum
diff --git a/jstests/core/nin2.js b/jstests/core/nin2.js
index 41996c1f4bb..d134f5ad4a4 100644
--- a/jstests/core/nin2.js
+++ b/jstests/core/nin2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check that $nin is the opposite of $in SERVER-3264
t = db.jstests_nin2;
diff --git a/jstests/core/no_db_created.js b/jstests/core/no_db_created.js
index 3491914d470..231e8ffe581 100644
--- a/jstests/core/no_db_created.js
+++ b/jstests/core/no_db_created.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// checks that operations do not create a database
(function() {
diff --git a/jstests/core/not2.js b/jstests/core/not2.js
index a02399139df..21e8d9aa9c4 100644
--- a/jstests/core/not2.js
+++ b/jstests/core/not2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
(function() {
"use strict";
diff --git a/jstests/core/notablescan.js b/jstests/core/notablescan.js
index 80306c08cf2..d6ff16fc1f5 100644
--- a/jstests/core/notablescan.js
+++ b/jstests/core/notablescan.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// check notablescan mode
t = db.test_notablescan;
diff --git a/jstests/core/ns_length.js b/jstests/core/ns_length.js
index 17e5cbc0e25..28aed301053 100644
--- a/jstests/core/ns_length.js
+++ b/jstests/core/ns_length.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// SERVER-7282 Faulty logic when testing maximum collection name length.
// constants from server
diff --git a/jstests/core/numberlong2.js b/jstests/core/numberlong2.js
index 59ca199259f..ca162ddf53f 100644
--- a/jstests/core/numberlong2.js
+++ b/jstests/core/numberlong2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test precision of NumberLong values with v1 index code SERVER-3717
t = db.jstests_numberlong2;
diff --git a/jstests/core/optimized_match_explain.js b/jstests/core/optimized_match_explain.js
index 8e688302753..6f73349e08c 100644
--- a/jstests/core/optimized_match_explain.js
+++ b/jstests/core/optimized_match_explain.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
/**
* Tests that the explain output for $match reflects any optimizations.
*/
diff --git a/jstests/core/or4.js b/jstests/core/or4.js
index 42e770e4292..91876c601ab 100644
--- a/jstests/core/or4.js
+++ b/jstests/core/or4.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because of unsupported group operator on sharded
// collection.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, does_not_support_stepdowns, requires_getmore,
+// requires_non_retryable_writes]
t = db.jstests_or4;
t.drop();
diff --git a/jstests/core/or5.js b/jstests/core/or5.js
index dd32c1c3c50..7e61f9bf8cf 100644
--- a/jstests/core/or5.js
+++ b/jstests/core/or5.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
t = db.jstests_or5;
t.drop();
diff --git a/jstests/core/or7.js b/jstests/core/or7.js
index 49fd936d7eb..d824a90aa81 100644
--- a/jstests/core/or7.js
+++ b/jstests/core/or7.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
t = db.jstests_or7;
t.drop();
diff --git a/jstests/core/or8.js b/jstests/core/or8.js
index c778238b96e..def8a79c19e 100644
--- a/jstests/core/or8.js
+++ b/jstests/core/or8.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// missing collection
t = db.jstests_or8;
diff --git a/jstests/core/or9.js b/jstests/core/or9.js
index d203d3d5f4d..68814c684cb 100644
--- a/jstests/core/or9.js
+++ b/jstests/core/or9.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// index skipping and previous index range negation
t = db.jstests_or9;
diff --git a/jstests/core/orc.js b/jstests/core/orc.js
index c68c6859651..dc46d6de4ad 100644
--- a/jstests/core/orc.js
+++ b/jstests/core/orc.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// test that or duplicates are dropped in certain special cases
t = db.jstests_orc;
t.drop();
diff --git a/jstests/core/org.js b/jstests/core/org.js
index 4bc4a813b4c..7479db062e4 100644
--- a/jstests/core/org.js
+++ b/jstests/core/org.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// SERVER-2282 $or de duping with sparse indexes
t = db.jstests_org;
diff --git a/jstests/core/orh.js b/jstests/core/orh.js
index 357bb1ea5c3..1ceed1d501f 100644
--- a/jstests/core/orh.js
+++ b/jstests/core/orh.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// SERVER-2831 Demonstration of sparse index matching semantics in a multi index $or query.
t = db.jstests_orh;
diff --git a/jstests/core/oro.js b/jstests/core/oro.js
index be8a99e7e35..810be865649 100644
--- a/jstests/core/oro.js
+++ b/jstests/core/oro.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test $or query with several clauses on separate indexes.
t = db.jstests_oro;
diff --git a/jstests/core/plan_cache_clear.js b/jstests/core/plan_cache_clear.js
index bb44ecab549..a03ec7fb08c 100644
--- a/jstests/core/plan_cache_clear.js
+++ b/jstests/core/plan_cache_clear.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test clearing of the plan cache, either manually through the planCacheClear command,
// or due to system events such as an index build.
diff --git a/jstests/core/plan_cache_list_plans.js b/jstests/core/plan_cache_list_plans.js
index 4da32686ae6..e82f8f1cdd4 100644
--- a/jstests/core/plan_cache_list_plans.js
+++ b/jstests/core/plan_cache_list_plans.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test the planCacheListPlans command.
(function() {
diff --git a/jstests/core/plan_cache_list_shapes.js b/jstests/core/plan_cache_list_shapes.js
index 1c9ecdf9e1b..f78021c54ea 100644
--- a/jstests/core/plan_cache_list_shapes.js
+++ b/jstests/core/plan_cache_list_shapes.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test the planCacheListQueryShapes command, which returns a list of query shapes
// for the queries currently cached in the collection.
diff --git a/jstests/core/plan_cache_shell_helpers.js b/jstests/core/plan_cache_shell_helpers.js
index ec4ab6df693..6ffbae8bed5 100644
--- a/jstests/core/plan_cache_shell_helpers.js
+++ b/jstests/core/plan_cache_shell_helpers.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test the shell helpers which wrap the plan cache commands.
var t = db.jstests_plan_cache_shell_helpers;
diff --git a/jstests/core/profile1.js b/jstests/core/profile1.js
index e248617b4e7..48932c95fbe 100644
--- a/jstests/core/profile1.js
+++ b/jstests/core/profile1.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands]
+
(function() {
"use strict";
function profileCursor(query) {
diff --git a/jstests/core/profile_agg.js b/jstests/core/profile_agg.js
index 9bd60249830..9495250030a 100644
--- a/jstests/core/profile_agg.js
+++ b/jstests/core/profile_agg.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled aggregation execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_count.js b/jstests/core/profile_count.js
index 2fb9063a25b..2fc33b77f3a 100644
--- a/jstests/core/profile_count.js
+++ b/jstests/core/profile_count.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled count execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_delete.js b/jstests/core/profile_delete.js
index 475415ffa16..e3a69e32d13 100644
--- a/jstests/core/profile_delete.js
+++ b/jstests/core/profile_delete.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_writes]
+
// Confirms that profiled delete execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_distinct.js b/jstests/core/profile_distinct.js
index 432deffc542..2d825df811f 100644
--- a/jstests/core/profile_distinct.js
+++ b/jstests/core/profile_distinct.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled distinct execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_find.js b/jstests/core/profile_find.js
index 0464f2ed438..71632197f4c 100644
--- a/jstests/core/profile_find.js
+++ b/jstests/core/profile_find.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled find execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_geonear.js b/jstests/core/profile_geonear.js
index d6ec98011f0..d8cb90a9d0c 100644
--- a/jstests/core/profile_geonear.js
+++ b/jstests/core/profile_geonear.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled geonear execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_getmore.js b/jstests/core/profile_getmore.js
index 90f8e323f84..6d16c291b91 100644
--- a/jstests/core/profile_getmore.js
+++ b/jstests/core/profile_getmore.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore]
+
// Confirms that profiled getMore execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_group.js b/jstests/core/profile_group.js
index cfcec3dfc1b..57644e80f93 100644
--- a/jstests/core/profile_group.js
+++ b/jstests/core/profile_group.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled group execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_insert.js b/jstests/core/profile_insert.js
index 846c6d0e34b..41d1b4e9b03 100644
--- a/jstests/core/profile_insert.js
+++ b/jstests/core/profile_insert.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled insert execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_list_collections.js b/jstests/core/profile_list_collections.js
index 8caaf624e95..8ddd7b9f246 100644
--- a/jstests/core/profile_list_collections.js
+++ b/jstests/core/profile_list_collections.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore]
+
// Confirms that a listCollections command is not profiled.
(function() {
diff --git a/jstests/core/profile_list_indexes.js b/jstests/core/profile_list_indexes.js
index 6e270773381..18062c71eac 100644
--- a/jstests/core/profile_list_indexes.js
+++ b/jstests/core/profile_list_indexes.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore]
+
// Confirms that a listIndexes command and subsequent getMores of its cursor are profiled correctly.
(function() {
diff --git a/jstests/core/profile_mapreduce.js b/jstests/core/profile_mapreduce.js
index d579091aff7..1e7b039b7ca 100644
--- a/jstests/core/profile_mapreduce.js
+++ b/jstests/core/profile_mapreduce.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that profiled findAndModify execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/profile_no_such_db.js b/jstests/core/profile_no_such_db.js
index 51e70f4dc5d..cce8454fccb 100644
--- a/jstests/core/profile_no_such_db.js
+++ b/jstests/core/profile_no_such_db.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test that reading the profiling level doesn't create databases, but setting it does.
(function(db) {
'use strict';
diff --git a/jstests/core/profile_parallel_collection_scan.js b/jstests/core/profile_parallel_collection_scan.js
index e3cde4f2ada..602b13716c4 100644
--- a/jstests/core/profile_parallel_collection_scan.js
+++ b/jstests/core/profile_parallel_collection_scan.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_getmore]
+
// Confirms that a parallelCollectionScan command and subsequent getMores of its cursor are profiled
// correctly.
diff --git a/jstests/core/profile_repair_cursor.js b/jstests/core/profile_repair_cursor.js
index ec7cda8283b..ad70bed7de0 100644
--- a/jstests/core/profile_repair_cursor.js
+++ b/jstests/core/profile_repair_cursor.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Confirms that a repairCursor command and subsequent getMores of its cursor are profiled
// correctly.
diff --git a/jstests/core/profile_sampling.js b/jstests/core/profile_sampling.js
index d235c945f04..789b11a0440 100644
--- a/jstests/core/profile_sampling.js
+++ b/jstests/core/profile_sampling.js
@@ -1,4 +1,5 @@
// Confirms that the number of profiled operations is consistent with the sampleRate, if set.
+// @tags: [does_not_support_stepdowns]
(function() {
"use strict";
diff --git a/jstests/core/profile_update.js b/jstests/core/profile_update.js
index 9b23d894585..1e272ba6669 100644
--- a/jstests/core/profile_update.js
+++ b/jstests/core/profile_update.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_writes]
+
// Confirms that profiled update execution contains all expected metrics with proper values.
(function() {
diff --git a/jstests/core/proj_key1.js b/jstests/core/proj_key1.js
index 5ef6be3f51b..916ad8f1139 100644
--- a/jstests/core/proj_key1.js
+++ b/jstests/core/proj_key1.js
@@ -1,3 +1,4 @@
+// @tags: [requires_getmore]
t = db.proj_key1;
t.drop();
diff --git a/jstests/core/push_sort.js b/jstests/core/push_sort.js
index 2a518020248..815a88f0b7d 100644
--- a/jstests/core/push_sort.js
+++ b/jstests/core/push_sort.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
//
// $push acquired the possibility of sorting the resulting array as part of SERVER-8008. This
// test exercises such $sort clause from the shell user's perspective.
diff --git a/jstests/core/queryoptimizer3.js b/jstests/core/queryoptimizer3.js
index 6d35e3085a9..a0c3c0cc1d4 100644
--- a/jstests/core/queryoptimizer3.js
+++ b/jstests/core/queryoptimizer3.js
@@ -6,7 +6,7 @@
// starved frequently.
// Note: this tag can be safely removed once PM-697 is complete and replaces distlocks with a
// LockManager that has a fairness policy, which distlocks lack.
-// @tags: [assumes_against_mongod_not_mongos]
+// @tags: [assumes_against_mongod_not_mongos, requires_non_retryable_writes]
(function() {
'use strict';
diff --git a/jstests/core/queryoptimizera.js b/jstests/core/queryoptimizera.js
index 80036cd78c0..478e2a2a2a2 100644
--- a/jstests/core/queryoptimizera.js
+++ b/jstests/core/queryoptimizera.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Check that a warning message about doing a capped collection scan for a query with an _id
// constraint is printed at appropriate times. SERVER-5353
diff --git a/jstests/core/recursion.js b/jstests/core/recursion.js
index 926250be20d..4a0488a723d 100644
--- a/jstests/core/recursion.js
+++ b/jstests/core/recursion.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands]
+
// Basic tests for a form of stack recursion that's been shown to cause C++
// side stack overflows in the past. See SERVER-19614.
diff --git a/jstests/core/remove.js b/jstests/core/remove.js
index c4afd07c99c..d02f107a189 100644
--- a/jstests/core/remove.js
+++ b/jstests/core/remove.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// remove.js
// unit test for db remove
diff --git a/jstests/core/remove2.js b/jstests/core/remove2.js
index 81d377c3dfa..51ed13dce14 100644
--- a/jstests/core/remove2.js
+++ b/jstests/core/remove2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// remove2.js
// a unit test for db remove
diff --git a/jstests/core/remove3.js b/jstests/core/remove3.js
index 75e95860cb1..66a29893daa 100644
--- a/jstests/core/remove3.js
+++ b/jstests/core/remove3.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.remove3;
t.drop();
diff --git a/jstests/core/remove4.js b/jstests/core/remove4.js
index dde28517031..483de24bf7d 100644
--- a/jstests/core/remove4.js
+++ b/jstests/core/remove4.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
t = db.remove4;
t.drop();
diff --git a/jstests/core/remove6.js b/jstests/core/remove6.js
index 61cc39b6e3e..3e977924e60 100644
--- a/jstests/core/remove6.js
+++ b/jstests/core/remove6.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.remove6;
t.drop();
diff --git a/jstests/core/remove7.js b/jstests/core/remove7.js
index 9c78b24eefa..226a4cfb150 100644
--- a/jstests/core/remove7.js
+++ b/jstests/core/remove7.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.remove7;
t.drop();
diff --git a/jstests/core/remove8.js b/jstests/core/remove8.js
index 2935c9647bc..d45891faac6 100644
--- a/jstests/core/remove8.js
+++ b/jstests/core/remove8.js
@@ -1,6 +1,7 @@
// Cannot implicitly shard accessed collections because unsupported use of sharded collection
// from db.eval.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands,
+// requires_non_retryable_writes]
t = db.remove8;
t.drop();
diff --git a/jstests/core/remove9.js b/jstests/core/remove9.js
index 1c82d7b4fce..e7c0373972c 100644
--- a/jstests/core/remove9.js
+++ b/jstests/core/remove9.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore, requires_non_retryable_writes]
+
// SERVER-2009 Count odd numbered entries while updating and deleting even numbered entries.
t = db.jstests_remove9;
diff --git a/jstests/core/remove_justone.js b/jstests/core/remove_justone.js
index a8b6ba318ee..6dbe2bdac48 100644
--- a/jstests/core/remove_justone.js
+++ b/jstests/core/remove_justone.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
t = db.remove_justone;
t.drop();
diff --git a/jstests/core/remove_undefined.js b/jstests/core/remove_undefined.js
index af7dce1e409..c13e147fbc3 100644
--- a/jstests/core/remove_undefined.js
+++ b/jstests/core/remove_undefined.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
(function() {
"use strict";
diff --git a/jstests/core/removea.js b/jstests/core/removea.js
index 9b51080910b..7c4db76245e 100644
--- a/jstests/core/removea.js
+++ b/jstests/core/removea.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test removal of a substantial proportion of inserted documents. SERVER-3803
// A complete test will only be performed against a DEBUG build.
diff --git a/jstests/core/removeb.js b/jstests/core/removeb.js
index 8d049e2439b..14fd23b2e54 100644
--- a/jstests/core/removeb.js
+++ b/jstests/core/removeb.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test removal of Records that have been reused since the remove operation began. SERVER-5198
t = db.jstests_removeb;
diff --git a/jstests/core/removec.js b/jstests/core/removec.js
index f2c4e29e4fc..64d486285e9 100644
--- a/jstests/core/removec.js
+++ b/jstests/core/removec.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Sanity test for removing documents with adjacent index keys. SERVER-2008
t = db.jstests_removec;
diff --git a/jstests/core/rename.js b/jstests/core/rename.js
index 5ec405d025a..63f1fbefaf6 100644
--- a/jstests/core/rename.js
+++ b/jstests/core/rename.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
admin = db.getMongo().getDB("admin");
a = db.jstests_rename_a;
diff --git a/jstests/core/rename2.js b/jstests/core/rename2.js
index efbc943ce4f..d774553e9b9 100644
--- a/jstests/core/rename2.js
+++ b/jstests/core/rename2.js
@@ -1,4 +1,4 @@
-
+// @tags: [requires_non_retryable_commands]
a = db.rename2a;
b = db.rename2b;
diff --git a/jstests/core/rename3.js b/jstests/core/rename3.js
index aa1bd986b47..632aff9aed2 100644
--- a/jstests/core/rename3.js
+++ b/jstests/core/rename3.js
@@ -1,4 +1,4 @@
-
+// @tags: [requires_non_retryable_commands]
a = db.rename3a;
b = db.rename3b;
diff --git a/jstests/core/rename4.js b/jstests/core/rename4.js
index 185193deaa9..2879140ed5c 100644
--- a/jstests/core/rename4.js
+++ b/jstests/core/rename4.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
t = db.jstests_rename4;
t.drop();
diff --git a/jstests/core/rename5.js b/jstests/core/rename5.js
index 313b520ed7d..357d67fc9ee 100644
--- a/jstests/core/rename5.js
+++ b/jstests/core/rename5.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check some $rename cases with a missing source. SERVER-4845
t = db.jstests_rename5;
diff --git a/jstests/core/rename6.js b/jstests/core/rename6.js
index cdefd20a016..bb2ab7f6f11 100644
--- a/jstests/core/rename6.js
+++ b/jstests/core/rename6.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Test for SERVER-7017
// We shouldn't rename a collection when one of its indexes will generate a namespace
// that is greater than 120 chars. To do this we create a long index name and try
diff --git a/jstests/core/rename7.js b/jstests/core/rename7.js
index 85b48c64ce7..1805461cfe1 100644
--- a/jstests/core/rename7.js
+++ b/jstests/core/rename7.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// ***************************************************************
// rename7.js
// Test renameCollection functionality across different databases.
diff --git a/jstests/core/rename8.js b/jstests/core/rename8.js
index af332e30239..d0a2a2fea60 100644
--- a/jstests/core/rename8.js
+++ b/jstests/core/rename8.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// SERVER-12591: prevent renaming to arbitrary system collections.
var testdb =
diff --git a/jstests/core/rename_stayTemp.js b/jstests/core/rename_stayTemp.js
index 423e5c6e215..b31c8319d88 100644
--- a/jstests/core/rename_stayTemp.js
+++ b/jstests/core/rename_stayTemp.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
orig = 'rename_stayTemp_orig';
dest = 'rename_stayTemp_dest';
diff --git a/jstests/core/repair_database.js b/jstests/core/repair_database.js
index 49441dbe664..f0ca8b3892b 100644
--- a/jstests/core/repair_database.js
+++ b/jstests/core/repair_database.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
/**
* This tests checks that repair database works and doesn't leave the database in a bad state
* 1.) Drop "repairDB" database
diff --git a/jstests/core/role_management_helpers.js b/jstests/core/role_management_helpers.js
index b47d87e5533..d467e2ac099 100644
--- a/jstests/core/role_management_helpers.js
+++ b/jstests/core/role_management_helpers.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// This test is a basic sanity check of the shell helpers for manipulating role objects
// It is not a comprehensive test of the functionality of the role manipulation commands
diff --git a/jstests/core/server1470.js b/jstests/core/server1470.js
index 05482017c2e..040eda4228f 100644
--- a/jstests/core/server1470.js
+++ b/jstests/core/server1470.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
t = db.server1470;
t.drop();
diff --git a/jstests/core/set_param1.js b/jstests/core/set_param1.js
index 08f581280ed..1fbccd25f6e 100644
--- a/jstests/core/set_param1.js
+++ b/jstests/core/set_param1.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Tests for accessing logLevel server parameter using getParameter/setParameter commands
// and shell helpers.
diff --git a/jstests/core/shell_writeconcern.js b/jstests/core/shell_writeconcern.js
index 9f3fc271ce2..6d3680dee83 100644
--- a/jstests/core/shell_writeconcern.js
+++ b/jstests/core/shell_writeconcern.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, cannot_inject_read_write_concern]
"use strict";
// check that shell writeconcern work correctly
diff --git a/jstests/core/show_record_id.js b/jstests/core/show_record_id.js
index 32fab6828a9..b82cb5c8f55 100644
--- a/jstests/core/show_record_id.js
+++ b/jstests/core/show_record_id.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Sanity check for the showRecordId option.
var t = db.show_record_id;
diff --git a/jstests/core/snapshot_queries.js b/jstests/core/snapshot_queries.js
index e4aec435b10..33e50dc60fe 100644
--- a/jstests/core/snapshot_queries.js
+++ b/jstests/core/snapshot_queries.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore, requires_non_retryable_writes]
+
// Regression test for edge cases in which .snapshot() queries could historically miss documents or
// return the same document twice.
(function() {
diff --git a/jstests/core/sort7.js b/jstests/core/sort7.js
index 4377cd5d17b..efb94304532 100644
--- a/jstests/core/sort7.js
+++ b/jstests/core/sort7.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check sorting of array sub field SERVER-480.
t = db.jstests_sort7;
diff --git a/jstests/core/sort_array.js b/jstests/core/sort_array.js
index d432bae538c..bdec23fe4ea 100644
--- a/jstests/core/sort_array.js
+++ b/jstests/core/sort_array.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_writes]
+
/**
* Tests for sorting documents by fields that contain arrays.
*/
diff --git a/jstests/core/sortd.js b/jstests/core/sortd.js
index 7012915f3ca..832d73d1939 100644
--- a/jstests/core/sortd.js
+++ b/jstests/core/sortd.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test sorting with dups and multiple candidate query plans.
t = db.jstests_sortd;
diff --git a/jstests/core/sortf.js b/jstests/core/sortf.js
index 1cd3449aa4f..4af92cddbae 100644
--- a/jstests/core/sortf.js
+++ b/jstests/core/sortf.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Unsorted plan on {a:1}, sorted plan on {b:1}. The unsorted plan exhausts its memory limit before
// the sorted plan is chosen by the query optimizer.
diff --git a/jstests/core/sortg.js b/jstests/core/sortg.js
index 7cdf308444d..2315828ad65 100644
--- a/jstests/core/sortg.js
+++ b/jstests/core/sortg.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of extra shard key index in sharded
// collection.
-// @tags: [assumes_no_implicit_index_creation]
+// @tags: [assumes_no_implicit_index_creation, requires_getmore]
// Test that a memory exception is triggered for in memory sorts, but not for indexed sorts.
diff --git a/jstests/core/sortk.js b/jstests/core/sortk.js
index 76c381681eb..55c64cfb6e2 100644
--- a/jstests/core/sortk.js
+++ b/jstests/core/sortk.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// End-to-end testing for index scan explosion + merge sort.
// SERVER-5063 and SERVER-1205.
t = db.jstests_sortk;
diff --git a/jstests/core/stages_and_hash.js b/jstests/core/stages_and_hash.js
index 14b00a46e73..512ca9bcb38 100644
--- a/jstests/core/stages_and_hash.js
+++ b/jstests/core/stages_and_hash.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
t = db.stages_and_hashed;
t.drop();
diff --git a/jstests/core/stages_and_sorted.js b/jstests/core/stages_and_sorted.js
index 50e79ce9ea8..0df186f0f2b 100644
--- a/jstests/core/stages_and_sorted.js
+++ b/jstests/core/stages_and_sorted.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
t = db.stages_and_sorted;
t.drop();
var collname = "stages_and_sorted";
diff --git a/jstests/core/stages_collection_scan.js b/jstests/core/stages_collection_scan.js
index 47fb6edbdde..df9612947be 100644
--- a/jstests/core/stages_collection_scan.js
+++ b/jstests/core/stages_collection_scan.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test basic query stage collection scan functionality.
t = db.stages_collection_scan;
t.drop();
diff --git a/jstests/core/stages_delete.js b/jstests/core/stages_delete.js
index f8e7380c75a..1d33d778acc 100644
--- a/jstests/core/stages_delete.js
+++ b/jstests/core/stages_delete.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test basic delete stage functionality.
var coll = db.stages_delete;
var collScanStage = {cscan: {args: {direction: 1}, filter: {deleteMe: true}}};
diff --git a/jstests/core/stages_fetch.js b/jstests/core/stages_fetch.js
index 02dffa929f9..a2c826739cc 100644
--- a/jstests/core/stages_fetch.js
+++ b/jstests/core/stages_fetch.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test basic fetch functionality.
t = db.stages_fetch;
t.drop();
diff --git a/jstests/core/stages_ixscan.js b/jstests/core/stages_ixscan.js
index 09c5480bd67..9eb6d9ebfbc 100644
--- a/jstests/core/stages_ixscan.js
+++ b/jstests/core/stages_ixscan.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test basic query stage index scan functionality.
t = db.stages_ixscan;
t.drop();
diff --git a/jstests/core/stages_limit_skip.js b/jstests/core/stages_limit_skip.js
index 7cd98c1c931..eec25de69ff 100644
--- a/jstests/core/stages_limit_skip.js
+++ b/jstests/core/stages_limit_skip.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test limit and skip
t = db.stages_limit_skip;
t.drop();
diff --git a/jstests/core/stages_mergesort.js b/jstests/core/stages_mergesort.js
index 4ebda2547c4..670efbb18d6 100644
--- a/jstests/core/stages_mergesort.js
+++ b/jstests/core/stages_mergesort.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test query stage merge sorting.
t = db.stages_mergesort;
t.drop();
diff --git a/jstests/core/stages_or.js b/jstests/core/stages_or.js
index e8616fcbcaa..c5305e3ee37 100644
--- a/jstests/core/stages_or.js
+++ b/jstests/core/stages_or.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test basic OR functionality
t = db.stages_or;
t.drop();
diff --git a/jstests/core/stages_text.js b/jstests/core/stages_text.js
index d38ef316663..0abe8b82007 100644
--- a/jstests/core/stages_text.js
+++ b/jstests/core/stages_text.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns]
+
// Test very basic functionality of text stage
t = db.stages_text;
diff --git a/jstests/core/storefunc.js b/jstests/core/storefunc.js
index 8598e9cc62b..960763753ed 100644
--- a/jstests/core/storefunc.js
+++ b/jstests/core/storefunc.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands, requires_non_retryable_writes]
+
// Use a private sister database to avoid conflicts with other tests that use system.js
var testdb = db.getSisterDB("storefunc");
var res;
diff --git a/jstests/core/system_profile.js b/jstests/core/system_profile.js
index 0e3cacb030c..20919512be8 100644
--- a/jstests/core/system_profile.js
+++ b/jstests/core/system_profile.js
@@ -1,3 +1,6 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands,
+// requires_non_retryable_writes]
+
// Test various user operations against "system.profile" collection. SERVER-18111.
var testDB = db.getSiblingDB("system_profile");
diff --git a/jstests/core/tailable_cursor_invalidation.js b/jstests/core/tailable_cursor_invalidation.js
index 18c85f902d9..e9e29e8a24a 100644
--- a/jstests/core/tailable_cursor_invalidation.js
+++ b/jstests/core/tailable_cursor_invalidation.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Tests for the behavior of tailable cursors when a collection is dropped or the cursor is
// otherwise invalidated.
(function() {
diff --git a/jstests/core/tailable_getmore_batch_size.js b/jstests/core/tailable_getmore_batch_size.js
index be3e21f0a67..212eae5576d 100644
--- a/jstests/core/tailable_getmore_batch_size.js
+++ b/jstests/core/tailable_getmore_batch_size.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Tests for the behavior of combining the tailable and awaitData options to the getMore command
// with the batchSize option.
(function() {
diff --git a/jstests/core/tailable_skip_limit.js b/jstests/core/tailable_skip_limit.js
index c7b1ce4c926..8aa39e54e8a 100644
--- a/jstests/core/tailable_skip_limit.js
+++ b/jstests/core/tailable_skip_limit.js
@@ -1,3 +1,5 @@
+// @tags: [requires_getmore]
+
// Test that tailable cursors work correctly with skip and limit.
(function() {
"use strict";
diff --git a/jstests/core/temp_cleanup.js b/jstests/core/temp_cleanup.js
index 895f7c5f8b9..75b6952d824 100644
--- a/jstests/core/temp_cleanup.js
+++ b/jstests/core/temp_cleanup.js
@@ -1,3 +1,4 @@
+// @tags: [does_not_support_stepdowns]
mydb = db.getSisterDB("temp_cleanup_test");
diff --git a/jstests/core/type3.js b/jstests/core/type3.js
index fce2b03f6c4..1cbf5f456b4 100644
--- a/jstests/core/type3.js
+++ b/jstests/core/type3.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Check query type bracketing SERVER-3222
t = db.jstests_type3;
diff --git a/jstests/core/type_array.js b/jstests/core/type_array.js
index a131df90367..49ebf26764e 100644
--- a/jstests/core/type_array.js
+++ b/jstests/core/type_array.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
/**
* Tests for the array-related behavior of the $type query operator.
*/
diff --git a/jstests/core/update7.js b/jstests/core/update7.js
index 3908c0786d3..cb15f211d63 100644
--- a/jstests/core/update7.js
+++ b/jstests/core/update7.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
t = db.update7;
t.drop();
diff --git a/jstests/core/update_arrayFilters.js b/jstests/core/update_arrayFilters.js
index c8584db5c1e..e1457f7f809 100644
--- a/jstests/core/update_arrayFilters.js
+++ b/jstests/core/update_arrayFilters.js
@@ -1,6 +1,6 @@
// Cannot implicitly shard accessed collections because of collection existing when none
// expected.
-// @tags: [assumes_no_implicit_collection_creation_after_drop]
+// @tags: [assumes_no_implicit_collection_creation_after_drop, requires_non_retryable_writes]
// Tests for the arrayFilters option to update and findAndModify.
(function() {
diff --git a/jstests/core/update_arraymatch2.js b/jstests/core/update_arraymatch2.js
index ede1e0ad69a..7f51bb0f32a 100644
--- a/jstests/core/update_arraymatch2.js
+++ b/jstests/core/update_arraymatch2.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
t = db.update_arraymatch2;
t.drop();
diff --git a/jstests/core/update_arraymatch3.js b/jstests/core/update_arraymatch3.js
index 5fe2c4a1f16..3a232bdfc54 100644
--- a/jstests/core/update_arraymatch3.js
+++ b/jstests/core/update_arraymatch3.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.update_arraymatch3;
t.drop();
diff --git a/jstests/core/update_arraymatch5.js b/jstests/core/update_arraymatch5.js
index 39768c8d2c5..16d215fe33b 100644
--- a/jstests/core/update_arraymatch5.js
+++ b/jstests/core/update_arraymatch5.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.update_arraymatch5;
t.drop();
diff --git a/jstests/core/update_arraymatch7.js b/jstests/core/update_arraymatch7.js
index 3ad475f291c..4ee9ed26f7c 100644
--- a/jstests/core/update_arraymatch7.js
+++ b/jstests/core/update_arraymatch7.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Check that the positional operator works properly when an index only match is used for the update
// query spec. SERVER-5067
diff --git a/jstests/core/update_bit_examples.js b/jstests/core/update_bit_examples.js
index 850d64ced5b..6545751aacd 100644
--- a/jstests/core/update_bit_examples.js
+++ b/jstests/core/update_bit_examples.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Basic examples for $bit
var res;
diff --git a/jstests/core/update_currentdate_examples.js b/jstests/core/update_currentdate_examples.js
index 62ee0220e7d..9cde5cad16e 100644
--- a/jstests/core/update_currentdate_examples.js
+++ b/jstests/core/update_currentdate_examples.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Basic examples for $currentDate
var res;
diff --git a/jstests/core/update_modifier_pop.js b/jstests/core/update_modifier_pop.js
index b5eda4ca543..c74d7f254bf 100644
--- a/jstests/core/update_modifier_pop.js
+++ b/jstests/core/update_modifier_pop.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
(function() {
"use strict";
diff --git a/jstests/core/update_mul_examples.js b/jstests/core/update_mul_examples.js
index 484c6f7456a..831bd257380 100644
--- a/jstests/core/update_mul_examples.js
+++ b/jstests/core/update_mul_examples.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Basic examples for $mul (multiply)
var res;
diff --git a/jstests/core/update_multi3.js b/jstests/core/update_multi3.js
index 10e639803b5..0077bfefead 100644
--- a/jstests/core/update_multi3.js
+++ b/jstests/core/update_multi3.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.update_multi3;
diff --git a/jstests/core/update_multi4.js b/jstests/core/update_multi4.js
index 3b5c2f04b29..d2030c5dc4b 100644
--- a/jstests/core/update_multi4.js
+++ b/jstests/core/update_multi4.js
@@ -1,3 +1,4 @@
+// @tags: [requires_non_retryable_writes]
t = db.update_mulit4;
t.drop();
diff --git a/jstests/core/update_multi5.js b/jstests/core/update_multi5.js
index e610462a620..6c3ae9265a8 100644
--- a/jstests/core/update_multi5.js
+++ b/jstests/core/update_multi5.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// tests that $addToSet works in a multi-update.
(function() {
"use strict";
diff --git a/jstests/core/update_multi6.js b/jstests/core/update_multi6.js
index 57e8112031c..023398534cd 100644
--- a/jstests/core/update_multi6.js
+++ b/jstests/core/update_multi6.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
var res;
t = db.update_multi6;
diff --git a/jstests/core/updatef.js b/jstests/core/updatef.js
index 6bc8df4e0c1..78c7e6173c7 100644
--- a/jstests/core/updatef.js
+++ b/jstests/core/updatef.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands, requires_non_retryable_writes]
+
// Test unsafe management of nsdt on update command yield SERVER-3208
prefixNS = db.jstests_updatef;
diff --git a/jstests/core/updatei.js b/jstests/core/updatei.js
index 54979313195..dea5b13cd17 100644
--- a/jstests/core/updatei.js
+++ b/jstests/core/updatei.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Test new (optional) update syntax
// SERVER-4176
diff --git a/jstests/core/updatej.js b/jstests/core/updatej.js
index 378a29e4573..2c4f6246f11 100644
--- a/jstests/core/updatej.js
+++ b/jstests/core/updatej.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test that update validation failure terminates the update without modifying subsequent
// documents. SERVER-4779
diff --git a/jstests/core/updatel.js b/jstests/core/updatel.js
index 78bd9b252dc..6eebd35a150 100644
--- a/jstests/core/updatel.js
+++ b/jstests/core/updatel.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// The positional operator allows an update modifier field path to contain a sentinel ('$') path
// part that is replaced with the numeric position of an array element matched by the update's query
// spec. <http://dochub.mongodb.org/core/positionaloperator>
diff --git a/jstests/core/updatem.js b/jstests/core/updatem.js
index 011a33295db..92625954f8b 100644
--- a/jstests/core/updatem.js
+++ b/jstests/core/updatem.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_commands]
// Tests that _id will exist in all updated docs.
diff --git a/jstests/core/upsert_and.js b/jstests/core/upsert_and.js
index 955b855d525..111dc140b8f 100644
--- a/jstests/core/upsert_and.js
+++ b/jstests/core/upsert_and.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// tests to ensure fields in $and conditions are created when using the query to do upsert
var res;
diff --git a/jstests/core/user_management_helpers.js b/jstests/core/user_management_helpers.js
index 5069d6dac74..59aba33e8c9 100644
--- a/jstests/core/user_management_helpers.js
+++ b/jstests/core/user_management_helpers.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// This test is a basic sanity check of the shell helpers for manipulating user objects
// It is not a comprehensive test of the functionality of the user manipulation commands
function assertHasRole(rolesArray, roleName, roleDB) {
diff --git a/jstests/core/validate_user_documents.js b/jstests/core/validate_user_documents.js
index 676c47a301f..7a523a75183 100644
--- a/jstests/core/validate_user_documents.js
+++ b/jstests/core/validate_user_documents.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
// Ensure that inserts and updates of the system.users collection validate the schema of inserted
// documents.
diff --git a/jstests/core/verify_update_mods.js b/jstests/core/verify_update_mods.js
index 9f55f2f08e5..134668e62bd 100644
--- a/jstests/core/verify_update_mods.js
+++ b/jstests/core/verify_update_mods.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
// Verify update mods exist
var res;
diff --git a/jstests/core/views/duplicate_ns.js b/jstests/core/views/duplicate_ns.js
index d4d15125f63..1053226e2d4 100644
--- a/jstests/core/views/duplicate_ns.js
+++ b/jstests/core/views/duplicate_ns.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// Test the creation of view with a duplicate name to a collection.
(function() {
diff --git a/jstests/core/views/invalid_system_views.js b/jstests/core/views/invalid_system_views.js
index 977e31201d2..f1b734e92ea 100644
--- a/jstests/core/views/invalid_system_views.js
+++ b/jstests/core/views/invalid_system_views.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands, requires_non_retryable_writes]
+
/**
* Tests that invalid view definitions in system.views do not impact valid commands on existing
* collections.
diff --git a/jstests/core/views/views_aggregation.js b/jstests/core/views/views_aggregation.js
index 202a9cff34c..f7dd303d904 100644
--- a/jstests/core/views/views_aggregation.js
+++ b/jstests/core/views/views_aggregation.js
@@ -1,6 +1,7 @@
/**
* Tests aggregation on views for proper pipeline concatenation and semantics.
- * @tags: [requires_find_command]
+ * @tags: [requires_find_command, does_not_support_stepdowns, requires_getmore,
+ * requires_non_retryable_commands]
*/
(function() {
"use strict";
diff --git a/jstests/core/views/views_all_commands.js b/jstests/core/views/views_all_commands.js
index c4775c0a7b3..e94a0d535b2 100644
--- a/jstests/core/views/views_all_commands.js
+++ b/jstests/core/views/views_all_commands.js
@@ -1,3 +1,6 @@
+// @tags: [does_not_support_stepdowns, requires_getmore, requires_non_retryable_commands,
+// requires_non_retryable_writes]
+
/*
* Declaratively-defined tests for views for all database commands. This file contains a map of test
* definitions as well as code to run them.
diff --git a/jstests/core/views/views_change.js b/jstests/core/views/views_change.js
index 483401ecae8..c8035642ddf 100644
--- a/jstests/core/views/views_change.js
+++ b/jstests/core/views/views_change.js
@@ -1,6 +1,6 @@
/**
* Tests the behavior of views when the backing view or collection is changed.
- * @tags: [requires_find_command]
+ * @tags: [requires_find_command, requires_non_retryable_commands]
*/
(function() {
"use strict";
diff --git a/jstests/core/views/views_collation.js b/jstests/core/views/views_collation.js
index 883e05ac5e5..e63f348d4f2 100644
--- a/jstests/core/views/views_collation.js
+++ b/jstests/core/views/views_collation.js
@@ -1,3 +1,5 @@
+// @tags: [does_not_support_stepdowns, requires_non_retryable_commands]
+
/**
* Tests the behavior of operations when interacting with a view's default collation.
*/
diff --git a/jstests/core/views/views_find.js b/jstests/core/views/views_find.js
index bfd7cbcbd98..18e084b8186 100644
--- a/jstests/core/views/views_find.js
+++ b/jstests/core/views/views_find.js
@@ -1,6 +1,6 @@
/**
* Tests the find command on views.
- * @tags: [requires_find_command]
+ * @tags: [requires_find_command, requires_getmore]
*/
(function() {
"use strict";
diff --git a/jstests/core/views/views_rename.js b/jstests/core/views/views_rename.js
index 0ea5f47c1e8..63a87a1d61d 100644
--- a/jstests/core/views/views_rename.js
+++ b/jstests/core/views/views_rename.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
(function() {
// SERVER-30406 Test that renaming system.views correctly invalidates the view catalog
'use strict';
diff --git a/jstests/core/views/views_validation.js b/jstests/core/views/views_validation.js
index dbd291f58e5..a0e02d0b2c7 100644
--- a/jstests/core/views/views_validation.js
+++ b/jstests/core/views/views_validation.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_commands]
+
(function() {
"use strict";
let viewsDb = db.getSiblingDB("views_validation");
diff --git a/jstests/core/where4.js b/jstests/core/where4.js
index 3db37ae6fe5..df2f01a498e 100644
--- a/jstests/core/where4.js
+++ b/jstests/core/where4.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
var myDB = db.getSiblingDB("where4");
myDB.dropDatabase();
diff --git a/jstests/core/write_commands_reject_unknown_fields.js b/jstests/core/write_commands_reject_unknown_fields.js
index cde7bf318fd..d21cf2ed9f3 100644
--- a/jstests/core/write_commands_reject_unknown_fields.js
+++ b/jstests/core/write_commands_reject_unknown_fields.js
@@ -1,3 +1,5 @@
+// @tags: [requires_non_retryable_writes]
+
// SERVER-23129 Write commands should reject unknown fields. This is run in passthrough tests to
// ensure that both mongos and mongod reject these commands.
(function() {
diff --git a/jstests/core/write_result.js b/jstests/core/write_result.js
index 17c86e7719f..9ccef44458d 100644
--- a/jstests/core/write_result.js
+++ b/jstests/core/write_result.js
@@ -1,7 +1,7 @@
// Cannot implicitly shard accessed collections because of following errmsg: A single
// update/delete on a sharded collection must contain an exact match on _id or contain the shard
// key.
-// @tags: [assumes_unsharded_collection]
+// @tags: [assumes_unsharded_collection, requires_non_retryable_writes]
//
// Tests the behavior of single writes using write commands