mongo 2.19.3 → 2.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Rakefile +27 -154
  4. data/lib/mongo/cluster/topology/base.rb +16 -0
  5. data/lib/mongo/cluster.rb +27 -1
  6. data/lib/mongo/collection/view/iterable.rb +1 -0
  7. data/lib/mongo/collection.rb +4 -2
  8. data/lib/mongo/error/transactions_not_supported.rb +34 -0
  9. data/lib/mongo/error.rb +1 -0
  10. data/lib/mongo/grid/fs_bucket.rb +6 -0
  11. data/lib/mongo/monitoring/event/secure.rb +1 -1
  12. data/lib/mongo/operation/shared/executable.rb +43 -27
  13. data/lib/mongo/operation/shared/response_handling.rb +23 -25
  14. data/lib/mongo/retryable/read_worker.rb +7 -6
  15. data/lib/mongo/retryable/write_worker.rb +7 -4
  16. data/lib/mongo/retryable.rb +2 -2
  17. data/lib/mongo/server/app_metadata/environment.rb +64 -9
  18. data/lib/mongo/server/app_metadata.rb +5 -4
  19. data/lib/mongo/server/description/features.rb +1 -0
  20. data/lib/mongo/server_selector/base.rb +32 -6
  21. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  22. data/lib/mongo/session/server_session.rb +3 -0
  23. data/lib/mongo/session/session_pool.rb +12 -18
  24. data/lib/mongo/session.rb +32 -0
  25. data/lib/mongo/uri.rb +0 -4
  26. data/lib/mongo/version.rb +1 -1
  27. data/mongo.gemspec +1 -7
  28. data/spec/atlas/atlas_connectivity_spec.rb +4 -4
  29. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  30. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  31. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  32. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  33. data/spec/integration/client_side_encryption/corpus_spec.rb +10 -2
  34. data/spec/integration/retryable_reads_errors_spec.rb +161 -8
  35. data/spec/integration/retryable_writes_errors_spec.rb +156 -0
  36. data/spec/mongo/cluster_spec.rb +36 -0
  37. data/spec/mongo/collection/view/aggregation_spec.rb +6 -1
  38. data/spec/mongo/collection/view/explainable_spec.rb +2 -0
  39. data/spec/mongo/collection_crud_spec.rb +1 -1
  40. data/spec/mongo/operation/insert_spec.rb +1 -1
  41. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  42. data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
  43. data/spec/mongo/server/app_metadata_spec.rb +12 -2
  44. data/spec/mongo/server/connection_spec.rb +4 -0
  45. data/spec/mongo/session/session_pool_spec.rb +1 -16
  46. data/spec/mongo/session_transaction_spec.rb +15 -0
  47. data/spec/mongo/uri_spec.rb +0 -9
  48. data/spec/runners/crud/test.rb +0 -8
  49. data/spec/runners/crud.rb +1 -1
  50. data/spec/runners/transactions/test.rb +12 -3
  51. data/spec/runners/unified/assertions.rb +16 -3
  52. data/spec/runners/unified/crud_operations.rb +12 -0
  53. data/spec/runners/unified/support_operations.rb +3 -5
  54. data/spec/runners/unified/test.rb +8 -1
  55. data/spec/shared/lib/mrss/docker_runner.rb +3 -0
  56. data/spec/shared/share/Dockerfile.erb +20 -69
  57. data/spec/shared/shlib/server.sh +1 -0
  58. data/spec/shared/shlib/set_env.sh +5 -28
  59. data/spec/spec_tests/data/client_side_encryption/explain.yml +2 -2
  60. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  61. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  62. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +348 -0
  63. data/spec/spec_tests/data/index_management/createSearchIndex.yml +5 -3
  64. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +7 -4
  65. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +2 -1
  66. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +13 -7
  67. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +2 -1
  68. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
  69. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
  70. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  71. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  72. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
  73. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
  74. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  75. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  76. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  77. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
  78. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  79. data/spec/spec_tests/sdam_unified_spec.rb +2 -0
  80. data/spec/support/constraints.rb +6 -0
  81. data/spec/support/ocsp +1 -1
  82. data/spec/support/recording_logger.rb +27 -0
  83. data.tar.gz.sig +0 -0
  84. metadata +1272 -1253
  85. metadata.gz.sig +0 -0
  86. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
