summaryrefslogtreecommitdiff
path: root/buildscripts/resmokeconfig/suites/shard_split_causally_consistent_jscore_passthrough.yml
blob: d20b66abdd8f0dee4a9fbc33127d9298f1057abb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# This suite starts a 3-node replica set and uses the ContinuousShardSplit hook to run background
# shard splits. It also ensures that causal consistency is enabled for all shell operations.

config_variables:
- &keyFile jstests/libs/authTestsKey
- &keyFileData Thiskeyisonlyforrunningthesuitewithauthenticationdontuseitinanytestsdirectly
- &authOptions
  authenticationDatabase: admin
  authenticationMechanism: SCRAM-SHA-256
  password: *keyFileData
  username: __system

test_kind: js_test

selector:
  roots:
  - jstests/core/**/*.js
  exclude_files:
  - jstests/core/txns/**/*.js
  # Skip any tests that run with auth explicitly.
  - jstests/core/*[aA]uth*.js

  #
  # Denylists from causally_consistent_jscore_passthrough.yml
  #

  - jstests/core/**/stages_delete.js # Uses stageDebug command for deletes.
  # Tests that fail for Causal Consistency as they have statements that do not support
  # non-local read concern.
  - jstests/core/**/geo_big_polygon3.js
  - jstests/core/**/mr*.js
  - jstests/core/**/collation.js
  - jstests/core/**/loadserverscripts.js
  - jstests/core/**/bypass_doc_validation.js
  - jstests/core/**/commands_namespace_parsing.js
  - jstests/core/**/tailable_cursor_invalidation.js
  - jstests/core/**/tailable_getmore_batch_size.js
  - jstests/core/**/tailable_skip_limit.js
  - jstests/core/**/constructors.js
  - jstests/core/views/views_all_commands.js
  - jstests/core/**/or4.js
  - jstests/core/**/recursion.js
  # An index drop does not necessarily cause cursors to be killed on the secondary.
  - jstests/core/**/ord.js
  # The `dbstats` command builds in-memory structures that are not causally consistent.
  - jstests/core/**/dbstats.js
  # TODO SERVER-30466
  - jstests/core/**/explain_multi_plan.js
  - jstests/core/**/explain_shell_helpers.js
  - jstests/core/**/index_partial_read_ops.js
  - jstests/core/**/update_arrayFilters.js
  # TODO SERVER-30488
  # In-memory data structures are not causally consistent.
  - jstests/core/**/apitest_dbcollection.js
  - jstests/core/**/getmore_invalidated_cursors.js
  - jstests/core/**/orf.js #explain.executionStats is not CC
  # getMore is not causally consistent if collection is dropped
  - jstests/core/**/drop3.js
  # Explain format is not the same
  - jstests/core/**/or_to_in.js # queryPlanner in different spot in explain()

  #
  # Denylists from session_jscore_passthrough.yml
  #

  # These test run commands using legacy queries, which are not supported on sessions.
  - jstests/core/**/comment_field.js
  - jstests/core/**/exhaust.js

  # Unacknowledged writes prohibited in an explicit session.
  - jstests/core/**/crud_api.js
  - jstests/core/**/batch_write_command_w0.js

  # Causes CappedPositionLost on recipient, which is not recoverable.
  - jstests/core/**/rename_collection_capped.js

  exclude_with_any_tags:
  - assumes_standalone_mongod
  # Cursor ids will not survive rerouting between replica sets during a shard split.
  - requires_getmore
  # Due to background shard splits, operations in the main test shell are not guaranteed to
  # be causally consistent with operations in a parallel shell. The reason is that
  # TenantMigrationCommitted error is only thrown when the client does a write or a atClusterTime/
  # afterClusterTime or linearlizable read. Therefore, one of shell may not be aware that the
  # split has occurred and would not forward the read/write command to the right replica set.
  - uses_parallel_shell
  # Profile settings are stored in-memory only so are not transferred to the recipient.
  - requires_profiling
  # capped collections are banned in Serverless
  - requires_capped
  # emptycapped command is blocked during shard split.
  - requires_emptycapped
  # Multi-updates that conflict with shard split are not retried by inject_tenant_prefix.js.
  - requires_multi_updates
  ##
  # The next tag corresponds to the special error thrown by the set_read_preference_secondary.js
  # override when it refuses to replace the readPreference of a particular command. Above each tag
  # are the message(s) that cause the tag to be warranted.
  ##
  # "Cowardly refusing to override read preference of command: ..."
  # "Cowardly refusing to run test with overridden read preference when it reads from a
  #  non-replicated collection: ..."
  - assumes_read_preference_unchanged
  - does_not_support_causal_consistency
  - requires_collstats
  # Full validation can cause ongoing queries to fail. This can affect the shard split process.
  - uses_full_validation
  - tenant_migration_incompatible
  - shard_split_incompatible
  - requires_timeseries # Tenant migration not supported

executor:
  archive:
    tests: true
    hooks:
      - CheckReplDBHash
      - CheckReplOplogs
      - ValidateCollections
  config:
    shell_options:
      eval: >-
        testingReplication = true;
        load('jstests/libs/override_methods/inject_tenant_prefix.js');
        load('jstests/libs/override_methods/enable_causal_consistency.js');
        load('jstests/libs/override_methods/enable_sessions.js');
        jsTest.authenticate(db.getMongo());
      global_vars:
        TestData: &TestData
          tenantIds: ["636d957b2646ddfaf9b5e13f", "123d957b2646ddfaf9b5e91d"]
          auth: true
          authMechanism: SCRAM-SHA-256
          keyFile: *keyFile
          keyFileData: *keyFileData
          roleGraphInvalidationIsFatal: true
          # Temp collections are removed when the recipient steps up. We expect a mismatch, this
          # ensures we don't compare them.
          skipTempCollections: true
  hooks:
  - class: ContinuousShardSplit
    shell_options:
      global_vars:
        TestData:
          <<: *TestData
          authOptions: *authOptions
  - class: CheckReplOplogs
    shell_options:
      global_vars:
        TestData: *TestData
  # The CheckReplDBHash hook waits until all operations have replicated to and have been applied
  # on the secondaries, so we run the ValidateCollections hook after it to ensure we're
  # validating the entire contents of the collection.
  - class: CheckReplDBHash
    shell_options:
      global_vars:
        TestData: *TestData
  - class: ValidateCollections
    shell_options:
      global_vars:
        TestData: *TestData
  - class: CleanEveryN
    n: 20
  fixture:
    class: ShardSplitFixture
    common_mongod_options:
      set_parameters:
        enableTestCommands: 1
        failpoint.abortShardSplitBeforeLeavingBlockingState:
            mode:
              activationProbability: 0.5
        failpoint.pauseShardSplitBeforeLeavingBlockingState:
            mode: alwaysOn
            data:
              blockTimeMS: 250
        # Disable some cluster time validation optimizations to get more consistent coverage of
        # gossiping cluster times across shard splits.
        failpoint.alwaysValidateClientsClusterTime:
            mode: alwaysOn
        failpoint.externalClientsNeverAuthorizedToAdvanceLogicalClock:
            mode: alwaysOn
        shardSplitGarbageCollectionDelayMS: 1
        ttlMonitorSleepSecs: 1
      auth: ''
      keyFile: *keyFile
    num_nodes_per_replica_set: 3
    auth_options: *authOptions