mongo 2.17.3 → 2.18.0.beta1
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
- checksums.yaml.gz.sig +0 -0
- data/README.md +21 -37
- data/lib/mongo/auth/base.rb +8 -1
- data/lib/mongo/auth.rb +12 -1
- data/lib/mongo/bulk_write/result.rb +10 -1
- data/lib/mongo/bulk_write/result_combiner.rb +2 -4
- data/lib/mongo/bulk_write.rb +108 -28
- data/lib/mongo/client.rb +114 -12
- data/lib/mongo/client_encryption.rb +30 -9
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
- data/lib/mongo/cluster.rb +20 -24
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +19 -16
- data/lib/mongo/collection/view/change_stream.rb +56 -23
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +2 -3
- data/lib/mongo/collection/view/map_reduce.rb +18 -9
- data/lib/mongo/collection/view/readable.rb +19 -23
- data/lib/mongo/collection/view/writable.rb +133 -40
- data/lib/mongo/collection.rb +108 -48
- data/lib/mongo/config/options.rb +62 -0
- data/lib/mongo/config/validators/option.rb +26 -0
- data/lib/mongo/config.rb +31 -0
- data/lib/mongo/crypt/auto_encrypter.rb +79 -6
- data/lib/mongo/crypt/binding.rb +395 -143
- data/lib/mongo/crypt/context.rb +5 -2
- data/lib/mongo/crypt/data_key_context.rb +7 -104
- data/lib/mongo/crypt/encryption_io.rb +28 -60
- data/lib/mongo/crypt/explicit_encrypter.rb +27 -25
- data/lib/mongo/crypt/explicit_encryption_context.rb +31 -3
- data/lib/mongo/crypt/handle.rb +102 -79
- data/lib/mongo/crypt/hooks.rb +25 -2
- data/lib/mongo/crypt/kms/aws.rb +128 -0
- data/lib/mongo/crypt/kms/azure.rb +136 -0
- data/lib/mongo/crypt/kms/credentials.rb +81 -0
- data/lib/mongo/crypt/kms/gcp.rb +182 -0
- data/lib/mongo/crypt/kms/kmip.rb +110 -0
- data/lib/mongo/crypt/kms/local.rb +74 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +117 -0
- data/lib/mongo/crypt.rb +1 -0
- data/lib/mongo/cursor/kill_spec.rb +27 -6
- data/lib/mongo/cursor.rb +21 -16
- data/lib/mongo/database/view.rb +6 -3
- data/lib/mongo/database.rb +73 -12
- data/lib/mongo/dbref.rb +1 -105
- data/lib/mongo/error/bulk_write_error.rb +31 -4
- data/lib/mongo/error/invalid_config_option.rb +20 -0
- data/lib/mongo/error/invalid_replacement_document.rb +27 -9
- data/lib/mongo/error/invalid_update_document.rb +27 -7
- data/lib/mongo/error/labelable.rb +72 -0
- data/lib/mongo/error/missing_connection.rb +25 -0
- data/lib/mongo/error/notable.rb +7 -0
- data/lib/mongo/error/operation_failure.rb +34 -86
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
- data/lib/mongo/error.rb +5 -37
- data/lib/mongo/index/view.rb +22 -7
- data/lib/mongo/monitoring/event/command_failed.rb +8 -2
- data/lib/mongo/monitoring/event/command_started.rb +1 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
- data/lib/mongo/monitoring/publishable.rb +9 -5
- data/lib/mongo/operation/collections_info/result.rb +5 -2
- data/lib/mongo/operation/command/op_msg.rb +6 -0
- data/lib/mongo/operation/context.rb +24 -6
- data/lib/mongo/operation/count/op_msg.rb +4 -1
- data/lib/mongo/operation/create/op_msg.rb +16 -1
- data/lib/mongo/operation/create_index/op_msg.rb +2 -1
- data/lib/mongo/operation/delete/op_msg.rb +1 -0
- data/lib/mongo/operation/delete.rb +0 -1
- data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
- data/lib/mongo/operation/get_more/command_builder.rb +5 -1
- data/lib/mongo/operation/insert/bulk_result.rb +5 -1
- data/lib/mongo/operation/insert/command.rb +0 -4
- data/lib/mongo/operation/insert/op_msg.rb +6 -3
- data/lib/mongo/operation/insert/result.rb +6 -3
- data/lib/mongo/operation/insert.rb +0 -1
- data/lib/mongo/operation/kill_cursors.rb +0 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
- data/lib/mongo/operation/map_reduce/result.rb +16 -0
- data/lib/mongo/operation/result.rb +21 -5
- data/lib/mongo/operation/shared/executable.rb +21 -6
- data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
- data/lib/mongo/operation/shared/response_handling.rb +6 -5
- data/lib/mongo/operation/shared/sessions_supported.rb +3 -7
- data/lib/mongo/operation/shared/write.rb +18 -12
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update.rb +0 -1
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/msg.rb +37 -1
- data/lib/mongo/protocol.rb +1 -0
- data/lib/mongo/query_cache.rb +15 -0
- data/lib/mongo/retryable.rb +78 -30
- data/lib/mongo/server/connection.rb +33 -0
- data/lib/mongo/server/connection_base.rb +2 -0
- data/lib/mongo/server/connection_common.rb +4 -1
- data/lib/mongo/server/connection_pool.rb +69 -42
- data/lib/mongo/server/description/features.rb +3 -1
- data/lib/mongo/server/description.rb +7 -2
- data/lib/mongo/server/monitor/connection.rb +5 -10
- data/lib/mongo/server/monitor.rb +21 -13
- data/lib/mongo/server/push_monitor.rb +9 -3
- data/lib/mongo/server.rb +9 -5
- data/lib/mongo/session/session_pool.rb +8 -0
- data/lib/mongo/session.rb +111 -35
- data/lib/mongo/socket/ocsp_verifier.rb +4 -5
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/srv/resolver.rb +24 -3
- data/lib/mongo/uri/options_mapper.rb +2 -0
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/uri.rb +20 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +20 -0
- data/mongo.gemspec +10 -4
- data/spec/README.md +5 -5
- data/spec/integration/aws_lambda_examples_spec.rb +68 -0
- data/spec/integration/bulk_write_error_message_spec.rb +32 -0
- data/spec/integration/bulk_write_spec.rb +0 -16
- data/spec/integration/change_stream_spec.rb +6 -5
- data/spec/integration/client_construction_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +18 -19
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
- data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
- data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
- data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
- data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
- data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +394 -0
- data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
- data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
- data/spec/integration/client_side_encryption/views_spec.rb +1 -1
- data/spec/integration/client_update_spec.rb +2 -2
- data/spec/integration/crud_spec.rb +12 -0
- data/spec/integration/cursor_pinning_spec.rb +3 -3
- data/spec/integration/fork_reconnect_spec.rb +15 -8
- data/spec/integration/grid_fs_bucket_spec.rb +3 -3
- data/spec/integration/ocsp_verifier_spec.rb +1 -0
- data/spec/integration/query_cache_spec.rb +34 -30
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/sdam_events_spec.rb +0 -40
- data/spec/integration/server_monitor_spec.rb +2 -1
- data/spec/integration/size_limit_spec.rb +4 -1
- data/spec/integration/snapshot_query_examples_spec.rb +127 -0
- data/spec/integration/srv_monitoring_spec.rb +37 -0
- data/spec/integration/step_down_spec.rb +20 -4
- data/spec/integration/transaction_pinning_spec.rb +2 -2
- data/spec/integration/versioned_api_examples_spec.rb +37 -31
- data/spec/lite_spec_helper.rb +14 -5
- data/spec/mongo/address/ipv6_spec.rb +7 -0
- data/spec/mongo/address_spec.rb +7 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
- data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
- data/spec/mongo/bulk_write/result_spec.rb +15 -1
- data/spec/mongo/bulk_write_spec.rb +128 -20
- data/spec/mongo/client_construction_spec.rb +141 -7
- data/spec/mongo/client_encryption_spec.rb +11 -11
- data/spec/mongo/client_spec.rb +297 -1
- data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
- data/spec/mongo/cluster_spec.rb +0 -44
- data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/readable_spec.rb +35 -56
- data/spec/mongo/collection/view/writable_spec.rb +144 -32
- data/spec/mongo/collection_crud_spec.rb +63 -13
- data/spec/mongo/config/options_spec.rb +75 -0
- data/spec/mongo/config_spec.rb +73 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/auto_encrypter_spec.rb +106 -0
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/binding/context_spec.rb +99 -17
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
- data/spec/mongo/crypt/binding/version_spec.rb +25 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
- data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +89 -1
- data/spec/mongo/crypt/handle_spec.rb +47 -169
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +404 -0
- data/spec/mongo/crypt/kms_spec.rb +59 -0
- data/spec/mongo/cursor_spec.rb +37 -51
- data/spec/mongo/database_spec.rb +66 -1
- data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
- data/spec/mongo/index/view_spec.rb +69 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +286 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/delete_spec.rb +0 -30
- data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
- data/spec/mongo/operation/insert_spec.rb +0 -32
- data/spec/mongo/operation/result_spec.rb +20 -0
- data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/update_spec.rb +0 -29
- data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
- data/spec/mongo/protocol/msg_spec.rb +41 -0
- data/spec/mongo/query_cache_spec.rb +1 -0
- data/spec/mongo/retryable_spec.rb +32 -3
- data/spec/mongo/server/connection_auth_spec.rb +3 -1
- data/spec/mongo/server/connection_common_spec.rb +13 -1
- data/spec/mongo/server/connection_pool_spec.rb +94 -49
- data/spec/mongo/server/connection_spec.rb +50 -159
- data/spec/mongo/server/description/features_spec.rb +24 -0
- data/spec/mongo/server/push_monitor_spec.rb +2 -8
- data/spec/mongo/session_spec.rb +26 -6
- data/spec/mongo/session_transaction_spec.rb +2 -1
- data/spec/mongo/socket/ssl_spec.rb +15 -4
- data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
- data/spec/mongo/uri_spec.rb +25 -0
- data/spec/runners/connection_string.rb +8 -0
- data/spec/runners/crud/operation.rb +12 -3
- data/spec/runners/crud/requirement.rb +3 -3
- data/spec/runners/crud/spec.rb +5 -0
- data/spec/runners/crud/verifier.rb +6 -0
- data/spec/runners/transactions/test.rb +33 -14
- data/spec/runners/transactions.rb +9 -6
- data/spec/runners/unified/assertions.rb +59 -10
- data/spec/runners/unified/change_stream_operations.rb +9 -0
- data/spec/runners/unified/crud_operations.rb +50 -2
- data/spec/runners/unified/ddl_operations.rb +20 -0
- data/spec/runners/unified/error.rb +2 -1
- data/spec/runners/unified/support_operations.rb +5 -2
- data/spec/runners/unified/test.rb +19 -4
- data/spec/runners/unified.rb +9 -2
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +21 -3
- data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/share/Dockerfile.erb +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +40 -5
- data/spec/spec_helper.rb +0 -1
- data/spec/spec_tests/crud_spec.rb +0 -10
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1068 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
- data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
- data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
- data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
- data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
- data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
- data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
- data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
- data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
- data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
- data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
- data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
- data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
- data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
- data/spec/spec_tests/data/crud_unified/find.yml +68 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
- data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
- data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
- data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
- data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
- data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
- data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
- data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
- data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
- data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
- data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
- data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
- data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
- data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
- data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
- data/spec/spec_tests/retryable_reads_spec.rb +4 -1
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +4 -1
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
- data/spec/spec_tests/unified_spec.rb +6 -1
- data/spec/stress/connection_pool_timing_spec.rb +2 -1
- data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
- data/spec/support/authorization.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +47 -40
- data/spec/support/certificates/atlas-ocsp.crt +106 -101
- data/spec/support/cluster_tools.rb +1 -1
- data/spec/support/common_shortcuts.rb +22 -0
- data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
- data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
- data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
- data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
- data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
- data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
- data/spec/support/crypt/corpus/corpus.json +4999 -37
- data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
- data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
- data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
- data/spec/support/crypt/encryptedFields.json +33 -0
- data/spec/support/crypt/keys/key1-document.json +30 -0
- data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/crypt.rb +207 -6
- data/spec/support/macros.rb +18 -0
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/shared/scram_conversation.rb +2 -1
- data/spec/support/shared/session.rb +13 -7
- data/spec/support/spec_config.rb +82 -1
- data/spec/support/utils.rb +25 -4
- data.tar.gz.sig +0 -0
- metadata +1468 -1214
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/delete/legacy.rb +0 -64
- data/lib/mongo/operation/insert/legacy.rb +0 -68
- data/lib/mongo/operation/update/legacy/result.rb +0 -112
- data/lib/mongo/operation/update/legacy.rb +0 -76
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
- data/spec/spec_tests/change_streams_spec.rb +0 -93
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
- data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
- data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
- data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
- data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
- data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
- data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
- data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
- data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/session_registry.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27dd7818b5dc4a0b930ad91ec1607720ad7a02b1b6ea801499e7102ad758db17
|
4
|
+
data.tar.gz: 7c06c0a8e70f17a81529b727fcecb10c6a39c04fd36111cac51d3802b1494bf0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6551874d18d17670e04c13a05ec7e1ee793dfe5984933dbd476adf12603d65ff36c377681d5eb49b94b8da9523d8e196a306da8f3496b0400f6c82302db9b4ea
|
7
|
+
data.tar.gz: f337ac92bc26479b70ce26a6c88056a57ee2201c586fa134ead68ad00041368fd77edb4c07d7db7e042d1525aeca75998c51e6209b77069b752739cc68d96aae
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -7,21 +7,17 @@ The officially supported Ruby driver for [MongoDB](https://www.mongodb.org/).
|
|
7
7
|
|
8
8
|
The Ruby driver supports Ruby 2.5-3.0 and JRuby 9.2.
|
9
9
|
|
10
|
-
|
11
|
-
Documentation
|
12
|
-
-------------
|
10
|
+
## Documentation
|
13
11
|
|
14
12
|
High level documentation and usage examples are located
|
15
13
|
[here](http://docs.mongodb.org/ecosystem/drivers/ruby/).
|
16
14
|
|
17
15
|
API documentation for the most recent release can be found
|
18
|
-
[here](https://
|
16
|
+
[here](https://mongodb.com/docs/ruby-driver/current/api/).
|
19
17
|
To build API documentation for the master branch, check out the
|
20
18
|
repository locally and run `rake docs`.
|
21
19
|
|
22
|
-
|
23
|
-
Support
|
24
|
-
-------
|
20
|
+
## Support
|
25
21
|
|
26
22
|
Commercial support for the driver is available through the
|
27
23
|
[MongoDB Support Portal](https://support.mongodb.com/).
|
@@ -29,17 +25,15 @@ Commercial support for the driver is available through the
|
|
29
25
|
For questions, discussions or general technical support, please visit the
|
30
26
|
[MongoDB Community Forum](https://developer.mongodb.com/community/forums/tags/c/drivers-odms-connectors/7/ruby-driver).
|
31
27
|
|
32
|
-
Please see [Technical Support](https://
|
28
|
+
Please see [Technical Support](https://mongodb.com/docs/manual/support/) page
|
33
29
|
in the documentation for other support resources.
|
34
30
|
|
35
|
-
|
36
|
-
Bugs & Feature Requests
|
37
|
-
-----------------------
|
31
|
+
## Bugs & Feature Requests
|
38
32
|
|
39
33
|
To report a bug in the driver or request a feature specific to the Ruby driver:
|
40
34
|
|
41
35
|
1. Visit [our issue tracker](https://jira.mongodb.org/) and login
|
42
|
-
(or create an account if you do not have one already).
|
36
|
+
(or create an account if you do not have one already).
|
43
37
|
2. Navigate to the [RUBY project](https://jira.mongodb.org/browse/RUBY).
|
44
38
|
3. Click 'Create Issue' and fill out all of the applicable form fields.
|
45
39
|
|
@@ -60,54 +54,44 @@ is publicly visible.
|
|
60
54
|
- Provide any sensitive data or server logs.
|
61
55
|
- Report potential security issues publicly (see 'Security Issues' below).
|
62
56
|
|
63
|
-
|
64
|
-
Security Issues
|
65
|
-
---------------
|
57
|
+
## Security Issues
|
66
58
|
|
67
59
|
If you have identified a potential security-related issue in the Ruby driver
|
68
60
|
(or any other MongoDB product), please report it by following the
|
69
61
|
[instructions here](http://docs.mongodb.org/manual/tutorial/create-a-vulnerability-report).
|
70
62
|
|
71
|
-
|
72
|
-
Product Feature Requests
|
73
|
-
------------------------
|
63
|
+
## Product Feature Requests
|
74
64
|
|
75
65
|
To request a feature which is not specific to the Ruby driver, or which
|
76
66
|
affects more than the driver alone (for example, a feature which requires
|
77
67
|
MongoDB server support), please submit your idea through the
|
78
68
|
[MongoDB Feedback Forum](https://feedback.mongodb.com/forums/924286-drivers).
|
79
69
|
|
80
|
-
|
81
|
-
Running Tests
|
82
|
-
-------------
|
70
|
+
## Running Tests
|
83
71
|
|
84
72
|
Please refer to [spec/README.md](spec/README.md) for instructions on how
|
85
73
|
to run the driver's test suite.
|
86
74
|
|
87
|
-
|
88
|
-
Release History
|
89
|
-
---------------
|
75
|
+
## Release History
|
90
76
|
|
91
77
|
Full release notes and release history are available [on the GitHub releases
|
92
78
|
page](https://github.com/mongodb/mongo-ruby-driver/releases).
|
93
79
|
|
80
|
+
## License
|
94
81
|
|
95
|
-
|
96
|
-
-------
|
97
|
-
|
98
|
-
Copyright (C) 2009-2020 MongoDB, Inc.
|
82
|
+
Copyright (C) 2009-2020 MongoDB, Inc.
|
99
83
|
|
100
|
-
|
101
|
-
|
102
|
-
|
84
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
85
|
+
you may not use this file except in compliance with the License.
|
86
|
+
You may obtain a copy of the License at
|
103
87
|
|
104
|
-
|
88
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
105
89
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
90
|
+
Unless required by applicable law or agreed to in writing, software
|
91
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
92
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
93
|
+
See the License for the specific language governing permissions and
|
94
|
+
limitations under the License.
|
111
95
|
|
112
96
|
[rubygems-img]: https://badge.fury.io/rb/mongo.svg
|
113
97
|
[rubygems-url]: http://badge.fury.io/rb/mongo
|
data/lib/mongo/auth/base.rb
CHANGED
@@ -112,7 +112,12 @@ module Mongo
|
|
112
112
|
reply = connection.dispatch([msg], context)
|
113
113
|
reply_document = reply.documents.first
|
114
114
|
validate_reply!(connection, conversation, reply_document)
|
115
|
-
|
115
|
+
connection_global_id = if connection.respond_to?(:global_id)
|
116
|
+
connection.global_id
|
117
|
+
else
|
118
|
+
nil
|
119
|
+
end
|
120
|
+
result = Operation::Result.new(reply, connection.description, connection_global_id)
|
116
121
|
connection.update_cluster_time(result)
|
117
122
|
reply_document
|
118
123
|
end
|
@@ -126,10 +131,12 @@ module Mongo
|
|
126
131
|
code_name: doc[:codeName],
|
127
132
|
message: doc[:errmsg],
|
128
133
|
)
|
134
|
+
|
129
135
|
raise Unauthorized.new(user,
|
130
136
|
used_mechanism: self.class.const_get(:MECHANISM),
|
131
137
|
message: message,
|
132
138
|
server: connection.server,
|
139
|
+
code: doc[:code]
|
133
140
|
)
|
134
141
|
end
|
135
142
|
end
|
data/lib/mongo/auth.rb
CHANGED
@@ -30,6 +30,9 @@ require 'mongo/auth/ldap'
|
|
30
30
|
require 'mongo/auth/scram'
|
31
31
|
require 'mongo/auth/scram256'
|
32
32
|
require 'mongo/auth/x509'
|
33
|
+
require 'mongo/error/read_write_retryable'
|
34
|
+
require 'mongo/error/labelable'
|
35
|
+
|
33
36
|
|
34
37
|
module Mongo
|
35
38
|
|
@@ -127,6 +130,11 @@ module Mongo
|
|
127
130
|
#
|
128
131
|
# @since 2.0.0
|
129
132
|
class Unauthorized < Mongo::Error::AuthError
|
133
|
+
include Error::ReadWriteRetryable
|
134
|
+
include Error::Labelable
|
135
|
+
|
136
|
+
# @return [ Integer ] The error code.
|
137
|
+
attr_reader :code
|
130
138
|
|
131
139
|
# Instantiate the new error.
|
132
140
|
#
|
@@ -139,11 +147,14 @@ module Mongo
|
|
139
147
|
# @param [ String ] message The error message returned by the server.
|
140
148
|
# @param [ Server ] server The server instance that authentication
|
141
149
|
# was attempted against.
|
150
|
+
# @param [ Integer ] The error code.
|
142
151
|
#
|
143
152
|
# @since 2.0.0
|
144
153
|
def initialize(user, used_mechanism: nil, message: nil,
|
145
|
-
server: nil
|
154
|
+
server: nil, code: nil
|
146
155
|
)
|
156
|
+
@code = code
|
157
|
+
|
147
158
|
configured_bits = []
|
148
159
|
used_bits = [
|
149
160
|
"auth source: #{user.auth_source}",
|
@@ -23,6 +23,11 @@ module Mongo
|
|
23
23
|
# @since 2.0.6
|
24
24
|
class Result
|
25
25
|
|
26
|
+
# @return [ Boolean ] Is the result acknowledged?
|
27
|
+
def acknowledged?
|
28
|
+
@acknowledged
|
29
|
+
end
|
30
|
+
|
26
31
|
# Constant for number removed.
|
27
32
|
#
|
28
33
|
# @since 2.1.0
|
@@ -94,10 +99,14 @@ module Mongo
|
|
94
99
|
# Result.new({ 'n_inserted' => 10 })
|
95
100
|
#
|
96
101
|
# @param [ BSON::Document, Hash ] results The results document.
|
102
|
+
# @param [ Boolean ] acknowledged Is the result acknowledged?
|
97
103
|
#
|
98
104
|
# @since 2.1.0
|
99
|
-
|
105
|
+
#
|
106
|
+
# @api private
|
107
|
+
def initialize(results, acknowledged)
|
100
108
|
@results = results
|
109
|
+
@acknowledged = acknowledged
|
101
110
|
end
|
102
111
|
|
103
112
|
# Returns the number of documents inserted.
|
@@ -70,20 +70,18 @@ module Mongo
|
|
70
70
|
end
|
71
71
|
combine_errors!(result)
|
72
72
|
@count += count
|
73
|
+
@acknowledged = result.acknowledged?
|
73
74
|
end
|
74
75
|
|
75
76
|
# Get the final result.
|
76
77
|
#
|
77
78
|
# @api private
|
78
79
|
#
|
79
|
-
# @example Get the final result.
|
80
|
-
# combinator.result
|
81
|
-
#
|
82
80
|
# @return [ BulkWrite::Result ] The final result.
|
83
81
|
#
|
84
82
|
# @since 2.1.0
|
85
83
|
def result
|
86
|
-
BulkWrite::Result.new(results).validate!
|
84
|
+
BulkWrite::Result.new(results, @acknowledged).validate!
|
87
85
|
end
|
88
86
|
|
89
87
|
private
|
data/lib/mongo/bulk_write.rb
CHANGED
@@ -59,37 +59,34 @@ module Mongo
|
|
59
59
|
operation_id = Monitoring.next_operation_id
|
60
60
|
result_combiner = ResultCombiner.new
|
61
61
|
operations = op_combiner.combine
|
62
|
+
validate_requests!
|
62
63
|
|
63
64
|
client.send(:with_session, @options) do |session|
|
64
65
|
context = Operation::Context.new(client: client, session: session)
|
65
66
|
operations.each do |operation|
|
66
67
|
if single_statement?(operation)
|
67
68
|
write_concern = write_concern(session)
|
68
|
-
write_with_retry(
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
txn_num)
|
79
|
-
end
|
69
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
70
|
+
execute_operation(
|
71
|
+
operation.keys.first,
|
72
|
+
operation.values.flatten,
|
73
|
+
connection,
|
74
|
+
context,
|
75
|
+
operation_id,
|
76
|
+
result_combiner,
|
77
|
+
session,
|
78
|
+
txn_num)
|
80
79
|
end
|
81
80
|
else
|
82
|
-
nro_write_with_retry(
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
session)
|
92
|
-
end
|
81
|
+
nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
82
|
+
execute_operation(
|
83
|
+
operation.keys.first,
|
84
|
+
operation.values.flatten,
|
85
|
+
connection,
|
86
|
+
context,
|
87
|
+
operation_id,
|
88
|
+
result_combiner,
|
89
|
+
session)
|
93
90
|
end
|
94
91
|
end
|
95
92
|
end
|
@@ -179,7 +176,9 @@ module Mongo
|
|
179
176
|
:max_time_ms => options[:max_time_ms],
|
180
177
|
:options => options,
|
181
178
|
:id_generator => client.options[:id_generator],
|
182
|
-
:session => session
|
179
|
+
:session => session,
|
180
|
+
:comment => options[:comment],
|
181
|
+
:let => options[:let],
|
183
182
|
}
|
184
183
|
end
|
185
184
|
|
@@ -188,7 +187,7 @@ module Mongo
|
|
188
187
|
validate_array_filters!(connection)
|
189
188
|
validate_hint!(connection)
|
190
189
|
|
191
|
-
unpin_maybe(session) do
|
190
|
+
unpin_maybe(session, connection) do
|
192
191
|
if values.size > connection.description.max_write_batch_size
|
193
192
|
split_execute(name, values, connection, context, operation_id, result_combiner, session, txn_num)
|
194
193
|
else
|
@@ -210,7 +209,7 @@ module Mongo
|
|
210
209
|
# 3.6+ servers being able to split less.
|
211
210
|
rescue Error::MaxBSONSize, Error::MaxMessageSize => e
|
212
211
|
raise e if values.size <= 1
|
213
|
-
unpin_maybe(session) do
|
212
|
+
unpin_maybe(session, connection) do
|
214
213
|
split_execute(name, values, connection, context, operation_id, result_combiner, session, txn_num)
|
215
214
|
end
|
216
215
|
end
|
@@ -222,7 +221,7 @@ module Mongo
|
|
222
221
|
def split_execute(name, values, connection, context, operation_id, result_combiner, session, txn_num)
|
223
222
|
execute_operation(name, values.shift(values.size / 2), connection, context, operation_id, result_combiner, session, txn_num)
|
224
223
|
|
225
|
-
txn_num = session.next_txn_num if txn_num
|
224
|
+
txn_num = session.next_txn_num if txn_num
|
226
225
|
execute_operation(name, values, connection, context, operation_id, result_combiner, session, txn_num)
|
227
226
|
end
|
228
227
|
|
@@ -278,12 +277,93 @@ module Mongo
|
|
278
277
|
|
279
278
|
def validate_hint!(connection)
|
280
279
|
if op_combiner.has_hint?
|
281
|
-
if write_concern && !write_concern.acknowledged?
|
280
|
+
if !can_hint?(connection) && write_concern && !write_concern.acknowledged?
|
282
281
|
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
283
282
|
elsif !connection.features.update_delete_option_validation_enabled?
|
284
283
|
raise Error::UnsupportedOption.hint_error
|
285
284
|
end
|
286
285
|
end
|
287
286
|
end
|
287
|
+
|
288
|
+
# Loop through the requests and check if each operation is allowed to send
|
289
|
+
# a hint for each operation on the given server version.
|
290
|
+
#
|
291
|
+
# For the following operations, the client can send a hint for servers >= 4.2
|
292
|
+
# and for the rest, the client can only send it for 4.4+:
|
293
|
+
# - updateOne
|
294
|
+
# - updateMany
|
295
|
+
# - replaceOne
|
296
|
+
#
|
297
|
+
# @param [ Connection ] connection The connection object.
|
298
|
+
#
|
299
|
+
# @return [ true | false ] Whether the request is able to send hints for
|
300
|
+
# the current server version.
|
301
|
+
def can_hint?(connection)
|
302
|
+
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
303
|
+
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
304
|
+
op_combiner.requests.all? do |req|
|
305
|
+
op = req.keys.first
|
306
|
+
if req[op].keys.include?(:hint)
|
307
|
+
if [:update_one, :update_many, :replace_one].include?(op)
|
308
|
+
gte_4_2
|
309
|
+
else
|
310
|
+
gte_4_4
|
311
|
+
end
|
312
|
+
else
|
313
|
+
true
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
# Perform the request document validation required by driver specifications.
|
319
|
+
# This method validates the first key of each update request document to be
|
320
|
+
# an operator (i.e. start with $) and the first key of each replacement
|
321
|
+
# document to not be an operator (i.e. not start with $). The request document
|
322
|
+
# may be invalid without this method flagging it as such (for example an
|
323
|
+
# update or replacement document containing some keys which are operators
|
324
|
+
# and some which are not), in which case the driver expects the server to
|
325
|
+
# fail the operation with an error.
|
326
|
+
#
|
327
|
+
# @raise [ Error::InvalidUpdateDocument, Error::InvalidReplacementDocument ]
|
328
|
+
# if the document is invalid.
|
329
|
+
def validate_requests!
|
330
|
+
@requests.each do |req|
|
331
|
+
if op = req.keys.first
|
332
|
+
if [:update_one, :update_many].include?(op)
|
333
|
+
if doc = maybe_first(req.dig(op, :update))
|
334
|
+
if key = doc.keys&.first
|
335
|
+
unless key.to_s.start_with?("$")
|
336
|
+
if Mongo.validate_update_replace
|
337
|
+
raise Error::InvalidUpdateDocument.new(key: key)
|
338
|
+
else
|
339
|
+
Error::InvalidUpdateDocument.warn(Logger.logger, key)
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
344
|
+
elsif op == :replace_one
|
345
|
+
if key = req.dig(op, :replacement)&.keys&.first
|
346
|
+
if key.to_s.start_with?("$")
|
347
|
+
if Mongo.validate_update_replace
|
348
|
+
raise Error::InvalidReplacementDocument.new(key: key)
|
349
|
+
else
|
350
|
+
Error::InvalidReplacementDocument.warn(Logger.logger, key)
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
# If the given object is an array return the first element, otherwise
|
360
|
+
# return the given object.
|
361
|
+
#
|
362
|
+
# @param [ Object ] obj The given object.
|
363
|
+
#
|
364
|
+
# @return [ Object ] The first element of the array or the given object.
|
365
|
+
def maybe_first(obj)
|
366
|
+
obj.is_a?(Array) ? obj.first : obj
|
367
|
+
end
|
288
368
|
end
|
289
369
|
end
|
data/lib/mongo/client.rb
CHANGED
@@ -92,6 +92,8 @@ module Mongo
|
|
92
92
|
:server_api,
|
93
93
|
:server_selection_timeout,
|
94
94
|
:socket_timeout,
|
95
|
+
:srv_max_hosts,
|
96
|
+
:srv_service_name,
|
95
97
|
:ssl,
|
96
98
|
:ssl_ca_cert,
|
97
99
|
:ssl_ca_cert_object,
|
@@ -340,6 +342,13 @@ module Mongo
|
|
340
342
|
# for selecting a server for an operation.
|
341
343
|
# @option options [ Float ] :socket_timeout The timeout, in seconds, to
|
342
344
|
# execute operations on a socket.
|
345
|
+
# @option options [ Integer ] :srv_max_hosts The maximum number of mongoses
|
346
|
+
# that the driver will communicate with for sharded topologies. If this
|
347
|
+
# option is 0, then there will be no maximum number of mongoses. If the
|
348
|
+
# given URI resolves to more hosts than ``:srv_max_hosts``, the client
|
349
|
+
# will ramdomly choose an ``:srv_max_hosts`` sized subset of hosts.
|
350
|
+
# @option options [ String ] :srv_service_name The service name to use in
|
351
|
+
# the SRV DNS query.
|
343
352
|
# @option options [ true, false ] :ssl Whether to use TLS.
|
344
353
|
# @option options [ String ] :ssl_ca_cert The file containing concatenated
|
345
354
|
# certificate authority certificates used to validate certs passed from the
|
@@ -420,9 +429,13 @@ module Mongo
|
|
420
429
|
# instance containing the encryption key vault
|
421
430
|
# - :key_vault_namespace => String, the namespace of the key vault in the
|
422
431
|
# format database.collection
|
423
|
-
# - :kms_providers => Hash, A hash of key management service configuration
|
424
|
-
# information. Valid hash keys are :
|
425
|
-
# than one kms provider specified.
|
432
|
+
# - :kms_providers => Hash, A hash of key management service (KMS) configuration
|
433
|
+
# information. Valid hash keys are :aws, :azure, :gcp, :kmip, :local.
|
434
|
+
# There may be more than one kms provider specified.
|
435
|
+
# - :kms_tls_options => Hash, A hash of TLS options to authenticate to
|
436
|
+
# KMS providers, usually used for KMIP servers. Valid hash keys
|
437
|
+
# are :aws, :azure, :gcp, :kmip, :local. There may be more than one
|
438
|
+
# kms provider specified.
|
426
439
|
# - :schema_map => Hash | nil, JSONSchema for one or more collections
|
427
440
|
# specifying which fields should be encrypted.
|
428
441
|
# - Note: Schemas supplied in the schema_map only apply to configuring
|
@@ -433,10 +446,18 @@ module Mongo
|
|
433
446
|
# JSON Schemas obtained from the server. It protects against a
|
434
447
|
# malicious server advertising a false JSON Schema, which could trick
|
435
448
|
# the client into sending unencrypted data that should be encrypted.
|
449
|
+
# - Note: If a collection is present on both the :encrypted_fields_map
|
450
|
+
# and :schema_map, an error will be raised.
|
436
451
|
# - :bypass_auto_encryption => Boolean, when true, disables auto encryption;
|
437
452
|
# defaults to false.
|
438
453
|
# - :extra_options => Hash | nil, options related to spawning mongocryptd
|
439
454
|
# (this part of the API is subject to change).
|
455
|
+
# - :encrypted_fields_map => Hash | nil, maps a collection namespace to
|
456
|
+
# a hash describing encrypted fields for queryable encryption.
|
457
|
+
# - Note: If a collection is present on both the encryptedFieldsMap
|
458
|
+
# and schemaMap, an error will be raised.
|
459
|
+
# - :bypass_query_analysis => Boolean | nil, when true disables automatic
|
460
|
+
# analysis of outgoing commands.
|
440
461
|
#
|
441
462
|
# Notes on automatic encryption:
|
442
463
|
# - Automatic encryption is an enterprise only feature that only applies
|
@@ -532,7 +553,7 @@ module Mongo
|
|
532
553
|
end
|
533
554
|
=end
|
534
555
|
@options.freeze
|
535
|
-
validate_options!(addresses)
|
556
|
+
validate_options!(addresses, is_srv: uri.is_a?(URI::SRVProtocol))
|
536
557
|
validate_authentication_options!
|
537
558
|
|
538
559
|
database_options = @options.dup
|
@@ -885,9 +906,11 @@ module Mongo
|
|
885
906
|
# which databases are returned based on user privileges when access control
|
886
907
|
# is enabled
|
887
908
|
#
|
888
|
-
# See https://
|
909
|
+
# See https://mongodb.com/docs/manual/reference/command/listDatabases/
|
889
910
|
# for more information and usage.
|
890
911
|
# @option opts [ Session ] :session The session to use.
|
912
|
+
# @option options [ Object ] :comment A user-provided
|
913
|
+
# comment to attach to this command.
|
891
914
|
#
|
892
915
|
# @return [ Array<String> ] The names of the databases.
|
893
916
|
#
|
@@ -909,9 +932,11 @@ module Mongo
|
|
909
932
|
# which databases are returned based on user privileges when access control
|
910
933
|
# is enabled
|
911
934
|
#
|
912
|
-
# See https://
|
935
|
+
# See https://mongodb.com/docs/manual/reference/command/listDatabases/
|
913
936
|
# for more information and usage.
|
914
937
|
# @option opts [ Session ] :session The session to use.
|
938
|
+
# @option options [ Object ] :comment A user-provided
|
939
|
+
# comment to attach to this command.
|
915
940
|
#
|
916
941
|
# @return [ Array<Hash> ] The info for each database.
|
917
942
|
#
|
@@ -933,6 +958,8 @@ module Mongo
|
|
933
958
|
# @param [ Hash ] opts The command options.
|
934
959
|
#
|
935
960
|
# @option opts [ Session ] :session The session to use.
|
961
|
+
# @option options [ Object ] :comment A user-provided
|
962
|
+
# comment to attach to this command.
|
936
963
|
#
|
937
964
|
# @return [ Array<Mongo::Database> ] The list of database objects.
|
938
965
|
#
|
@@ -984,11 +1011,35 @@ module Mongo
|
|
984
1011
|
#
|
985
1012
|
# @param [ Array<Hash> ] pipeline Optional additional filter operators.
|
986
1013
|
# @param [ Hash ] options The change stream options.
|
1014
|
+
# @option options [ String ] :full_document Allowed values: nil, 'default',
|
1015
|
+
# 'updateLookup', 'whenAvailable', 'required'.
|
987
1016
|
#
|
988
|
-
#
|
989
|
-
#
|
990
|
-
#
|
991
|
-
#
|
1017
|
+
# The default is to not send a value (i.e. nil), which is equivalent to
|
1018
|
+
# 'default'. By default, the change notification for partial updates will
|
1019
|
+
# include a delta describing the changes to the document.
|
1020
|
+
#
|
1021
|
+
# When set to 'updateLookup', the change notification for partial updates
|
1022
|
+
# will include both a delta describing the changes to the document as well
|
1023
|
+
# as a copy of the entire document that was changed from some time after
|
1024
|
+
# the change occurred.
|
1025
|
+
#
|
1026
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
1027
|
+
# post-image of the modified document for replace and update change events
|
1028
|
+
# if the post-image for this event is available.
|
1029
|
+
#
|
1030
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
1031
|
+
# an error is raised if the post-image is not available.
|
1032
|
+
# @option options [ String ] :full_document_before_change Allowed values: nil,
|
1033
|
+
# 'whenAvailable', 'required', 'off'.
|
1034
|
+
#
|
1035
|
+
# The default is to not send a value (i.e. nil), which is equivalent to 'off'.
|
1036
|
+
#
|
1037
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
1038
|
+
# pre-image of the modified document for replace, update, and delete change
|
1039
|
+
# events if it is available.
|
1040
|
+
#
|
1041
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
1042
|
+
# an error is raised if the pre-image is not available.
|
992
1043
|
# @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
|
993
1044
|
# for the new change stream.
|
994
1045
|
# @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
|
@@ -1000,6 +1051,8 @@ module Mongo
|
|
1000
1051
|
# changes that occurred at or after the specified timestamp. Any command run
|
1001
1052
|
# against the server will return a cluster time that can be used here.
|
1002
1053
|
# Only recognized by server versions 4.0+.
|
1054
|
+
# @option options [ Object ] :comment A user-provided
|
1055
|
+
# comment to attach to this command.
|
1003
1056
|
#
|
1004
1057
|
# @note A change stream only allows 'majority' read concern.
|
1005
1058
|
# @note This helper method is preferable to running a raw aggregation with a $changeStream
|
@@ -1088,6 +1141,14 @@ module Mongo
|
|
1088
1141
|
end
|
1089
1142
|
end
|
1090
1143
|
|
1144
|
+
# Returns encrypted field map hash if provided when creating the client.
|
1145
|
+
#
|
1146
|
+
# @return [ Hash | nil ] Encrypted field map hash, or nil if not set.
|
1147
|
+
# @api private
|
1148
|
+
def encrypted_fields_map
|
1149
|
+
@encrypted_fields_map ||= @options.fetch(:auto_encryption_options, {})[:encrypted_fields_map]
|
1150
|
+
end
|
1151
|
+
|
1091
1152
|
private
|
1092
1153
|
|
1093
1154
|
# Create a new encrypter object using the client's auto encryption options
|
@@ -1147,11 +1208,26 @@ module Mongo
|
|
1147
1208
|
|
1148
1209
|
cluster.validate_session_support!
|
1149
1210
|
|
1150
|
-
|
1211
|
+
options = {implicit: true}.update(options)
|
1212
|
+
|
1213
|
+
server_session = if options[:implicit]
|
1214
|
+
nil
|
1215
|
+
else
|
1216
|
+
cluster.session_pool.checkout
|
1217
|
+
end
|
1218
|
+
|
1219
|
+
Session.new(server_session, self, options)
|
1151
1220
|
end
|
1152
1221
|
|
1222
|
+
# Auxiliary method that is called by interpreter when copying the client
|
1223
|
+
# via dup or clone.
|
1224
|
+
#
|
1225
|
+
# @param [ Mongo::Client ] original Client that is being cloned.
|
1226
|
+
#
|
1227
|
+
# @api private
|
1153
1228
|
def initialize_copy(original)
|
1154
1229
|
@options = original.options.dup
|
1230
|
+
@connect_lock = Mutex.new
|
1155
1231
|
@monitoring = @cluster ? monitoring : Monitoring.new(options)
|
1156
1232
|
@database = nil
|
1157
1233
|
@read_preference = nil
|
@@ -1226,6 +1302,12 @@ module Mongo
|
|
1226
1302
|
end
|
1227
1303
|
|
1228
1304
|
_options[key] = compressors unless compressors.empty?
|
1305
|
+
elsif key == :srv_max_hosts
|
1306
|
+
if v && (!v.is_a?(Integer) || v < 0)
|
1307
|
+
log_warn("#{v} is not a valid integer for srv_max_hosts")
|
1308
|
+
else
|
1309
|
+
_options[key] = v
|
1310
|
+
end
|
1229
1311
|
else
|
1230
1312
|
_options[key] = v
|
1231
1313
|
end
|
@@ -1239,7 +1321,7 @@ module Mongo
|
|
1239
1321
|
# Validates all options after they are set on the client.
|
1240
1322
|
# This method is intended to catch combinations of options which are
|
1241
1323
|
# not allowed.
|
1242
|
-
def validate_options!(addresses = nil)
|
1324
|
+
def validate_options!(addresses = nil, is_srv: nil)
|
1243
1325
|
if options[:write] && options[:write_concern] && options[:write] != options[:write_concern]
|
1244
1326
|
raise ArgumentError, "If :write and :write_concern are both given, they must be identical: #{options.inspect}"
|
1245
1327
|
end
|
@@ -1349,6 +1431,26 @@ module Mongo
|
|
1349
1431
|
end
|
1350
1432
|
end
|
1351
1433
|
end
|
1434
|
+
|
1435
|
+
if options[:srv_max_hosts] && options[:srv_max_hosts] > 0
|
1436
|
+
if options[:replica_set]
|
1437
|
+
raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :replica_set option"
|
1438
|
+
end
|
1439
|
+
|
1440
|
+
if options[:load_balanced]
|
1441
|
+
raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :load_balanced=true"
|
1442
|
+
end
|
1443
|
+
end
|
1444
|
+
|
1445
|
+
unless is_srv.nil? || is_srv
|
1446
|
+
if options[:srv_max_hosts]
|
1447
|
+
raise ArgumentError, ":srv_max_hosts cannot be used on non-SRV URI"
|
1448
|
+
end
|
1449
|
+
|
1450
|
+
if options[:srv_service_name]
|
1451
|
+
raise ArgumentError, ":srv_service_name cannot be used on non-SRV URI"
|
1452
|
+
end
|
1453
|
+
end
|
1352
1454
|
end
|
1353
1455
|
|
1354
1456
|
# Validates all authentication-related options after they are set on the client
|