@@ -0,0 +1,348 @@
1
+ description: "find options"
2
+
3
+ schemaVersion: "1.0"
4
+ runOnRequirements:
5
+ - serverless: 'forbid'
6
+
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &client0 client0
11
+ observeEvents: [ commandStartedEvent ]
12
+ - database:
13
+ id: &database0 database0
14
+ client: *client0
15
+ databaseName: &database0Name find-tests
16
+ - collection:
17
+ id: &collection0 collection0
18
+ database: *database0
19
+ collectionName: &collection0Name coll0
20
+
21
+ tests:
22
+ - description: "sort"
23
+ operations:
24
+ - name: find
25
+ arguments:
26
+ filter: &filter { _name: "John" }
27
+ sort: &sort { _id: 1 }
28
+ object: *collection0
29
+ expectEvents:
30
+ - client: *client0
31
+ events:
32
+ - commandStartedEvent:
33
+ command:
34
+ find: *collection0Name
35
+ filter: *filter
36
+ sort: *sort
37
+ commandName: find
38
+
39
+ - description: "projection"
40
+ operations:
41
+ - name: find
42
+ arguments:
43
+ filter: *filter
44
+ projection: &projection { _id: 1 }
45
+ object: *collection0
46
+ expectEvents:
47
+ - client: *client0
48
+ events:
49
+ - commandStartedEvent:
50
+ command:
51
+ find: *collection0Name
52
+ filter: *filter
53
+ projection: *projection
54
+ commandName: find
55
+ databaseName: *database0Name
56
+
57
+ - description: "hint"
58
+ operations:
59
+ - name: find
60
+ arguments:
61
+ filter: *filter
62
+ hint: &hint { _id: 1 }
63
+ object: *collection0
64
+ expectEvents:
65
+ - client: *client0
66
+ events:
67
+ - commandStartedEvent:
68
+ command:
69
+ find: *collection0Name
70
+ filter: *filter
71
+ hint: *hint
72
+ commandName: find
73
+ databaseName: *database0Name
74
+
75
+ - description: "skip"
76
+ operations:
77
+ - name: find
78
+ arguments:
79
+ filter: *filter
80
+ skip: &skip 10
81
+ object: *collection0
82
+ expectEvents:
83
+ - client: *client0
84
+ events:
85
+ - commandStartedEvent:
86
+ command:
87
+ find: *collection0Name
88
+ filter: *filter
89
+ skip: *skip
90
+ commandName: find
91
+ databaseName: *database0Name
92
+
93
+ - description: "limit"
94
+ operations:
95
+ - name: find
96
+ arguments:
97
+ filter: *filter
98
+ limit: &limit 10
99
+ object: *collection0
100
+ expectEvents:
101
+ - client: *client0
102
+ events:
103
+ - commandStartedEvent:
104
+ command:
105
+ find: *collection0Name
106
+ filter: *filter
107
+ limit: *limit
108
+ commandName: find
109
+ databaseName: *database0Name
110
+
111
+ - description: "batchSize"
112
+ operations:
113
+ - name: find
114
+ arguments:
115
+ filter: *filter
116
+ batchSize: &batchSize 10
117
+ object: *collection0
118
+ expectEvents:
119
+ - client: *client0
120
+ events:
121
+ - commandStartedEvent:
122
+ command:
123
+ find: *collection0Name
124
+ filter: *filter
125
+ batchSize: *batchSize
126
+ commandName: find
127
+ databaseName: *database0Name
128
+
129
+ - description: "comment"
130
+ operations:
131
+ - name: find
132
+ arguments:
133
+ filter: *filter
134
+ comment: &comment 'comment'
135
+ object: *collection0
136
+ expectEvents:
137
+ - client: *client0
138
+ events:
139
+ - commandStartedEvent:
140
+ command:
141
+ find: *collection0Name
142
+ filter: *filter
143
+ comment: *comment
144
+ commandName: find
145
+ databaseName: *database0Name
146
+
147
+ - description: "maxTimeMS"
148
+ operations:
149
+ - name: find
150
+ arguments:
151
+ filter: *filter
152
+ maxTimeMS: &maxTimeMS 1000
153
+ object: *collection0
154
+ expectEvents:
155
+ - client: *client0
156
+ events:
157
+ - commandStartedEvent:
158
+ command:
159
+ find: *collection0Name
160
+ filter: *filter
161
+ maxTimeMS: *maxTimeMS
162
+ commandName: find
163
+ databaseName: *database0Name
164
+
165
+ - description: "max"
166
+ operations:
167
+ - name: find
168
+ arguments:
169
+ filter: *filter
170
+ max: &max { _id: 10 }
171
+ object: *collection0
172
+ expectEvents:
173
+ - client: *client0
174
+ events:
175
+ - commandStartedEvent:
176
+ command:
177
+ find: *collection0Name
178
+ filter: *filter
179
+ max: *max
180
+ commandName: find
181
+ databaseName: *database0Name
182
+
183
+ - description: "min"
184
+ operations:
185
+ - name: find
186
+ arguments:
187
+ filter: *filter
188
+ hint: { name: 1 }
189
+ min: &min { name: 'John' }
190
+ object: *collection0
191
+ expectEvents:
192
+ - client: *client0
193
+ events:
194
+ - commandStartedEvent:
195
+ command:
196
+ find: *collection0Name
197
+ filter: *filter
198
+ min: *min
199
+ commandName: find
200
+ databaseName: *database0Name
201
+
202
+ - description: "returnKey"
203
+ operations:
204
+ - name: find
205
+ arguments:
206
+ filter: *filter
207
+ returnKey: &returnKey false
208
+ object: *collection0
209
+ expectEvents:
210
+ - client: *client0
211
+ events:
212
+ - commandStartedEvent:
213
+ command:
214
+ find: *collection0Name
215
+ filter: *filter
216
+ returnKey: *returnKey
217
+ commandName: find
218
+ databaseName: *database0Name
219
+
220
+ - description: "showRecordId"
221
+ operations:
222
+ - name: find
223
+ arguments:
224
+ filter: *filter
225
+ showRecordId: &showRecordId false
226
+ object: *collection0
227
+ expectEvents:
228
+ - client: *client0
229
+ events:
230
+ - commandStartedEvent:
231
+ command:
232
+ find: *collection0Name
233
+ filter: *filter
234
+ showRecordId: *showRecordId
235
+ commandName: find
236
+ databaseName: *database0Name
237
+
238
+ - description: "oplogReplay"
239
+ operations:
240
+ - name: find
241
+ arguments:
242
+ filter: *filter
243
+ oplogReplay: &oplogReplay false
244
+ object: *collection0
245
+ expectEvents:
246
+ - client: *client0
247
+ events:
248
+ - commandStartedEvent:
249
+ command:
250
+ find: *collection0Name
251
+ filter: *filter
252
+ oplogReplay: *oplogReplay
253
+ commandName: find
254
+ databaseName: *database0Name
255
+
256
+ - description: "noCursorTimeout"
257
+ operations:
258
+ - name: find
259
+ arguments:
260
+ filter: *filter
261
+ noCursorTimeout: &noCursorTimeout false
262
+ object: *collection0
263
+ expectEvents:
264
+ - client: *client0
265
+ events:
266
+ - commandStartedEvent:
267
+ command:
268
+ find: *collection0Name
269
+ filter: *filter
270
+ noCursorTimeout: *noCursorTimeout
271
+ commandName: find
272
+ databaseName: *database0Name
273
+
274
+ - description: "allowPartialResults"
275
+ operations:
276
+ - name: find
277
+ arguments:
278
+ filter: *filter
279
+ allowPartialResults: &allowPartialResults false
280
+ object: *collection0
281
+ expectEvents:
282
+ - client: *client0
283
+ events:
284
+ - commandStartedEvent:
285
+ command:
286
+ find: *collection0Name
287
+ filter: *filter
288
+ allowPartialResults: *allowPartialResults
289
+ commandName: find
290
+ databaseName: *database0Name
291
+
292
+ - description: "collation"
293
+ operations:
294
+ - name: find
295
+ arguments:
296
+ filter: *filter
297
+ collation: &collation { locale: "en" }
298
+ object: *collection0
299
+ expectEvents:
300
+ - client: *client0
301
+ events:
302
+ - commandStartedEvent:
303
+ command:
304
+ find: *collection0Name
305
+ filter: *filter
306
+ collation: *collation
307
+ commandName: find
308
+ databaseName: *database0Name
309
+
310
+ - description: "allowDiskUse"
311
+ runOnRequirements:
312
+ - minServerVersion: 4.4
313
+ operations:
314
+ - name: find
315
+ arguments:
316
+ filter: *filter
317
+ allowDiskUse: &allowDiskUse true
318
+ object: *collection0
319
+ expectEvents:
320
+ - client: *client0
321
+ events:
322
+ - commandStartedEvent:
323
+ command:
324
+ find: *collection0Name
325
+ filter: *filter
326
+ allowDiskUse: *allowDiskUse
327
+ commandName: find
328
+ databaseName: *database0Name
329
+
330
+ - description: "let"
331
+ runOnRequirements:
332
+ - minServerVersion: "5.0"
333
+ operations:
334
+ - name: find
335
+ arguments:
336
+ filter: *filter
337
+ let: &let { name: "Mary" }
338
+ object: *collection0
339
+ expectEvents:
340
+ - client: *client0
341
+ events:
342
+ - commandStartedEvent:
343
+ command:
344
+ find: *collection0Name
345
+ filter: *filter
346
+ let: *let
347
+ commandName: find
348
+ databaseName: *database0Name
@@ -30,8 +30,9 @@ tests:
30
30
  expectError:
