mongo 2.15.0 → 2.18.1
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 +22 -38
- data/lib/mongo/auth/aws/request.rb +0 -1
- 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 +115 -29
- data/lib/mongo/client.rb +182 -22
- data/lib/mongo/client_encryption.rb +113 -10
- data/lib/mongo/cluster/periodic_executor.rb +4 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +98 -43
- data/lib/mongo/cluster/sdam_flow.rb +9 -3
- data/lib/mongo/cluster/topology/base.rb +13 -9
- data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
- data/lib/mongo/cluster/topology.rb +28 -8
- data/lib/mongo/cluster.rb +162 -79
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +68 -22
- data/lib/mongo/collection/view/builder/aggregation.rb +16 -17
- data/lib/mongo/collection/view/builder/map_reduce.rb +15 -49
- data/lib/mongo/collection/view/builder.rb +0 -4
- data/lib/mongo/collection/view/change_stream.rb +66 -20
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +64 -30
- data/lib/mongo/collection/view/map_reduce.rb +72 -24
- data/lib/mongo/collection/view/readable.rb +106 -70
- data/lib/mongo/collection/view/writable.rb +296 -177
- data/lib/mongo/collection/view.rb +15 -21
- data/lib/mongo/collection.rb +141 -53
- data/lib/mongo/config/options.rb +62 -0
- data/lib/mongo/config/validators/option.rb +26 -0
- data/lib/mongo/config.rb +42 -0
- data/lib/mongo/crypt/auto_encrypter.rb +136 -14
- data/lib/mongo/crypt/binding.rb +513 -144
- data/lib/mongo/crypt/context.rb +5 -2
- data/lib/mongo/crypt/data_key_context.rb +12 -104
- data/lib/mongo/crypt/encryption_io.rb +94 -60
- data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
- data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
- data/lib/mongo/crypt/handle.rb +160 -86
- data/lib/mongo/crypt/hooks.rb +25 -2
- data/lib/mongo/crypt/kms/aws.rb +136 -0
- data/lib/mongo/crypt/kms/azure.rb +144 -0
- data/lib/mongo/crypt/kms/credentials.rb +81 -0
- data/lib/mongo/crypt/kms/gcp.rb +189 -0
- data/lib/mongo/crypt/kms/kmip.rb +116 -0
- data/lib/mongo/crypt/kms/local.rb +82 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +117 -0
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
- data/lib/mongo/crypt/status.rb +8 -2
- data/lib/mongo/crypt.rb +3 -0
- data/lib/mongo/cursor/kill_spec.rb +76 -0
- data/lib/mongo/cursor.rb +92 -36
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +63 -19
- data/lib/mongo/dbref.rb +1 -105
- data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
- 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/missing_file_chunk.rb +8 -2
- data/lib/mongo/error/missing_service_id.rb +26 -0
- data/lib/mongo/error/no_service_connection_available.rb +49 -0
- data/lib/mongo/error/notable.rb +14 -0
- data/lib/mongo/error/operation_failure.rb +34 -86
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/error/session_not_materialized.rb +29 -0
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +31 -0
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +30 -0
- data/lib/mongo/error.rb +10 -37
- data/lib/mongo/grid/fs_bucket.rb +21 -2
- data/lib/mongo/grid/stream/read.rb +6 -0
- data/lib/mongo/id.rb +7 -5
- data/lib/mongo/index/view.rb +45 -48
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +7 -4
- data/lib/mongo/monitoring/event/command_failed.rb +9 -3
- data/lib/mongo/monitoring/event/command_started.rb +3 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
- data/lib/mongo/monitoring/publishable.rb +11 -7
- data/lib/mongo/operation/aggregate/command.rb +8 -0
- 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 +37 -1
- data/lib/mongo/operation/count/command.rb +6 -0
- data/lib/mongo/operation/count/op_msg.rb +9 -0
- data/lib/mongo/operation/create/command.rb +7 -1
- data/lib/mongo/operation/create/op_msg.rb +10 -0
- data/lib/mongo/operation/create_index/command.rb +17 -1
- data/lib/mongo/operation/create_index/op_msg.rb +18 -4
- data/lib/mongo/operation/delete/command.rb +6 -3
- data/lib/mongo/operation/delete/op_msg.rb +10 -1
- data/lib/mongo/operation/delete.rb +0 -1
- data/lib/mongo/operation/distinct/command.rb +6 -0
- data/lib/mongo/operation/distinct/op_msg.rb +10 -0
- data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
- data/lib/mongo/operation/explain/command.rb +13 -1
- data/lib/mongo/operation/explain/legacy.rb +12 -5
- data/lib/mongo/operation/explain/op_msg.rb +9 -1
- data/lib/mongo/operation/find/builder/command.rb +111 -0
- data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +10 -14
- data/lib/mongo/operation/find/builder/legacy.rb +123 -0
- data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +31 -25
- data/lib/mongo/{cursor → operation/find}/builder.rb +4 -4
- data/lib/mongo/operation/find/command.rb +9 -0
- data/lib/mongo/operation/find/legacy.rb +10 -1
- data/lib/mongo/operation/find/op_msg.rb +12 -0
- data/lib/mongo/operation/find.rb +1 -0
- data/lib/mongo/operation/get_more/command.rb +1 -0
- data/lib/mongo/operation/get_more/command_builder.rb +42 -0
- data/lib/mongo/operation/get_more/op_msg.rb +1 -0
- data/lib/mongo/operation/get_more.rb +1 -0
- 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/command.rb +8 -0
- data/lib/mongo/operation/kill_cursors/{legacy.rb → command_builder.rb} +6 -11
- data/lib/mongo/operation/kill_cursors/op_msg.rb +10 -0
- data/lib/mongo/operation/kill_cursors.rb +1 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
- data/lib/mongo/operation/map_reduce/command.rb +8 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +16 -0
- data/lib/mongo/operation/result.rb +27 -5
- data/lib/mongo/operation/shared/executable.rb +36 -3
- data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
- data/lib/mongo/operation/shared/read_preference_supported.rb +3 -1
- data/lib/mongo/operation/shared/response_handling.rb +7 -5
- data/lib/mongo/operation/shared/sessions_supported.rb +35 -15
- data/lib/mongo/operation/shared/specifiable.rb +11 -29
- data/lib/mongo/operation/shared/validatable.rb +87 -0
- data/lib/mongo/operation/shared/write.rb +18 -12
- data/lib/mongo/operation/update/command.rb +6 -3
- data/lib/mongo/operation/update/op_msg.rb +9 -4
- data/lib/mongo/operation/update.rb +0 -1
- data/lib/mongo/operation/{delete/legacy.rb → write_command/command.rb} +17 -23
- data/lib/mongo/operation/write_command/op_msg.rb +43 -0
- data/lib/mongo/operation/write_command.rb +32 -0
- data/lib/mongo/operation.rb +10 -0
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/msg.rb +21 -1
- data/lib/mongo/protocol/query.rb +35 -18
- data/lib/mongo/protocol.rb +1 -0
- data/lib/mongo/query_cache.rb +27 -2
- data/lib/mongo/retryable.rb +78 -30
- data/lib/mongo/server/connection.rb +58 -3
- data/lib/mongo/server/connection_base.rb +14 -1
- data/lib/mongo/server/connection_common.rb +41 -1
- data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
- data/lib/mongo/server/connection_pool.rb +144 -43
- data/lib/mongo/server/description/features.rb +22 -17
- data/lib/mongo/server/description/load_balancer.rb +33 -0
- data/lib/mongo/server/description.rb +90 -6
- data/lib/mongo/server/monitor/connection.rb +16 -10
- data/lib/mongo/server/monitor.rb +27 -14
- data/lib/mongo/server/pending_connection.rb +47 -31
- data/lib/mongo/server/push_monitor.rb +21 -2
- data/lib/mongo/server.rb +78 -27
- data/lib/mongo/server_selector/base.rb +31 -5
- data/lib/mongo/session/session_pool.rb +19 -0
- data/lib/mongo/session.rb +142 -27
- data/lib/mongo/socket/ocsp_cache.rb +2 -3
- data/lib/mongo/socket/ocsp_verifier.rb +7 -39
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/socket.rb +1 -5
- data/lib/mongo/srv/resolver.rb +24 -3
- data/lib/mongo/uri/options_mapper.rb +3 -0
- data/lib/mongo/uri/srv_protocol.rb +7 -9
- data/lib/mongo/uri.rb +38 -0
- data/lib/mongo/utils.rb +0 -13
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +22 -0
- data/mongo.gemspec +11 -5
- data/spec/README.md +23 -5
- data/spec/integration/auth_spec.rb +31 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- 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 +17 -1
- data/spec/integration/change_stream_spec.rb +9 -8
- data/spec/integration/client_construction_spec.rb +128 -8
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
- 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 +3 -3
- 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 +98 -8
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
- 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 +436 -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/unique_index_on_key_alt_names_prose_spec.rb +85 -0
- data/spec/integration/client_side_encryption/views_spec.rb +1 -1
- data/spec/integration/client_spec.rb +2 -0
- data/spec/integration/client_update_spec.rb +2 -2
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +1 -1
- data/spec/integration/connection_spec.rb +52 -35
- data/spec/integration/crud_spec.rb +186 -1
- data/spec/integration/cursor_pinning_spec.rb +121 -0
- data/spec/integration/cursor_reaping_spec.rb +8 -4
- data/spec/integration/fork_reconnect_spec.rb +16 -13
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/grid_fs_bucket_spec.rb +3 -3
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +77 -0
- data/spec/integration/ocsp_verifier_spec.rb +3 -0
- data/spec/integration/query_cache_spec.rb +240 -32
- data/spec/integration/query_cache_transactions_spec.rb +1 -1
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/read_preference_spec.rb +17 -13
- data/spec/integration/reconnect_spec.rb +32 -12
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
- data/spec/integration/sdam_error_handling_spec.rb +5 -3
- data/spec/integration/sdam_events_spec.rb +75 -19
- data/spec/integration/sdam_prose_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +3 -1
- data/spec/integration/server_selector_spec.rb +22 -5
- data/spec/integration/server_spec.rb +2 -0
- 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 +39 -1
- data/spec/integration/srv_spec.rb +1 -0
- data/spec/integration/step_down_spec.rb +21 -5
- data/spec/integration/transaction_pinning_spec.rb +120 -0
- data/spec/integration/versioned_api_examples_spec.rb +52 -1
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/lite_spec_helper.rb +27 -11
- data/spec/mongo/address/ipv6_spec.rb +7 -0
- data/spec/mongo/address/unix_spec.rb +1 -0
- data/spec/mongo/address_spec.rb +7 -0
- data/spec/mongo/auth/cr_spec.rb +2 -3
- data/spec/mongo/auth/ldap_spec.rb +2 -3
- 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/auth/scram_spec.rb +2 -3
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +2 -3
- data/spec/mongo/bulk_write/result_spec.rb +15 -1
- data/spec/mongo/bulk_write_spec.rb +144 -23
- data/spec/mongo/client_construction_spec.rb +443 -35
- data/spec/mongo/client_encryption_spec.rb +10 -22
- data/spec/mongo/client_spec.rb +303 -5
- data/spec/mongo/cluster/cursor_reaper_spec.rb +63 -23
- data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
- data/spec/mongo/cluster_spec.rb +33 -36
- data/spec/mongo/collection/view/aggregation_spec.rb +178 -83
- data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/map_reduce_spec.rb +31 -2
- data/spec/mongo/collection/view/readable_spec.rb +661 -1
- data/spec/mongo/collection/view/writable_spec.rb +144 -32
- data/spec/mongo/collection_crud_spec.rb +70 -15
- data/spec/mongo/collection_ddl_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +33 -1
- 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 +256 -5
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/binding/context_spec.rb +67 -17
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
- data/spec/mongo/crypt/binding/version_spec.rb +33 -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 +94 -1
- data/spec/mongo/crypt/handle_spec.rb +172 -156
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
- data/spec/mongo/crypt/kms_spec.rb +59 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
- data/spec/mongo/cursor_spec.rb +104 -7
- data/spec/mongo/database_spec.rb +81 -16
- data/spec/mongo/error/operation_failure_heavy_spec.rb +50 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
- data/spec/mongo/grid/stream/write_spec.rb +3 -9
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/index/view_spec.rb +127 -2
- data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +14 -5
- data/spec/mongo/operation/delete_spec.rb +0 -30
- data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
- data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +1 -0
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +19 -11
- data/spec/mongo/operation/insert_spec.rb +0 -32
- data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +26 -1
- data/spec/mongo/operation/result_spec.rb +20 -0
- data/spec/mongo/operation/update/bulk_spec.rb +1 -1
- data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
- 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 +172 -2
- 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 +76 -13
- data/spec/mongo/server/connection_pool_spec.rb +178 -45
- data/spec/mongo/server/connection_spec.rb +186 -200
- data/spec/mongo/server/description/features_spec.rb +24 -0
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +22 -0
- data/spec/mongo/server/monitor_spec.rb +4 -3
- data/spec/mongo/server/push_monitor_spec.rb +95 -0
- data/spec/mongo/server_selector_spec.rb +136 -15
- data/spec/mongo/session/session_pool_spec.rb +42 -10
- data/spec/mongo/session_spec.rb +26 -6
- data/spec/mongo/session_transaction_spec.rb +15 -29
- data/spec/mongo/socket/ssl_spec.rb +42 -63
- data/spec/mongo/socket/unix_spec.rb +1 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
- data/spec/mongo/uri_option_parsing_spec.rb +38 -5
- data/spec/mongo/uri_spec.rb +25 -0
- data/spec/mongo/utils_spec.rb +0 -14
- data/spec/runners/auth.rb +1 -1
- data/spec/runners/change_streams/spec.rb +1 -1
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/cmap.rb +2 -2
- data/spec/runners/command_monitoring.rb +1 -1
- data/spec/runners/connection_string.rb +16 -4
- data/spec/runners/crud/operation.rb +17 -6
- data/spec/runners/crud/requirement.rb +10 -4
- data/spec/runners/crud/spec.rb +6 -3
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/verifier.rb +7 -2
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/gridfs.rb +1 -1
- data/spec/runners/read_write_concern_document.rb +1 -1
- data/spec/runners/sdam.rb +3 -2
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/server_selection_rtt.rb +1 -1
- data/spec/runners/transactions/spec.rb +2 -2
- data/spec/runners/transactions/test.rb +21 -18
- data/spec/runners/transactions.rb +11 -8
- data/spec/runners/unified/assertions.rb +95 -15
- data/spec/runners/unified/change_stream_operations.rb +12 -0
- data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
- data/spec/runners/unified/crud_operations.rb +143 -26
- data/spec/runners/unified/ddl_operations.rb +74 -1
- data/spec/runners/unified/entity_map.rb +3 -3
- data/spec/runners/unified/error.rb +2 -1
- data/spec/runners/unified/event_subscriber.rb +2 -2
- data/spec/runners/unified/grid_fs_operations.rb +21 -0
- data/spec/runners/unified/support_operations.rb +21 -5
- data/spec/runners/unified/test.rb +96 -8
- data/spec/runners/unified/test_group.rb +1 -1
- data/spec/runners/unified.rb +10 -3
- data/spec/shared/lib/mrss/cluster_config.rb +6 -1
- data/spec/shared/lib/mrss/constraints.rb +21 -22
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
- 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 +61 -58
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +114 -39
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/solo/clean_exit_spec.rb +5 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
- data/spec/spec_tests/cmap_spec.rb +4 -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 +1071 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -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/create-and-createIndexes.yml +58 -0
- 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/unified/addKeyAltName.yml +194 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
- data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
- 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/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
- 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/bulkWrite.yml +68 -0
- data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -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/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
- data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
- data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -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-write-readPreference.yml +155 -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-write-readPreference.yml +151 -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 +93 -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 +91 -0
- data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -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-let.yml +71 -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 +86 -0
- 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/findOneAndReplace-let.yml +94 -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/findOneAndUpdate-let.yml +96 -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 +107 -0
- 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 +102 -0
- 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/gridfs_unified/delete.yml +198 -0
- data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
- data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
- data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
- data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
- data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
- data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
- data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
- data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
- data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
- data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
- data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +1 -1
- 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/{mapReduce.yml → legacy/mapReduce.yml} +3 -1
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
- data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
- 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/sdam/load-balanced/discover_load_balancer.yml +25 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +9 -15
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +7 -15
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +10 -14
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
- 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/loadBalanced-replicaSet-errors.yml +6 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -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/encoded-userinfo-and-db.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.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/replica-set/uri-with-admin-database.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -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 +75 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
- 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.yml +7 -7
- data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -7
- data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
- data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
- data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
- 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/connection-options.yml +60 -0
- 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/gridfs_unified_spec.rb +13 -0
- data/spec/spec_tests/load_balancers_spec.rb +15 -0
- data/spec/spec_tests/retryable_reads_spec.rb +6 -3
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +5 -2
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/sdam_integration_spec.rb +1 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
- data/spec/spec_tests/sdam_spec.rb +1 -1
- data/spec/spec_tests/seed_list_discovery_spec.rb +127 -0
- data/spec/spec_tests/sessions_unified_spec.rb +13 -0
- data/spec/spec_tests/unified_spec.rb +6 -1
- data/spec/spec_tests/uri_options_spec.rb +4 -4
- data/spec/stress/connection_pool_timing_spec.rb +3 -2
- data/spec/stress/fork_reconnect_stress_spec.rb +4 -7
- data/spec/stress/push_monitor_close_spec.rb +44 -0
- data/spec/support/authorization.rb +1 -1
- data/spec/support/background_thread_registry.rb +3 -13
- data/spec/support/certificates/atlas-ocsp-ca.crt +81 -96
- data/spec/support/certificates/atlas-ocsp.crt +125 -125
- data/spec/support/certificates/retrieve-atlas-cert +38 -0
- data/spec/support/cluster_tools.rb +1 -1
- data/spec/support/common_shortcuts.rb +24 -3
- 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 +258 -13
- data/spec/support/macros.rb +28 -0
- data/spec/support/matchers.rb +13 -0
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/shared/auth_context.rb +16 -0
- data/spec/support/shared/scram_conversation.rb +2 -1
- data/spec/support/shared/session.rb +15 -9
- data/spec/support/spec_config.rb +100 -12
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +57 -5
- data.tar.gz.sig +0 -0
- metadata +778 -381
- metadata.gz.sig +0 -0
- data/lib/mongo/collection/view/builder/find_command.rb +0 -173
- data/lib/mongo/collection/view/builder/op_query.rb +0 -94
- data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
- data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
- 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 -68
- data/lib/mongo/server/context.rb +0 -72
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -44
- data/spec/runners/unified/using_hash.rb +0 -34
- data/spec/spec_tests/change_streams_spec.rb +0 -93
- data/spec/spec_tests/command_monitoring_spec.rb +0 -71
- 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/command_monitoring/bulkWrite.yml +0 -49
- data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
- data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
- data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
- data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
- data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
- data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
- data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
- 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/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
- data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/event_subscriber.rb +0 -221
- data/spec/support/session_registry.rb +0 -55
- /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/{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/{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_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
- /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.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.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.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.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.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.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.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.yml → legacy/updateOne.yml} +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
- /data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
data/lib/mongo/client.rb
CHANGED
@@ -67,6 +67,7 @@ module Mongo
|
|
67
67
|
:database,
|
68
68
|
:heartbeat_frequency,
|
69
69
|
:id_generator,
|
70
|
+
:load_balanced,
|
70
71
|
:local_threshold,
|
71
72
|
:logger,
|
72
73
|
:log_prefix,
|
@@ -91,6 +92,8 @@ module Mongo
|
|
91
92
|
:server_api,
|
92
93
|
:server_selection_timeout,
|
93
94
|
:socket_timeout,
|
95
|
+
:srv_max_hosts,
|
96
|
+
:srv_service_name,
|
94
97
|
:ssl,
|
95
98
|
:ssl_ca_cert,
|
96
99
|
:ssl_ca_cert_object,
|
@@ -243,7 +246,10 @@ module Mongo
|
|
243
246
|
# @option options [ Symbol ] :connect Deprecated - use :direct_connection
|
244
247
|
# option instead of this option. The connection method to use. This
|
245
248
|
# forces the cluster to behave in the specified way instead of
|
246
|
-
# auto-discovering. One of :direct, :replica_set, :sharded
|
249
|
+
# auto-discovering. One of :direct, :replica_set, :sharded,
|
250
|
+
# :load_balanced. If :connect is set to :load_balanced, the driver
|
251
|
+
# will behave as if the server is a load balancer even if it isn't
|
252
|
+
# connected to a load balancer.
|
247
253
|
# @option options [ Float ] :connect_timeout The timeout, in seconds, to
|
248
254
|
# attempt a connection.
|
249
255
|
# @option options [ String ] :database The database to connect to.
|
@@ -251,6 +257,8 @@ module Mongo
|
|
251
257
|
# for the server monitor to refresh its description via hello.
|
252
258
|
# @option options [ Object ] :id_generator A custom object to generate ids
|
253
259
|
# for documents. Must respond to #generate.
|
260
|
+
# @option options [ true | false ] :load_balanced Whether to expect to
|
261
|
+
# connect to a load balancer.
|
254
262
|
# @option options [ Integer ] :local_threshold The local threshold boundary
|
255
263
|
# in seconds for selecting a near server for an operation.
|
256
264
|
# @option options [ Logger ] :logger A custom logger to use.
|
@@ -260,7 +268,7 @@ module Mongo
|
|
260
268
|
# @option options [ Integer ] :max_idle_time The maximum seconds a socket can remain idle
|
261
269
|
# since it has been checked in to the pool.
|
262
270
|
# @option options [ Integer ] :max_pool_size The maximum size of the
|
263
|
-
# connection pool.
|
271
|
+
# connection pool. Setting this option to zero creates an unlimited connection pool.
|
264
272
|
# @option options [ Integer ] :max_read_retries The maximum number of read
|
265
273
|
# retries when legacy read retries are in use.
|
266
274
|
# @option options [ Integer ] :max_write_retries The maximum number of write
|
@@ -334,6 +342,13 @@ module Mongo
|
|
334
342
|
# for selecting a server for an operation.
|
335
343
|
# @option options [ Float ] :socket_timeout The timeout, in seconds, to
|
336
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.
|
337
352
|
# @option options [ true, false ] :ssl Whether to use TLS.
|
338
353
|
# @option options [ String ] :ssl_ca_cert The file containing concatenated
|
339
354
|
# certificate authority certificates used to validate certs passed from the
|
@@ -414,11 +429,16 @@ module Mongo
|
|
414
429
|
# instance containing the encryption key vault
|
415
430
|
# - :key_vault_namespace => String, the namespace of the key vault in the
|
416
431
|
# format database.collection
|
417
|
-
# - :kms_providers => Hash, A hash of key management service configuration
|
418
|
-
# information. Valid hash keys are :
|
419
|
-
# 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.
|
420
439
|
# - :schema_map => Hash | nil, JSONSchema for one or more collections
|
421
|
-
# specifying which fields should be encrypted.
|
440
|
+
# specifying which fields should be encrypted. This option is
|
441
|
+
# mutually exclusive with :schema_map_path.
|
422
442
|
# - Note: Schemas supplied in the schema_map only apply to configuring
|
423
443
|
# automatic encryption for client side encryption. Other validation
|
424
444
|
# rules in the JSON schema will not be enforced by the driver and will
|
@@ -427,10 +447,21 @@ module Mongo
|
|
427
447
|
# JSON Schemas obtained from the server. It protects against a
|
428
448
|
# malicious server advertising a false JSON Schema, which could trick
|
429
449
|
# the client into sending unencrypted data that should be encrypted.
|
450
|
+
# - Note: If a collection is present on both the :encrypted_fields_map
|
451
|
+
# and :schema_map, an error will be raised.
|
452
|
+
# - :schema_map_path => String | nil A path to a file contains the JSON schema
|
453
|
+
# of the collection that stores auto encrypted documents. This option is
|
454
|
+
# mutually exclusive with :schema_map.
|
430
455
|
# - :bypass_auto_encryption => Boolean, when true, disables auto encryption;
|
431
456
|
# defaults to false.
|
432
457
|
# - :extra_options => Hash | nil, options related to spawning mongocryptd
|
433
458
|
# (this part of the API is subject to change).
|
459
|
+
# - :encrypted_fields_map => Hash | nil, maps a collection namespace to
|
460
|
+
# a hash describing encrypted fields for queryable encryption.
|
461
|
+
# - Note: If a collection is present on both the encryptedFieldsMap
|
462
|
+
# and schemaMap, an error will be raised.
|
463
|
+
# - :bypass_query_analysis => Boolean | nil, when true disables automatic
|
464
|
+
# analysis of outgoing commands.
|
434
465
|
#
|
435
466
|
# Notes on automatic encryption:
|
436
467
|
# - Automatic encryption is an enterprise only feature that only applies
|
@@ -526,7 +557,7 @@ module Mongo
|
|
526
557
|
end
|
527
558
|
=end
|
528
559
|
@options.freeze
|
529
|
-
validate_options!(addresses)
|
560
|
+
validate_options!(addresses, is_srv: uri.is_a?(URI::SRVProtocol))
|
530
561
|
validate_authentication_options!
|
531
562
|
|
532
563
|
database_options = @options.dup
|
@@ -736,7 +767,7 @@ module Mongo
|
|
736
767
|
# We can't use the same cluster if some options that would affect it
|
737
768
|
# have changed.
|
738
769
|
if cluster_modifying?(opts)
|
739
|
-
Cluster.create(client)
|
770
|
+
Cluster.create(client, monitoring: opts[:monitoring])
|
740
771
|
end
|
741
772
|
end
|
742
773
|
end
|
@@ -879,8 +910,11 @@ module Mongo
|
|
879
910
|
# which databases are returned based on user privileges when access control
|
880
911
|
# is enabled
|
881
912
|
#
|
882
|
-
# See https://
|
913
|
+
# See https://mongodb.com/docs/manual/reference/command/listDatabases/
|
883
914
|
# for more information and usage.
|
915
|
+
# @option opts [ Session ] :session The session to use.
|
916
|
+
# @option options [ Object ] :comment A user-provided
|
917
|
+
# comment to attach to this command.
|
884
918
|
#
|
885
919
|
# @return [ Array<String> ] The names of the databases.
|
886
920
|
#
|
@@ -902,8 +936,11 @@ module Mongo
|
|
902
936
|
# which databases are returned based on user privileges when access control
|
903
937
|
# is enabled
|
904
938
|
#
|
905
|
-
# See https://
|
939
|
+
# See https://mongodb.com/docs/manual/reference/command/listDatabases/
|
906
940
|
# for more information and usage.
|
941
|
+
# @option opts [ Session ] :session The session to use.
|
942
|
+
# @option options [ Object ] :comment A user-provided
|
943
|
+
# comment to attach to this command.
|
907
944
|
#
|
908
945
|
# @return [ Array<Hash> ] The info for each database.
|
909
946
|
#
|
@@ -924,6 +961,10 @@ module Mongo
|
|
924
961
|
# @param [ Hash ] filter The filter criteria for getting a list of databases.
|
925
962
|
# @param [ Hash ] opts The command options.
|
926
963
|
#
|
964
|
+
# @option opts [ Session ] :session The session to use.
|
965
|
+
# @option options [ Object ] :comment A user-provided
|
966
|
+
# comment to attach to this command.
|
967
|
+
#
|
927
968
|
# @return [ Array<Mongo::Database> ] The list of database objects.
|
928
969
|
#
|
929
970
|
# @since 2.5.0
|
@@ -974,11 +1015,35 @@ module Mongo
|
|
974
1015
|
#
|
975
1016
|
# @param [ Array<Hash> ] pipeline Optional additional filter operators.
|
976
1017
|
# @param [ Hash ] options The change stream options.
|
1018
|
+
# @option options [ String ] :full_document Allowed values: nil, 'default',
|
1019
|
+
# 'updateLookup', 'whenAvailable', 'required'.
|
1020
|
+
#
|
1021
|
+
# The default is to not send a value (i.e. nil), which is equivalent to
|
1022
|
+
# 'default'. By default, the change notification for partial updates will
|
1023
|
+
# include a delta describing the changes to the document.
|
1024
|
+
#
|
1025
|
+
# When set to 'updateLookup', the change notification for partial updates
|
1026
|
+
# will include both a delta describing the changes to the document as well
|
1027
|
+
# as a copy of the entire document that was changed from some time after
|
1028
|
+
# the change occurred.
|
1029
|
+
#
|
1030
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
1031
|
+
# post-image of the modified document for replace and update change events
|
1032
|
+
# if the post-image for this event is available.
|
1033
|
+
#
|
1034
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
1035
|
+
# an error is raised if the post-image is not available.
|
1036
|
+
# @option options [ String ] :full_document_before_change Allowed values: nil,
|
1037
|
+
# 'whenAvailable', 'required', 'off'.
|
1038
|
+
#
|
1039
|
+
# The default is to not send a value (i.e. nil), which is equivalent to 'off'.
|
977
1040
|
#
|
978
|
-
#
|
979
|
-
#
|
980
|
-
#
|
981
|
-
#
|
1041
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
1042
|
+
# pre-image of the modified document for replace, update, and delete change
|
1043
|
+
# events if it is available.
|
1044
|
+
#
|
1045
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
1046
|
+
# an error is raised if the pre-image is not available.
|
982
1047
|
# @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
|
983
1048
|
# for the new change stream.
|
984
1049
|
# @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
|
@@ -990,6 +1055,13 @@ module Mongo
|
|
990
1055
|
# changes that occurred at or after the specified timestamp. Any command run
|
991
1056
|
# against the server will return a cluster time that can be used here.
|
992
1057
|
# Only recognized by server versions 4.0+.
|
1058
|
+
# @option options [ Object ] :comment A user-provided
|
1059
|
+
# comment to attach to this command.
|
1060
|
+
# @option options [ Boolean ] :show_expanded_events Enables the server to
|
1061
|
+
# send the 'expanded' list of change stream events. The list of additional
|
1062
|
+
# events included with this flag set are: createIndexes, dropIndexes,
|
1063
|
+
# modify, create, shardCollection, reshardCollection,
|
1064
|
+
# refineCollectionShardKey.
|
993
1065
|
#
|
994
1066
|
# @note A change stream only allows 'majority' read concern.
|
995
1067
|
# @note This helper method is preferable to running a raw aggregation with a $changeStream
|
@@ -1001,8 +1073,11 @@ module Mongo
|
|
1001
1073
|
def watch(pipeline = [], options = {})
|
1002
1074
|
return use(Database::ADMIN).watch(pipeline, options) unless database.name == Database::ADMIN
|
1003
1075
|
|
1076
|
+
view_options = options.dup
|
1077
|
+
view_options[:await_data] = true if options[:max_await_time_ms]
|
1078
|
+
|
1004
1079
|
Mongo::Collection::View::ChangeStream.new(
|
1005
|
-
Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"]),
|
1080
|
+
Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"], {}, view_options),
|
1006
1081
|
pipeline,
|
1007
1082
|
Mongo::Collection::View::ChangeStream::CLUSTER,
|
1008
1083
|
options)
|
@@ -1078,6 +1153,14 @@ module Mongo
|
|
1078
1153
|
end
|
1079
1154
|
end
|
1080
1155
|
|
1156
|
+
# Returns encrypted field map hash if provided when creating the client.
|
1157
|
+
#
|
1158
|
+
# @return [ Hash | nil ] Encrypted field map hash, or nil if not set.
|
1159
|
+
# @api private
|
1160
|
+
def encrypted_fields_map
|
1161
|
+
@encrypted_fields_map ||= @options.fetch(:auto_encryption_options, {})[:encrypted_fields_map]
|
1162
|
+
end
|
1163
|
+
|
1081
1164
|
private
|
1082
1165
|
|
1083
1166
|
# Create a new encrypter object using the client's auto encryption options
|
@@ -1137,11 +1220,26 @@ module Mongo
|
|
1137
1220
|
|
1138
1221
|
cluster.validate_session_support!
|
1139
1222
|
|
1140
|
-
|
1223
|
+
options = {implicit: true}.update(options)
|
1224
|
+
|
1225
|
+
server_session = if options[:implicit]
|
1226
|
+
nil
|
1227
|
+
else
|
1228
|
+
cluster.session_pool.checkout
|
1229
|
+
end
|
1230
|
+
|
1231
|
+
Session.new(server_session, self, options)
|
1141
1232
|
end
|
1142
1233
|
|
1234
|
+
# Auxiliary method that is called by interpreter when copying the client
|
1235
|
+
# via dup or clone.
|
1236
|
+
#
|
1237
|
+
# @param [ Mongo::Client ] original Client that is being cloned.
|
1238
|
+
#
|
1239
|
+
# @api private
|
1143
1240
|
def initialize_copy(original)
|
1144
1241
|
@options = original.options.dup
|
1242
|
+
@connect_lock = Mutex.new
|
1145
1243
|
@monitoring = @cluster ? monitoring : Monitoring.new(options)
|
1146
1244
|
@database = nil
|
1147
1245
|
@read_preference = nil
|
@@ -1216,6 +1314,12 @@ module Mongo
|
|
1216
1314
|
end
|
1217
1315
|
|
1218
1316
|
_options[key] = compressors unless compressors.empty?
|
1317
|
+
elsif key == :srv_max_hosts
|
1318
|
+
if v && (!v.is_a?(Integer) || v < 0)
|
1319
|
+
log_warn("#{v} is not a valid integer for srv_max_hosts")
|
1320
|
+
else
|
1321
|
+
_options[key] = v
|
1322
|
+
end
|
1219
1323
|
else
|
1220
1324
|
_options[key] = v
|
1221
1325
|
end
|
@@ -1229,14 +1333,20 @@ module Mongo
|
|
1229
1333
|
# Validates all options after they are set on the client.
|
1230
1334
|
# This method is intended to catch combinations of options which are
|
1231
1335
|
# not allowed.
|
1232
|
-
def validate_options!(addresses = nil)
|
1336
|
+
def validate_options!(addresses = nil, is_srv: nil)
|
1233
1337
|
if options[:write] && options[:write_concern] && options[:write] != options[:write_concern]
|
1234
1338
|
raise ArgumentError, "If :write and :write_concern are both given, they must be identical: #{options.inspect}"
|
1235
1339
|
end
|
1236
1340
|
|
1341
|
+
connect = options[:connect]&.to_sym
|
1342
|
+
|
1343
|
+
if connect && !%i(direct replica_set sharded load_balanced).include?(connect)
|
1344
|
+
raise ArgumentError, "Invalid :connect option value: #{connect}"
|
1345
|
+
end
|
1346
|
+
|
1237
1347
|
if options[:direct_connection]
|
1238
|
-
if
|
1239
|
-
raise ArgumentError, "Conflicting client options: direct_connection=true and connect=#{
|
1348
|
+
if connect && connect != :direct
|
1349
|
+
raise ArgumentError, "Conflicting client options: direct_connection=true and connect=#{connect}"
|
1240
1350
|
end
|
1241
1351
|
# When a new client is created, we get the list of seed addresses
|
1242
1352
|
if addresses && addresses.length > 1
|
@@ -1248,8 +1358,36 @@ module Mongo
|
|
1248
1358
|
end
|
1249
1359
|
end
|
1250
1360
|
|
1251
|
-
if options[:
|
1252
|
-
|
1361
|
+
if options[:load_balanced]
|
1362
|
+
if addresses && addresses.length > 1
|
1363
|
+
raise ArgumentError, "load_balanced=true cannot be used with multiple seeds"
|
1364
|
+
end
|
1365
|
+
|
1366
|
+
if options[:direct_connection]
|
1367
|
+
raise ArgumentError, "direct_connection=true cannot be used with load_balanced=true"
|
1368
|
+
end
|
1369
|
+
|
1370
|
+
if connect && connect != :load_balanced
|
1371
|
+
raise ArgumentError, "connect=#{connect} cannot be used with load_balanced=true"
|
1372
|
+
end
|
1373
|
+
|
1374
|
+
if options[:replica_set]
|
1375
|
+
raise ArgumentError, "load_balanced=true cannot be used with replica_set option"
|
1376
|
+
end
|
1377
|
+
end
|
1378
|
+
|
1379
|
+
if connect == :load_balanced
|
1380
|
+
if addresses && addresses.length > 1
|
1381
|
+
raise ArgumentError, "connect=load_balanced cannot be used with multiple seeds"
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
if options[:replica_set]
|
1385
|
+
raise ArgumentError, "connect=load_balanced cannot be used with replica_set option"
|
1386
|
+
end
|
1387
|
+
end
|
1388
|
+
|
1389
|
+
if options[:direct_connection] == false && connect && connect == :direct
|
1390
|
+
raise ArgumentError, "Conflicting client options: direct_connection=false and connect=#{connect}"
|
1253
1391
|
end
|
1254
1392
|
|
1255
1393
|
%i(connect_timeout socket_timeout).each do |key|
|
@@ -1305,6 +1443,26 @@ module Mongo
|
|
1305
1443
|
end
|
1306
1444
|
end
|
1307
1445
|
end
|
1446
|
+
|
1447
|
+
if options[:srv_max_hosts] && options[:srv_max_hosts] > 0
|
1448
|
+
if options[:replica_set]
|
1449
|
+
raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :replica_set option"
|
1450
|
+
end
|
1451
|
+
|
1452
|
+
if options[:load_balanced]
|
1453
|
+
raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :load_balanced=true"
|
1454
|
+
end
|
1455
|
+
end
|
1456
|
+
|
1457
|
+
unless is_srv.nil? || is_srv
|
1458
|
+
if options[:srv_max_hosts]
|
1459
|
+
raise ArgumentError, ":srv_max_hosts cannot be used on non-SRV URI"
|
1460
|
+
end
|
1461
|
+
|
1462
|
+
if options[:srv_service_name]
|
1463
|
+
raise ArgumentError, ":srv_service_name cannot be used on non-SRV URI"
|
1464
|
+
end
|
1465
|
+
end
|
1308
1466
|
end
|
1309
1467
|
|
1310
1468
|
# Validates all authentication-related options after they are set on the client
|
@@ -1398,7 +1556,9 @@ module Mongo
|
|
1398
1556
|
def validate_max_min_pool_size!(option, opts)
|
1399
1557
|
if option == :min_pool_size && opts[:min_pool_size]
|
1400
1558
|
max = opts[:max_pool_size] || Server::ConnectionPool::DEFAULT_MAX_SIZE
|
1401
|
-
|
1559
|
+
if max != 0 && opts[:min_pool_size] > max
|
1560
|
+
raise Error::InvalidMinPoolSize.new(opts[:min_pool_size], max)
|
1561
|
+
end
|
1402
1562
|
end
|
1403
1563
|
true
|
1404
1564
|
end
|
@@ -31,13 +31,24 @@ module Mongo
|
|
31
31
|
# @option options [ String ] :key_vault_namespace The name of the
|
32
32
|
# key vault collection in the format "database.collection".
|
33
33
|
# @option options [ Hash ] :kms_providers A hash of key management service
|
34
|
-
# configuration information.
|
35
|
-
#
|
36
|
-
|
34
|
+
# configuration information.
|
35
|
+
# @see Mongo::Crypt::KMS::Credentials for list of options for every
|
36
|
+
# supported provider.
|
37
|
+
# @note There may be more than one KMS provider specified.
|
38
|
+
# @option options [ Hash ] :kms_tls_options TLS options to connect to KMS
|
39
|
+
# providers. Keys of the hash should be KSM provider names; values
|
40
|
+
# should be hashes of TLS connection options. The options are equivalent
|
41
|
+
# to TLS connection options of Mongo::Client.
|
42
|
+
# @see Mongo::Client#initialize for list of TLS options.
|
43
|
+
#
|
44
|
+
# @raise [ ArgumentError ] If required options are missing or incorrectly
|
45
|
+
# formatted.
|
46
|
+
def initialize(key_vault_client, options = {})
|
37
47
|
@encrypter = Crypt::ExplicitEncrypter.new(
|
38
48
|
key_vault_client,
|
39
49
|
options[:key_vault_namespace],
|
40
|
-
options[:kms_providers]
|
50
|
+
Crypt::KMS::Credentials.new(options[:kms_providers]),
|
51
|
+
Crypt::KMS::Validations.validate_tls_options(options[:kms_tls_options])
|
41
52
|
)
|
42
53
|
end
|
43
54
|
|
@@ -60,14 +71,19 @@ module Mongo
|
|
60
71
|
# will not be properly parsed.
|
61
72
|
# @option options [ Array<String> ] :key_alt_names An optional array of
|
62
73
|
# strings specifying alternate names for the new data key.
|
74
|
+
# @option options [ String | nil ] :key_material Optional
|
75
|
+
# 96 bytes to use as custom key material for the data key being created.
|
76
|
+
# If :key_material option is given, the custom key material is used
|
77
|
+
# for encrypting and decrypting data.
|
63
78
|
#
|
64
79
|
# @return [ BSON::Binary ] The 16-byte UUID of the new data key as a
|
65
80
|
# BSON::Binary object with type :uuid.
|
66
81
|
def create_data_key(kms_provider, options={})
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
82
|
+
key_document = Crypt::KMS::MasterKeyDocument.new(kms_provider, options)
|
83
|
+
|
84
|
+
key_alt_names = options[:key_alt_names]
|
85
|
+
key_material = options[:key_material]
|
86
|
+
@encrypter.create_and_insert_data_key(key_document, key_alt_names, key_material)
|
71
87
|
end
|
72
88
|
|
73
89
|
# Encrypts a value using the specified encryption key and algorithm.
|
@@ -81,14 +97,25 @@ module Mongo
|
|
81
97
|
# @option options [ String ] :key_alt_name The alternate name for the
|
82
98
|
# encryption key.
|
83
99
|
# @option options [ String ] :algorithm The algorithm used to encrypt the value.
|
84
|
-
# Valid algorithms are "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
|
85
|
-
#
|
100
|
+
# Valid algorithms are "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic",
|
101
|
+
# "AEAD_AES_256_CBC_HMAC_SHA_512-Random", "Indexed", "Unindexed".
|
102
|
+
# @option options [ Integer | nil ] :contention_factor Contention factor
|
103
|
+
# to be applied if encryption algorithm is set to "Indexed". If not
|
104
|
+
# provided, it defaults to a value of 0. Contention factor should be set
|
105
|
+
# only if encryption algorithm is set to "Indexed".
|
106
|
+
# @option options [ String | nil ] query_type Query type to be applied
|
107
|
+
# if encryption algorithm is set to "Indexed". Query type should be set
|
108
|
+
# only if encryption algorithm is set to "Indexed". The only allowed
|
109
|
+
# value is "equality".
|
86
110
|
#
|
87
111
|
# @note The :key_id and :key_alt_name options are mutually exclusive. Only
|
88
112
|
# one is required to perform explicit encryption.
|
89
113
|
#
|
90
114
|
# @return [ BSON::Binary ] A BSON Binary object of subtype 6 (ciphertext)
|
91
115
|
# representing the encrypted value.
|
116
|
+
#
|
117
|
+
# @raise [ ArgumentError ] if either contention_factor or query_type
|
118
|
+
# is set, and algorithm is not "Indexed".
|
92
119
|
def encrypt(value, options={})
|
93
120
|
@encrypter.encrypt(value, options)
|
94
121
|
end
|
@@ -102,5 +129,81 @@ module Mongo
|
|
102
129
|
def decrypt(value)
|
103
130
|
@encrypter.decrypt(value)
|
104
131
|
end
|
132
|
+
|
133
|
+
# Adds a key_alt_name for the key in the key vault collection with the given id.
|
134
|
+
#
|
135
|
+
# @param [ BSON::Binary ] id Id of the key to add new key alt name.
|
136
|
+
# @param [ String ] key_alt_name New key alt name to add.
|
137
|
+
#
|
138
|
+
# @return [ BSON::Document | nil ] Document describing the identified key
|
139
|
+
# before adding the key alt name, or nil if no such key.
|
140
|
+
def add_key_alt_name(id, key_alt_name)
|
141
|
+
@encrypter.add_key_alt_name(id, key_alt_name)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Removes the key with the given id from the key vault collection.
|
145
|
+
#
|
146
|
+
# @param [ BSON::Binary ] id Id of the key to delete.
|
147
|
+
#
|
148
|
+
# @return [ Operation::Result ] The response from the database for the delete_one
|
149
|
+
# operation that deletes the key.
|
150
|
+
def delete_key(id)
|
151
|
+
@encrypter.delete_key(id)
|
152
|
+
end
|
153
|
+
|
154
|
+
# Finds a single key with the given id.
|
155
|
+
#
|
156
|
+
# @param [ BSON::Binary ] id Id of the key to get.
|
157
|
+
#
|
158
|
+
# @return [ BSON::Document | nil ] The found key document or nil
|
159
|
+
# if not found.
|
160
|
+
def get_key(id)
|
161
|
+
@encrypter.get_key(id)
|
162
|
+
end
|
163
|
+
|
164
|
+
# Returns a key in the key vault collection with the given key_alt_name.
|
165
|
+
#
|
166
|
+
# @param [ String ] key_alt_name Key alt name to find a key.
|
167
|
+
#
|
168
|
+
# @return [ BSON::Document | nil ] The found key document or nil
|
169
|
+
# if not found.
|
170
|
+
def get_key_by_alt_name(key_alt_name)
|
171
|
+
@encrypter.get_key_by_alt_name(key_alt_name)
|
172
|
+
end
|
173
|
+
|
174
|
+
# Returns all keys in the key vault collection.
|
175
|
+
#
|
176
|
+
# @return [ Collection::View ] Keys in the key vault collection.
|
177
|
+
def get_keys
|
178
|
+
@encrypter.get_keys
|
179
|
+
end
|
180
|
+
alias :keys :get_keys
|
181
|
+
|
182
|
+
# Removes a key_alt_name from a key in the key vault collection with the given id.
|
183
|
+
#
|
184
|
+
# @param [ BSON::Binary ] id Id of the key to remove key alt name.
|
185
|
+
# @param [ String ] key_alt_name Key alt name to remove.
|
186
|
+
#
|
187
|
+
# @return [ BSON::Document | nil ] Document describing the identified key
|
188
|
+
# before removing the key alt name, or nil if no such key.
|
189
|
+
def remove_key_alt_name(id, key_alt_name)
|
190
|
+
@encrypter.remove_key_alt_name(id, key_alt_name)
|
191
|
+
end
|
192
|
+
|
193
|
+
# Decrypts multiple data keys and (re-)encrypts them with a new master_key,
|
194
|
+
# or with their current master_key if a new one is not given.
|
195
|
+
#
|
196
|
+
# @param [ Hash ] filter Filter used to find keys to be updated.
|
197
|
+
# @param [ Hash ] options
|
198
|
+
#
|
199
|
+
# @option options [ String ] :provider KMS provider to encrypt keys.
|
200
|
+
# @option options [ Hash | nil ] :master_key Document describing master key
|
201
|
+
# to encrypt keys.
|
202
|
+
#
|
203
|
+
# @return [ Crypt::RewrapManyDataKeyResult ] Result of the operation.
|
204
|
+
def rewrap_many_data_key(filter, opts = {})
|
205
|
+
@encrypter.rewrap_many_data_key(filter, opts)
|
206
|
+
end
|
207
|
+
|
105
208
|
end
|
106
209
|
end
|
@@ -36,14 +36,15 @@ module Mongo
|
|
36
36
|
#
|
37
37
|
# @example Create a PeriodicExecutor.
|
38
38
|
# Mongo::Cluster::PeriodicExecutor.new([reaper, reaper2])
|
39
|
+
#
|
40
|
+
# @param [ Array<Object> ] executors The executors. Each must respond
|
41
|
+
# to #execute and #flush.
|
39
42
|
# @param [ Hash ] options The options.
|
40
43
|
#
|
41
44
|
# @option options [ Logger ] :logger A custom logger to use.
|
42
45
|
#
|
43
46
|
# @api private
|
44
|
-
|
45
|
-
# @since 2.5.0
|
46
|
-
def initialize(executors = [], options = {})
|
47
|
+
def initialize(executors, options = {})
|
47
48
|
@thread = nil
|
48
49
|
@executors = executors
|
49
50
|
@stop_semaphore = Semaphore.new
|