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
data/lib/mongo/collection.rb
CHANGED
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
require 'mongo/bulk_write'
|
19
19
|
require 'mongo/collection/view'
|
20
|
+
require 'mongo/collection/helpers'
|
21
|
+
require 'mongo/collection/queryable_encryption'
|
20
22
|
|
21
23
|
module Mongo
|
22
24
|
|
@@ -27,6 +29,8 @@ module Mongo
|
|
27
29
|
class Collection
|
28
30
|
extend Forwardable
|
29
31
|
include Retryable
|
32
|
+
include QueryableEncryption
|
33
|
+
include Helpers
|
30
34
|
|
31
35
|
# The capped option.
|
32
36
|
#
|
@@ -47,8 +51,8 @@ module Mongo
|
|
47
51
|
# @return [ Hash ] The collection options.
|
48
52
|
attr_reader :options
|
49
53
|
|
50
|
-
# Get client, cluster, read preference,
|
51
|
-
def_delegators :database, :client, :cluster
|
54
|
+
# Get client, cluster, read preference, write concern, and encrypted_fields_map from client.
|
55
|
+
def_delegators :database, :client, :cluster, :encrypted_fields_map
|
52
56
|
|
53
57
|
# Delegate to the cluster for the next primary.
|
54
58
|
def_delegators :cluster, :next_primary
|
@@ -58,10 +62,16 @@ module Mongo
|
|
58
62
|
# @since 2.1.0
|
59
63
|
CHANGEABLE_OPTIONS = [ :read, :read_concern, :write, :write_concern ].freeze
|
60
64
|
|
61
|
-
# Options
|
62
|
-
|
65
|
+
# Options map to transform create collection options.
|
66
|
+
#
|
67
|
+
# @api private
|
68
|
+
CREATE_COLLECTION_OPTIONS = {
|
63
69
|
:time_series => :timeseries,
|
64
|
-
:expire_after => :expireAfterSeconds
|
70
|
+
:expire_after => :expireAfterSeconds,
|
71
|
+
:clustered_index => :clusteredIndex,
|
72
|
+
:change_stream_pre_and_post_images => :changeStreamPreAndPostImages,
|
73
|
+
:encrypted_fields => :encryptedFields,
|
74
|
+
:validator => :validator,
|
65
75
|
}
|
66
76
|
|
67
77
|
# Check if a collection is equal to another object. Will check the name and
|
@@ -94,10 +104,14 @@ module Mongo
|
|
94
104
|
# @option options [ Hash ] :write_concern The write concern options.
|
95
105
|
# Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
|
96
106
|
# @option options [ Hash ] :time_series Create a time-series collection.
|
97
|
-
# See https://
|
107
|
+
# See https://mongodb.com/docs/manual/core/timeseries-collections/ for more
|
98
108
|
# information about time-series collection.
|
99
109
|
# @option options [ Integer ] :expire_after Number indicating
|
100
110
|
# after how many seconds old time-series data should be deleted.
|
111
|
+
# @options clustered_index [ Hash ] :clustered_index Create a clustered index.
|
112
|
+
# This option specifies how this collection should be clustered on _id.
|
113
|
+
# See https://www.mongodb.com/docs/v5.3/reference/method/db.createCollection/#std-label-db.createCollection.clusteredIndex
|
114
|
+
# for more information about this option.
|
101
115
|
#
|
102
116
|
# @since 2.0.0
|
103
117
|
def initialize(database, name, options = {})
|
@@ -241,6 +255,12 @@ module Mongo
|
|
241
255
|
# @option opts [ Hash ] :time_series Create a time-series collection.
|
242
256
|
# @option opts [ Integer ] :expire_after Number indicating
|
243
257
|
# after how many seconds old time-series data should be deleted.
|
258
|
+
# @option opts [ Hash ] :change_stream_pre_and_post_images Used to enable
|
259
|
+
# pre- and post-images on the created collection.
|
260
|
+
# @option opts [ Hash ] :encrypted_fields Hash describing encrypted fields
|
261
|
+
# for queryable encryption.
|
262
|
+
# @option opts [ Hash ] :validator Hash describing document validation
|
263
|
+
# options for the collection.
|
244
264
|
#
|
245
265
|
# @return [ Result ] The result of the command.
|
246
266
|
#
|
@@ -253,9 +273,9 @@ module Mongo
|
|
253
273
|
options = Hash[self.options.reject do |key, value|
|
254
274
|
%w(read read_preference read_concern).include?(key.to_s)
|
255
275
|
end]
|
256
|
-
options.update(opts.slice(*
|
257
|
-
# Converting Ruby
|
258
|
-
|
276
|
+
options.update(opts.slice(*CREATE_COLLECTION_OPTIONS.keys))
|
277
|
+
# Converting Ruby options to server style.
|
278
|
+
CREATE_COLLECTION_OPTIONS.each do |ruby_key, server_key|
|
259
279
|
if options.key?(ruby_key)
|
260
280
|
options[server_key] = options.delete(ruby_key)
|
261
281
|
end
|
@@ -271,20 +291,24 @@ module Mongo
|
|
271
291
|
end
|
272
292
|
|
273
293
|
context = Operation::Context.new(client: client, session: session)
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
294
|
+
maybe_create_qe_collections(opts[:encrypted_fields], client, session) do |encrypted_fields|
|
295
|
+
Operation::Create.new(
|
296
|
+
selector: operation,
|
297
|
+
db_name: database.name,
|
298
|
+
write_concern: write_concern,
|
299
|
+
session: session,
|
300
|
+
# Note that these are collection options, collation isn't
|
301
|
+
# taken from options passed to the create method.
|
302
|
+
collation: options[:collation] || options['collation'],
|
303
|
+
encrypted_fields: encrypted_fields,
|
304
|
+
validator: options[:validator],
|
305
|
+
).execute(next_primary(nil, session), context: context)
|
306
|
+
end
|
283
307
|
end
|
284
308
|
end
|
285
309
|
|
286
310
|
# Drop the collection. Will also drop all indexes associated with the
|
287
|
-
# collection.
|
311
|
+
# collection, as well as associated queryable encryption collections.
|
288
312
|
#
|
289
313
|
# @note An error returned if the collection doesn't exist is suppressed.
|
290
314
|
#
|
@@ -301,25 +325,22 @@ module Mongo
|
|
301
325
|
# @since 2.0.0
|
302
326
|
def drop(opts = {})
|
303
327
|
client.send(:with_session, opts) do |session|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
328
|
+
maybe_drop_emm_collections(opts[:encrypted_fields], client, session) do
|
329
|
+
temp_write_concern = write_concern
|
330
|
+
write_concern = if opts[:write_concern]
|
331
|
+
WriteConcern.get(opts[:write_concern])
|
332
|
+
else
|
333
|
+
temp_write_concern
|
334
|
+
end
|
335
|
+
context = Operation::Context.new(client: client, session: session)
|
336
|
+
operation = Operation::Drop.new({
|
337
|
+
selector: { :drop => name },
|
338
|
+
db_name: database.name,
|
339
|
+
write_concern: write_concern,
|
340
|
+
session: session,
|
341
|
+
})
|
342
|
+
do_drop(operation, session, context)
|
309
343
|
end
|
310
|
-
Operation::Drop.new({
|
311
|
-
selector: { :drop => name },
|
312
|
-
db_name: database.name,
|
313
|
-
write_concern: write_concern,
|
314
|
-
session: session,
|
315
|
-
}).execute(next_primary(nil, session), context: Operation::Context.new(client: client, session: session))
|
316
|
-
end
|
317
|
-
rescue Error::OperationFailure => ex
|
318
|
-
# NamespaceNotFound
|
319
|
-
if ex.code == 26 || ex.code.nil? && ex.message =~ /ns not found/
|
320
|
-
false
|
321
|
-
else
|
322
|
-
raise
|
323
344
|
end
|
324
345
|
end
|
325
346
|
|
@@ -343,7 +364,8 @@ module Mongo
|
|
343
364
|
# @option options [ Integer ] :batch_size The number of documents returned in each batch
|
344
365
|
# of results from MongoDB.
|
345
366
|
# @option options [ Hash ] :collation The collation to use.
|
346
|
-
# @option options [
|
367
|
+
# @option options [ Object ] :comment A user-provided
|
368
|
+
# comment to attach to this command.
|
347
369
|
# @option options [ :tailable, :tailable_await ] :cursor_type The type of cursor to use.
|
348
370
|
# @option options [ Integer ] :limit The max number of docs to return from the query.
|
349
371
|
# @option options [ Integer ] :max_time_ms
|
@@ -386,7 +408,8 @@ module Mongo
|
|
386
408
|
# @option options [ true, false ] :bypass_document_validation Whether or
|
387
409
|
# not to skip document level validation.
|
388
410
|
# @option options [ Hash ] :collation The collation to use.
|
389
|
-
# @option options [
|
411
|
+
# @option options [ Object ] :comment A user-provided
|
412
|
+
# comment to attach to this command.
|
390
413
|
# @option options [ String ] :hint The index to use for the aggregation.
|
391
414
|
# @option options [ Hash ] :let Mapping of variables to use in the pipeline.
|
392
415
|
# See the server documentation for details.
|
@@ -416,11 +439,35 @@ module Mongo
|
|
416
439
|
# @param [ Array<Hash> ] pipeline Optional additional filter operators.
|
417
440
|
# @param [ Hash ] options The change stream options.
|
418
441
|
#
|
419
|
-
# @option options [ String ] :full_document Allowed values:
|
420
|
-
#
|
421
|
-
#
|
422
|
-
#
|
423
|
-
#
|
442
|
+
# @option options [ String ] :full_document Allowed values: nil, 'default',
|
443
|
+
# 'updateLookup', 'whenAvailable', 'required'.
|
444
|
+
#
|
445
|
+
# The default is to not send a value (i.e. nil), which is equivalent to
|
446
|
+
# 'default'. By default, the change notification for partial updates will
|
447
|
+
# include a delta describing the changes to the document.
|
448
|
+
#
|
449
|
+
# When set to 'updateLookup', the change notification for partial updates
|
450
|
+
# will include both a delta describing the changes to the document as well
|
451
|
+
# as a copy of the entire document that was changed from some time after
|
452
|
+
# the change occurred.
|
453
|
+
#
|
454
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
455
|
+
# post-image of the modified document for replace and update change events
|
456
|
+
# if the post-image for this event is available.
|
457
|
+
#
|
458
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
459
|
+
# an error is raised if the post-image is not available.
|
460
|
+
# @option options [ String ] :full_document_before_change Allowed values: nil,
|
461
|
+
# 'whenAvailable', 'required', 'off'.
|
462
|
+
#
|
463
|
+
# The default is to not send a value (i.e. nil), which is equivalent to 'off'.
|
464
|
+
#
|
465
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
466
|
+
# pre-image of the modified document for replace, update, and delete change
|
467
|
+
# events if it is available.
|
468
|
+
#
|
469
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
470
|
+
# an error is raised if the pre-image is not available.
|
424
471
|
# @option options [ BSON::Document, Hash ] :resume_after Specifies the
|
425
472
|
# logical starting point for the new change stream.
|
426
473
|
# @option options [ Integer ] :max_await_time_ms The maximum amount of time
|
@@ -433,6 +480,8 @@ module Mongo
|
|
433
480
|
# changes that occurred at or after the specified timestamp. Any command run
|
434
481
|
# against the server will return a cluster time that can be used here.
|
435
482
|
# Only recognized by server versions 4.0+.
|
483
|
+
# @option options [ Object ] :comment A user-provided
|
484
|
+
# comment to attach to this command.
|
436
485
|
#
|
437
486
|
# @note A change stream only allows 'majority' read concern.
|
438
487
|
# @note This helper method is preferable to running a raw aggregation with
|
@@ -460,6 +509,8 @@ module Mongo
|
|
460
509
|
# @option options [ Hash ] :read The read preference options.
|
461
510
|
# @option options [ Hash ] :collation The collation to use.
|
462
511
|
# @option options [ Session ] :session The session to use.
|
512
|
+
# @option options [ Object ] :comment A user-provided
|
513
|
+
# comment to attach to this command.
|
463
514
|
#
|
464
515
|
# @return [ Integer ] The document count.
|
465
516
|
#
|
@@ -493,6 +544,9 @@ module Mongo
|
|
493
544
|
# command to run.
|
494
545
|
# @option options :read [ Hash ] The read preference options.
|
495
546
|
# @option options :collation [ Hash ] The collation to use.
|
547
|
+
# @option options [ Session ] :session The session to use.
|
548
|
+
# @option options [ Object ] :comment A user-provided
|
549
|
+
# comment to attach to this command.
|
496
550
|
#
|
497
551
|
# @return [ Integer ] The document count.
|
498
552
|
#
|
@@ -509,9 +563,11 @@ module Mongo
|
|
509
563
|
#
|
510
564
|
# @param [ Hash ] options Options for the operation.
|
511
565
|
#
|
512
|
-
# @option
|
566
|
+
# @option options :max_time_ms [ Integer ] The maximum amount of time to allow
|
513
567
|
# the command to run for on the server.
|
514
|
-
# @option
|
568
|
+
# @option options [ Hash ] :read The read preference options.
|
569
|
+
# @option options [ Object ] :comment A user-provided
|
570
|
+
# comment to attach to this command.
|
515
571
|
#
|
516
572
|
# @return [ Integer ] The document count.
|
517
573
|
#
|
@@ -597,7 +653,8 @@ module Mongo
|
|
597
653
|
raise ArgumentError, "Document to be inserted cannot be nil"
|
598
654
|
end
|
599
655
|
|
600
|
-
|
656
|
+
context = Operation::Context.new(client: client, session: session)
|
657
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
601
658
|
Operation::Insert.new(
|
602
659
|
:documents => [ document ],
|
603
660
|
:db_name => database.name,
|
@@ -608,7 +665,8 @@ module Mongo
|
|
608
665
|
:id_generator => client.options[:id_generator],
|
609
666
|
:session => session,
|
610
667
|
:txn_num => txn_num,
|
611
|
-
|
668
|
+
:comment => opts[:comment]
|
669
|
+
).execute_with_connection(connection, context: context)
|
612
670
|
end
|
613
671
|
end
|
614
672
|
end
|
@@ -650,6 +708,8 @@ module Mongo
|
|
650
708
|
# @option options [ true, false ] :bypass_document_validation Whether or
|
651
709
|
# not to skip document level validation.
|
652
710
|
# @option options [ Session ] :session The session to use for the set of operations.
|
711
|
+
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
712
|
+
# See the server documentation for details.
|
653
713
|
#
|
654
714
|
# @return [ BulkWrite::Result ] The result of the operation.
|
655
715
|
#
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongo
|
4
|
+
module Config
|
5
|
+
|
6
|
+
# Encapsulates logic for setting options.
|
7
|
+
module Options
|
8
|
+
|
9
|
+
# Get the defaults or initialize a new empty hash.
|
10
|
+
#
|
11
|
+
# @return [ Hash ] The default options.
|
12
|
+
def defaults
|
13
|
+
@defaults ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
# Define a configuration option with a default.
|
17
|
+
#
|
18
|
+
# @param [ Symbol ] name The name of the configuration option.
|
19
|
+
# @param [ Hash ] options Extras for the option.
|
20
|
+
#
|
21
|
+
# @option options [ Object ] :default The default value.
|
22
|
+
def option(name, options = {})
|
23
|
+
defaults[name] = settings[name] = options[:default]
|
24
|
+
|
25
|
+
class_eval do
|
26
|
+
# log_level accessor is defined specially below
|
27
|
+
define_method(name) do
|
28
|
+
settings[name]
|
29
|
+
end
|
30
|
+
|
31
|
+
define_method("#{name}=") do |value|
|
32
|
+
settings[name] = value
|
33
|
+
end
|
34
|
+
|
35
|
+
define_method("#{name}?") do
|
36
|
+
!!send(name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Reset the configuration options to the defaults.
|
42
|
+
#
|
43
|
+
# @example Reset the configuration options.
|
44
|
+
# config.reset
|
45
|
+
#
|
46
|
+
# @return [ Hash ] The defaults.
|
47
|
+
def reset
|
48
|
+
settings.replace(defaults)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Get the settings or initialize a new empty hash.
|
52
|
+
#
|
53
|
+
# @example Get the settings.
|
54
|
+
# options.settings
|
55
|
+
#
|
56
|
+
# @return [ Hash ] The setting options.
|
57
|
+
def settings
|
58
|
+
@settings ||= {}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mongo
|
4
|
+
module Config
|
5
|
+
module Validators
|
6
|
+
|
7
|
+
# Validator for configuration options.
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
module Option
|
11
|
+
extend self
|
12
|
+
|
13
|
+
# Validate a configuration option.
|
14
|
+
#
|
15
|
+
# @example Validate a configuration option.
|
16
|
+
#
|
17
|
+
# @param [ String ] option The name of the option.
|
18
|
+
def validate(option)
|
19
|
+
unless Config.settings.keys.include?(option.to_sym)
|
20
|
+
raise Mongo::Error::InvalidConfigOption.new(option)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/mongo/config.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "mongo/config/options"
|
4
|
+
require "mongo/config/validators/option"
|
5
|
+
|
6
|
+
module Mongo
|
7
|
+
|
8
|
+
# This module defines configuration options for Mongo.
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
module Config
|
12
|
+
extend Forwardable
|
13
|
+
extend Options
|
14
|
+
extend self
|
15
|
+
|
16
|
+
option :validate_update_replace, default: false
|
17
|
+
|
18
|
+
# Set the configuration options.
|
19
|
+
#
|
20
|
+
# @example Set the options.
|
21
|
+
# config.options = { validate_update_replace: true }
|
22
|
+
#
|
23
|
+
# @param [ Hash ] options The configuration options.
|
24
|
+
def options=(options)
|
25
|
+
options.each_pair do |option, value|
|
26
|
+
Validators::Option.validate(option)
|
27
|
+
send("#{option}=", value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -32,6 +32,7 @@ module Mongo
|
|
32
32
|
|
33
33
|
attr_reader :mongocryptd_client
|
34
34
|
attr_reader :key_vault_client
|
35
|
+
attr_reader :metadata_client
|
35
36
|
attr_reader :options
|
36
37
|
|
37
38
|
# A Hash of default values for the :extra_options option
|
@@ -61,6 +62,22 @@ module Mongo
|
|
61
62
|
# auto-encryption. Default is false.
|
62
63
|
# @option options [ Hash | nil ] :extra_options Options related to spawning
|
63
64
|
# mongocryptd. These are set to default values if no option is passed in.
|
65
|
+
# @option options [ Hash ] :kms_providers A hash of key management service
|
66
|
+
# configuration information.
|
67
|
+
# @see Mongo::Crypt::KMS::Credentials for list of options for every
|
68
|
+
# supported provider.
|
69
|
+
# @note There may be more than one KMS provider specified.
|
70
|
+
# @option options [ Hash ] :kms_tls_options TLS options to connect to KMS
|
71
|
+
# providers. Keys of the hash should be KSM provider names; values
|
72
|
+
# should be hashes of TLS connection options. The options are equivalent
|
73
|
+
# to TLS connection options of Mongo::Client.
|
74
|
+
# @see Mongo::Client#initialize for list of TLS options.
|
75
|
+
# @option options [ Hash | nil ] :encrypted_fields_map maps a collection
|
76
|
+
# namespace to an encryptedFields.
|
77
|
+
# - Note: If a collection is present on both the encryptedFieldsMap
|
78
|
+
# and schemaMap, an error will be raised.
|
79
|
+
# @option options [ Boolean | nil ] :bypass_query_analysis When true
|
80
|
+
# disables automatic analysis of outgoing commands.
|
64
81
|
#
|
65
82
|
# @raise [ ArgumentError ] If required options are missing or incorrectly
|
66
83
|
# formatted.
|
@@ -68,18 +85,20 @@ module Mongo
|
|
68
85
|
@options = set_default_options(options).freeze
|
69
86
|
|
70
87
|
@crypt_handle = Crypt::Handle.new(
|
71
|
-
@options[:kms_providers],
|
72
|
-
|
88
|
+
Crypt::KMS::Credentials.new(@options[:kms_providers]),
|
89
|
+
Crypt::KMS::Validations.validate_tls_options(@options[:kms_tls_options]),
|
90
|
+
schema_map: @options[:schema_map],
|
91
|
+
encrypted_fields_map: @options[:encrypted_fields_map],
|
92
|
+
bypass_query_analysis: @options[:bypass_query_analysis]
|
73
93
|
)
|
74
94
|
|
75
|
-
@key_vault_client = @options[:key_vault_client]
|
76
|
-
|
77
95
|
# Set server selection timeout to 1 to prevent the client waiting for a
|
78
96
|
# long timeout before spawning mongocryptd
|
79
97
|
@mongocryptd_client = Client.new(
|
80
98
|
@options[:extra_options][:mongocryptd_uri],
|
81
99
|
monitoring_io: @options[:client].options[:monitoring_io],
|
82
100
|
server_selection_timeout: 10,
|
101
|
+
database: @options[:client].options[:database]
|
83
102
|
)
|
84
103
|
|
85
104
|
begin
|
@@ -88,13 +107,14 @@ module Mongo
|
|
88
107
|
mongocryptd_client: @mongocryptd_client,
|
89
108
|
key_vault_namespace: @options[:key_vault_namespace],
|
90
109
|
key_vault_client: @key_vault_client,
|
110
|
+
metadata_client: @metadata_client,
|
91
111
|
mongocryptd_options: @options[:extra_options]
|
92
112
|
)
|
93
113
|
rescue
|
94
114
|
begin
|
95
115
|
@mongocryptd_client.close
|
96
116
|
rescue => e
|
97
|
-
log_warn("
|
117
|
+
log_warn("Error closing mongocryptd client in auto encrypter's constructor: #{e.class}: #{e}")
|
98
118
|
# Drop this exception so that the original exception is raised
|
99
119
|
end
|
100
120
|
raise
|
@@ -173,10 +193,63 @@ module Mongo
|
|
173
193
|
end
|
174
194
|
|
175
195
|
opts[:bypass_auto_encryption] ||= false
|
176
|
-
opts
|
196
|
+
set_or_create_clients(opts)
|
197
|
+
opts[:key_vault_client] = @key_vault_client
|
177
198
|
|
178
199
|
Options::Redacted.new(opts).merge(extra_options: extra_options)
|
179
200
|
end
|
201
|
+
|
202
|
+
# Create additional clients for auto encryption, if necessary
|
203
|
+
#
|
204
|
+
# @param [ Hash ] options Auto encryption options.
|
205
|
+
def set_or_create_clients(options)
|
206
|
+
client = options[:client]
|
207
|
+
@key_vault_client = if options[:key_vault_client]
|
208
|
+
options[:key_vault_client]
|
209
|
+
# https://jira.mongodb.org/browse/RUBY-3010
|
210
|
+
# https://jira.mongodb.org/browse/RUBY-3011
|
211
|
+
# Specification requires to use existing client when connection pool
|
212
|
+
# size is unlimited (0). Ruby driver does not support unlimited pool
|
213
|
+
# size.
|
214
|
+
# elsif client.options[:max_pool_size] == 0
|
215
|
+
# client
|
216
|
+
else
|
217
|
+
internal_client(client)
|
218
|
+
end
|
219
|
+
|
220
|
+
@metadata_client = if options[:bypass_auto_encryption]
|
221
|
+
nil
|
222
|
+
# Specification requires to use existing client when connection pool
|
223
|
+
# size is unlimited (0). Ruby driver does not support unlimited pool
|
224
|
+
# size.
|
225
|
+
# https://jira.mongodb.org/browse/RUBY-3010
|
226
|
+
# https://jira.mongodb.org/browse/RUBY-3011
|
227
|
+
# elsif client.options[:max_pool_size] == 0
|
228
|
+
# client
|
229
|
+
else
|
230
|
+
internal_client(client)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
# Creates or return already created internal client to be used for
|
235
|
+
# auto encryption.
|
236
|
+
#
|
237
|
+
# @param [ Mongo::Client ] client A client connected to the
|
238
|
+
# encrypted collection.
|
239
|
+
#
|
240
|
+
# @return [ Mongo::Client ] Client to be used as internal client for
|
241
|
+
# auto encryption.
|
242
|
+
def internal_client(client)
|
243
|
+
@internal_client ||= client.with(
|
244
|
+
auto_encryption_options: nil,
|
245
|
+
# Specification requires that the internal client's connection pool
|
246
|
+
# size is unlimited (0). Ruby driver does not support unlimited pool
|
247
|
+
# size.
|
248
|
+
# https://jira.mongodb.org/browse/RUBY-3010
|
249
|
+
# https://jira.mongodb.org/browse/RUBY-3011
|
250
|
+
# max_pool_size: 0
|
251
|
+
)
|
252
|
+
end
|
180
253
|
end
|
181
254
|
end
|
182
255
|
end
|