31
31
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
32
32
  # that the driver constructs and sends the correct command.
33
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
33
34
  isError: true
34
- errorContains: Search index commands are only supported with Atlas
35
+ errorContains: Atlas
35
36
  expectEvents:
36
37
  - client: *client0
37
38
  events:
@@ -50,8 +51,9 @@ tests:
50
51
  expectError:
51
52
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
52
53
  # that the driver constructs and sends the correct command.
54
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
53
55
  isError: true
54
- errorContains: Search index commands are only supported with Atlas
56
+ errorContains: Atlas
55
57
  expectEvents:
56
58
  - client: *client0
57
59
  events:
@@ -59,4 +61,4 @@ tests:
59
61
  command:
60
62
  createSearchIndexes: *collection0
61
63
  indexes: [ { definition: *definition, name: 'test index' } ]
62
- $db: *database0
64
+ $db: *database0
@@ -30,8 +30,9 @@ tests:
30
30
  expectError:
31
31
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
32
32
  # that the driver constructs and sends the correct command.
33
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
33
34
  isError: true
34
- errorContains: Search index commands are only supported with Atlas
35
+ errorContains: Atlas
35
36
  expectEvents:
36
37
  - client: *client0
37
38
  events:
@@ -51,8 +52,9 @@ tests:
51
52
  expectError:
