mongo 2.20.1 → 2.21.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.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/Rakefile +2 -2
- data/lib/mongo/address.rb +22 -3
- data/lib/mongo/auth/aws/credentials_retriever.rb +70 -17
- data/lib/mongo/auth/base.rb +1 -1
- data/lib/mongo/bulk_write.rb +35 -2
- data/lib/mongo/client.rb +38 -6
- data/lib/mongo/client_encryption.rb +6 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -1
- data/lib/mongo/cluster/sdam_flow.rb +20 -7
- data/lib/mongo/cluster.rb +14 -4
- data/lib/mongo/collection/helpers.rb +1 -1
- data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
- data/lib/mongo/collection/view/aggregation.rb +33 -99
- data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
- data/lib/mongo/collection/view/change_stream.rb +80 -27
- data/lib/mongo/collection/view/iterable.rb +76 -60
- data/lib/mongo/collection/view/map_reduce.rb +25 -8
- data/lib/mongo/collection/view/readable.rb +79 -30
- data/lib/mongo/collection/view/writable.rb +109 -48
- data/lib/mongo/collection/view.rb +43 -3
- data/lib/mongo/collection.rb +158 -23
- data/lib/mongo/crypt/auto_encrypter.rb +4 -6
- data/lib/mongo/crypt/binding.rb +4 -4
- data/lib/mongo/crypt/context.rb +20 -14
- data/lib/mongo/crypt/encryption_io.rb +56 -26
- data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
- data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
- data/lib/mongo/csot_timeout_holder.rb +119 -0
- data/lib/mongo/cursor/kill_spec.rb +5 -2
- data/lib/mongo/cursor/nontailable.rb +27 -0
- data/lib/mongo/cursor.rb +86 -24
- data/lib/mongo/cursor_host.rb +82 -0
- data/lib/mongo/database/view.rb +81 -14
- data/lib/mongo/database.rb +88 -18
- data/lib/mongo/error/operation_failure.rb +209 -204
- data/lib/mongo/error/server_timeout_error.rb +12 -0
- data/lib/mongo/error/socket_timeout_error.rb +3 -1
- data/lib/mongo/error/timeout_error.rb +23 -0
- data/lib/mongo/error.rb +2 -0
- data/lib/mongo/grid/fs_bucket.rb +45 -12
- data/lib/mongo/grid/stream/read.rb +15 -1
- data/lib/mongo/grid/stream/write.rb +21 -4
- data/lib/mongo/index/view.rb +77 -16
- data/lib/mongo/operation/context.rb +40 -2
- data/lib/mongo/operation/create_search_indexes/op_msg.rb +2 -2
- data/lib/mongo/operation/delete/op_msg.rb +2 -1
- data/lib/mongo/operation/drop_search_index/op_msg.rb +2 -2
- data/lib/mongo/operation/find/op_msg.rb +45 -0
- data/lib/mongo/operation/get_more/op_msg.rb +33 -0
- data/lib/mongo/operation/insert/op_msg.rb +3 -2
- data/lib/mongo/operation/insert/result.rb +4 -2
- data/lib/mongo/operation/list_collections/result.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/op_msg_base.rb +3 -1
- data/lib/mongo/operation/result.rb +26 -5
- data/lib/mongo/operation/shared/executable.rb +12 -1
- data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
- data/lib/mongo/operation/shared/response_handling.rb +3 -3
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/operation/shared/timed.rb +52 -0
- data/lib/mongo/operation/shared/write.rb +4 -1
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update_search_index/op_msg.rb +2 -2
- data/lib/mongo/operation.rb +1 -0
- data/lib/mongo/protocol/message.rb +1 -4
- data/lib/mongo/protocol/msg.rb +2 -2
- data/lib/mongo/retryable/read_worker.rb +69 -29
- data/lib/mongo/retryable/write_worker.rb +49 -18
- data/lib/mongo/retryable.rb +8 -2
- data/lib/mongo/server/connection.rb +11 -5
- data/lib/mongo/server/connection_base.rb +22 -2
- data/lib/mongo/server/connection_pool.rb +32 -14
- data/lib/mongo/server/description/features.rb +1 -1
- data/lib/mongo/server/description.rb +18 -5
- data/lib/mongo/server/monitor.rb +7 -4
- data/lib/mongo/server/pending_connection.rb +7 -3
- data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
- data/lib/mongo/server.rb +11 -6
- data/lib/mongo/server_selector/base.rb +25 -9
- data/lib/mongo/session.rb +78 -9
- data/lib/mongo/socket/ssl.rb +109 -17
- data/lib/mongo/socket/tcp.rb +40 -6
- data/lib/mongo/socket.rb +154 -25
- data/lib/mongo/uri/options_mapper.rb +1 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +1 -0
- data/spec/atlas/atlas_connectivity_spec.rb +4 -0
- data/spec/atlas/operations_spec.rb +4 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
- data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
- data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +66 -22
- data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
- data/spec/integration/connection_pool_populator_spec.rb +2 -0
- data/spec/integration/cursor_pinning_spec.rb +15 -60
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +3 -3
- data/spec/integration/retryable_errors_spec.rb +2 -2
- data/spec/integration/sdam_error_handling_spec.rb +2 -1
- data/spec/integration/search_indexes_prose_spec.rb +4 -0
- data/spec/integration/server_spec.rb +4 -3
- data/spec/integration/transactions_api_examples_spec.rb +2 -0
- data/spec/kerberos/kerberos_spec.rb +4 -0
- data/spec/lite_spec_helper.rb +3 -1
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/caching_cursor_spec.rb +1 -1
- data/spec/mongo/client_encryption_spec.rb +1 -0
- data/spec/mongo/client_spec.rb +158 -4
- data/spec/mongo/collection/view/aggregation_spec.rb +14 -39
- data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
- data/spec/mongo/collection_spec.rb +5 -6
- data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
- data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
- data/spec/mongo/crypt/handle_spec.rb +1 -1
- data/spec/mongo/cursor_spec.rb +26 -9
- data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
- data/spec/mongo/operation/context_spec.rb +79 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
- data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
- data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
- data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
- data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
- data/spec/mongo/operation/shared/csot/examples.rb +113 -0
- data/spec/mongo/query_cache_spec.rb +243 -225
- data/spec/mongo/retryable_spec.rb +1 -0
- data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
- data/spec/mongo/socket/ssl_spec.rb +0 -10
- data/spec/runners/change_streams/test.rb +2 -2
- data/spec/runners/crud/operation.rb +1 -1
- data/spec/runners/crud/verifier.rb +3 -1
- data/spec/runners/transactions/operation.rb +4 -6
- data/spec/runners/unified/ambiguous_operations.rb +13 -0
- data/spec/runners/unified/assertions.rb +4 -0
- data/spec/runners/unified/change_stream_operations.rb +14 -24
- data/spec/runners/unified/crud_operations.rb +82 -59
- data/spec/runners/unified/ddl_operations.rb +38 -7
- data/spec/runners/unified/grid_fs_operations.rb +37 -2
- data/spec/runners/unified/support_operations.rb +43 -4
- data/spec/runners/unified/test.rb +22 -10
- data/spec/runners/unified.rb +1 -1
- data/spec/solo/clean_exit_spec.rb +2 -0
- data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
- data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
- data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
- data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
- data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
- data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
- data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
- data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
- data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
- data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
- data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
- data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
- data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
- data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +4 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +4 -0
- data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +29 -0
- data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
- data/spec/support/certificates/atlas-ocsp-ca.crt +81 -83
- data/spec/support/certificates/atlas-ocsp.crt +107 -107
- data/spec/support/cluster_tools.rb +3 -3
- data/spec/support/common_shortcuts.rb +2 -2
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_setup.rb +2 -2
- data/spec/support/utils.rb +3 -1
- metadata +78 -91
- data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -242
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -423
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -183
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -240
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -236
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -253
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1688
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -294
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -906
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1685
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1681
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1698
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -330
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -425
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -227
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -328
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -320
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -337
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -914
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -293
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -519
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -912
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -908
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -925
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -326
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -425
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -225
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -324
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -320
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -339
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -242
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -183
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -240
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -236
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -255
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -242
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -423
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -183
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -240
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -236
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -255
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -44
@@ -0,0 +1,249 @@
|
|
1
|
+
description: "timeoutMS behaves correctly for GridFS upload operations"
|
2
|
+
|
3
|
+
schemaVersion: "1.9"
|
4
|
+
|
5
|
+
runOnRequirements:
|
6
|
+
- minServerVersion: "4.4"
|
7
|
+
serverless: forbid # GridFS ops can be slow on serverless.
|
8
|
+
|
9
|
+
createEntities:
|
10
|
+
- client:
|
11
|
+
id: &failPointClient failPointClient
|
12
|
+
useMultipleMongoses: false
|
13
|
+
- client:
|
14
|
+
id: &client client
|
15
|
+
uriOptions:
|
16
|
+
timeoutMS: 75
|
17
|
+
useMultipleMongoses: false
|
18
|
+
- database:
|
19
|
+
id: &database database
|
20
|
+
client: *client
|
21
|
+
databaseName: &databaseName test
|
22
|
+
- bucket:
|
23
|
+
id: &bucket bucket
|
24
|
+
database: *database
|
25
|
+
- collection:
|
26
|
+
id: &filesCollection filesCollection
|
27
|
+
database: *database
|
28
|
+
collectionName: &filesCollectionName fs.files
|
29
|
+
- collection:
|
30
|
+
id: &chunksCollection chunksCollection
|
31
|
+
database: *database
|
32
|
+
collectionName: &chunksCollectionName fs.chunks
|
33
|
+
|
34
|
+
initialData:
|
35
|
+
- collectionName: *filesCollectionName
|
36
|
+
databaseName: *databaseName
|
37
|
+
documents: []
|
38
|
+
- collectionName: *chunksCollectionName
|
39
|
+
databaseName: *databaseName
|
40
|
+
documents: []
|
41
|
+
|
42
|
+
tests:
|
43
|
+
# Many tests in this file do not specify command monitoring expectations because GridFS uploads internally do a
|
44
|
+
# number of operations, so expecting an exact set of commands can cause flaky failures.
|
45
|
+
|
46
|
+
- description: "timeoutMS can be overridden for upload"
|
47
|
+
operations:
|
48
|
+
- name: failPoint
|
49
|
+
object: testRunner
|
50
|
+
arguments:
|
51
|
+
client: *failPointClient
|
52
|
+
failPoint:
|
53
|
+
configureFailPoint: failCommand
|
54
|
+
mode: { times: 1 }
|
55
|
+
data:
|
56
|
+
failCommands: ["find"]
|
57
|
+
blockConnection: true
|
58
|
+
blockTimeMS: 100
|
59
|
+
- name: upload
|
60
|
+
object: *bucket
|
61
|
+
arguments:
|
62
|
+
filename: filename
|
63
|
+
source: { $$hexBytes: "1122334455" }
|
64
|
+
timeoutMS: 1000
|
65
|
+
|
66
|
+
# On the first write to the bucket, drivers check if the files collection is empty to see if indexes need to be
|
67
|
+
# created.
|
68
|
+
- description: "timeoutMS applied to initial find on files collection"
|
69
|
+
operations:
|
70
|
+
- name: failPoint
|
71
|
+
object: testRunner
|
72
|
+
arguments:
|
73
|
+
client: *failPointClient
|
74
|
+
failPoint:
|
75
|
+
configureFailPoint: failCommand
|
76
|
+
mode: { times: 1 }
|
77
|
+
data:
|
78
|
+
failCommands: ["find"]
|
79
|
+
blockConnection: true
|
80
|
+
blockTimeMS: 100
|
81
|
+
- name: upload
|
82
|
+
object: *bucket
|
83
|
+
arguments:
|
84
|
+
filename: filename
|
85
|
+
source: { $$hexBytes: "1122334455" }
|
86
|
+
expectError:
|
87
|
+
isTimeoutError: true
|
88
|
+
|
89
|
+
# On the first write to the bucket, drivers check if the files collection has the correct indexes.
|
90
|
+
- description: "timeoutMS applied to listIndexes on files collection"
|
91
|
+
operations:
|
92
|
+
- name: failPoint
|
93
|
+
object: testRunner
|
94
|
+
arguments:
|
95
|
+
client: *failPointClient
|
96
|
+
failPoint:
|
97
|
+
configureFailPoint: failCommand
|
98
|
+
mode: { times: 1 }
|
99
|
+
data:
|
100
|
+
failCommands: ["listIndexes"]
|
101
|
+
blockConnection: true
|
102
|
+
blockTimeMS: 100
|
103
|
+
- name: upload
|
104
|
+
object: *bucket
|
105
|
+
arguments:
|
106
|
+
filename: filename
|
107
|
+
source: { $$hexBytes: "1122334455" }
|
108
|
+
expectError:
|
109
|
+
isTimeoutError: true
|
110
|
+
|
111
|
+
# If the files collection is empty when the first write to the bucket occurs, drivers attempt to create an index
|
112
|
+
# on the bucket's files collection.
|
113
|
+
- description: "timeoutMS applied to index creation for files collection"
|
114
|
+
operations:
|
115
|
+
- name: failPoint
|
116
|
+
object: testRunner
|
117
|
+
arguments:
|
118
|
+
client: *failPointClient
|
119
|
+
failPoint:
|
120
|
+
configureFailPoint: failCommand
|
121
|
+
mode: { times: 1 }
|
122
|
+
data:
|
123
|
+
failCommands: ["createIndexes"]
|
124
|
+
blockConnection: true
|
125
|
+
blockTimeMS: 100
|
126
|
+
- name: upload
|
127
|
+
object: *bucket
|
128
|
+
arguments:
|
129
|
+
filename: filename
|
130
|
+
source: { $$hexBytes: "1122334455" }
|
131
|
+
expectError:
|
132
|
+
isTimeoutError: true
|
133
|
+
|
134
|
+
# On the first write to the bucket, drivers check if the chunks collection has the correct indexes.
|
135
|
+
- description: "timeoutMS applied to listIndexes on chunks collection"
|
136
|
+
operations:
|
137
|
+
- name: failPoint
|
138
|
+
object: testRunner
|
139
|
+
arguments:
|
140
|
+
client: *failPointClient
|
141
|
+
failPoint:
|
142
|
+
configureFailPoint: failCommand
|
143
|
+
# The first listIndexes will be on the files collection, so we skip it.
|
144
|
+
mode: { skip: 1 }
|
145
|
+
data:
|
146
|
+
failCommands: ["listIndexes"]
|
147
|
+
blockConnection: true
|
148
|
+
blockTimeMS: 100
|
149
|
+
- name: upload
|
150
|
+
object: *bucket
|
151
|
+
arguments:
|
152
|
+
filename: filename
|
153
|
+
source: { $$hexBytes: "1122334455" }
|
154
|
+
expectError:
|
155
|
+
isTimeoutError: true
|
156
|
+
|
157
|
+
# If the files collection is empty when the first write to the bucket occurs, drivers attempt to create an index
|
158
|
+
# on the bucket's chunks collection.
|
159
|
+
- description: "timeoutMS applied to index creation for chunks collection"
|
160
|
+
operations:
|
161
|
+
- name: failPoint
|
162
|
+
object: testRunner
|
163
|
+
arguments:
|
164
|
+
client: *failPointClient
|
165
|
+
failPoint:
|
166
|
+
configureFailPoint: failCommand
|
167
|
+
# This index is created after the one on the files collection, so we skip the first createIndexes command
|
168
|
+
# and target the second.
|
169
|
+
mode: { skip: 1 }
|
170
|
+
data:
|
171
|
+
failCommands: ["createIndexes"]
|
172
|
+
blockConnection: true
|
173
|
+
blockTimeMS: 100
|
174
|
+
- name: upload
|
175
|
+
object: *bucket
|
176
|
+
arguments:
|
177
|
+
filename: filename
|
178
|
+
source: { $$hexBytes: "1122334455" }
|
179
|
+
expectError:
|
180
|
+
isTimeoutError: true
|
181
|
+
|
182
|
+
- description: "timeoutMS applied to chunk insertion"
|
183
|
+
operations:
|
184
|
+
- name: failPoint
|
185
|
+
object: testRunner
|
186
|
+
arguments:
|
187
|
+
client: *failPointClient
|
188
|
+
failPoint:
|
189
|
+
configureFailPoint: failCommand
|
190
|
+
mode: { times: 1 }
|
191
|
+
data:
|
192
|
+
failCommands: ["insert"]
|
193
|
+
blockConnection: true
|
194
|
+
blockTimeMS: 100
|
195
|
+
- name: upload
|
196
|
+
object: *bucket
|
197
|
+
arguments:
|
198
|
+
filename: filename
|
199
|
+
source: { $$hexBytes: "1122334455" }
|
200
|
+
expectError:
|
201
|
+
isTimeoutError: true
|
202
|
+
|
203
|
+
- description: "timeoutMS applied to creation of files document"
|
204
|
+
operations:
|
205
|
+
- name: failPoint
|
206
|
+
object: testRunner
|
207
|
+
arguments:
|
208
|
+
client: *failPointClient
|
209
|
+
failPoint:
|
210
|
+
configureFailPoint: failCommand
|
211
|
+
# Skip the insert to upload the chunk. Because the whole file fits into one chunk, the second insert will
|
212
|
+
# be the files document upload.
|
213
|
+
mode: { skip: 1 }
|
214
|
+
data:
|
215
|
+
failCommands: ["insert"]
|
216
|
+
blockConnection: true
|
217
|
+
blockTimeMS: 100
|
218
|
+
- name: upload
|
219
|
+
object: *bucket
|
220
|
+
arguments:
|
221
|
+
filename: filename
|
222
|
+
source: { $$hexBytes: "1122334455" }
|
223
|
+
expectError:
|
224
|
+
isTimeoutError: true
|
225
|
+
|
226
|
+
# Test that drivers apply timeoutMS to the entire upload rather than refreshing it between individual commands. We
|
227
|
+
# test this by blocking the "find" and "listIndexes" commands for 50ms each and performing an upload. The upload
|
228
|
+
# should inherit timeoutMS=75 from the client/database and the server takes over 75ms total, so the operation should
|
229
|
+
# fail.
|
230
|
+
- description: "timeoutMS applied to upload as a whole, not individual parts"
|
231
|
+
operations:
|
232
|
+
- name: failPoint
|
233
|
+
object: testRunner
|
234
|
+
arguments:
|
235
|
+
client: *failPointClient
|
236
|
+
failPoint:
|
237
|
+
configureFailPoint: failCommand
|
238
|
+
mode: { times: 2 }
|
239
|
+
data:
|
240
|
+
failCommands: ["find", "listIndexes"]
|
241
|
+
blockConnection: true
|
242
|
+
blockTimeMS: 50
|
243
|
+
- name: upload
|
244
|
+
object: *bucket
|
245
|
+
arguments:
|
246
|
+
filename: filename
|
247
|
+
source: { $$hexBytes: "1122334455" }
|
248
|
+
expectError:
|
249
|
+
isTimeoutError: true
|
@@ -0,0 +1,204 @@
|
|
1
|
+
description: "legacy timeouts continue to work if timeoutMS is not set"
|
2
|
+
|
3
|
+
schemaVersion: "1.0"
|
4
|
+
|
5
|
+
runOnRequirements:
|
6
|
+
- minServerVersion: "4.4"
|
7
|
+
|
8
|
+
initialData:
|
9
|
+
- collectionName: &collectionName coll
|
10
|
+
databaseName: &databaseName test
|
11
|
+
documents: []
|
12
|
+
|
13
|
+
tests:
|
14
|
+
- description: "socketTimeoutMS is not used to derive a maxTimeMS command field"
|
15
|
+
operations:
|
16
|
+
- name: createEntities
|
17
|
+
object: testRunner
|
18
|
+
arguments:
|
19
|
+
entities:
|
20
|
+
- client:
|
21
|
+
id: &client client
|
22
|
+
observeEvents:
|
23
|
+
- commandStartedEvent
|
24
|
+
uriOptions:
|
25
|
+
socketTimeoutMS: 50000
|
26
|
+
- database:
|
27
|
+
id: &database database
|
28
|
+
client: *client
|
29
|
+
databaseName: *databaseName
|
30
|
+
- collection:
|
31
|
+
id: &collection collection
|
32
|
+
database: *database
|
33
|
+
collectionName: *collectionName
|
34
|
+
- name: insertOne
|
35
|
+
object: *collection
|
36
|
+
arguments:
|
37
|
+
document: { x: 1 }
|
38
|
+
expectEvents:
|
39
|
+
- client: *client
|
40
|
+
events:
|
41
|
+
- commandStartedEvent:
|
42
|
+
commandName: insert
|
43
|
+
databaseName: *databaseName
|
44
|
+
command:
|
45
|
+
insert: *collectionName
|
46
|
+
maxTimeMS: { $$exists: false }
|
47
|
+
|
48
|
+
- description: "waitQueueTimeoutMS is not used to derive a maxTimeMS command field"
|
49
|
+
operations:
|
50
|
+
- name: createEntities
|
51
|
+
object: testRunner
|
52
|
+
arguments:
|
53
|
+
entities:
|
54
|
+
- client:
|
55
|
+
id: &client client
|
56
|
+
observeEvents:
|
57
|
+
- commandStartedEvent
|
58
|
+
uriOptions:
|
59
|
+
waitQueueTimeoutMS: 50000
|
60
|
+
- database:
|
61
|
+
id: &database database
|
62
|
+
client: *client
|
63
|
+
databaseName: *databaseName
|
64
|
+
- collection:
|
65
|
+
id: &collection collection
|
66
|
+
database: *database
|
67
|
+
collectionName: *collectionName
|
68
|
+
- name: insertOne
|
69
|
+
object: *collection
|
70
|
+
arguments:
|
71
|
+
document: { x: 1 }
|
72
|
+
expectEvents:
|
73
|
+
- client: *client
|
74
|
+
events:
|
75
|
+
- commandStartedEvent:
|
76
|
+
commandName: insert
|
77
|
+
databaseName: *databaseName
|
78
|
+
command:
|
79
|
+
insert: *collectionName
|
80
|
+
maxTimeMS: { $$exists: false }
|
81
|
+
|
82
|
+
- description: "wTimeoutMS is not used to derive a maxTimeMS command field"
|
83
|
+
operations:
|
84
|
+
- name: createEntities
|
85
|
+
object: testRunner
|
86
|
+
arguments:
|
87
|
+
entities:
|
88
|
+
- client:
|
89
|
+
id: &client client
|
90
|
+
observeEvents:
|
91
|
+
- commandStartedEvent
|
92
|
+
uriOptions:
|
93
|
+
wTimeoutMS: &wTimeoutMS 50000
|
94
|
+
- database:
|
95
|
+
id: &database database
|
96
|
+
client: *client
|
97
|
+
databaseName: *databaseName
|
98
|
+
- collection:
|
99
|
+
id: &collection collection
|
100
|
+
database: *database
|
101
|
+
collectionName: *collectionName
|
102
|
+
- name: insertOne
|
103
|
+
object: *collection
|
104
|
+
arguments:
|
105
|
+
document: { x: 1 }
|
106
|
+
expectEvents:
|
107
|
+
- client: *client
|
108
|
+
events:
|
109
|
+
- commandStartedEvent:
|
110
|
+
commandName: insert
|
111
|
+
databaseName: *databaseName
|
112
|
+
command:
|
113
|
+
insert: *collectionName
|
114
|
+
maxTimeMS: { $$exists: false }
|
115
|
+
writeConcern:
|
116
|
+
wtimeout: *wTimeoutMS
|
117
|
+
|
118
|
+
# If the maxTimeMS option is set for a specific command, it should be used as the maxTimeMS command field without any
|
119
|
+
# modifications. This is different from timeoutMS because in that case, drivers subtract the target server's min
|
120
|
+
# RTT from the remaining timeout to derive a maxTimeMS field.
|
121
|
+
- description: "maxTimeMS option is used directly as the maxTimeMS field on a command"
|
122
|
+
operations:
|
123
|
+
- name: createEntities
|
124
|
+
object: testRunner
|
125
|
+
arguments:
|
126
|
+
entities:
|
127
|
+
- client:
|
128
|
+
id: &client client
|
129
|
+
observeEvents:
|
130
|
+
- commandStartedEvent
|
131
|
+
- database:
|
132
|
+
id: &database database
|
133
|
+
client: *client
|
134
|
+
databaseName: *databaseName
|
135
|
+
- collection:
|
136
|
+
id: &collection collection
|
137
|
+
database: *database
|
138
|
+
collectionName: *collectionName
|
139
|
+
- name: estimatedDocumentCount
|
140
|
+
object: *collection
|
141
|
+
arguments:
|
142
|
+
maxTimeMS: &maxTimeMS 50000
|
143
|
+
expectEvents:
|
144
|
+
- client: *client
|
145
|
+
events:
|
146
|
+
- commandStartedEvent:
|
147
|
+
commandName: count
|
148
|
+
databaseName: *databaseName
|
149
|
+
command:
|
150
|
+
count: *collectionName
|
151
|
+
maxTimeMS: *maxTimeMS
|
152
|
+
|
153
|
+
# Same test as above but with the maxCommitTimeMS option.
|
154
|
+
- description: "maxCommitTimeMS option is used directly as the maxTimeMS field on a commitTransaction command"
|
155
|
+
runOnRequirements:
|
156
|
+
# Note: minServerVersion is specified in top-level runOnRequirements
|
157
|
+
- topologies: ["replicaset", "sharded"]
|
158
|
+
operations:
|
159
|
+
- name: createEntities
|
160
|
+
object: testRunner
|
161
|
+
arguments:
|
162
|
+
entities:
|
163
|
+
- client:
|
164
|
+
id: &client client
|
165
|
+
observeEvents:
|
166
|
+
- commandStartedEvent
|
167
|
+
- database:
|
168
|
+
id: &database database
|
169
|
+
client: *client
|
170
|
+
databaseName: *databaseName
|
171
|
+
- collection:
|
172
|
+
id: &collection collection
|
173
|
+
database: *database
|
174
|
+
collectionName: *collectionName
|
175
|
+
- session:
|
176
|
+
id: &session session
|
177
|
+
client: *client
|
178
|
+
sessionOptions:
|
179
|
+
defaultTransactionOptions:
|
180
|
+
maxCommitTimeMS: &maxCommitTimeMS 1000
|
181
|
+
- name: startTransaction
|
182
|
+
object: *session
|
183
|
+
- name: insertOne
|
184
|
+
object: *collection
|
185
|
+
arguments:
|
186
|
+
document: { _id: 1 }
|
187
|
+
session: *session
|
188
|
+
- name: commitTransaction
|
189
|
+
object: *session
|
190
|
+
expectEvents:
|
191
|
+
- client: *client
|
192
|
+
events:
|
193
|
+
- commandStartedEvent:
|
194
|
+
commandName: insert
|
195
|
+
databaseName: *databaseName
|
196
|
+
command:
|
197
|
+
insert: *collectionName
|
198
|
+
maxTimeMS: { $$exists: false }
|
199
|
+
- commandStartedEvent:
|
200
|
+
commandName: commitTransaction
|
201
|
+
databaseName: admin
|
202
|
+
command:
|
203
|
+
commitTransaction: 1
|
204
|
+
maxTimeMS: *maxCommitTimeMS
|