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
@@ -38,7 +38,8 @@ module Mongo
|
|
38
38
|
# @param [ Hash ] opts The options.
|
39
39
|
#
|
40
40
|
# @option opts [ Integer ] :max_time_ms The maximum amount of time to allow the command
|
41
|
-
# to run in milliseconds.
|
41
|
+
# to run in milliseconds. This option is deprecated, use
|
42
|
+
# :timeout_ms instead.
|
42
43
|
# @option opts [ Hash ] :projection The fields to include or exclude in the returned doc.
|
43
44
|
# @option opts [ Hash ] :sort The key and direction pairs by which the result set
|
44
45
|
# will be sorted.
|
@@ -46,11 +47,15 @@ module Mongo
|
|
46
47
|
# @option opts [ Session ] :session The session to use.
|
47
48
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
48
49
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
50
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
51
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
52
|
+
# The default value is unset which means the value is inherited from
|
53
|
+
# the collection or the database or the client.
|
49
54
|
# @option opts [ Hash ] :write_concern The write concern options.
|
50
55
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
51
|
-
# @option
|
56
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
52
57
|
# See the server documentation for details.
|
53
|
-
# @option
|
58
|
+
# @option opts [ Object ] :comment A user-provided
|
54
59
|
# comment to attach to this command.
|
55
60
|
#
|
56
61
|
# @return [ BSON::Document, nil ] The document, if found.
|
@@ -80,7 +85,11 @@ module Mongo
|
|
80
85
|
comment: opts[:comment],
|
81
86
|
}.compact
|
82
87
|
|
83
|
-
context = Operation::Context.new(
|
88
|
+
context = Operation::Context.new(
|
89
|
+
client: client,
|
90
|
+
session: session,
|
91
|
+
operation_timeouts: operation_timeouts(opts)
|
92
|
+
)
|
84
93
|
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
85
94
|
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
86
95
|
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -116,9 +125,13 @@ module Mongo
|
|
116
125
|
# @option opts [ Hash ] :collation The collation to use.
|
117
126
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
118
127
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
128
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
129
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
130
|
+
# The default value is unset which means the value is inherited from
|
131
|
+
# the collection or the database or the client.
|
119
132
|
# @option opts [ Hash ] :write_concern The write concern options.
|
120
133
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
121
|
-
# @option
|
134
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
122
135
|
# See the server documentation for details.
|
123
136
|
#
|
124
137
|
# @return [ BSON::Document ] The document.
|
@@ -136,8 +149,9 @@ module Mongo
|
|
136
149
|
# @param [ BSON::Document ] document The updates.
|
137
150
|
# @param [ Hash ] opts The options.
|
138
151
|
#
|
139
|
-
# @option
|
140
|
-
# to run in milliseconds.
|
152
|
+
# @option opts [ Integer ] :max_time_ms The maximum amount of time to allow the command
|
153
|
+
# to run in milliseconds. This option is deprecated, use
|
154
|
+
# :timeout_ms instead.
|
141
155
|
# @option opts [ Hash ] :projection The fields to include or exclude in the returned doc.
|
142
156
|
# @option opts [ Hash ] :sort The key and direction pairs by which the result set
|
143
157
|
# will be sorted.
|
@@ -149,13 +163,17 @@ module Mongo
|
|
149
163
|
# @option opts [ Array ] :array_filters A set of filters specifying to which array elements
|
150
164
|
# an update should apply.
|
151
165
|
# @option opts [ Session ] :session The session to use.
|
166
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
167
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
168
|
+
# The default value is unset which means the value is inherited from
|
169
|
+
# the collection or the database or the client.
|
152
170
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
153
171
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
154
172
|
# @option opts [ Hash ] :write_concern The write concern options.
|
155
173
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
156
|
-
# @option
|
174
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
157
175
|
# See the server documentation for details.
|
158
|
-
# @option
|
176
|
+
# @option opts [ Object ] :comment A user-provided
|
159
177
|
# comment to attach to this command.
|
160
178
|
#
|
161
179
|
# @return [ BSON::Document | nil ] The document or nil if none is found.
|
@@ -188,7 +206,11 @@ module Mongo
|
|
188
206
|
comment: opts[:comment]
|
189
207
|
}.compact
|
190
208
|
|
191
|
-
context = Operation::Context.new(
|
209
|
+
context = Operation::Context.new(
|
210
|
+
client: client,
|
211
|
+
session: session,
|
212
|
+
operation_timeouts: operation_timeouts(opts)
|
213
|
+
)
|
192
214
|
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
193
215
|
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
194
216
|
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -216,13 +238,17 @@ module Mongo
|
|
216
238
|
#
|
217
239
|
# @option opts [ Hash ] :collation The collation to use.
|
218
240
|
# @option opts [ Session ] :session The session to use.
|
241
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
242
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
243
|
+
# The default value is unset which means the value is inherited from
|
244
|
+
# the collection or the database or the client.
|
219
245
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
220
246
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
221
247
|
# @option opts [ Hash ] :write_concern The write concern options.
|
222
248
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
223
|
-
# @option
|
249
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
224
250
|
# See the server documentation for details.
|
225
|
-
# @option
|
251
|
+
# @option opts [ Object ] :comment A user-provided
|
226
252
|
# comment to attach to this command.
|
227
253
|
#
|
228
254
|
# @return [ Result ] The response from the database.
|
@@ -244,8 +270,11 @@ module Mongo
|
|
244
270
|
hint: opts[:hint],
|
245
271
|
collation: opts[:collation] || opts['collation'] || collation,
|
246
272
|
}.compact
|
247
|
-
|
248
|
-
|
273
|
+
context = Operation::Context.new(
|
274
|
+
client: client,
|
275
|
+
session: session,
|
276
|
+
operation_timeouts: operation_timeouts(opts)
|
277
|
+
)
|
249
278
|
nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
250
279
|
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
251
280
|
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -274,15 +303,19 @@ module Mongo
|
|
274
303
|
# @param [ Hash ] opts The options.
|
275
304
|
#
|
276
305
|
# @option opts [ Hash ] :collation The collation to use.
|
277
|
-
# @option opts [
|
306
|
+
# @option opts [ Object ] :comment A user-provided
|
307
|
+
# comment to attach to this command.
|
278
308
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
279
309
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
310
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
311
|
+
# See the server documentation for details.
|
312
|
+
# @option opts [ Session ] :session The session to use.
|
313
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
314
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
315
|
+
# The default value is unset which means the value is inherited from
|
316
|
+
# the collection or the database or the client.
|
280
317
|
# @option opts [ Hash ] :write_concern The write concern options.
|
281
318
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
282
|
-
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
283
|
-
# See the server documentation for details.
|
284
|
-
# @option options [ Object ] :comment A user-provided
|
285
|
-
# comment to attach to this command.
|
286
319
|
#
|
287
320
|
# @return [ Result ] The response from the database.
|
288
321
|
#
|
@@ -304,7 +337,11 @@ module Mongo
|
|
304
337
|
collation: opts[:collation] || opts['collation'] || collation,
|
305
338
|
}.compact
|
306
339
|
|
307
|
-
context = Operation::Context.new(
|
340
|
+
context = Operation::Context.new(
|
341
|
+
client: client,
|
342
|
+
session: session,
|
343
|
+
operation_timeouts: operation_timeouts(opts)
|
344
|
+
)
|
308
345
|
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
309
346
|
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
310
347
|
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -334,20 +371,24 @@ module Mongo
|
|
334
371
|
# @param [ Hash ] replacement The replacement document.
|
335
372
|
# @param [ Hash ] opts The options.
|
336
373
|
#
|
337
|
-
# @option opts [ true, false ] :upsert Whether to upsert if the
|
338
|
-
# document doesn't exist.
|
339
374
|
# @option opts [ true, false ] :bypass_document_validation Whether or
|
340
375
|
# not to skip document level validation.
|
341
376
|
# @option opts [ Hash ] :collation The collation to use.
|
342
|
-
# @option opts [
|
377
|
+
# @option opts [ Object ] :comment A user-provided
|
378
|
+
# comment to attach to this command.
|
343
379
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
344
380
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
381
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
382
|
+
# See the server documentation for details.
|
383
|
+
# @option opts [ Session ] :session The session to use.
|
384
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
385
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
386
|
+
# The default value is unset which means the value is inherited from
|
387
|
+
# the collection or the database or the client.
|
345
388
|
# @option opts [ Hash ] :write_concern The write concern options.
|
389
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the
|
390
|
+
# document doesn't exist.
|
346
391
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
347
|
-
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
348
|
-
# See the server documentation for details.
|
349
|
-
# @option options [ Object ] :comment A user-provided
|
350
|
-
# comment to attach to this command.
|
351
392
|
#
|
352
393
|
# @return [ Result ] The response from the database.
|
353
394
|
#
|
@@ -374,7 +415,11 @@ module Mongo
|
|
374
415
|
update_doc['upsert'] = true
|
375
416
|
end
|
376
417
|
|
377
|
-
context = Operation::Context.new(
|
418
|
+
context = Operation::Context.new(
|
419
|
+
client: client,
|
420
|
+
session: session,
|
421
|
+
operation_timeouts: operation_timeouts(opts)
|
422
|
+
)
|
378
423
|
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
379
424
|
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
380
425
|
if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -404,22 +449,26 @@ module Mongo
|
|
404
449
|
# @param [ Hash | Array<Hash> ] spec The update document or pipeline.
|
405
450
|
# @param [ Hash ] opts The options.
|
406
451
|
#
|
407
|
-
# @option opts [
|
408
|
-
#
|
452
|
+
# @option opts [ Array ] :array_filters A set of filters specifying to
|
453
|
+
# which array elements an update should apply.
|
409
454
|
# @option opts [ true, false ] :bypass_document_validation Whether or
|
410
455
|
# not to skip document level validation.
|
411
456
|
# @option opts [ Hash ] :collation The collation to use.
|
412
|
-
# @option opts [
|
413
|
-
#
|
414
|
-
# @option opts [ Session ] :session The session to use.
|
457
|
+
# @option opts [ Object ] :comment A user-provided
|
458
|
+
# comment to attach to this command.
|
415
459
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
416
460
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
461
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
462
|
+
# See the server documentation for details.
|
463
|
+
# @option opts [ Session ] :session The session to use.
|
464
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
465
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
466
|
+
# The default value is unset which means the value is inherited from
|
467
|
+
# the collection or the database or the client.
|
468
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the
|
469
|
+
# document doesn't exist.
|
417
470
|
# @option opts [ Hash ] :write_concern The write concern options.
|
418
471
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
419
|
-
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
420
|
-
# See the server documentation for details.
|
421
|
-
# @option options [ Object ] :comment A user-provided
|
422
|
-
# comment to attach to this command.
|
423
472
|
#
|
424
473
|
# @return [ Result ] The response from the database.
|
425
474
|
#
|
@@ -447,7 +496,11 @@ module Mongo
|
|
447
496
|
update_doc['upsert'] = true
|
448
497
|
end
|
449
498
|
|
450
|
-
context = Operation::Context.new(
|
499
|
+
context = Operation::Context.new(
|
500
|
+
client: client,
|
501
|
+
session: session,
|
502
|
+
operation_timeouts: operation_timeouts(opts)
|
503
|
+
)
|
451
504
|
nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
452
505
|
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
453
506
|
if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -476,22 +529,26 @@ module Mongo
|
|
476
529
|
# @param [ Hash | Array<Hash> ] spec The update document or pipeline.
|
477
530
|
# @param [ Hash ] opts The options.
|
478
531
|
#
|
479
|
-
# @option opts [
|
480
|
-
#
|
532
|
+
# @option opts [ Array ] :array_filters A set of filters specifying to
|
533
|
+
# which array elements an update should apply.
|
481
534
|
# @option opts [ true, false ] :bypass_document_validation Whether or
|
482
535
|
# not to skip document level validation.
|
483
536
|
# @option opts [ Hash ] :collation The collation to use.
|
484
|
-
# @option opts [
|
485
|
-
#
|
486
|
-
# @option opts [ Session ] :session The session to use.
|
537
|
+
# @option opts [ Object ] :comment A user-provided
|
538
|
+
# comment to attach to this command.
|
487
539
|
# @option opts [ Hash | String ] :hint The index to use for this operation.
|
488
540
|
# May be specified as a Hash (e.g. { _id: 1 }) or a String (e.g. "_id_").
|
541
|
+
# @option opts [ Hash ] :let Mapping of variables to use in the command.
|
542
|
+
# See the server documentation for details.
|
543
|
+
# @option opts [ Session ] :session The session to use.
|
544
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
545
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
546
|
+
# The default value is unset which means the value is inherited from
|
547
|
+
# the collection or the database or the client.
|
548
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the
|
549
|
+
# document doesn't exist.
|
489
550
|
# @option opts [ Hash ] :write_concern The write concern options.
|
490
551
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
491
|
-
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
492
|
-
# See the server documentation for details.
|
493
|
-
# @option options [ Object ] :comment A user-provided
|
494
|
-
# comment to attach to this command.
|
495
552
|
#
|
496
553
|
# @return [ Result ] The response from the database.
|
497
554
|
#
|
@@ -518,7 +575,11 @@ module Mongo
|
|
518
575
|
update_doc['upsert'] = true
|
519
576
|
end
|
520
577
|
|
521
|
-
context = Operation::Context.new(
|
578
|
+
context = Operation::Context.new(
|
579
|
+
client: client,
|
580
|
+
session: session,
|
581
|
+
operation_timeouts: operation_timeouts(opts)
|
582
|
+
)
|
522
583
|
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
523
584
|
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
524
585
|
if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
@@ -63,10 +63,10 @@ module Mongo
|
|
63
63
|
:client,
|
64
64
|
:cluster,
|
65
65
|
:database,
|
66
|
+
:nro_write_with_retry,
|
66
67
|
:read_with_retry,
|
67
68
|
:read_with_retry_cursor,
|
68
69
|
:write_with_retry,
|
69
|
-
:nro_write_with_retry,
|
70
70
|
:write_concern_with_session
|
71
71
|
|
72
72
|
# Delegate to the cluster for the next primary.
|
@@ -74,6 +74,12 @@ module Mongo
|
|
74
74
|
|
75
75
|
alias :selector :filter
|
76
76
|
|
77
|
+
# @return [ Integer | nil | The timeout_ms value that was passed as an
|
78
|
+
# option to the view.
|
79
|
+
#
|
80
|
+
# @api private
|
81
|
+
attr_reader :operation_timeout_ms
|
82
|
+
|
77
83
|
# Compare two +View+ objects.
|
78
84
|
#
|
79
85
|
# @example Compare the view with another object.
|
@@ -151,15 +157,26 @@ module Mongo
|
|
151
157
|
# document more than once. Deprecated as of MongoDB server version 4.0.
|
152
158
|
# @option options [ Hash ] :sort The key and direction pairs used to sort
|
153
159
|
# the results.
|
160
|
+
# @option options [ :cursor_lifetime | :iteration ] :timeout_mode How to interpret
|
161
|
+
# :timeout_ms (whether it applies to the lifetime of the cursor, or per
|
162
|
+
# iteration).
|
163
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
164
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
165
|
+
# The default value is unset which means the value is inherited from
|
166
|
+
# the collection or the database or the client.
|
154
167
|
#
|
155
168
|
# @since 2.0.0
|
156
169
|
def initialize(collection, filter = {}, options = {})
|
157
170
|
validate_doc!(filter)
|
158
|
-
@collection = collection
|
159
171
|
|
160
172
|
filter = BSON::Document.new(filter)
|
161
173
|
options = BSON::Document.new(options)
|
162
174
|
|
175
|
+
@collection = collection
|
176
|
+
@operation_timeout_ms = options.delete(:timeout_ms)
|
177
|
+
|
178
|
+
validate_timeout_mode!(options)
|
179
|
+
|
163
180
|
# This is when users pass $query in filter and other modifiers
|
164
181
|
# alongside?
|
165
182
|
query = filter.delete(:$query)
|
@@ -171,6 +188,14 @@ module Mongo
|
|
171
188
|
@options = Operation::Find::Builder::Modifiers.map_driver_options(modifiers).merge!(options).freeze
|
172
189
|
end
|
173
190
|
|
191
|
+
# The timeout_ms value to use for this operation; either specified as an
|
192
|
+
# option to the view, or inherited from the collection.
|
193
|
+
#
|
194
|
+
# @return [ Integer | nil ] the timeout_ms for this operation
|
195
|
+
def timeout_ms
|
196
|
+
operation_timeout_ms || collection.timeout_ms
|
197
|
+
end
|
198
|
+
|
174
199
|
# Get a human-readable string representation of +View+.
|
175
200
|
#
|
176
201
|
# @example Get the inspection.
|
@@ -196,6 +221,20 @@ module Mongo
|
|
196
221
|
WriteConcern.get(options[:write_concern] || options[:write] || collection.write_concern)
|
197
222
|
end
|
198
223
|
|
224
|
+
# @return [ Hash ] timeout_ms value set on the operation level (if any),
|
225
|
+
# and/or timeout_ms that is set on collection/database/client level (if any).
|
226
|
+
#
|
227
|
+
# @api private
|
228
|
+
def operation_timeouts(opts = {})
|
229
|
+
{}.tap do |result|
|
230
|
+
if opts[:timeout_ms] || operation_timeout_ms
|
231
|
+
result[:operation_timeout_ms] = opts[:timeout_ms] || operation_timeout_ms
|
232
|
+
else
|
233
|
+
result[:inherited_timeout_ms] = collection.timeout_ms
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
199
238
|
private
|
200
239
|
|
201
240
|
def initialize_copy(other)
|
@@ -205,13 +244,14 @@ module Mongo
|
|
205
244
|
end
|
206
245
|
|
207
246
|
def new(options)
|
247
|
+
options = options.merge(timeout_ms: operation_timeout_ms) if operation_timeout_ms
|
208
248
|
View.new(collection, filter, options)
|
209
249
|
end
|
210
250
|
|
211
251
|
def view; self; end
|
212
252
|
|
213
253
|
def with_session(opts = {}, &block)
|
214
|
-
client.
|
254
|
+
client.with_session(@options.merge(opts), &block)
|
215
255
|
end
|
216
256
|
end
|
217
257
|
end
|