mongo 2.19.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 +40 -1
- data/Rakefile +83 -174
- 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/topology/base.rb +16 -0
- data/lib/mongo/cluster.rb +41 -5
- 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 +92 -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 +44 -3
- data/lib/mongo/collection.rb +185 -26
- 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/transactions_not_supported.rb +34 -0
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/grid/fs_bucket.rb +48 -9
- 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/monitoring/event/secure.rb +1 -1
- data/lib/mongo/operation/context.rb +40 -2
- data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
- data/lib/mongo/operation/create_search_indexes.rb +15 -0
- data/lib/mongo/operation/delete/op_msg.rb +2 -1
- data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
- data/lib/mongo/operation/drop_search_index.rb +15 -0
- 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 +55 -28
- data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
- data/lib/mongo/operation/shared/response_handling.rb +25 -27
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/operation/shared/specifiable.rb +7 -0
- 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 +34 -0
- data/lib/mongo/operation/update_search_index.rb +15 -0
- data/lib/mongo/operation.rb +4 -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 +78 -36
- data/lib/mongo/retryable/write_worker.rb +59 -25
- data/lib/mongo/retryable.rb +8 -2
- data/lib/mongo/search_index/view.rb +232 -0
- data/lib/mongo/server/app_metadata/environment.rb +64 -9
- data/lib/mongo/server/app_metadata.rb +5 -4
- 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 +2 -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 +54 -12
- data/lib/mongo/session/server_session/dirtyable.rb +52 -0
- data/lib/mongo/session/server_session.rb +3 -0
- data/lib/mongo/session/session_pool.rb +12 -18
- data/lib/mongo/session.rb +110 -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/uri.rb +0 -4
- data/lib/mongo/version.rb +1 -5
- data/lib/mongo.rb +2 -0
- data/mongo.gemspec +9 -18
- data/spec/atlas/atlas_connectivity_spec.rb +9 -9
- data/spec/atlas/operations_spec.rb +5 -5
- data/spec/faas/ruby-sam-app/Gemfile +9 -0
- data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
- data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
- data/spec/faas/ruby-sam-app/template.yaml +48 -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/corpus_spec.rb +10 -2
- 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/find_options_spec.rb +227 -0
- 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 +196 -31
- data/spec/integration/retryable_writes_errors_spec.rb +156 -0
- data/spec/integration/sdam_error_handling_spec.rb +4 -1
- data/spec/integration/search_indexes_prose_spec.rb +172 -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 +34 -20
- 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/cluster_spec.rb +36 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +20 -40
- data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
- data/spec/mongo/collection/view/explainable_spec.rb +2 -0
- data/spec/mongo/collection_crud_spec.rb +2 -1
- 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/insert_spec.rb +1 -1
- data/spec/mongo/operation/shared/csot/examples.rb +113 -0
- data/spec/mongo/query_cache_spec.rb +243 -225
- data/spec/mongo/retryable/write_worker_spec.rb +39 -0
- data/spec/mongo/retryable_spec.rb +1 -0
- data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
- data/spec/mongo/server/app_metadata_spec.rb +12 -2
- data/spec/mongo/server/connection_spec.rb +26 -0
- data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
- data/spec/mongo/session/session_pool_spec.rb +1 -16
- data/spec/mongo/session_transaction_spec.rb +15 -0
- data/spec/mongo/socket/ssl_spec.rb +0 -10
- data/spec/mongo/uri_spec.rb +0 -9
- data/spec/runners/change_streams/test.rb +2 -2
- data/spec/runners/crud/operation.rb +1 -1
- data/spec/runners/crud/test.rb +0 -8
- data/spec/runners/crud/verifier.rb +3 -1
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/transactions/operation.rb +4 -6
- data/spec/runners/transactions/test.rb +12 -3
- data/spec/runners/unified/ambiguous_operations.rb +13 -0
- data/spec/runners/unified/assertions.rb +20 -3
- data/spec/runners/unified/change_stream_operations.rb +14 -24
- data/spec/runners/unified/crud_operations.rb +82 -47
- data/spec/runners/unified/ddl_operations.rb +38 -7
- data/spec/runners/unified/grid_fs_operations.rb +37 -2
- data/spec/runners/unified/search_index_operations.rb +63 -0
- data/spec/runners/unified/support_operations.rb +46 -9
- data/spec/runners/unified/test.rb +33 -12
- data/spec/runners/unified.rb +1 -1
- data/spec/solo/clean_exit_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- 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/explain.yml +2 -2
- 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/connection_string/invalid-uris.yml +0 -10
- data/spec/spec_tests/data/connection_string/valid-options.yml +13 -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 +377 -0
- data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
- data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
- data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
- data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
- data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
- data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
- data/spec/spec_tests/index_management_unified_spec.rb +13 -0
- data/spec/spec_tests/run_command_unified_spec.rb +13 -0
- data/spec/spec_tests/sdam_unified_spec.rb +2 -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/constraints.rb +6 -0
- 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/ocsp +1 -1
- data/spec/support/recording_logger.rb +27 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +5 -0
- data/spec/support/spec_setup.rb +2 -2
- data/spec/support/utils.rb +3 -1
- metadata +1329 -1368
- 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 -295
- 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 -330
- 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 -416
- data/spec/shared/shlib/set_env.sh +0 -169
- 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/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -2
@@ -51,7 +51,7 @@ module Mongo
|
|
51
51
|
attr_reader :reduce_function
|
52
52
|
|
53
53
|
# Delegate necessary operations to the view.
|
54
|
-
def_delegators :view, :collection, :read, :cluster
|
54
|
+
def_delegators :view, :collection, :read, :cluster, :timeout_ms
|
55
55
|
|
56
56
|
# Delegate necessary operations to the collection.
|
57
57
|
def_delegators :collection, :database, :client
|
@@ -70,10 +70,18 @@ module Mongo
|
|
70
70
|
# @yieldparam [ Hash ] Each matching document.
|
71
71
|
def each
|
72
72
|
@cursor = nil
|
73
|
-
session = client.
|
73
|
+
session = client.get_session(@options)
|
74
74
|
server = cluster.next_primary(nil, session)
|
75
|
-
|
76
|
-
|
75
|
+
context = Operation::Context.new(client: client, session: session, operation_timeouts: view.operation_timeouts)
|
76
|
+
if server.load_balancer?
|
77
|
+
# Connection will be checked in when cursor is drained.
|
78
|
+
connection = server.pool.check_out(context: context)
|
79
|
+
result = send_initial_query_with_connection(connection, context.session, context: context)
|
80
|
+
result = send_fetch_query_with_connection(connection, session) unless inline?
|
81
|
+
else
|
82
|
+
result = send_initial_query(server, context)
|
83
|
+
result = send_fetch_query(server, session) unless inline?
|
84
|
+
end
|
77
85
|
@cursor = Cursor.new(view, result, server, session: session)
|
78
86
|
if block_given?
|
79
87
|
@cursor.each do |doc|
|
@@ -279,9 +287,9 @@ module Mongo
|
|
279
287
|
out.respond_to?(:keys) && out.keys.first.to_s.downcase == INLINE
|
280
288
|
end
|
281
289
|
|
282
|
-
def send_initial_query(server,
|
290
|
+
def send_initial_query(server, context)
|
283
291
|
server.with_connection do |connection|
|
284
|
-
send_initial_query_with_connection(connection, session, context: context)
|
292
|
+
send_initial_query_with_connection(connection, context.session, context: context)
|
285
293
|
end
|
286
294
|
end
|
287
295
|
|
@@ -305,7 +313,7 @@ module Mongo
|
|
305
313
|
Builder::MapReduce.new(map_function, reduce_function, view, options.merge(session: session)).command_specification
|
306
314
|
end
|
307
315
|
|
308
|
-
def fetch_query_op(
|
316
|
+
def fetch_query_op(session)
|
309
317
|
spec = {
|
310
318
|
coll_name: out_collection_name,
|
311
319
|
db_name: out_database_name,
|
@@ -319,7 +327,16 @@ module Mongo
|
|
319
327
|
end
|
320
328
|
|
321
329
|
def send_fetch_query(server, session)
|
322
|
-
fetch_query_op(
|
330
|
+
fetch_query_op(session).execute(server, context: Operation::Context.new(client: client, session: session))
|
331
|
+
end
|
332
|
+
|
333
|
+
def send_fetch_query_with_connection(connection, session)
|
334
|
+
fetch_query_op(
|
335
|
+
session
|
336
|
+
).execute_with_connection(
|
337
|
+
connection,
|
338
|
+
context: Operation::Context.new(client: client, session: session)
|
339
|
+
)
|
323
340
|
end
|
324
341
|
end
|
325
342
|
end
|
@@ -47,12 +47,13 @@ module Mongo
|
|
47
47
|
# @option options [ Hash ] :let Mapping of variables to use in the pipeline.
|
48
48
|
# See the server documentation for details.
|
49
49
|
# @option options [ Integer ] :max_time_ms The maximum amount of time in
|
50
|
-
# milliseconds to allow the aggregation to run.
|
51
|
-
#
|
52
|
-
# will request that the server provide results using a cursor. Note that
|
53
|
-
# as of server version 3.6, aggregations always provide results using a
|
54
|
-
# cursor and this option is therefore not valid.
|
50
|
+
# milliseconds to allow the aggregation to run. This option is deprecated, use
|
51
|
+
# :timeout_ms instead.
|
55
52
|
# @option options [ Session ] :session The session to use.
|
53
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
54
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
55
|
+
# The default value is unset which means the value is inherited from
|
56
|
+
# the collection or the database or the client.
|
56
57
|
#
|
57
58
|
# @return [ Aggregation ] The aggregation object.
|
58
59
|
#
|
@@ -157,6 +158,10 @@ module Mongo
|
|
157
158
|
# @option opts [ Mongo::Session ] :session The session to use for the operation.
|
158
159
|
# @option opts [ Object ] :comment A user-provided
|
159
160
|
# comment to attach to this command.
|
161
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
162
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
163
|
+
# The default value is unset which means the value is inherited from
|
164
|
+
# the collection or the database or the client.
|
160
165
|
#
|
161
166
|
# @return [ Integer ] The document count.
|
162
167
|
#
|
@@ -182,7 +187,12 @@ module Mongo
|
|
182
187
|
read_pref = opts[:read] || read_preference
|
183
188
|
selector = ServerSelector.get(read_pref || server_selector)
|
184
189
|
with_session(opts) do |session|
|
185
|
-
|
190
|
+
context = Operation::Context.new(
|
191
|
+
client: client,
|
192
|
+
session: session,
|
193
|
+
operation_timeouts: operation_timeouts(opts)
|
194
|
+
)
|
195
|
+
read_with_retry(session, selector, context) do |server|
|
186
196
|
Operation::Count.new(
|
187
197
|
selector: cmd,
|
188
198
|
db_name: database.name,
|
@@ -193,7 +203,10 @@ module Mongo
|
|
193
203
|
# string key. Note that this isn't documented as valid usage.
|
194
204
|
collation: opts[:collation] || opts['collation'] || collation,
|
195
205
|
comment: opts[:comment],
|
196
|
-
).execute(
|
206
|
+
).execute(
|
207
|
+
server,
|
208
|
+
context: context
|
209
|
+
)
|
197
210
|
end.n.to_i
|
198
211
|
end
|
199
212
|
end
|
@@ -210,12 +223,17 @@ module Mongo
|
|
210
223
|
# MongoDB to use a specific index for the query. Requires server version 3.6+.
|
211
224
|
# @option opts :limit [ Integer ] Max number of docs to count.
|
212
225
|
# @option opts :max_time_ms [ Integer ] The maximum amount of time to allow the
|
213
|
-
# command to run.
|
226
|
+
# command to run. This option is deprecated, use
|
227
|
+
# :timeout_ms instead.
|
214
228
|
# @option opts [ Hash ] :read The read preference options.
|
215
229
|
# @option opts [ Hash ] :collation The collation to use.
|
216
230
|
# @option opts [ Mongo::Session ] :session The session to use for the operation.
|
217
231
|
# @option ops [ Object ] :comment A user-provided
|
218
232
|
# comment to attach to this command.
|
233
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
234
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
235
|
+
# The default value is unset which means the value is inherited from
|
236
|
+
# the collection or the database or the client.
|
219
237
|
#
|
220
238
|
# @return [ Integer ] The document count.
|
221
239
|
#
|
@@ -227,7 +245,7 @@ module Mongo
|
|
227
245
|
pipeline << { :'$limit' => opts[:limit] } if opts[:limit]
|
228
246
|
pipeline << { :'$group' => { _id: 1, n: { :'$sum' => 1 } } }
|
229
247
|
|
230
|
-
opts = opts.slice(:hint, :max_time_ms, :read, :collation, :session, :comment)
|
248
|
+
opts = opts.slice(:hint, :max_time_ms, :read, :collation, :session, :comment, :timeout_ms)
|
231
249
|
opts[:collation] ||= collation
|
232
250
|
|
233
251
|
first = aggregate(pipeline, opts).first
|
@@ -247,6 +265,10 @@ module Mongo
|
|
247
265
|
# @option opts [ Hash ] :read The read preference options.
|
248
266
|
# @option opts [ Object ] :comment A user-provided
|
249
267
|
# comment to attach to this command.
|
268
|
+
# @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
|
269
|
+
# Must be a non-negative integer. An explicit value of 0 means infinite.
|
270
|
+
# The default value is unset which means the value is inherited from
|
271
|
+
# the collection or the database or the client.
|
250
272
|
#
|
251
273
|
# @return [ Integer ] The document count.
|
252
274
|
#
|
@@ -267,8 +289,12 @@ module Mongo
|
|
267
289
|
read_pref = opts[:read] || read_preference
|
268
290
|
selector = ServerSelector.get(read_pref || server_selector)
|
269
291
|
with_session(opts) do |session|
|
270
|
-
|
271
|
-
|
292
|
+
context = Operation::Context.new(
|
293
|
+
client: client,
|
294
|
+
session: session,
|
295
|
+
operation_timeouts: operation_timeouts(opts)
|
296
|
+
)
|
297
|
+
read_with_retry(session, selector, context) do |server|
|
272
298
|
cmd = { count: collection.name }
|
273
299
|
cmd[:maxTimeMS] = opts[:max_time_ms] if opts[:max_time_ms]
|
274
300
|
if read_concern
|
@@ -284,7 +310,7 @@ module Mongo
|
|
284
310
|
result.n.to_i
|
285
311
|
end
|
286
312
|
end
|
287
|
-
rescue Error::OperationFailure => exc
|
313
|
+
rescue Error::OperationFailure::Family => exc
|
288
314
|
if exc.code == 26
|
289
315
|
# NamespaceNotFound
|
290
316
|
# This should only happen with the aggregation pipeline path
|
@@ -331,7 +357,12 @@ module Mongo
|
|
331
357
|
read_pref = opts[:read] || read_preference
|
332
358
|
selector = ServerSelector.get(read_pref || server_selector)
|
333
359
|
with_session(opts) do |session|
|
334
|
-
|
360
|
+
context = Operation::Context.new(
|
361
|
+
client: client,
|
362
|
+
session: session,
|
363
|
+
operation_timeouts: operation_timeouts(opts)
|
364
|
+
)
|
365
|
+
read_with_retry(session, selector, context) do |server|
|
335
366
|
Operation::Distinct.new(
|
336
367
|
selector: cmd,
|
337
368
|
db_name: database.name,
|
@@ -342,7 +373,10 @@ module Mongo
|
|
342
373
|
# For some reason collation was historically accepted as a
|
343
374
|
# string key. Note that this isn't documented as valid usage.
|
344
375
|
collation: opts[:collation] || opts['collation'] || collation,
|
345
|
-
).execute(
|
376
|
+
).execute(
|
377
|
+
server,
|
378
|
+
context: context
|
379
|
+
)
|
346
380
|
end.first['values']
|
347
381
|
end
|
348
382
|
end
|
@@ -627,6 +661,15 @@ module Mongo
|
|
627
661
|
configure(:cursor_type, type)
|
628
662
|
end
|
629
663
|
|
664
|
+
# The per-operation timeout in milliseconds. Must a positive integer.
|
665
|
+
#
|
666
|
+
# @param [ Integer ] timeout_ms Timeout value.
|
667
|
+
#
|
668
|
+
# @return [ Integer, View ] Either the timeout_ms value or a new +View+.
|
669
|
+
def timeout_ms(timeout_ms = nil)
|
670
|
+
configure(:timeout_ms, timeout_ms)
|
671
|
+
end
|
672
|
+
|
630
673
|
# @api private
|
631
674
|
def read_concern
|
632
675
|
if options[:session] && options[:session].in_transaction?
|
@@ -656,24 +699,10 @@ module Mongo
|
|
656
699
|
end
|
657
700
|
end
|
658
701
|
|
659
|
-
private
|
660
|
-
|
661
|
-
def collation(doc = nil)
|
662
|
-
configure(:collation, doc)
|
663
|
-
end
|
664
|
-
|
665
|
-
def server_selector
|
666
|
-
@server_selector ||= if options[:session] && options[:session].in_transaction?
|
667
|
-
ServerSelector.get(read_preference || client.server_selector)
|
668
|
-
else
|
669
|
-
ServerSelector.get(read_preference || collection.server_selector)
|
670
|
-
end
|
671
|
-
end
|
672
|
-
|
673
702
|
def parallel_scan(cursor_count, options = {})
|
674
703
|
if options[:session]
|
675
704
|
# The session would be overwritten by the one in +options+ later.
|
676
|
-
session = client.
|
705
|
+
session = client.get_session(@options)
|
677
706
|
else
|
678
707
|
session = nil
|
679
708
|
end
|
@@ -707,11 +736,31 @@ module Mongo
|
|
707
736
|
session: session,
|
708
737
|
connection_global_id: result.connection_global_id,
|
709
738
|
)
|
710
|
-
result =
|
739
|
+
result = if server.load_balancer?
|
740
|
+
# Connection will be checked in when cursor is drained.
|
741
|
+
connection = server.pool.check_out(context: context)
|
742
|
+
op.execute_with_connection(connection, context: context)
|
743
|
+
else
|
744
|
+
op.execute(server, context: context)
|
745
|
+
end
|
711
746
|
Cursor.new(self, result, server, session: session)
|
712
747
|
end
|
713
748
|
end
|
714
749
|
|
750
|
+
private
|
751
|
+
|
752
|
+
def collation(doc = nil)
|
753
|
+
configure(:collation, doc)
|
754
|
+
end
|
755
|
+
|
756
|
+
def server_selector
|
757
|
+
@server_selector ||= if options[:session] && options[:session].in_transaction?
|
758
|
+
ServerSelector.get(read_preference || client.server_selector)
|
759
|
+
else
|
760
|
+
ServerSelector.get(read_preference || collection.server_selector)
|
761
|
+
end
|
762
|
+
end
|
763
|
+
|
715
764
|
def validate_doc!(doc)
|
716
765
|
raise Error::InvalidDocument.new unless doc.respond_to?(:keys)
|
717
766
|
end
|
@@ -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?
|