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,250 @@
|
|
1
|
+
description: "timeoutMS behaves correctly during command execution"
|
2
|
+
|
3
|
+
schemaVersion: "1.9"
|
4
|
+
|
5
|
+
runOnRequirements:
|
6
|
+
# The appName filter cannot be used to set a fail point on connection handshakes until server version 4.9 due to
|
7
|
+
# SERVER-49220/SERVER-49336.
|
8
|
+
- minServerVersion: "4.9"
|
9
|
+
# Skip load-balanced and serverless which do not support RTT measurements.
|
10
|
+
topologies: [ single, replicaset, sharded ]
|
11
|
+
serverless: forbid
|
12
|
+
|
13
|
+
createEntities:
|
14
|
+
- client:
|
15
|
+
id: &failPointClient failPointClient
|
16
|
+
useMultipleMongoses: false
|
17
|
+
|
18
|
+
initialData:
|
19
|
+
# The corresponding entities for the collections defined here are created in test-level createEntities operations.
|
20
|
+
# This is done so that tests can set fail points that will affect all of the handshakes and heartbeats done by a
|
21
|
+
# client. The collection and database names are listed here so that the collections will be dropped and re-created at
|
22
|
+
# the beginning of each test.
|
23
|
+
- collectionName: ®ularCollectionName coll
|
24
|
+
databaseName: &databaseName test
|
25
|
+
documents: []
|
26
|
+
- collectionName: &timeoutCollectionName timeoutColl
|
27
|
+
databaseName: &databaseName test
|
28
|
+
documents: []
|
29
|
+
|
30
|
+
tests:
|
31
|
+
- description: "maxTimeMS value in the command is less than timeoutMS"
|
32
|
+
operations:
|
33
|
+
# Artificially increase the server RTT to ~50ms.
|
34
|
+
- name: failPoint
|
35
|
+
object: testRunner
|
36
|
+
arguments:
|
37
|
+
client: *failPointClient
|
38
|
+
failPoint:
|
39
|
+
configureFailPoint: failCommand
|
40
|
+
mode: "alwaysOn"
|
41
|
+
data:
|
42
|
+
failCommands: ["hello", "isMaster"]
|
43
|
+
appName: &appName reduceMaxTimeMSTest
|
44
|
+
blockConnection: true
|
45
|
+
blockTimeMS: 50
|
46
|
+
# Create a client with the app name specified in the fail point and timeoutMS higher than blockTimeMS.
|
47
|
+
# Also create database and collection entities derived from the new client.
|
48
|
+
- name: createEntities
|
49
|
+
object: testRunner
|
50
|
+
arguments:
|
51
|
+
entities:
|
52
|
+
- client:
|
53
|
+
id: &client client
|
54
|
+
useMultipleMongoses: false
|
55
|
+
uriOptions:
|
56
|
+
appName: *appName
|
57
|
+
w: 1 # Override server's w:majority default to speed up the test.
|
58
|
+
timeoutMS: 500
|
59
|
+
heartbeatFrequencyMS: 500
|
60
|
+
observeEvents:
|
61
|
+
- commandStartedEvent
|
62
|
+
- database:
|
63
|
+
id: &database database
|
64
|
+
client: *client
|
65
|
+
databaseName: *databaseName
|
66
|
+
- collection:
|
67
|
+
id: &timeoutCollection timeoutCollection
|
68
|
+
database: *database
|
69
|
+
collectionName: *timeoutCollectionName
|
70
|
+
# Do an operation with a large timeout to ensure the servers are discovered.
|
71
|
+
- name: insertOne
|
72
|
+
object: *timeoutCollection
|
73
|
+
arguments:
|
74
|
+
document: { _id: 1 }
|
75
|
+
timeoutMS: 100000
|
76
|
+
# Wait until short-circuiting has been enabled (at least 2 RTT measurements).
|
77
|
+
- name: wait
|
78
|
+
object: testRunner
|
79
|
+
arguments:
|
80
|
+
ms: 1000
|
81
|
+
# Do an operation with timeoutCollection so the event will include a maxTimeMS field.
|
82
|
+
- name: insertOne
|
83
|
+
object: *timeoutCollection
|
84
|
+
arguments:
|
85
|
+
document: { _id: 2 }
|
86
|
+
expectEvents:
|
87
|
+
- client: *client
|
88
|
+
events:
|
89
|
+
- commandStartedEvent:
|
90
|
+
commandName: insert
|
91
|
+
databaseName: *databaseName
|
92
|
+
command:
|
93
|
+
insert: *timeoutCollectionName
|
94
|
+
- commandStartedEvent:
|
95
|
+
commandName: insert
|
96
|
+
databaseName: *databaseName
|
97
|
+
command:
|
98
|
+
insert: *timeoutCollectionName
|
99
|
+
maxTimeMS: { $$lte: 450 }
|
100
|
+
|
101
|
+
- description: "command is not sent if RTT is greater than timeoutMS"
|
102
|
+
operations:
|
103
|
+
# Artificially increase the server RTT to ~50ms.
|
104
|
+
- name: failPoint
|
105
|
+
object: testRunner
|
106
|
+
arguments:
|
107
|
+
client: *failPointClient
|
108
|
+
failPoint:
|
109
|
+
configureFailPoint: failCommand
|
110
|
+
mode: "alwaysOn"
|
111
|
+
data:
|
112
|
+
failCommands: ["hello", "isMaster"]
|
113
|
+
appName: &appName rttTooHighTest
|
114
|
+
blockConnection: true
|
115
|
+
blockTimeMS: 50
|
116
|
+
# Create a client with the app name specified in the fail point. Also create database and collection entities
|
117
|
+
# derived from the new client. There is one collection entity with no timeoutMS and another with a timeoutMS
|
118
|
+
# that's lower than the fail point's blockTimeMS value.
|
119
|
+
- name: createEntities
|
120
|
+
object: testRunner
|
121
|
+
arguments:
|
122
|
+
entities:
|
123
|
+
- client:
|
124
|
+
id: &client client
|
125
|
+
useMultipleMongoses: false
|
126
|
+
uriOptions:
|
127
|
+
appName: *appName
|
128
|
+
w: 1 # Override server's w:majority default to speed up the test.
|
129
|
+
timeoutMS: 10
|
130
|
+
heartbeatFrequencyMS: 500
|
131
|
+
observeEvents:
|
132
|
+
- commandStartedEvent
|
133
|
+
- database:
|
134
|
+
id: &database database
|
135
|
+
client: *client
|
136
|
+
databaseName: *databaseName
|
137
|
+
- collection:
|
138
|
+
id: &timeoutCollection timeoutCollection
|
139
|
+
database: *database
|
140
|
+
collectionName: *timeoutCollectionName
|
141
|
+
# Do an operation with a large timeout to ensure the servers are discovered.
|
142
|
+
- name: insertOne
|
143
|
+
object: *timeoutCollection
|
144
|
+
arguments:
|
145
|
+
document: { _id: 1 }
|
146
|
+
timeoutMS: 100000
|
147
|
+
# Wait until short-circuiting has been enabled (at least 2 RTT measurements).
|
148
|
+
- name: wait
|
149
|
+
object: testRunner
|
150
|
+
arguments:
|
151
|
+
ms: 1000
|
152
|
+
# Do an operation with timeoutCollection which will error.
|
153
|
+
- name: insertOne
|
154
|
+
object: *timeoutCollection
|
155
|
+
arguments:
|
156
|
+
document: { _id: 2 }
|
157
|
+
expectError:
|
158
|
+
isTimeoutError: true
|
159
|
+
# Do an operation with timeoutCollection which will error.
|
160
|
+
- name: insertOne
|
161
|
+
object: *timeoutCollection
|
162
|
+
arguments:
|
163
|
+
document: { _id: 3 }
|
164
|
+
expectError:
|
165
|
+
isTimeoutError: true
|
166
|
+
# Do an operation with timeoutCollection which will error.
|
167
|
+
- name: insertOne
|
168
|
+
object: *timeoutCollection
|
169
|
+
arguments:
|
170
|
+
document: { _id: 4 }
|
171
|
+
expectError:
|
172
|
+
isTimeoutError: true
|
173
|
+
expectEvents:
|
174
|
+
# There should only be one event, which corresponds to the first
|
175
|
+
# insertOne call. For the subsequent insertOne calls, drivers should
|
176
|
+
# fail client-side.
|
177
|
+
- client: *client
|
178
|
+
events:
|
179
|
+
- commandStartedEvent:
|
180
|
+
commandName: insert
|
181
|
+
databaseName: *databaseName
|
182
|
+
command:
|
183
|
+
insert: *timeoutCollectionName
|
184
|
+
|
185
|
+
- description: "short-circuit is not enabled with only 1 RTT measurement"
|
186
|
+
operations:
|
187
|
+
# Artificially increase the server RTT to ~300ms.
|
188
|
+
- name: failPoint
|
189
|
+
object: testRunner
|
190
|
+
arguments:
|
191
|
+
client: *failPointClient
|
192
|
+
failPoint:
|
193
|
+
configureFailPoint: failCommand
|
194
|
+
mode: "alwaysOn"
|
195
|
+
data:
|
196
|
+
failCommands: ["hello", "isMaster"]
|
197
|
+
appName: &appName reduceMaxTimeMSTest
|
198
|
+
blockConnection: true
|
199
|
+
blockTimeMS: 100
|
200
|
+
# Create a client with the app name specified in the fail point and timeoutMS lower than blockTimeMS.
|
201
|
+
# Also create database and collection entities derived from the new client.
|
202
|
+
- name: createEntities
|
203
|
+
object: testRunner
|
204
|
+
arguments:
|
205
|
+
entities:
|
206
|
+
- client:
|
207
|
+
id: &client client
|
208
|
+
useMultipleMongoses: false
|
209
|
+
uriOptions:
|
210
|
+
appName: *appName
|
211
|
+
w: 1 # Override server's w:majority default to speed up the test.
|
212
|
+
timeoutMS: 90
|
213
|
+
heartbeatFrequencyMS: 100000 # Override heartbeatFrequencyMS to ensure only 1 RTT is recorded.
|
214
|
+
observeEvents:
|
215
|
+
- commandStartedEvent
|
216
|
+
- database:
|
217
|
+
id: &database database
|
218
|
+
client: *client
|
219
|
+
databaseName: *databaseName
|
220
|
+
- collection:
|
221
|
+
id: &timeoutCollection timeoutCollection
|
222
|
+
database: *database
|
223
|
+
collectionName: *timeoutCollectionName
|
224
|
+
# Do an operation with a large timeout to ensure the servers are discovered.
|
225
|
+
- name: insertOne
|
226
|
+
object: *timeoutCollection
|
227
|
+
arguments:
|
228
|
+
document: { _id: 1 }
|
229
|
+
timeoutMS: 100000
|
230
|
+
# Do an operation with timeoutCollection which will succeed. If this
|
231
|
+
# fails it indicates the driver mistakenly used the min RTT even though
|
232
|
+
# there has only been one sample.
|
233
|
+
- name: insertOne
|
234
|
+
object: *timeoutCollection
|
235
|
+
arguments:
|
236
|
+
document: { _id: 2 }
|
237
|
+
expectEvents:
|
238
|
+
- client: *client
|
239
|
+
events:
|
240
|
+
- commandStartedEvent:
|
241
|
+
commandName: insert
|
242
|
+
databaseName: *databaseName
|
243
|
+
command:
|
244
|
+
insert: *timeoutCollectionName
|
245
|
+
- commandStartedEvent:
|
246
|
+
commandName: insert
|
247
|
+
databaseName: *databaseName
|
248
|
+
command:
|
249
|
+
insert: *timeoutCollectionName
|
250
|
+
maxTimeMS: { $$lte: 450 }
|
@@ -0,0 +1,113 @@
|
|
1
|
+
description: "timeoutMS behaves correctly for the withTransaction API"
|
2
|
+
|
3
|
+
schemaVersion: "1.9"
|
4
|
+
|
5
|
+
runOnRequirements:
|
6
|
+
- minServerVersion: "4.4"
|
7
|
+
topologies: ["replicaset", "sharded"]
|
8
|
+
|
9
|
+
createEntities:
|
10
|
+
- client:
|
11
|
+
id: &failPointClient failPointClient
|
12
|
+
useMultipleMongoses: false
|
13
|
+
- client:
|
14
|
+
id: &client client
|
15
|
+
uriOptions:
|
16
|
+
timeoutMS: 50
|
17
|
+
useMultipleMongoses: false
|
18
|
+
observeEvents:
|
19
|
+
- commandStartedEvent
|
20
|
+
- database:
|
21
|
+
id: &database database
|
22
|
+
client: *client
|
23
|
+
databaseName: &databaseName test
|
24
|
+
- collection:
|
25
|
+
id: &collection collection
|
26
|
+
database: *database
|
27
|
+
collectionName: &collectionName coll
|
28
|
+
- session:
|
29
|
+
id: &session session
|
30
|
+
client: *client
|
31
|
+
|
32
|
+
initialData:
|
33
|
+
- collectionName: *collectionName
|
34
|
+
databaseName: *databaseName
|
35
|
+
documents: []
|
36
|
+
|
37
|
+
tests:
|
38
|
+
- description: "withTransaction raises a client-side error if timeoutMS is overridden inside the callback"
|
39
|
+
operations:
|
40
|
+
- name: withTransaction
|
41
|
+
object: *session
|
42
|
+
arguments:
|
43
|
+
callback:
|
44
|
+
- name: insertOne
|
45
|
+
object: *collection
|
46
|
+
arguments:
|
47
|
+
document: { _id: 1 }
|
48
|
+
session: *session
|
49
|
+
timeoutMS: 100
|
50
|
+
expectError:
|
51
|
+
isClientError: true
|
52
|
+
expectEvents:
|
53
|
+
# The only operation run fails with a client-side error, so there should be no events for the client.
|
54
|
+
- client: *client
|
55
|
+
events: []
|
56
|
+
|
57
|
+
- description: "timeoutMS is not refreshed for each operation in the callback"
|
58
|
+
operations:
|
59
|
+
- name: failPoint
|
60
|
+
object: testRunner
|
61
|
+
arguments:
|
62
|
+
client: *failPointClient
|
63
|
+
failPoint:
|
64
|
+
configureFailPoint: failCommand
|
65
|
+
mode: { times: 2 }
|
66
|
+
data:
|
67
|
+
failCommands: ["insert"]
|
68
|
+
blockConnection: true
|
69
|
+
# Was 30, but JRuby was taking too long in preparing and issuing
|
70
|
+
# the operation. We now specify the timeoutMS below, and set this
|
71
|
+
# value to just more than half of it (so that two inserts will
|
72
|
+
# exceed the timeout, but one won't--or shouldn't).
|
73
|
+
blockTimeMS: 51
|
74
|
+
- name: withTransaction
|
75
|
+
object: *session
|
76
|
+
arguments:
|
77
|
+
# Was originally not specified here, inheriting the client value of 50ms.
|
78
|
+
# That wasn't giving JRuby enough time, so we specify a larger value
|
79
|
+
# here.
|
80
|
+
timeoutMS: 100
|
81
|
+
callback:
|
82
|
+
- name: insertOne
|
83
|
+
object: *collection
|
84
|
+
arguments:
|
85
|
+
document: { _id: 1 }
|
86
|
+
session: *session
|
87
|
+
- name: insertOne
|
88
|
+
object: *collection
|
89
|
+
arguments:
|
90
|
+
document: { _id: 2 }
|
91
|
+
session: *session
|
92
|
+
expectError:
|
93
|
+
isTimeoutError: true
|
94
|
+
expectError:
|
95
|
+
isTimeoutError: true
|
96
|
+
expectEvents:
|
97
|
+
- client: *client
|
98
|
+
events:
|
99
|
+
# Because the second insert expects an error and gets an error, it technically succeeds, so withTransaction
|
100
|
+
# will try to run commitTransaction. This will fail client-side, though, because the timeout has already
|
101
|
+
# expired, so no command is sent.
|
102
|
+
- commandStartedEvent:
|
103
|
+
commandName: insert
|
104
|
+
databaseName: *databaseName
|
105
|
+
command:
|
106
|
+
insert: *collectionName
|
107
|
+
maxTimeMS: { $$type: ["int", "long"] }
|
108
|
+
- commandStartedEvent:
|
109
|
+
commandName: insert
|
110
|
+
databaseName: *databaseName
|
111
|
+
command:
|
112
|
+
insert: *collectionName
|
113
|
+
maxTimeMS: { $$type: ["int", "long"] }
|
@@ -0,0 +1,70 @@
|
|
1
|
+
description: "tests for timeoutMS behavior that applies to all cursor types"
|
2
|
+
|
3
|
+
schemaVersion: "1.0"
|
4
|
+
|
5
|
+
createEntities:
|
6
|
+
- client:
|
7
|
+
id: &client client
|
8
|
+
- database:
|
9
|
+
id: &database database
|
10
|
+
client: *client
|
11
|
+
databaseName: &databaseName test
|
12
|
+
- collection:
|
13
|
+
id: &collection collection
|
14
|
+
database: *database
|
15
|
+
collectionName: &collectionName coll
|
16
|
+
|
17
|
+
initialData:
|
18
|
+
- collectionName: *collectionName
|
19
|
+
databaseName: *databaseName
|
20
|
+
documents: []
|
21
|
+
|
22
|
+
tests:
|
23
|
+
- description: "find errors if timeoutMode is set and timeoutMS is not"
|
24
|
+
operations:
|
25
|
+
- name: find
|
26
|
+
object: *collection
|
27
|
+
arguments:
|
28
|
+
filter: {}
|
29
|
+
timeoutMode: cursorLifetime
|
30
|
+
expectError:
|
31
|
+
isClientError: true
|
32
|
+
|
33
|
+
- description: "collection aggregate errors if timeoutMode is set and timeoutMS is not"
|
34
|
+
operations:
|
35
|
+
- name: aggregate
|
36
|
+
object: *collection
|
37
|
+
arguments:
|
38
|
+
pipeline: []
|
39
|
+
timeoutMode: cursorLifetime
|
40
|
+
expectError:
|
41
|
+
isClientError: true
|
42
|
+
|
43
|
+
- description: "database aggregate errors if timeoutMode is set and timeoutMS is not"
|
44
|
+
operations:
|
45
|
+
- name: aggregate
|
46
|
+
object: *database
|
47
|
+
arguments:
|
48
|
+
pipeline: []
|
49
|
+
timeoutMode: cursorLifetime
|
50
|
+
expectError:
|
51
|
+
isClientError: true
|
52
|
+
|
53
|
+
- description: "listCollections errors if timeoutMode is set and timeoutMS is not"
|
54
|
+
operations:
|
55
|
+
- name: listCollections
|
56
|
+
object: *database
|
57
|
+
arguments:
|
58
|
+
filter: {}
|
59
|
+
timeoutMode: cursorLifetime
|
60
|
+
expectError:
|
61
|
+
isClientError: true
|
62
|
+
|
63
|
+
- description: "listIndexes errors if timeoutMode is set and timeoutMS is not"
|
64
|
+
operations:
|
65
|
+
- name: listIndexes
|
66
|
+
object: *collection
|
67
|
+
arguments:
|
68
|
+
timeoutMode: cursorLifetime
|
69
|
+
expectError:
|
70
|
+
isClientError: true
|