mongo 2.19.1 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +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?
|