52
53
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
53
54
  # that the driver constructs and sends the correct command.
55
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
54
56
  isError: true
55
- errorContains: Search index commands are only supported with Atlas
57
+ errorContains: Atlas
56
58
  expectEvents:
57
59
  - client: *client0
58
60
  events:
@@ -71,8 +73,9 @@ tests:
71
73
  expectError:
72
74
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
73
75
  # that the driver constructs and sends the correct command.
76
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
74
77
  isError: true
75
- errorContains: Search index commands are only supported with Atlas
78
+ errorContains: Atlas
76
79
  expectEvents:
77
80
  - client: *client0
78
81
  events:
@@ -80,4 +83,4 @@ tests:
80
83
  command:
81
84
  createSearchIndexes: *collection0
82
85
  indexes: [ { definition: *definition, name: 'test index' } ]
83
- $db: *database0
86
+ $db: *database0
@@ -30,8 +30,9 @@ tests:
30
30
  expectError:
31
31
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
32
32
  # that the driver constructs and sends the correct command.
33
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
33
34
  isError: true
34
- errorContains: Search index commands are only supported with Atlas
35
+ errorContains: Atlas
35
36
  expectEvents:
36
37
  - client: *client0
37
38
  events:
@@ -22,14 +22,16 @@ runOnRequirements:
22
22
 
23
23
  tests:
24
24
  - description: "when no name is provided, it does not populate the filter"
25
+ skipReason: https://jira.mongodb.org/browse/DRIVERS-2794
25
26
  operations:
26
27
  - name: listSearchIndexes
27
28
  object: *collection0
28
29
  expectError:
29
30
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
30
31
  # that the driver constructs and sends the correct command.
32
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
31
33
  isError: true
