mongo 2.19.3 → 2.20.0

Sign up to get free protection for your applications and to get access to all the features.
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