mongo 2.20.0 → 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 +40 -1
- data/Rakefile +59 -23
- 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/config.rb +2 -2
- 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/base_worker.rb +28 -3
- data/lib/mongo/retryable/read_worker.rb +76 -35
- data/lib/mongo/retryable/write_worker.rb +53 -22
- 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 +25 -8
- 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 +131 -18
- 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 -5
- data/lib/mongo.rb +1 -0
- data/mongo.gemspec +8 -11
- 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 +67 -20
- 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/retryable_reads_errors_spec.rb +35 -23
- data/spec/integration/sdam_error_handling_spec.rb +4 -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 -11
- 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_crud_spec.rb +1 -0
- 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/connection_spec.rb +22 -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/fle2v2-BypassQueryAnalysis.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.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 +6 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -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/spec_tests/transactions_unified_spec.rb +2 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
- data/spec/support/certificates/atlas-ocsp.crt +117 -122
- data/spec/support/certificates/retrieve-atlas-cert +1 -1
- 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 +88 -173
- checksums.yaml.gz.sig +0 -0
- data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -298
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -37
- data/spec/shared/share/Dockerfile.erb +0 -281
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -417
- data/spec/shared/shlib/set_env.sh +0 -146
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
- data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +0 -19
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
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
|