32
- errorContains: Search index commands are only supported with Atlas
34
+ errorContains: Atlas
33
35
  expectEvents:
34
36
  - client: *client0
35
37
  events:
@@ -40,16 +42,18 @@ tests:
40
42
  - $listSearchIndexes: {}
41
43
 
42
44
  - description: "when a name is provided, it is present in the filter"
45
+ skipReason: https://jira.mongodb.org/browse/DRIVERS-2794
43
46
  operations:
44
47
  - name: listSearchIndexes
45
48
  object: *collection0
46
- arguments:
49
+ arguments:
47
50
  name: &indexName "test index"
48
51
  expectError:
49
52
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
50
53
  # that the driver constructs and sends the correct command.
54
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
51
55
  isError: true
52
- errorContains: Search index commands are only supported with Atlas
56
+ errorContains: Atlas
53
57
  expectEvents:
54
58
  - client: *client0
55
59
  events:
@@ -61,18 +65,20 @@ tests:
61
65
  $db: *database0
62
66
 
63
67
  - description: aggregation cursor options are supported
68
+ skipReason: https://jira.mongodb.org/browse/DRIVERS-2794
64
69
  operations:
65
70
  - name: listSearchIndexes
66
71
  object: *collection0
67
- arguments:
72
+ arguments:
68
73
  name: &indexName "test index"
69
- aggregationOptions:
74
+ aggregationOptions:
70
75
  batchSize: 10
71
76
  expectError:
72
77
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
73
78
  # that the driver constructs and sends the correct command.
79
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
74
80
  isError: true
75
- errorContains: Search index commands are only supported with Atlas
81
+ errorContains: Atlas
76
82
  expectEvents:
77
83
  - client: *client0
78
84
  events:
@@ -82,4 +88,4 @@ tests:
82
88
  cursor: { batchSize: 10 }
83
89
  pipeline:
84
90
  - $listSearchIndexes: { name: *indexName }
85
- $db: *database0
91
+ $db: *database0
@@ -31,8 +31,9 @@ tests:
31
31
  expectError:
32
32
  # This test always errors in a non-Atlas environment. The test functions as a unit test by asserting
33
33
  # that the driver constructs and sends the correct command.
34
+ # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
34
35
  isError: true
35
- errorContains: Search index commands are only supported with Atlas
36
+ errorContains: Atlas
36
37
  expectEvents:
37
38
  - client: *client0
38
39
  events:
@@ -3,8 +3,10 @@ description: "retryable-writes bulkWrite serverErrors"
3
3
  schemaVersion: "1.0"
4
4
 
5
5
  runOnRequirements:
6
- - minServerVersion: "3.6"
6
+ - minServerVersion: "4.0"
7
7
  topologies: [ replicaset ]
8
+ - minServerVersion: "4.1.7"
9
+ topologies: [ sharded ]
8
10
 
9
11
  createEntities:
10
12
  - client:
@@ -29,11 +31,6 @@ initialData:
29
31
 
30
32
  tests:
31
33
  - description: "BulkWrite succeeds after retryable writeConcernError in first batch"
32
- runOnRequirements:
33
- - minServerVersion: "4.0"
34
- topologies: [ replicaset ]
35
- - minServerVersion: "4.1.7"
36
- topologies: [ sharded ]
37
34
  operations:
38
35
  - name: failPoint
39
36
  object: testRunner
@@ -3,8 +3,10 @@ description: "retryable-writes insertOne serverErrors"
3
3
  schemaVersion: "1.0"
4
4
 
5
5
  runOnRequirements:
6
- - minServerVersion: "3.6"
6
+ - minServerVersion: "4.0"
7
7
  topologies: [ replicaset ]
8
+ - minServerVersion: "4.1.7"
9
+ topologies: [ sharded ]
8
10
 
9
11
  createEntities:
10
12
  - client:
@@ -29,11 +31,6 @@ initialData:
29
31
 
30
32
  tests:
31
33
  - description: "InsertOne succeeds after retryable writeConcernError"
32
- runOnRequirements:
33
- - minServerVersion: "4.0"
34
- topologies: [ replicaset ]
35
- - minServerVersion: "4.1.7"
36
- topologies: [ sharded ]
37
34
  operations:
38
35
  - name: failPoint
39
36
  object: testRunner