mongo 2.20.1 → 2.21.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/mongo/database.rb
CHANGED
@@ -128,6 +128,10 @@ module Mongo
|
|
128
128
|
# required privilege to run the command when access control is enforced
|
129
129
|
# @option options [ Object ] :comment A user-provided
|
130
130
|
# comment to attach to this command.
|
131
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
132
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
133
|
+
# The default value is unset which means the value is inherited from
|
134
|
+
# the database or the client.
|
131
135
|
#
|
132
136
|
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
133
137
|
# for more information and usage.
|
@@ -136,7 +140,7 @@ module Mongo
|
|
136
140
|
#
|
137
141
|
# @since 2.0.0
|
138
142
|
def collection_names(options = {})
|
139
|
-
View.new(self).collection_names(options)
|
143
|
+
View.new(self, options).collection_names(options)
|
140
144
|
end
|
141
145
|
|
142
146
|
# Get info on all the non-system collections in the database.
|
@@ -156,6 +160,10 @@ module Mongo
|
|
156
160
|
# required privilege to run the command when access control is enforced.
|
157
161
|
# @option options [ Object ] :comment A user-provided
|
158
162
|
# comment to attach to this command.
|
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 database or the client.
|
159
167
|
#
|
160
168
|
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
161
169
|
# for more information and usage.
|
@@ -165,7 +173,7 @@ module Mongo
|
|
165
173
|
#
|
166
174
|
# @since 2.0.5
|
167
175
|
def list_collections(options = {})
|
168
|
-
View.new(self).list_collections(options)
|
176
|
+
View.new(self, options).list_collections(options)
|
169
177
|
end
|
170
178
|
|
171
179
|
# Get all the non-system collections that belong to this database.
|
@@ -181,6 +189,10 @@ module Mongo
|
|
181
189
|
# required privilege to run the command when access control is enforced.
|
182
190
|
# @option options [ Object ] :comment A user-provided
|
183
191
|
# comment to attach to this command.
|
192
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
193
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
194
|
+
# The default value is unset which means the value is inherited from
|
195
|
+
# the database or the client.
|
184
196
|
#
|
185
197
|
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
186
198
|
# for more information and usage.
|
@@ -202,6 +214,10 @@ module Mongo
|
|
202
214
|
#
|
203
215
|
# @option opts :read [ Hash ] The read preference for this command.
|
204
216
|
# @option opts :session [ Session ] The session to use for this command.
|
217
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
218
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
219
|
+
# The default value is unset which means the value is inherited from
|
220
|
+
# the database or the client.
|
205
221
|
# @option opts :execution_options [ Hash ] Options to pass to the code that
|
206
222
|
# executes this command. This is an internal option and is subject to
|
207
223
|
# change.
|
@@ -223,7 +239,7 @@ module Mongo
|
|
223
239
|
Lint.validate_underscore_read_preference(txn_read_pref)
|
224
240
|
selector = ServerSelector.get(txn_read_pref)
|
225
241
|
|
226
|
-
client.
|
242
|
+
client.with_session(opts) do |session|
|
227
243
|
server = selector.select_server(cluster, nil, session)
|
228
244
|
op = Operation::Command.new(
|
229
245
|
:selector => operation,
|
@@ -233,7 +249,11 @@ module Mongo
|
|
233
249
|
)
|
234
250
|
|
235
251
|
op.execute(server,
|
236
|
-
context: Operation::Context.new(
|
252
|
+
context: Operation::Context.new(
|
253
|
+
client: client,
|
254
|
+
session: session,
|
255
|
+
operation_timeouts: operation_timeouts(opts)
|
256
|
+
),
|
237
257
|
options: execution_opts)
|
238
258
|
end
|
239
259
|
end
|
@@ -245,6 +265,12 @@ module Mongo
|
|
245
265
|
#
|
246
266
|
# @option opts :read [ Hash ] The read preference for this command.
|
247
267
|
# @option opts :session [ Session ] The session to use for this command.
|
268
|
+
# @option opts [ Object ] :comment A user-provided
|
269
|
+
# comment to attach to this command.
|
270
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
271
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
272
|
+
# The default value is unset which means the value is inherited from
|
273
|
+
# the database or the client.
|
248
274
|
#
|
249
275
|
# @return [ Hash ] The result of the command execution.
|
250
276
|
# @api private
|
@@ -258,15 +284,20 @@ module Mongo
|
|
258
284
|
Lint.validate_underscore_read_preference(txn_read_pref)
|
259
285
|
preference = ServerSelector.get(txn_read_pref)
|
260
286
|
|
261
|
-
client.
|
262
|
-
|
287
|
+
client.with_session(opts) do |session|
|
288
|
+
context = Operation::Context.new(
|
289
|
+
client: client,
|
290
|
+
session: session,
|
291
|
+
operation_timeouts: operation_timeouts(opts)
|
292
|
+
)
|
293
|
+
read_with_retry(session, preference, context) do |server|
|
263
294
|
Operation::Command.new(
|
264
295
|
selector: operation.dup,
|
265
296
|
db_name: name,
|
266
297
|
read: preference,
|
267
298
|
session: session,
|
268
299
|
comment: opts[:comment],
|
269
|
-
).execute(server, context:
|
300
|
+
).execute(server, context: context)
|
270
301
|
end
|
271
302
|
end
|
272
303
|
end
|
@@ -279,14 +310,18 @@ module Mongo
|
|
279
310
|
# @param [ Hash ] options The options for the operation.
|
280
311
|
#
|
281
312
|
# @option options [ Session ] :session The session to use for the operation.
|
282
|
-
# @option
|
313
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
314
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
315
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
316
|
+
# The default value is unset which means the value is inherited from
|
317
|
+
# the database or the client.
|
283
318
|
#
|
284
319
|
# @return [ Result ] The result of the command.
|
285
320
|
#
|
286
321
|
# @since 2.0.0
|
287
322
|
def drop(options = {})
|
288
323
|
operation = { :dropDatabase => 1 }
|
289
|
-
client.
|
324
|
+
client.with_session(options) do |session|
|
290
325
|
write_concern = if options[:write_concern]
|
291
326
|
WriteConcern.get(options[:write_concern])
|
292
327
|
else
|
@@ -297,7 +332,14 @@ module Mongo
|
|
297
332
|
db_name: name,
|
298
333
|
write_concern: write_concern,
|
299
334
|
session: session
|
300
|
-
}).execute(
|
335
|
+
}).execute(
|
336
|
+
next_primary(nil, session),
|
337
|
+
context: Operation::Context.new(
|
338
|
+
client: client,
|
339
|
+
session: session,
|
340
|
+
operation_timeouts: operation_timeouts(options)
|
341
|
+
)
|
342
|
+
)
|
301
343
|
end
|
302
344
|
end
|
303
345
|
|
@@ -309,6 +351,10 @@ module Mongo
|
|
309
351
|
# @param [ Mongo::Client ] client The driver client.
|
310
352
|
# @param [ String, Symbol ] name The name of the database.
|
311
353
|
# @param [ Hash ] options The options.
|
354
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
355
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
356
|
+
# The default value is unset which means the value is inherited from
|
357
|
+
# the client.
|
312
358
|
#
|
313
359
|
# @raise [ Mongo::Database::InvalidName ] If the name is nil.
|
314
360
|
#
|
@@ -388,20 +434,21 @@ module Mongo
|
|
388
434
|
# @option options [ Hash ] :collation The collation to use.
|
389
435
|
# @option options [ Object ] :comment A user-provided
|
390
436
|
# comment to attach to this command.
|
437
|
+
# @option options [ Integer ] :max_time_ms The maximum amount of time to
|
438
|
+
# allow the query to run, in milliseconds. This option is deprecated, use
|
439
|
+
# :timeout_ms instead.
|
440
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
441
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
442
|
+
# The default value is unset which means the value is inherited from
|
443
|
+
# the database or the client.
|
391
444
|
# @option options [ String ] :hint The index to use for the aggregation.
|
392
|
-
# @option options [ Integer ] :max_time_ms The maximum amount of time in
|
393
|
-
# milliseconds to allow the aggregation to run.
|
394
|
-
# @option options [ true, false ] :use_cursor Indicates whether the command
|
395
|
-
# will request that the server provide results using a cursor. Note that
|
396
|
-
# as of server version 3.6, aggregations always provide results using a
|
397
|
-
# cursor and this option is therefore not valid.
|
398
445
|
# @option options [ Session ] :session The session to use.
|
399
446
|
#
|
400
447
|
# @return [ Collection::View::Aggregation ] The aggregation object.
|
401
448
|
#
|
402
449
|
# @since 2.10.0
|
403
450
|
def aggregate(pipeline, options = {})
|
404
|
-
View.new(self).aggregate(pipeline, options)
|
451
|
+
View.new(self, options).aggregate(pipeline, options)
|
405
452
|
end
|
406
453
|
|
407
454
|
# As of version 3.6 of the MongoDB server, a ``$changeStream`` pipeline stage is supported
|
@@ -471,7 +518,7 @@ module Mongo
|
|
471
518
|
# @since 2.6.0
|
472
519
|
def watch(pipeline = [], options = {})
|
473
520
|
view_options = options.dup
|
474
|
-
view_options[:
|
521
|
+
view_options[:cursor_type] = :tailable_await if options[:max_await_time_ms]
|
475
522
|
|
476
523
|
Mongo::Collection::View::ChangeStream.new(
|
477
524
|
Mongo::Collection::View.new(collection("#{COMMAND}.aggregate"), {}, view_options),
|
@@ -497,5 +544,28 @@ module Mongo
|
|
497
544
|
database = Database.new(client, client.options[:database], client.options)
|
498
545
|
client.instance_variable_set(:@database, database)
|
499
546
|
end
|
547
|
+
|
548
|
+
# @return [ Integer | nil ] Operation timeout that is for this database or
|
549
|
+
# for the corresponding client.
|
550
|
+
#
|
551
|
+
# @api private
|
552
|
+
def timeout_ms
|
553
|
+
options[:timeout_ms] || client.timeout_ms
|
554
|
+
end
|
555
|
+
|
556
|
+
# @return [ Hash ] timeout_ms value set on the operation level (if any),
|
557
|
+
# and/or timeout_ms that is set on collection/database/client level (if any).
|
558
|
+
#
|
559
|
+
# @api private
|
560
|
+
def operation_timeouts(opts)
|
561
|
+
# TODO: We should re-evaluate if we need two timeouts separately.
|
562
|
+
{}.tap do |result|
|
563
|
+
if opts[:timeout_ms].nil?
|
564
|
+
result[:inherited_timeout_ms] = timeout_ms
|
565
|
+
else
|
566
|
+
result[:operation_timeout_ms] = opts.delete(:timeout_ms)
|
567
|
+
end
|
568
|
+
end
|
569
|
+
end
|
500
570
|
end
|
501
571
|
end
|