mongo 2.11.4 → 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/CONTRIBUTING.md +8 -36
- data/LICENSE +1 -1
- data/README.md +65 -77
- data/Rakefile +58 -24
- data/lib/mongo/active_support.rb +4 -1
- data/lib/mongo/address/ipv4.rb +35 -5
- data/lib/mongo/address/ipv6.rb +35 -5
- data/lib/mongo/address/unix.rb +6 -3
- data/lib/mongo/address/validator.rb +4 -1
- data/lib/mongo/address.rb +81 -26
- data/lib/mongo/auth/aws/conversation.rb +128 -0
- data/lib/mongo/auth/aws/credentials_retriever.rb +222 -0
- data/lib/mongo/auth/aws/request.rb +285 -0
- data/lib/mongo/auth/aws.rb +40 -0
- data/lib/mongo/auth/base.rb +145 -0
- data/lib/mongo/auth/conversation_base.rb +87 -0
- data/lib/mongo/auth/cr/conversation.rb +21 -86
- data/lib/mongo/auth/cr.rb +12 -36
- data/lib/mongo/auth/credential_cache.rb +54 -0
- data/lib/mongo/auth/gssapi/conversation.rb +100 -0
- data/lib/mongo/auth/gssapi.rb +41 -0
- data/lib/mongo/auth/ldap/conversation.rb +9 -57
- data/lib/mongo/auth/ldap.rb +12 -34
- data/lib/mongo/auth/roles.rb +4 -1
- data/lib/mongo/auth/sasl_conversation_base.rb +102 -0
- data/lib/mongo/auth/scram/conversation.rb +15 -502
- data/lib/mongo/auth/scram.rb +42 -51
- data/lib/mongo/auth/scram256/conversation.rb +66 -0
- data/lib/mongo/auth/scram256.rb +34 -0
- data/lib/mongo/auth/scram_conversation_base.rb +378 -0
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +5 -1
- data/lib/mongo/auth/stringprep/tables.rb +5 -1
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +3 -2
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
- data/lib/mongo/auth/stringprep.rb +9 -5
- data/lib/mongo/auth/user/view.rb +20 -10
- data/lib/mongo/auth/user.rb +5 -10
- data/lib/mongo/auth/x509/conversation.rb +21 -66
- data/lib/mongo/auth/x509.rb +17 -32
- data/lib/mongo/auth.rb +52 -14
- data/lib/mongo/background_thread.rb +27 -4
- data/lib/mongo/bson.rb +4 -1
- data/lib/mongo/bulk_write/combineable.rb +23 -8
- data/lib/mongo/bulk_write/ordered_combiner.rb +4 -1
- data/lib/mongo/bulk_write/result.rb +14 -2
- data/lib/mongo/bulk_write/result_combiner.rb +6 -5
- data/lib/mongo/bulk_write/transformable.rb +12 -10
- data/lib/mongo/bulk_write/unordered_combiner.rb +4 -1
- data/lib/mongo/bulk_write/validatable.rb +8 -1
- data/lib/mongo/bulk_write.rb +187 -42
- data/lib/mongo/caching_cursor.rb +77 -0
- data/lib/mongo/client.rb +669 -68
- data/lib/mongo/client_encryption.rb +209 -0
- data/lib/mongo/cluster/periodic_executor.rb +8 -4
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +120 -46
- data/lib/mongo/cluster/reapers/socket_reaper.rb +4 -1
- data/lib/mongo/cluster/sdam_flow.rb +112 -74
- data/lib/mongo/cluster/topology/base.rb +17 -10
- data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +4 -1
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +7 -3
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +4 -1
- data/lib/mongo/cluster/topology/sharded.rb +5 -2
- data/lib/mongo/cluster/topology/single.rb +6 -3
- data/lib/mongo/cluster/topology/unknown.rb +4 -1
- data/lib/mongo/cluster/topology.rb +44 -4
- data/lib/mongo/cluster.rb +344 -155
- data/lib/mongo/cluster_time.rb +4 -1
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +96 -23
- data/lib/mongo/collection/view/builder/aggregation.rb +20 -18
- data/lib/mongo/collection/view/builder/map_reduce.rb +19 -50
- data/lib/mongo/collection/view/builder.rb +4 -5
- data/lib/mongo/collection/view/change_stream/retryable.rb +4 -1
- data/lib/mongo/collection/view/change_stream.rb +83 -28
- data/lib/mongo/collection/view/explainable.rb +31 -9
- data/lib/mongo/collection/view/immutable.rb +4 -1
- data/lib/mongo/collection/view/iterable.rb +135 -23
- data/lib/mongo/collection/view/map_reduce.rb +78 -24
- data/lib/mongo/collection/view/readable.rb +162 -71
- data/lib/mongo/collection/view/writable.rb +356 -140
- data/lib/mongo/collection/view.rb +47 -42
- data/lib/mongo/collection.rb +244 -68
- 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_decryption_context.rb +43 -0
- data/lib/mongo/crypt/auto_encrypter.rb +304 -0
- data/lib/mongo/crypt/auto_encryption_context.rb +47 -0
- data/lib/mongo/crypt/binary.rb +158 -0
- data/lib/mongo/crypt/binding.rb +1601 -0
- data/lib/mongo/crypt/context.rb +141 -0
- data/lib/mongo/crypt/data_key_context.rb +73 -0
- data/lib/mongo/crypt/encryption_io.rb +343 -0
- data/lib/mongo/crypt/explicit_decryption_context.rb +43 -0
- data/lib/mongo/crypt/explicit_encrypter.rb +237 -0
- data/lib/mongo/crypt/explicit_encryption_context.rb +115 -0
- data/lib/mongo/crypt/handle.rb +392 -0
- data/lib/mongo/crypt/hooks.rb +116 -0
- 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/kms_context.rb +70 -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 +140 -0
- data/lib/mongo/crypt.rb +39 -0
- data/lib/mongo/cursor/kill_spec.rb +76 -0
- data/lib/mongo/cursor.rb +175 -70
- data/lib/mongo/database/view.rb +41 -9
- data/lib/mongo/database.rb +142 -25
- data/lib/mongo/dbref.rb +5 -99
- data/lib/mongo/distinguishing_semaphore.rb +58 -0
- data/lib/mongo/error/auth_error.rb +4 -1
- data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
- data/lib/mongo/error/bulk_write_error.rb +60 -14
- data/lib/mongo/error/change_stream_resumable.rb +4 -1
- data/lib/mongo/error/closed_stream.rb +4 -1
- data/lib/mongo/error/connection_check_out_timeout.rb +4 -1
- data/lib/mongo/error/connection_perished.rb +26 -0
- data/lib/mongo/error/credential_check_error.rb +29 -0
- data/lib/mongo/error/crypt_error.rb +34 -0
- data/lib/mongo/error/extra_file_chunk.rb +4 -1
- data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +3 -0
- data/lib/mongo/error/file_not_found.rb +4 -1
- data/lib/mongo/error/handshake_error.rb +4 -1
- data/lib/mongo/error/insufficient_iteration_count.rb +4 -1
- data/lib/mongo/error/internal_driver_error.rb +25 -0
- data/lib/mongo/error/invalid_address.rb +4 -1
- data/lib/mongo/error/invalid_application_name.rb +4 -1
- data/lib/mongo/error/invalid_bulk_operation.rb +4 -1
- data/lib/mongo/error/invalid_bulk_operation_type.rb +4 -1
- data/lib/mongo/error/invalid_collection_name.rb +4 -1
- data/lib/mongo/error/invalid_config_option.rb +20 -0
- data/lib/mongo/error/invalid_cursor_operation.rb +30 -0
- data/lib/mongo/error/invalid_database_name.rb +4 -1
- data/lib/mongo/error/invalid_document.rb +4 -1
- data/lib/mongo/error/invalid_file.rb +4 -1
- data/lib/mongo/error/invalid_file_revision.rb +4 -1
- data/lib/mongo/error/invalid_min_pool_size.rb +4 -1
- data/lib/mongo/error/invalid_nonce.rb +5 -2
- data/lib/mongo/error/invalid_read_concern.rb +31 -0
- data/lib/mongo/error/invalid_read_option.rb +4 -1
- data/lib/mongo/error/invalid_replacement_document.rb +31 -10
- data/lib/mongo/error/invalid_server_auth_host.rb +25 -0
- data/lib/mongo/error/invalid_server_auth_response.rb +26 -0
- data/lib/mongo/error/invalid_server_preference.rb +9 -1
- data/lib/mongo/error/invalid_session.rb +6 -2
- data/lib/mongo/error/invalid_signature.rb +4 -1
- data/lib/mongo/error/invalid_transaction_operation.rb +4 -1
- data/lib/mongo/error/invalid_txt_record.rb +4 -1
- data/lib/mongo/error/invalid_update_document.rb +31 -8
- data/lib/mongo/error/invalid_uri.rb +4 -1
- data/lib/mongo/error/invalid_write_concern.rb +4 -1
- data/{spec/support/crud/context.rb → lib/mongo/error/kms_error.rb} +8 -6
- data/lib/mongo/error/labelable.rb +72 -0
- data/lib/mongo/error/lint_error.rb +4 -1
- data/lib/mongo/error/max_bson_size.rb +18 -4
- data/lib/mongo/error/max_message_size.rb +4 -1
- data/lib/mongo/error/mismatched_domain.rb +4 -1
- data/lib/mongo/error/missing_connection.rb +25 -0
- data/lib/mongo/error/missing_file_chunk.rb +12 -3
- data/lib/mongo/error/missing_password.rb +4 -1
- data/lib/mongo/error/missing_resume_token.rb +4 -1
- data/lib/mongo/error/missing_scram_server_signature.rb +30 -0
- data/lib/mongo/error/missing_service_id.rb +26 -0
- data/lib/mongo/error/mongocryptd_spawn_error.rb +25 -0
- data/lib/mongo/error/multi_index_drop.rb +4 -1
- data/lib/mongo/error/need_primary_server.rb +4 -1
- data/lib/mongo/error/no_server_available.rb +12 -4
- data/lib/mongo/error/no_service_connection_available.rb +49 -0
- data/lib/mongo/error/no_srv_records.rb +4 -1
- data/lib/mongo/error/notable.rb +34 -17
- data/lib/mongo/error/operation_failure.rb +107 -117
- data/lib/mongo/error/parser.rb +85 -18
- data/lib/mongo/error/pool_closed_error.rb +4 -1
- data/lib/mongo/error/raise_original_error.rb +32 -0
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/error/sdam_error_detection.rb +16 -5
- data/lib/mongo/error/server_api_conflict.rb +26 -0
- data/lib/mongo/error/server_api_not_supported.rb +27 -0
- data/lib/mongo/error/server_certificate_revoked.rb +25 -0
- data/lib/mongo/error/session_ended.rb +4 -1
- data/lib/mongo/error/session_not_materialized.rb +29 -0
- data/lib/mongo/error/sessions_not_supported.rb +38 -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/socket_error.rb +4 -1
- data/lib/mongo/error/socket_timeout_error.rb +4 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +4 -1
- data/lib/mongo/error/unexpected_chunk_length.rb +4 -1
- data/lib/mongo/error/unexpected_response.rb +4 -1
- data/lib/mongo/error/unknown_payload_type.rb +4 -1
- data/lib/mongo/{cursor/builder.rb → error/unmet_dependency.rb} +11 -5
- data/lib/mongo/error/unsupported_array_filters.rb +10 -2
- data/lib/mongo/error/unsupported_collation.rb +10 -2
- data/lib/mongo/error/unsupported_features.rb +4 -1
- data/lib/mongo/error/unsupported_message_type.rb +4 -1
- data/lib/mongo/error/unsupported_option.rb +104 -0
- data/lib/mongo/error/write_retryable.rb +4 -1
- data/lib/mongo/error.rb +50 -34
- data/lib/mongo/event/base.rb +10 -1
- data/lib/mongo/event/listeners.rb +4 -1
- data/lib/mongo/event/publisher.rb +4 -1
- data/lib/mongo/event/subscriber.rb +4 -1
- data/lib/mongo/event.rb +4 -1
- data/lib/mongo/grid/file/chunk.rb +7 -2
- data/lib/mongo/grid/file/info.rb +7 -3
- data/lib/mongo/grid/file.rb +9 -1
- data/lib/mongo/grid/fs_bucket.rb +108 -61
- data/lib/mongo/grid/stream/read.rb +29 -8
- data/lib/mongo/grid/stream/write.rb +13 -4
- data/lib/mongo/grid/stream.rb +4 -1
- data/lib/mongo/grid.rb +4 -1
- data/lib/mongo/id.rb +11 -6
- data/lib/mongo/index/view.rb +103 -43
- data/lib/mongo/index.rb +5 -1
- data/lib/mongo/lint.rb +14 -0
- data/lib/mongo/loggable.rb +4 -1
- data/lib/mongo/logger.rb +7 -4
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring/command_log_subscriber.rb +23 -5
- data/lib/mongo/monitoring/event/cmap/base.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +5 -2
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +11 -5
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +4 -1
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +4 -1
- data/lib/mongo/monitoring/event/cmap.rb +4 -1
- data/lib/mongo/monitoring/event/command_failed.rb +50 -6
- data/lib/mongo/monitoring/event/command_started.rb +70 -4
- data/lib/mongo/monitoring/event/command_succeeded.rb +48 -4
- data/lib/mongo/monitoring/event/secure.rb +44 -4
- data/lib/mongo/monitoring/event/server_closed.rb +5 -2
- data/lib/mongo/monitoring/event/server_description_changed.rb +31 -5
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +39 -18
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +13 -3
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +34 -13
- data/lib/mongo/monitoring/event/server_opening.rb +5 -2
- data/lib/mongo/monitoring/event/topology_changed.rb +5 -2
- data/lib/mongo/monitoring/event/topology_closed.rb +5 -2
- data/lib/mongo/monitoring/event/topology_opening.rb +5 -2
- data/lib/mongo/monitoring/event.rb +4 -1
- data/lib/mongo/monitoring/publishable.rb +43 -17
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +13 -2
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -2
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +4 -1
- data/lib/mongo/monitoring.rb +51 -1
- data/lib/mongo/operation/aggregate/command.rb +16 -5
- data/lib/mongo/operation/aggregate/op_msg.rb +4 -1
- data/lib/mongo/operation/aggregate/result.rb +13 -9
- data/lib/mongo/operation/aggregate.rb +4 -1
- data/lib/mongo/operation/{delete/legacy.rb → collections_info/command.rb} +15 -21
- data/lib/mongo/operation/collections_info/result.rb +25 -2
- data/lib/mongo/operation/collections_info.rb +18 -28
- data/lib/mongo/operation/command/command.rb +6 -3
- data/lib/mongo/operation/command/op_msg.rb +10 -1
- data/lib/mongo/operation/command.rb +4 -1
- data/lib/mongo/operation/context.rb +138 -0
- data/lib/mongo/operation/count/command.rb +12 -3
- data/lib/mongo/operation/count/op_msg.rb +13 -1
- data/lib/mongo/operation/count.rb +4 -1
- data/lib/mongo/operation/create/command.rb +13 -4
- data/lib/mongo/operation/create/op_msg.rb +14 -1
- data/lib/mongo/operation/create.rb +4 -1
- data/lib/mongo/operation/create_index/command.rb +24 -5
- data/lib/mongo/operation/create_index/op_msg.rb +23 -3
- data/lib/mongo/operation/create_index.rb +4 -1
- data/lib/mongo/operation/create_user/command.rb +7 -4
- data/lib/mongo/operation/create_user/op_msg.rb +5 -2
- data/lib/mongo/operation/create_user.rb +4 -1
- data/lib/mongo/operation/delete/bulk_result.rb +6 -1
- data/lib/mongo/operation/delete/command.rb +13 -7
- data/lib/mongo/operation/delete/op_msg.rb +18 -6
- data/lib/mongo/operation/delete/result.rb +8 -2
- data/lib/mongo/operation/delete.rb +4 -2
- data/lib/mongo/operation/distinct/command.rb +12 -3
- data/lib/mongo/operation/distinct/op_msg.rb +14 -1
- data/lib/mongo/operation/distinct.rb +4 -1
- data/lib/mongo/operation/drop/command.rb +6 -3
- data/lib/mongo/operation/drop/op_msg.rb +4 -1
- data/lib/mongo/operation/drop.rb +4 -1
- data/lib/mongo/operation/drop_database/command.rb +6 -3
- data/lib/mongo/operation/drop_database/op_msg.rb +4 -1
- data/lib/mongo/operation/drop_database.rb +4 -1
- data/lib/mongo/operation/drop_index/command.rb +7 -4
- data/lib/mongo/operation/drop_index/op_msg.rb +10 -3
- data/lib/mongo/operation/drop_index.rb +4 -1
- data/lib/mongo/operation/explain/command.rb +22 -3
- data/lib/mongo/operation/explain/legacy.rb +17 -3
- data/lib/mongo/operation/explain/op_msg.rb +18 -1
- data/lib/mongo/operation/explain/result.rb +7 -1
- data/lib/mongo/operation/explain.rb +4 -1
- data/lib/mongo/operation/find/builder/command.rb +111 -0
- data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +14 -15
- data/lib/mongo/operation/find/builder/legacy.rb +123 -0
- data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +35 -26
- data/lib/mongo/operation/find/builder.rb +21 -0
- data/lib/mongo/operation/find/command.rb +15 -3
- data/lib/mongo/operation/find/legacy/result.rb +6 -1
- data/lib/mongo/operation/find/legacy.rb +15 -3
- data/lib/mongo/operation/find/op_msg.rb +17 -9
- data/lib/mongo/operation/find/result.rb +17 -1
- data/lib/mongo/operation/find.rb +5 -1
- data/lib/mongo/operation/get_more/command.rb +7 -3
- data/lib/mongo/operation/get_more/command_builder.rb +42 -0
- data/lib/mongo/operation/get_more/legacy.rb +5 -2
- data/lib/mongo/operation/get_more/op_msg.rb +6 -9
- data/lib/mongo/operation/get_more/result.rb +7 -1
- data/lib/mongo/operation/get_more.rb +5 -1
- data/lib/mongo/operation/indexes/command.rb +6 -3
- data/lib/mongo/operation/indexes/legacy.rb +7 -4
- data/lib/mongo/operation/indexes/op_msg.rb +4 -1
- data/lib/mongo/operation/indexes/result.rb +9 -1
- data/lib/mongo/operation/indexes.rb +19 -2
- data/lib/mongo/operation/insert/bulk_result.rb +18 -2
- data/lib/mongo/operation/insert/command.rb +10 -10
- data/lib/mongo/operation/insert/op_msg.rb +15 -9
- data/lib/mongo/operation/insert/result.rb +18 -4
- data/lib/mongo/operation/insert.rb +6 -3
- data/lib/mongo/operation/kill_cursors/command.rb +14 -3
- data/lib/mongo/operation/kill_cursors/{legacy.rb → command_builder.rb} +9 -11
- data/lib/mongo/operation/kill_cursors/op_msg.rb +14 -1
- data/lib/mongo/operation/kill_cursors.rb +5 -2
- data/lib/mongo/operation/list_collections/command.rb +7 -4
- data/lib/mongo/operation/list_collections/op_msg.rb +9 -3
- data/lib/mongo/operation/list_collections/result.rb +13 -2
- data/lib/mongo/operation/list_collections.rb +4 -1
- data/lib/mongo/operation/map_reduce/command.rb +14 -3
- data/lib/mongo/operation/map_reduce/op_msg.rb +5 -2
- data/lib/mongo/operation/map_reduce/result.rb +30 -1
- data/lib/mongo/operation/map_reduce.rb +4 -1
- data/lib/mongo/operation/op_msg_base.rb +6 -3
- data/lib/mongo/operation/parallel_scan/command.rb +8 -6
- data/lib/mongo/operation/parallel_scan/op_msg.rb +5 -2
- data/lib/mongo/operation/parallel_scan/result.rb +8 -1
- data/lib/mongo/operation/parallel_scan.rb +4 -1
- data/lib/mongo/operation/remove_user/command.rb +7 -4
- data/lib/mongo/operation/remove_user/op_msg.rb +5 -2
- data/lib/mongo/operation/remove_user.rb +4 -1
- data/lib/mongo/operation/result.rb +126 -37
- data/lib/mongo/operation/shared/bypass_document_validation.rb +14 -4
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +7 -3
- data/lib/mongo/operation/shared/executable.rb +92 -28
- data/lib/mongo/operation/shared/executable_no_validate.rb +6 -3
- data/lib/mongo/operation/shared/executable_transaction_label.rb +4 -1
- data/lib/mongo/operation/shared/idable.rb +6 -2
- data/lib/mongo/operation/shared/limited.rb +14 -2
- data/lib/mongo/operation/shared/object_id_generator.rb +5 -1
- data/lib/mongo/operation/shared/op_msg_or_command.rb +7 -8
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +8 -9
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +4 -1
- data/lib/mongo/operation/shared/polymorphic_operation.rb +54 -0
- data/lib/mongo/operation/shared/polymorphic_result.rb +4 -1
- data/lib/mongo/operation/shared/read_preference_supported.rb +82 -23
- data/lib/mongo/operation/shared/response_handling.rb +97 -17
- data/lib/mongo/operation/shared/result/aggregatable.rb +5 -1
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +4 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +126 -26
- data/lib/mongo/operation/shared/specifiable.rb +36 -38
- data/lib/mongo/operation/shared/validatable.rb +87 -0
- data/lib/mongo/operation/shared/write.rb +37 -24
- data/lib/mongo/operation/shared/write_concern_supported.rb +10 -6
- data/lib/mongo/operation/update/bulk_result.rb +4 -1
- data/lib/mongo/operation/update/command.rb +13 -7
- data/lib/mongo/operation/update/op_msg.rb +16 -8
- data/lib/mongo/operation/update/result.rb +13 -2
- data/lib/mongo/operation/update.rb +4 -2
- data/lib/mongo/operation/update_user/command.rb +7 -4
- data/lib/mongo/operation/update_user/op_msg.rb +5 -2
- data/lib/mongo/operation/update_user.rb +4 -1
- data/lib/mongo/operation/users_info/command.rb +7 -4
- data/lib/mongo/operation/users_info/op_msg.rb +5 -2
- data/lib/mongo/operation/users_info/result.rb +7 -1
- data/lib/mongo/operation/users_info.rb +4 -1
- data/lib/mongo/operation/write_command/command.rb +51 -0
- 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 +17 -1
- data/lib/mongo/options/mapper.rb +4 -1
- data/lib/mongo/options/redacted.rb +4 -1
- data/lib/mongo/options.rb +4 -1
- data/lib/mongo/protocol/bit_vector.rb +6 -2
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/compressed.rb +61 -11
- data/lib/mongo/protocol/delete.rb +4 -1
- data/lib/mongo/protocol/get_more.rb +4 -1
- data/lib/mongo/protocol/insert.rb +7 -2
- data/lib/mongo/protocol/kill_cursors.rb +4 -1
- data/lib/mongo/protocol/message.rb +158 -21
- data/lib/mongo/protocol/msg.rb +268 -41
- data/lib/mongo/protocol/query.rb +97 -42
- data/lib/mongo/protocol/registry.rb +4 -1
- data/lib/mongo/protocol/reply.rb +4 -1
- data/lib/mongo/protocol/serializers.rb +47 -16
- data/lib/mongo/protocol/update.rb +4 -1
- data/lib/mongo/protocol.rb +4 -0
- data/lib/mongo/query_cache.rb +300 -0
- data/lib/mongo/retryable.rb +114 -43
- data/lib/mongo/semaphore.rb +4 -1
- data/lib/mongo/server/app_metadata.rb +128 -35
- data/lib/mongo/server/connection.rb +105 -127
- data/lib/mongo/server/connection_base.rb +173 -32
- data/lib/mongo/server/connection_common.rb +208 -0
- data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
- data/lib/mongo/server/connection_pool/populator.rb +5 -2
- data/lib/mongo/server/connection_pool.rb +206 -42
- data/lib/mongo/server/description/features.rb +41 -23
- data/lib/mongo/{srv/warning_result.rb → server/description/load_balancer.rb} +13 -15
- data/lib/mongo/server/description.rb +183 -30
- data/lib/mongo/server/monitor/app_metadata.rb +5 -2
- data/lib/mongo/server/monitor/connection.rb +148 -117
- data/lib/mongo/server/monitor.rb +183 -79
- data/lib/mongo/server/pending_connection.rb +247 -1
- data/lib/mongo/server/push_monitor/connection.rb +31 -0
- data/lib/mongo/server/push_monitor.rb +207 -0
- data/lib/mongo/server/round_trip_time_averager.rb +18 -6
- data/lib/mongo/server.rb +154 -52
- data/lib/mongo/server_selector/{selectable.rb → base.rb} +197 -91
- data/lib/mongo/server_selector/nearest.rb +32 -25
- data/lib/mongo/server_selector/primary.rb +30 -32
- data/lib/mongo/server_selector/primary_preferred.rb +38 -29
- data/lib/mongo/server_selector/secondary.rb +32 -25
- data/lib/mongo/server_selector/secondary_preferred.rb +30 -38
- data/lib/mongo/server_selector.rb +5 -2
- data/lib/mongo/session/server_session.rb +4 -1
- data/lib/mongo/session/session_pool.rb +33 -4
- data/lib/mongo/session.rb +178 -39
- data/lib/mongo/socket/ocsp_cache.rb +99 -0
- data/lib/mongo/socket/ocsp_verifier.rb +344 -0
- data/lib/mongo/socket/ssl.rb +165 -55
- data/lib/mongo/socket/tcp.rb +48 -25
- data/lib/mongo/socket/unix.rb +17 -6
- data/lib/mongo/socket.rb +168 -47
- data/lib/mongo/srv/monitor.rb +64 -47
- data/lib/mongo/srv/resolver.rb +42 -14
- data/lib/mongo/srv/result.rb +4 -2
- data/lib/mongo/srv.rb +4 -1
- data/lib/mongo/timeout.rb +54 -0
- data/lib/mongo/topology_version.rb +92 -0
- data/lib/mongo/uri/options_mapper.rb +626 -0
- data/lib/mongo/uri/srv_protocol.rb +23 -13
- data/lib/mongo/uri.rb +103 -388
- data/lib/mongo/utils.rb +105 -0
- data/lib/mongo/version.rb +5 -2
- data/lib/mongo/write_concern/acknowledged.rb +4 -1
- data/lib/mongo/write_concern/base.rb +4 -1
- data/lib/mongo/write_concern/unacknowledged.rb +4 -1
- data/lib/mongo/write_concern.rb +4 -1
- data/lib/mongo.rb +67 -2
- data/mongo.gemspec +12 -8
- data/spec/NOTES.aws-auth.md +296 -0
- data/spec/README.aws-auth.md +318 -0
- data/spec/README.md +386 -15
- data/spec/atlas/atlas_connectivity_spec.rb +3 -0
- data/spec/atlas/operations_spec.rb +3 -0
- data/spec/integration/auth_spec.rb +130 -14
- data/spec/integration/awaited_ismaster_spec.rb +31 -0
- data/spec/integration/aws_auth_request_spec.rb +77 -0
- data/spec/integration/aws_credentials_retriever_spec.rb +106 -0
- data/spec/integration/aws_lambda_examples_spec.rb +68 -0
- data/spec/integration/bson_symbol_spec.rb +8 -3
- data/spec/integration/bulk_insert_spec.rb +3 -0
- data/spec/integration/bulk_write_error_message_spec.rb +73 -0
- data/spec/integration/bulk_write_spec.rb +86 -0
- data/spec/integration/change_stream_examples_spec.rb +9 -2
- data/spec/integration/change_stream_spec.rb +133 -57
- data/spec/integration/check_clean_slate_spec.rb +19 -0
- data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +123 -46
- data/spec/integration/client_connectivity_spec.rb +4 -1
- data/spec/integration/client_construction_aws_auth_spec.rb +194 -0
- data/spec/integration/client_construction_spec.rb +225 -2
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +360 -0
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +306 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +74 -0
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +82 -0
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +255 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +711 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +190 -0
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +81 -0
- data/spec/integration/client_side_encryption/client_close_spec.rb +66 -0
- data/spec/integration/client_side_encryption/corpus_spec.rb +265 -0
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
- data/spec/integration/client_side_encryption/data_key_spec.rb +258 -0
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +176 -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 +144 -0
- 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 +47 -0
- data/spec/integration/client_spec.rb +7 -2
- data/spec/integration/client_update_spec.rb +157 -0
- data/spec/integration/collection_indexes_prose_spec.rb +58 -0
- data/spec/integration/command_monitoring_spec.rb +95 -31
- data/spec/integration/command_spec.rb +59 -20
- data/spec/integration/connect_single_rs_name_spec.rb +15 -7
- data/spec/integration/connection_pool_populator_spec.rb +7 -2
- data/spec/integration/connection_spec.rb +121 -38
- data/spec/integration/crud_spec.rb +338 -5
- data/spec/integration/cursor_pinning_spec.rb +121 -0
- data/spec/integration/cursor_reaping_spec.rb +75 -28
- data/spec/integration/docs_examples_spec.rb +16 -0
- data/spec/integration/error_detection_spec.rb +3 -0
- data/spec/integration/fork_reconnect_spec.rb +207 -0
- data/spec/integration/get_more_spec.rb +13 -3
- data/spec/integration/grid_fs_bucket_spec.rb +51 -0
- data/spec/integration/heartbeat_events_spec.rb +11 -27
- data/spec/integration/map_reduce_spec.rb +77 -0
- data/spec/integration/mmapv1_spec.rb +3 -0
- data/spec/integration/mongos_pinning_spec.rb +3 -0
- data/spec/integration/ocsp_connectivity_spec.rb +29 -0
- data/spec/integration/ocsp_verifier_cache_spec.rb +191 -0
- data/spec/integration/ocsp_verifier_spec.rb +358 -0
- data/spec/integration/operation_failure_code_spec.rb +4 -1
- data/spec/integration/operation_failure_message_spec.rb +90 -0
- data/spec/integration/query_cache_spec.rb +1256 -0
- data/spec/integration/query_cache_transactions_spec.rb +193 -0
- data/spec/integration/read_concern_spec.rb +5 -2
- data/spec/integration/read_preference_spec.rb +86 -23
- data/spec/integration/reconnect_spec.rb +42 -19
- data/spec/integration/retryable_errors_spec.rb +36 -14
- data/spec/integration/{retryable_writes_spec.rb → retryable_writes/retryable_writes_36_and_older_spec.rb} +60 -53
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +405 -0
- data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +18 -0
- data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +27 -0
- data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +28 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +220 -0
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +235 -0
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +113 -0
- data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +22 -0
- data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +28 -0
- data/spec/integration/retryable_writes/shared/supports_retries.rb +19 -0
- data/spec/integration/retryable_writes_errors_spec.rb +3 -0
- data/spec/integration/sdam_error_handling_spec.rb +235 -25
- data/spec/integration/sdam_events_spec.rb +142 -7
- data/spec/integration/sdam_prose_spec.rb +67 -0
- data/spec/integration/secondary_reads_spec.rb +102 -0
- data/spec/integration/server_description_spec.rb +3 -0
- data/spec/integration/server_monitor_spec.rb +31 -2
- data/spec/integration/server_selection_spec.rb +39 -0
- data/spec/integration/server_selector_spec.rb +25 -5
- data/spec/integration/server_spec.rb +47 -26
- data/spec/integration/shell_examples_spec.rb +3 -0
- data/spec/integration/size_limit_spec.rb +118 -0
- data/spec/integration/snappy_compression_spec.rb +28 -0
- data/spec/integration/snapshot_query_examples_spec.rb +127 -0
- data/spec/integration/srv_monitoring_spec.rb +93 -9
- data/spec/integration/srv_spec.rb +60 -0
- data/spec/integration/ssl_uri_options_spec.rb +5 -2
- data/spec/integration/step_down_spec.rb +38 -19
- data/spec/integration/time_zone_querying_spec.rb +3 -0
- data/spec/integration/transaction_pinning_spec.rb +120 -0
- data/spec/integration/transactions_api_examples_spec.rb +62 -0
- data/spec/integration/transactions_examples_spec.rb +31 -9
- data/spec/integration/truncated_utf8_spec.rb +26 -0
- data/spec/integration/versioned_api_examples_spec.rb +120 -0
- data/spec/integration/x509_auth_spec.rb +112 -0
- data/spec/integration/zlib_compression_spec.rb +28 -0
- data/spec/integration/zstd_compression_spec.rb +29 -0
- data/spec/kerberos/kerberos_spec.rb +94 -0
- data/spec/lite_spec_helper.rb +88 -44
- data/spec/mongo/address/ipv4_spec.rb +4 -1
- data/spec/mongo/address/ipv6_spec.rb +10 -0
- data/spec/mongo/address/unix_spec.rb +4 -0
- data/spec/mongo/address/validator_spec.rb +3 -0
- data/spec/mongo/address_spec.rb +27 -13
- data/spec/mongo/auth/aws/request_region_spec.rb +45 -0
- data/spec/mongo/auth/aws/request_spec.rb +79 -0
- data/spec/mongo/auth/cr_spec.rb +20 -10
- data/spec/mongo/auth/gssapi/conversation_spec.rb +124 -0
- data/spec/mongo/auth/invalid_mechanism_spec.rb +4 -1
- data/spec/mongo/auth/ldap/conversation_spec.rb +5 -2
- data/spec/mongo/auth/ldap_spec.rb +18 -8
- data/spec/mongo/auth/scram/conversation_spec.rb +125 -338
- data/spec/mongo/auth/scram256/conversation_spec.rb +174 -0
- data/spec/mongo/auth/{scram/negotiation_spec.rb → scram_negotiation_spec.rb} +83 -75
- data/spec/mongo/auth/scram_spec.rb +60 -88
- data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +3 -0
- data/spec/mongo/auth/stringprep_spec.rb +3 -0
- data/spec/mongo/auth/user/view_spec.rb +7 -7
- data/spec/mongo/auth/user_spec.rb +5 -2
- data/spec/mongo/auth/x509/conversation_spec.rb +7 -4
- data/spec/mongo/auth/x509_spec.rb +18 -12
- data/spec/mongo/auth_spec.rb +7 -4
- data/spec/mongo/bson_spec.rb +3 -0
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +3 -0
- data/spec/mongo/bulk_write/result_spec.rb +29 -8
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +3 -0
- data/spec/mongo/bulk_write_spec.rb +333 -5
- data/spec/mongo/caching_cursor_spec.rb +73 -0
- data/spec/mongo/client_construction_spec.rb +1662 -284
- data/spec/mongo/client_encryption_spec.rb +402 -0
- data/spec/mongo/client_spec.rb +425 -6
- data/spec/mongo/cluster/cursor_reaper_spec.rb +78 -31
- data/spec/mongo/cluster/periodic_executor_spec.rb +6 -1
- data/spec/mongo/cluster/socket_reaper_spec.rb +17 -3
- data/spec/mongo/cluster/topology/replica_set_spec.rb +65 -19
- data/spec/mongo/cluster/topology/sharded_spec.rb +6 -3
- data/spec/mongo/cluster/topology/single_spec.rb +24 -10
- data/spec/mongo/cluster/topology/unknown_spec.rb +4 -1
- data/spec/mongo/cluster/topology_spec.rb +4 -1
- data/spec/mongo/cluster_spec.rb +71 -81
- data/spec/mongo/cluster_time_spec.rb +3 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +186 -86
- data/spec/mongo/collection/view/builder/find_command_spec.rb +24 -6
- data/spec/mongo/collection/view/builder/op_query_spec.rb +7 -0
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +397 -0
- data/spec/mongo/collection/view/change_stream_spec.rb +21 -323
- data/spec/mongo/collection/view/explainable_spec.rb +90 -4
- data/spec/mongo/collection/view/immutable_spec.rb +3 -0
- data/spec/mongo/collection/view/iterable_spec.rb +41 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +44 -6
- data/spec/mongo/collection/view/readable_spec.rb +745 -2
- data/spec/mongo/collection/view/writable_spec.rb +323 -1
- data/spec/mongo/collection/view_spec.rb +4 -1
- data/spec/mongo/collection_crud_spec.rb +4415 -0
- data/spec/mongo/collection_ddl_spec.rb +537 -0
- data/spec/mongo/collection_spec.rb +103 -4367
- 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 +109 -0
- data/spec/mongo/crypt/auto_encrypter_spec.rb +441 -0
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +126 -0
- data/spec/mongo/crypt/binary_spec.rb +113 -0
- data/spec/mongo/crypt/binding/binary_spec.rb +54 -0
- data/spec/mongo/crypt/binding/context_spec.rb +305 -0
- data/spec/mongo/crypt/binding/helpers_spec.rb +44 -0
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +113 -0
- data/spec/mongo/crypt/binding/status_spec.rb +97 -0
- data/spec/mongo/crypt/binding/version_spec.rb +53 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +37 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +144 -0
- data/spec/mongo/crypt/encryption_io_spec.rb +141 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +106 -0
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +266 -0
- data/spec/mongo/crypt/handle_spec.rb +251 -0
- data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +111 -0
- 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/crypt/status_spec.rb +150 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +15 -1
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +15 -1
- data/spec/mongo/cursor_spec.rb +209 -17
- data/spec/mongo/database_spec.rb +526 -27
- data/spec/mongo/distinguishing_semaphore_spec.rb +66 -0
- data/spec/mongo/error/bulk_write_error_spec.rb +52 -0
- data/spec/mongo/error/crypt_error_spec.rb +29 -0
- data/spec/mongo/error/max_bson_size_spec.rb +38 -0
- data/spec/mongo/error/no_server_available_spec.rb +15 -2
- data/spec/mongo/error/notable_spec.rb +62 -0
- data/spec/mongo/error/operation_failure_heavy_spec.rb +110 -0
- data/spec/mongo/error/operation_failure_spec.rb +231 -70
- data/spec/mongo/error/parser_spec.rb +40 -6
- data/spec/mongo/error/unsupported_option_spec.rb +57 -0
- data/spec/mongo/event/publisher_spec.rb +3 -0
- data/spec/mongo/event/subscriber_spec.rb +3 -0
- data/spec/mongo/grid/file/chunk_spec.rb +7 -4
- data/spec/mongo/grid/file/info_spec.rb +3 -0
- data/spec/mongo/grid/file_spec.rb +4 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +58 -17
- data/spec/mongo/grid/stream/read_spec.rb +33 -10
- data/spec/mongo/grid/stream/write_spec.rb +38 -9
- data/spec/mongo/grid/stream_spec.rb +4 -1
- data/spec/mongo/id_spec.rb +3 -0
- data/spec/mongo/index/view_spec.rb +446 -0
- data/spec/mongo/lint_spec.rb +3 -0
- data/spec/mongo/logger_spec.rb +16 -11
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +3 -0
- data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +3 -0
- data/spec/mongo/monitoring/event/command_failed_spec.rb +59 -2
- data/spec/mongo/monitoring/event/command_started_spec.rb +3 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +46 -6
- data/spec/mongo/monitoring/event/secure_spec.rb +28 -4
- data/spec/mongo/monitoring/event/server_closed_spec.rb +4 -1
- data/spec/mongo/monitoring/event/server_description_changed_spec.rb +4 -4
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +4 -1
- data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +3 -0
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +4 -1
- data/spec/mongo/monitoring/event/server_opening_spec.rb +4 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +4 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +4 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +4 -1
- data/spec/mongo/monitoring_spec.rb +3 -0
- data/spec/mongo/operation/aggregate/result_spec.rb +11 -1
- data/spec/mongo/operation/aggregate_spec.rb +5 -1
- data/spec/mongo/operation/collections_info_spec.rb +7 -1
- data/spec/mongo/operation/command_spec.rb +11 -5
- data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
- data/spec/mongo/operation/create_index_spec.rb +9 -3
- data/spec/mongo/operation/create_user_spec.rb +9 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +24 -6
- data/spec/mongo/operation/delete/command_spec.rb +3 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +40 -25
- data/spec/mongo/operation/delete_spec.rb +13 -36
- data/spec/mongo/operation/drop_index_spec.rb +9 -2
- data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +5 -2
- data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +5 -2
- data/spec/mongo/operation/find/legacy_spec.rb +34 -7
- data/spec/mongo/operation/get_more_spec.rb +11 -1
- data/spec/mongo/operation/indexes_spec.rb +8 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +28 -8
- data/spec/mongo/operation/insert/command_spec.rb +7 -0
- data/spec/mongo/operation/insert/op_msg_spec.rb +46 -30
- data/spec/mongo/operation/insert_spec.rb +17 -43
- data/spec/mongo/operation/limited_spec.rb +8 -3
- data/spec/mongo/operation/map_reduce_spec.rb +8 -2
- data/spec/mongo/operation/read_preference_legacy_spec.rb +360 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +332 -0
- data/spec/mongo/operation/remove_user_spec.rb +9 -3
- data/spec/mongo/operation/result_spec.rb +34 -4
- data/spec/mongo/operation/specifiable_spec.rb +3 -0
- data/spec/mongo/operation/update/bulk_spec.rb +25 -7
- data/spec/mongo/operation/update/command_spec.rb +7 -0
- data/spec/mongo/operation/update/op_msg_spec.rb +41 -24
- data/spec/mongo/operation/update_spec.rb +12 -35
- data/spec/mongo/operation/update_user_spec.rb +7 -1
- data/spec/mongo/options/redacted_spec.rb +3 -0
- data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
- data/spec/mongo/protocol/compressed_spec.rb +29 -13
- data/spec/mongo/protocol/delete_spec.rb +12 -8
- data/spec/mongo/protocol/get_more_spec.rb +12 -8
- data/spec/mongo/protocol/insert_spec.rb +12 -8
- data/spec/mongo/protocol/kill_cursors_spec.rb +9 -5
- data/spec/mongo/protocol/msg_spec.rb +111 -53
- data/spec/mongo/protocol/query_spec.rb +18 -15
- data/spec/mongo/protocol/registry_spec.rb +4 -1
- data/spec/mongo/protocol/reply_spec.rb +4 -1
- data/spec/mongo/protocol/update_spec.rb +13 -9
- data/spec/mongo/query_cache_middleware_spec.rb +55 -0
- data/spec/mongo/query_cache_spec.rb +453 -0
- data/spec/mongo/retryable_spec.rb +109 -75
- data/spec/mongo/semaphore_spec.rb +54 -0
- data/spec/mongo/server/app_metadata_spec.rb +53 -21
- data/spec/mongo/server/connection_auth_spec.rb +42 -24
- data/spec/mongo/server/connection_common_spec.rb +87 -0
- data/spec/mongo/server/connection_pool/populator_spec.rb +6 -1
- data/spec/mongo/server/connection_pool_spec.rb +189 -80
- data/spec/mongo/server/connection_spec.rb +323 -246
- data/spec/mongo/server/description/features_spec.rb +27 -0
- data/spec/mongo/server/description_query_methods_spec.rb +4 -1
- data/spec/mongo/server/description_spec.rb +625 -594
- data/spec/mongo/server/monitor/app_metadata_spec.rb +10 -1
- data/spec/mongo/server/monitor/connection_spec.rb +60 -69
- data/spec/mongo/server/monitor_spec.rb +95 -24
- data/spec/mongo/server/push_monitor_spec.rb +95 -0
- data/spec/mongo/server/round_trip_time_averager_spec.rb +8 -3
- data/spec/mongo/server_selector/nearest_spec.rb +32 -25
- data/spec/mongo/server_selector/primary_preferred_spec.rb +35 -28
- data/spec/mongo/server_selector/primary_spec.rb +35 -11
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +52 -29
- data/spec/mongo/server_selector/secondary_spec.rb +27 -20
- data/spec/mongo/server_selector_spec.rb +145 -21
- data/spec/mongo/server_spec.rb +18 -2
- data/spec/mongo/session/server_session_spec.rb +3 -0
- data/spec/mongo/session/session_pool_spec.rb +51 -12
- data/spec/mongo/session_spec.rb +58 -0
- data/spec/mongo/session_transaction_spec.rb +17 -36
- data/spec/mongo/socket/ssl_spec.rb +91 -69
- data/spec/mongo/socket/tcp_spec.rb +5 -2
- data/spec/mongo/socket/unix_spec.rb +6 -2
- data/spec/mongo/socket_spec.rb +14 -11
- data/spec/mongo/srv/monitor_spec.rb +91 -69
- data/spec/mongo/srv/result_spec.rb +3 -0
- data/spec/mongo/timeout_spec.rb +42 -0
- data/spec/mongo/tls_context_hooks_spec.rb +40 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +171 -37
- data/spec/mongo/uri_option_parsing_spec.rb +52 -16
- data/spec/mongo/uri_spec.rb +165 -48
- data/spec/mongo/utils_spec.rb +42 -0
- data/spec/mongo/write_concern/acknowledged_spec.rb +3 -0
- data/spec/mongo/write_concern/unacknowledged_spec.rb +3 -0
- data/spec/mongo/write_concern_spec.rb +16 -1
- data/spec/{support → runners}/auth.rb +45 -9
- data/spec/runners/change_streams/outcome.rb +45 -0
- data/spec/runners/change_streams/spec.rb +60 -0
- data/spec/runners/change_streams/test.rb +232 -0
- data/spec/{support → runners}/cmap/verifier.rb +4 -1
- data/spec/{support → runners}/cmap.rb +7 -4
- data/spec/{support → runners}/command_monitoring.rb +8 -36
- data/spec/runners/connection_string.rb +283 -6
- data/spec/{support/transactions → runners/crud}/context.rb +12 -15
- data/spec/{support → runners}/crud/operation.rb +201 -61
- data/spec/{support → runners}/crud/outcome.rb +4 -1
- data/spec/runners/crud/requirement.rb +139 -0
- data/spec/{support → runners}/crud/spec.rb +21 -11
- data/spec/{support → runners}/crud/test.rb +12 -27
- data/spec/runners/crud/test_base.rb +53 -0
- data/spec/{support → runners}/crud/verifier.rb +47 -15
- data/spec/{support → runners}/crud.rb +34 -12
- data/spec/{support → runners}/gridfs.rb +5 -2
- data/spec/runners/read_write_concern_document.rb +4 -1
- data/spec/runners/sdam/verifier.rb +29 -8
- data/spec/{support/server_discovery_and_monitoring.rb → runners/sdam.rb} +49 -26
- data/spec/runners/server_selection.rb +365 -0
- data/spec/{support → runners}/server_selection_rtt.rb +5 -2
- data/spec/runners/transactions/operation.rb +328 -0
- data/spec/{support → runners}/transactions/spec.rb +6 -3
- data/spec/runners/transactions/test.rb +329 -0
- data/spec/{support → runners}/transactions.rb +30 -27
- data/spec/runners/unified/assertions.rb +362 -0
- data/spec/runners/unified/change_stream_operations.rb +41 -0
- data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
- data/spec/runners/unified/crud_operations.rb +323 -0
- data/spec/runners/unified/ddl_operations.rb +179 -0
- data/spec/runners/unified/entity_map.rb +42 -0
- data/spec/runners/unified/error.rb +29 -0
- data/spec/runners/unified/event_subscriber.rb +104 -0
- data/spec/runners/unified/exceptions.rb +24 -0
- data/spec/runners/unified/grid_fs_operations.rb +79 -0
- data/spec/runners/unified/support_operations.rb +269 -0
- data/spec/runners/unified/test.rb +511 -0
- data/spec/runners/unified/test_group.rb +31 -0
- data/spec/runners/unified.rb +106 -0
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +291 -0
- 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 +230 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +325 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +392 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/solo/clean_exit_spec.rb +29 -0
- data/spec/spec_helper.rb +10 -9
- data/spec/spec_tests/auth_spec.rb +33 -14
- data/spec/spec_tests/change_streams_unified_spec.rb +13 -0
- data/spec/spec_tests/client_side_encryption_spec.rb +14 -0
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
- data/spec/spec_tests/cmap_spec.rb +19 -4
- data/spec/spec_tests/collection_management_spec.rb +13 -0
- data/spec/spec_tests/command_monitoring_unified_spec.rb +13 -0
- data/spec/spec_tests/connection_string_spec.rb +6 -1
- data/spec/spec_tests/crud_spec.rb +5 -10
- data/spec/spec_tests/crud_unified_spec.rb +13 -0
- data/spec/spec_tests/data/auth/connection-string.yml +69 -0
- 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 +927 -0
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +120 -0
- data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +536 -0
- data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
- data/spec/spec_tests/data/client_side_encryption/basic.yml +102 -0
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +81 -0
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
- data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/count.yml +54 -0
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +52 -0
- data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
- data/spec/spec_tests/data/client_side_encryption/delete.yml +91 -0
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +66 -0
- data/spec/spec_tests/data/client_side_encryption/explain.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/find.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +50 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +50 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +50 -0
- 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 +61 -0
- data/spec/spec_tests/data/client_side_encryption/insert.yml +88 -0
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +47 -0
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +65 -0
- data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +22 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/types.yml +501 -0
- 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/unsupportedCommand.yml +25 -0
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +70 -0
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +164 -0
- data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -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/collection_management/timeseries-collection.yml +129 -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/redacted-commands.yml +340 -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/connection_string/valid-warnings.yml +24 -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/bulkWrite.yml +26 -22
- 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/insertMany.yml +26 -22
- 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 +137 -0
- 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 +299 -0
- 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/MaxStalenessTooSmall.yml +15 -0
- 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/NoKnownServers.yml +4 -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 -0
- data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
- data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +7 -6
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +2 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +7 -6
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +2 -1
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +7 -6
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +2 -1
- data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → legacy/estimatedDocumentCount-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +1 -1
- data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +1 -1
- 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/legacy/bulkWrite-errorLabels.yml +77 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +37 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +30 -24
- data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-errorLabels.yml +48 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +22 -0
- data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-errorLabels.yml +49 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +23 -0
- data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-errorLabels.yml +52 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +25 -0
- data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-errorLabels.yml +52 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +24 -0
- data/spec/spec_tests/data/retryable_writes/legacy/insertMany-errorLabels.yml +54 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +24 -0
- data/spec/spec_tests/data/retryable_writes/legacy/insertOne-errorLabels.yml +44 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +94 -3
- data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-errorLabels.yml +53 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +23 -0
- data/spec/spec_tests/data/retryable_writes/legacy/updateOne-errorLabels.yml +53 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +23 -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/error_handling_handshake.yml +55 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +38 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +52 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +61 -0
- data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryNoSecondaryOk.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryOrSecondary.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-NotWritablePrimary.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-LegacyNotPrimary.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryOrSecondary.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-NotWritablePrimary.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +47 -0
- data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +54 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryOrSecondary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-NotWritablePrimary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +82 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +82 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +91 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +82 -0
- data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +82 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotWritablePrimary.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +65 -0
- data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +42 -0
- data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
- data/spec/spec_tests/data/sdam/rs/compatible.yml +6 -2
- data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +4 -1
- data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +4 -3
- data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +44 -0
- data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +36 -0
- data/spec/spec_tests/data/sdam/rs/{ghost_discovered.yml → discover_ghost_replicaset.yml} +3 -2
- data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +51 -0
- data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +51 -0
- data/spec/spec_tests/data/sdam/rs/discover_passives.yml +6 -4
- data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +83 -0
- data/spec/spec_tests/data/sdam/rs/discover_primary.yml +4 -3
- data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +43 -0
- data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +50 -0
- data/spec/spec_tests/data/sdam/rs/{rsother_discovered.yml → discover_rsother_replicaset.yml} +5 -3
- data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +4 -3
- data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +44 -0
- data/spec/spec_tests/data/sdam/rs/discovery.yml +8 -4
- data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +5 -1
- data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +7 -5
- data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +6 -2
- data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +12 -6
- data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/member_standalone.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/new_primary.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +6 -3
- data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +6 -3
- data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +1 -0
- data/spec/spec_tests/data/sdam/rs/normalize_case.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/null_election_id.yml +8 -4
- data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +10 -5
- data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +10 -5
- data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +24 -27
- data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +75 -0
- data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +8 -4
- data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +81 -56
- data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/repeated.yml +105 -0
- data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +21 -0
- data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
- data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +5 -3
- data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/too_new.yml +6 -2
- data/spec/spec_tests/data/sdam/rs/too_old.yml +4 -2
- data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +68 -0
- data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +194 -0
- data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +64 -0
- data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +2 -1
- data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +6 -3
- data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +2 -1
- data/spec/spec_tests/data/sdam/sharded/compatible.yml +4 -2
- data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +24 -0
- data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +9 -5
- data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +6 -3
- data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +4 -2
- data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +4 -2
- data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
- data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
- data/spec/spec_tests/data/sdam/sharded/too_new.yml +4 -2
- data/spec/spec_tests/data/sdam/sharded/too_old.yml +4 -2
- data/spec/spec_tests/data/sdam/single/compatible.yml +2 -1
- data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +3 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +4 -3
- data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +23 -0
- data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +4 -3
- data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +4 -3
- data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +4 -3
- data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +4 -3
- data/spec/spec_tests/data/sdam/single/{unavailable_seed.yml → direct_connection_unavailable_seed.yml} +2 -2
- data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +40 -0
- data/spec/spec_tests/data/sdam/single/discover_standalone.yml +35 -0
- data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
- data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +2 -1
- data/spec/spec_tests/data/sdam/single/not_ok_response.yml +5 -3
- data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
- data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
- data/spec/spec_tests/data/sdam/single/standalone_removed.yml +2 -1
- data/spec/spec_tests/data/sdam/single/{direct_connection_slave.yml → standalone_using_legacy_hello.yml} +2 -2
- data/spec/spec_tests/data/sdam/single/too_new.yml +2 -1
- data/spec/spec_tests/data/sdam/single/too_old.yml +2 -1
- data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +48 -0
- data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
- data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +85 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +118 -0
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +152 -0
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +148 -0
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +219 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +88 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +117 -0
- data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +98 -0
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +2 -4
- data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
- data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +2 -1
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +2 -1
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +21 -16
- data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +2 -1
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +3 -3
- data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
- data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
- 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/direct-connection-false.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-true.yml +5 -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/create-collection.yml +131 -0
- data/spec/spec_tests/data/transactions/create-index.yml +152 -0
- data/spec/spec_tests/data/transactions/error-labels.yml +90 -21
- data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
- data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +3 -0
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +3 -0
- data/spec/spec_tests/data/transactions/pin-mongos.yml +8 -6
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +124 -0
- data/spec/spec_tests/data/transactions/retryable-abort.yml +20 -5
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +132 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +27 -12
- data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
- data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +172 -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-failure.yml +31 -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 +223 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +171 -0
- data/spec/spec_tests/data/uri_options/auth-options.yml +35 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
- data/spec/spec_tests/data/uri_options/connection-options.yml +103 -0
- data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
- data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +58 -0
- data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +233 -6
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +419 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +413 -0
- data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +75 -0
- data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
- data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +46 -0
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +128 -0
- data/spec/spec_tests/gridfs_spec.rb +5 -0
- data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
- data/spec/spec_tests/load_balancers_spec.rb +15 -0
- data/spec/spec_tests/max_staleness_spec.rb +7 -140
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +6 -1
- data/spec/spec_tests/read_write_concern_document_spec.rb +3 -0
- data/spec/spec_tests/read_write_concern_operaton_spec.rb +13 -0
- data/spec/spec_tests/retryable_reads_spec.rb +13 -5
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +16 -3
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/sdam_integration_spec.rb +16 -0
- data/spec/spec_tests/sdam_monitoring_spec.rb +16 -7
- data/spec/spec_tests/sdam_spec.rb +75 -3
- data/spec/spec_tests/seed_list_discovery_spec.rb +127 -0
- data/spec/spec_tests/server_selection_rtt_spec.rb +5 -0
- data/spec/spec_tests/server_selection_spec.rb +7 -114
- data/spec/spec_tests/sessions_unified_spec.rb +13 -0
- data/spec/spec_tests/transactions_api_spec.rb +8 -0
- data/spec/spec_tests/transactions_spec.rb +8 -0
- data/spec/spec_tests/transactions_unified_spec.rb +13 -0
- data/spec/spec_tests/unified_spec.rb +23 -0
- data/spec/spec_tests/uri_options_spec.rb +58 -41
- data/spec/spec_tests/versioned_api_spec.rb +13 -0
- data/spec/stress/cleanup_spec.rb +61 -0
- data/spec/stress/connection_pool_stress_spec.rb +14 -13
- data/spec/stress/connection_pool_timing_spec.rb +13 -9
- data/spec/stress/fork_reconnect_stress_spec.rb +109 -0
- data/spec/stress/push_monitor_close_spec.rb +44 -0
- data/spec/support/authorization.rb +5 -12
- data/spec/support/aws_utils/base.rb +137 -0
- data/spec/support/aws_utils/inspector.rb +227 -0
- data/spec/support/aws_utils/orchestrator.rb +373 -0
- data/spec/support/aws_utils/provisioner.rb +363 -0
- data/spec/support/aws_utils.rb +65 -0
- data/spec/support/background_thread_registry.rb +12 -15
- data/spec/support/certificates/README.md +7 -2
- data/spec/support/certificates/atlas-ocsp-ca.crt +103 -0
- data/spec/support/certificates/atlas-ocsp.crt +152 -0
- data/spec/support/certificates/retrieve-atlas-cert +38 -0
- data/spec/support/certificates/server-second-level-bundle.pem +77 -77
- data/spec/support/certificates/server-second-level.crt +52 -52
- data/spec/support/certificates/server-second-level.key +25 -25
- data/spec/support/certificates/server-second-level.pem +77 -77
- data/spec/support/client_registry.rb +37 -32
- data/spec/support/client_registry_macros.rb +17 -5
- data/spec/support/cluster_tools.rb +11 -3
- data/spec/support/common_shortcuts.rb +160 -6
- data/spec/support/constraints.rb +9 -217
- data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
- 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 +31 -0
- data/spec/support/crypt/corpus/corpus-schema.json +6335 -0
- data/spec/support/crypt/corpus/corpus.json +8619 -0
- data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
- 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/data_keys/key_document_local.json +31 -0
- data/spec/support/crypt/encryptedFields.json +33 -0
- data/spec/support/crypt/external/external-key.json +31 -0
- data/spec/support/crypt/external/external-schema.json +19 -0
- data/spec/support/crypt/keys/key1-document.json +30 -0
- data/spec/support/crypt/limits/limits-doc.json +102 -0
- data/spec/support/crypt/limits/limits-key.json +31 -0
- data/spec/support/crypt/limits/limits-schema.json +1405 -0
- data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -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/schema_maps/schema_map_local.json +18 -0
- data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/crypt.rb +402 -0
- data/spec/support/dns.rb +3 -0
- data/spec/support/json_ext_formatter.rb +3 -0
- data/spec/support/keyword_struct.rb +29 -0
- data/spec/support/local_resource_registry.rb +3 -0
- data/spec/support/macros.rb +28 -0
- data/spec/support/matchers.rb +52 -1
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/monitoring_ext.rb +3 -0
- data/spec/support/ocsp +1 -0
- data/spec/support/primary_socket.rb +3 -0
- data/spec/support/sdam_formatter_integration.rb +3 -0
- data/spec/support/shared/app_metadata.rb +167 -0
- data/spec/support/shared/auth_context.rb +16 -0
- data/spec/support/shared/protocol.rb +5 -0
- data/spec/support/shared/scram_conversation.rb +104 -0
- data/spec/support/shared/server_selector.rb +99 -4
- data/spec/support/shared/session.rb +47 -30
- data/spec/support/spec_config.rb +339 -57
- data/spec/support/spec_setup.rb +55 -38
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +455 -35
- data.tar.gz.sig +0 -0
- metadata +2088 -838
- metadata.gz.sig +0 -0
- data/lib/mongo/cluster/srv_monitor.rb +0 -127
- data/lib/mongo/collection/view/builder/find_command.rb +0 -142
- data/lib/mongo/collection/view/builder/op_query.rb +0 -91
- data/lib/mongo/cursor/builder/get_more_command.rb +0 -77
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -108
- data/lib/mongo/cursor/builder/op_get_more.rb +0 -61
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -103
- data/lib/mongo/operation/insert/legacy.rb +0 -60
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -45
- data/lib/mongo/operation/update/legacy/result.rb +0 -102
- data/lib/mongo/operation/update/legacy.rb +0 -65
- data/lib/mongo/server/connectable.rb +0 -107
- data/lib/mongo/server/context.rb +0 -69
- data/spec/enterprise_auth/kerberos_spec.rb +0 -58
- data/spec/mongo/cluster/srv_monitor_spec.rb +0 -214
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -56
- data/spec/mongo/dbref_spec.rb +0 -149
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -41
- data/spec/mongo/operation/read_preference_spec.rb +0 -245
- data/spec/spec_tests/change_streams_spec.rb +0 -55
- data/spec/spec_tests/command_monitoring_spec.rb +0 -53
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -76
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -536
- 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 -110
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -81
- data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -38
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -92
- data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -66
- data/spec/support/change_streams/operation.rb +0 -89
- data/spec/support/change_streams.rb +0 -262
- data/spec/support/cluster_config.rb +0 -194
- data/spec/support/connection_string.rb +0 -354
- data/spec/support/crud/requirement.rb +0 -69
- data/spec/support/crud/test_base.rb +0 -22
- data/spec/support/event_subscriber.rb +0 -112
- data/spec/support/lite_constraints.rb +0 -76
- data/spec/support/sdam_monitoring.rb +0 -89
- data/spec/support/server_selection.rb +0 -148
- data/spec/support/transactions/operation.rb +0 -184
- data/spec/support/transactions/test.rb +0 -252
- /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.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.yml → legacy/count.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.yml → legacy/distinct.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → legacy/estimatedDocumentCount.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.yml → legacy/findOne.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.yml → legacy/gridfs-downloadByName.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.yml → legacy/listCollectionObjects.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.yml → legacy/listDatabaseNames.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.yml → legacy/listDatabases.yml} +0 -0
- /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.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.yml → legacy/deleteOne.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.yml → legacy/findOneAndReplace.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.yml → legacy/insertMany.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.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.yml → legacy/updateOne.yml} +0 -0
- /data/spec/spec_tests/data/sdam/rs/{secondary_wrong_set_name_with_primary_second.yml → ruby_secondary_wrong_set_name_with_primary_second.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
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
2
5
|
#
|
|
3
6
|
# Licensed under the Apache License, Version 2.0 (the 'License');
|
|
4
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -27,6 +30,7 @@ module Mongo
|
|
|
27
30
|
#
|
|
28
31
|
# @since 2.1.0
|
|
29
32
|
CRUD_OPTIONS = [
|
|
33
|
+
:auto_encryption_options,
|
|
30
34
|
:database,
|
|
31
35
|
:read, :read_concern,
|
|
32
36
|
:write, :write_concern,
|
|
@@ -53,13 +57,17 @@ module Mongo
|
|
|
53
57
|
:auth_mech,
|
|
54
58
|
:auth_mech_properties,
|
|
55
59
|
:auth_source,
|
|
60
|
+
:auto_encryption_options,
|
|
61
|
+
:bg_error_backtrace,
|
|
56
62
|
:cleanup,
|
|
57
63
|
:compressors,
|
|
64
|
+
:direct_connection,
|
|
58
65
|
:connect,
|
|
59
66
|
:connect_timeout,
|
|
60
67
|
:database,
|
|
61
68
|
:heartbeat_frequency,
|
|
62
69
|
:id_generator,
|
|
70
|
+
:load_balanced,
|
|
63
71
|
:local_threshold,
|
|
64
72
|
:logger,
|
|
65
73
|
:log_prefix,
|
|
@@ -81,8 +89,11 @@ module Mongo
|
|
|
81
89
|
:retry_writes,
|
|
82
90
|
:scan,
|
|
83
91
|
:sdam_proc,
|
|
92
|
+
:server_api,
|
|
84
93
|
:server_selection_timeout,
|
|
85
94
|
:socket_timeout,
|
|
95
|
+
:srv_max_hosts,
|
|
96
|
+
:srv_service_name,
|
|
86
97
|
:ssl,
|
|
87
98
|
:ssl_ca_cert,
|
|
88
99
|
:ssl_ca_cert_object,
|
|
@@ -97,9 +108,11 @@ module Mongo
|
|
|
97
108
|
:ssl_verify,
|
|
98
109
|
:ssl_verify_certificate,
|
|
99
110
|
:ssl_verify_hostname,
|
|
111
|
+
:ssl_verify_ocsp_endpoint,
|
|
100
112
|
:truncate_logs,
|
|
101
113
|
:user,
|
|
102
114
|
:wait_queue_timeout,
|
|
115
|
+
:wrapping_libraries,
|
|
103
116
|
:write,
|
|
104
117
|
:write_concern,
|
|
105
118
|
:zlib_compression_level,
|
|
@@ -108,7 +121,16 @@ module Mongo
|
|
|
108
121
|
# The compression algorithms supported by the driver.
|
|
109
122
|
#
|
|
110
123
|
# @since 2.5.0
|
|
111
|
-
VALID_COMPRESSORS = [
|
|
124
|
+
VALID_COMPRESSORS = [
|
|
125
|
+
Mongo::Protocol::Compressed::ZSTD,
|
|
126
|
+
Mongo::Protocol::Compressed::SNAPPY,
|
|
127
|
+
Mongo::Protocol::Compressed::ZLIB
|
|
128
|
+
].freeze
|
|
129
|
+
|
|
130
|
+
# The known server API versions.
|
|
131
|
+
VALID_SERVER_API_VERSIONS = %w(
|
|
132
|
+
1
|
|
133
|
+
).freeze
|
|
112
134
|
|
|
113
135
|
# @return [ Mongo::Cluster ] cluster The cluster of servers for the client.
|
|
114
136
|
attr_reader :cluster
|
|
@@ -119,6 +141,10 @@ module Mongo
|
|
|
119
141
|
# @return [ Hash ] options The configuration options.
|
|
120
142
|
attr_reader :options
|
|
121
143
|
|
|
144
|
+
# @return [ Mongo::Crypt::AutoEncrypter ] The object that encapsulates
|
|
145
|
+
# auto-encryption behavior
|
|
146
|
+
attr_reader :encrypter
|
|
147
|
+
|
|
122
148
|
# Delegate command and collections execution to the current database.
|
|
123
149
|
def_delegators :@database, :command, :collections
|
|
124
150
|
|
|
@@ -199,7 +225,6 @@ module Mongo
|
|
|
199
225
|
# connection string is also provided, these options take precedence over any
|
|
200
226
|
# analogous options present in the URI string.
|
|
201
227
|
#
|
|
202
|
-
#
|
|
203
228
|
# @option options [ String, Symbol ] :app_name Application name that is
|
|
204
229
|
# printed to the mongod logs upon establishing a connection in server
|
|
205
230
|
# versions >= 3.4.
|
|
@@ -207,20 +232,33 @@ module Mongo
|
|
|
207
232
|
# use. One of :mongodb_cr, :mongodb_x509, :plain, :scram, :scram256
|
|
208
233
|
# @option options [ Hash ] :auth_mech_properties
|
|
209
234
|
# @option options [ String ] :auth_source The source to authenticate from.
|
|
235
|
+
# @option options [ true | false | nil | Integer ] :bg_error_backtrace
|
|
236
|
+
# Experimental. Set to true to log complete backtraces for errors in
|
|
237
|
+
# background threads. Set to false or nil to not log backtraces. Provide
|
|
238
|
+
# a positive integer to log up to that many backtrace lines.
|
|
210
239
|
# @option options [ Array<String> ] :compressors A list of potential
|
|
211
240
|
# compressors to use, in order of preference. The driver chooses the
|
|
212
241
|
# first compressor that is also supported by the server. Currently the
|
|
213
|
-
# driver only supports 'zlib'.
|
|
214
|
-
# @option options [
|
|
242
|
+
# driver only supports 'zstd, 'snappy' and 'zlib'.
|
|
243
|
+
# @option options [ true | false ] :direct_connection Whether to connect
|
|
244
|
+
# directly to the specified seed, bypassing topology discovery. Exactly
|
|
245
|
+
# one seed must be provided.
|
|
246
|
+
# @option options [ Symbol ] :connect Deprecated - use :direct_connection
|
|
247
|
+
# option instead of this option. The connection method to use. This
|
|
215
248
|
# forces the cluster to behave in the specified way instead of
|
|
216
|
-
# 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.
|
|
217
253
|
# @option options [ Float ] :connect_timeout The timeout, in seconds, to
|
|
218
254
|
# attempt a connection.
|
|
219
255
|
# @option options [ String ] :database The database to connect to.
|
|
220
256
|
# @option options [ Float ] :heartbeat_frequency The interval, in seconds,
|
|
221
|
-
# for the server monitor to refresh its description via
|
|
257
|
+
# for the server monitor to refresh its description via hello.
|
|
222
258
|
# @option options [ Object ] :id_generator A custom object to generate ids
|
|
223
259
|
# for documents. Must respond to #generate.
|
|
260
|
+
# @option options [ true | false ] :load_balanced Whether to expect to
|
|
261
|
+
# connect to a load balancer.
|
|
224
262
|
# @option options [ Integer ] :local_threshold The local threshold boundary
|
|
225
263
|
# in seconds for selecting a near server for an operation.
|
|
226
264
|
# @option options [ Logger ] :logger A custom logger to use.
|
|
@@ -230,7 +268,7 @@ module Mongo
|
|
|
230
268
|
# @option options [ Integer ] :max_idle_time The maximum seconds a socket can remain idle
|
|
231
269
|
# since it has been checked in to the pool.
|
|
232
270
|
# @option options [ Integer ] :max_pool_size The maximum size of the
|
|
233
|
-
# connection pool.
|
|
271
|
+
# connection pool. Setting this option to zero creates an unlimited connection pool.
|
|
234
272
|
# @option options [ Integer ] :max_read_retries The maximum number of read
|
|
235
273
|
# retries when legacy read retries are in use.
|
|
236
274
|
# @option options [ Integer ] :max_write_retries The maximum number of write
|
|
@@ -288,18 +326,30 @@ module Mongo
|
|
|
288
326
|
# will ignore it and will never scan seeds in the constructor.
|
|
289
327
|
# @option options [ Proc ] :sdam_proc A Proc to invoke with the client
|
|
290
328
|
# as the argument prior to performing server discovery and monitoring.
|
|
291
|
-
# Use this to set up SDAM event listeners to receive events
|
|
329
|
+
# Use this to set up SDAM event listeners to receive events published
|
|
292
330
|
# during client construction.
|
|
293
331
|
#
|
|
294
332
|
# Note: the client is not fully constructed when sdam_proc is invoked,
|
|
295
333
|
# in particular the cluster is nil at this time. sdam_proc should
|
|
296
334
|
# limit itself to calling #subscribe and #unsubscribe methods on the
|
|
297
335
|
# client only.
|
|
336
|
+
# @option options [ Hash ] :server_api The requested server API version.
|
|
337
|
+
# This hash can have the following items:
|
|
338
|
+
# - *:version* -- string
|
|
339
|
+
# - *:strict* -- boolean
|
|
340
|
+
# - *:deprecation_errors* -- boolean
|
|
298
341
|
# @option options [ Integer ] :server_selection_timeout The timeout in seconds
|
|
299
342
|
# for selecting a server for an operation.
|
|
300
343
|
# @option options [ Float ] :socket_timeout The timeout, in seconds, to
|
|
301
344
|
# execute operations on a socket.
|
|
302
|
-
# @option options [
|
|
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.
|
|
352
|
+
# @option options [ true, false ] :ssl Whether to use TLS.
|
|
303
353
|
# @option options [ String ] :ssl_ca_cert The file containing concatenated
|
|
304
354
|
# certificate authority certificates used to validate certs passed from the
|
|
305
355
|
# other end of the connection. Intermediate certificates should NOT be
|
|
@@ -360,6 +410,10 @@ module Mongo
|
|
|
360
410
|
# @option options [ String ] :user The user name.
|
|
361
411
|
# @option options [ Float ] :wait_queue_timeout The time to wait, in
|
|
362
412
|
# seconds, in the connection pool for a connection to be checked in.
|
|
413
|
+
# @option options [ Array<Hash> ] :wrapping_libraries Information about
|
|
414
|
+
# libraries such as ODMs that are wrapping the driver, to be added to
|
|
415
|
+
# metadata sent to the server. Specify the lower level libraries first.
|
|
416
|
+
# Allowed hash keys: :name, :version, :platform.
|
|
363
417
|
# @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
|
|
364
418
|
# option.
|
|
365
419
|
# @option options [ Hash ] :write_concern The write concern options.
|
|
@@ -369,6 +423,60 @@ module Mongo
|
|
|
369
423
|
# See Ruby's Zlib module for valid levels.
|
|
370
424
|
# @option options [ Hash ] :resolv_options For internal driver use only.
|
|
371
425
|
# Options to pass through to Resolv::DNS constructor for SRV lookups.
|
|
426
|
+
# @option options [ Hash ] :auto_encryption_options Auto-encryption related
|
|
427
|
+
# options.
|
|
428
|
+
# - :key_vault_client => Client | nil, a client connected to the MongoDB
|
|
429
|
+
# instance containing the encryption key vault
|
|
430
|
+
# - :key_vault_namespace => String, the namespace of the key vault in the
|
|
431
|
+
# format database.collection
|
|
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.
|
|
439
|
+
# - :schema_map => Hash | nil, JSONSchema for one or more collections
|
|
440
|
+
# specifying which fields should be encrypted. This option is
|
|
441
|
+
# mutually exclusive with :schema_map_path.
|
|
442
|
+
# - Note: Schemas supplied in the schema_map only apply to configuring
|
|
443
|
+
# automatic encryption for client side encryption. Other validation
|
|
444
|
+
# rules in the JSON schema will not be enforced by the driver and will
|
|
445
|
+
# result in an error.
|
|
446
|
+
# - Note: Supplying a schema_map provides more security than relying on
|
|
447
|
+
# JSON Schemas obtained from the server. It protects against a
|
|
448
|
+
# malicious server advertising a false JSON Schema, which could trick
|
|
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.
|
|
455
|
+
# - :bypass_auto_encryption => Boolean, when true, disables auto encryption;
|
|
456
|
+
# defaults to false.
|
|
457
|
+
# - :extra_options => Hash | nil, options related to spawning mongocryptd
|
|
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.
|
|
465
|
+
#
|
|
466
|
+
# Notes on automatic encryption:
|
|
467
|
+
# - Automatic encryption is an enterprise only feature that only applies
|
|
468
|
+
# to operations on a collection.
|
|
469
|
+
# - Automatic encryption is not supported for operations on a database or
|
|
470
|
+
# view.
|
|
471
|
+
# - Automatic encryption requires the authenticated user to have the
|
|
472
|
+
# listCollections privilege.
|
|
473
|
+
# - At worst, automatic encryption may triple the number of connections
|
|
474
|
+
# used by the Client at any one time.
|
|
475
|
+
# - If automatic encryption fails on an operation, use a MongoClient
|
|
476
|
+
# configured with bypass_auto_encryption: true and use
|
|
477
|
+
# ClientEncryption.encrypt to manually encrypt values.
|
|
478
|
+
# - Enabling Client Side Encryption reduces the maximum write batch size
|
|
479
|
+
# and may have a negative performance impact.
|
|
372
480
|
#
|
|
373
481
|
# @since 2.0.0
|
|
374
482
|
def initialize(addresses_or_uri, options = nil)
|
|
@@ -395,14 +503,51 @@ module Mongo
|
|
|
395
503
|
@srv_records = uri.srv_records
|
|
396
504
|
else
|
|
397
505
|
addresses = addresses_or_uri
|
|
506
|
+
addresses.each do |addr|
|
|
507
|
+
if addr =~ /\Amongodb(\+srv)?:\/\//i
|
|
508
|
+
raise ArgumentError, "Host '#{addr}' should not contain protocol. Did you mean to not use an array?"
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
|
|
398
512
|
@srv_records = nil
|
|
399
513
|
end
|
|
400
514
|
|
|
515
|
+
options = self.class.canonicalize_ruby_options(options)
|
|
516
|
+
|
|
517
|
+
# The server API version is specified to be a string.
|
|
518
|
+
# However, it is very annoying to always provide the number 1 as a string,
|
|
519
|
+
# therefore cast to the string type here.
|
|
520
|
+
if server_api = options[:server_api]
|
|
521
|
+
if server_api.is_a?(Hash)
|
|
522
|
+
server_api = Options::Redacted.new(server_api)
|
|
523
|
+
if (version = server_api[:version]).is_a?(Integer)
|
|
524
|
+
options[:server_api] = server_api.merge(version: version.to_s)
|
|
525
|
+
end
|
|
526
|
+
end
|
|
527
|
+
end
|
|
528
|
+
|
|
401
529
|
# Special handling for sdam_proc as it is only used during client
|
|
402
530
|
# construction
|
|
403
531
|
sdam_proc = options.delete(:sdam_proc)
|
|
404
532
|
|
|
405
|
-
|
|
533
|
+
# For gssapi service_name, the default option is given in a hash
|
|
534
|
+
# (one level down from the top level).
|
|
535
|
+
merged_options = default_options(options)
|
|
536
|
+
options.each do |k, v|
|
|
537
|
+
default_v = merged_options[k]
|
|
538
|
+
if Hash === default_v
|
|
539
|
+
v = default_v.merge(v)
|
|
540
|
+
end
|
|
541
|
+
merged_options[k] = v
|
|
542
|
+
end
|
|
543
|
+
options = merged_options
|
|
544
|
+
|
|
545
|
+
options.keys.each do |k|
|
|
546
|
+
if options[k].nil?
|
|
547
|
+
options.delete(k)
|
|
548
|
+
end
|
|
549
|
+
end
|
|
550
|
+
|
|
406
551
|
@options = validate_new_options!(options)
|
|
407
552
|
=begin WriteConcern object support
|
|
408
553
|
if @options[:write_concern].is_a?(WriteConcern::Base)
|
|
@@ -412,10 +557,12 @@ module Mongo
|
|
|
412
557
|
end
|
|
413
558
|
=end
|
|
414
559
|
@options.freeze
|
|
415
|
-
validate_options!
|
|
560
|
+
validate_options!(addresses, is_srv: uri.is_a?(URI::SRVProtocol))
|
|
416
561
|
validate_authentication_options!
|
|
417
562
|
|
|
418
|
-
|
|
563
|
+
database_options = @options.dup
|
|
564
|
+
database_options.delete(:server_api)
|
|
565
|
+
@database = Database.new(self, @options[:database], database_options)
|
|
419
566
|
|
|
420
567
|
# Temporarily set monitoring so that event subscriptions can be
|
|
421
568
|
# set up without there being a cluster
|
|
@@ -425,12 +572,39 @@ module Mongo
|
|
|
425
572
|
sdam_proc.call(self)
|
|
426
573
|
end
|
|
427
574
|
|
|
428
|
-
@
|
|
575
|
+
@connect_lock = Mutex.new
|
|
576
|
+
@connect_lock.synchronize do
|
|
577
|
+
@cluster = Cluster.new(addresses, @monitoring,
|
|
578
|
+
cluster_options.merge(srv_uri: srv_uri))
|
|
579
|
+
end
|
|
429
580
|
|
|
430
|
-
|
|
431
|
-
|
|
581
|
+
begin
|
|
582
|
+
# Unset monitoring, it will be taken out of cluster from now on
|
|
583
|
+
remove_instance_variable('@monitoring')
|
|
584
|
+
|
|
585
|
+
if @options[:auto_encryption_options]
|
|
586
|
+
@connect_lock.synchronize do
|
|
587
|
+
build_encrypter
|
|
588
|
+
end
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
rescue
|
|
592
|
+
begin
|
|
593
|
+
@cluster.disconnect!
|
|
594
|
+
rescue => e
|
|
595
|
+
log_warn("Eror disconnecting cluster in client constructor's exception handler: #{e.class}: #{e}")
|
|
596
|
+
# Drop this exception so that the original exception is raised
|
|
597
|
+
end
|
|
598
|
+
raise
|
|
599
|
+
end
|
|
432
600
|
|
|
433
|
-
|
|
601
|
+
if block_given?
|
|
602
|
+
begin
|
|
603
|
+
yield(self)
|
|
604
|
+
ensure
|
|
605
|
+
close
|
|
606
|
+
end
|
|
607
|
+
end
|
|
434
608
|
end
|
|
435
609
|
|
|
436
610
|
# @api private
|
|
@@ -503,15 +677,12 @@ module Mongo
|
|
|
503
677
|
|
|
504
678
|
# Get a summary of the client state.
|
|
505
679
|
#
|
|
506
|
-
# @note
|
|
507
|
-
#
|
|
508
|
-
# @example Inspect the client.
|
|
509
|
-
# client.summary
|
|
680
|
+
# @note The exact format and layout of the returned summary string is
|
|
681
|
+
# not part of the driver's public API and may be changed at any time.
|
|
510
682
|
#
|
|
511
|
-
# @return [ String ]
|
|
683
|
+
# @return [ String ] The summary string.
|
|
512
684
|
#
|
|
513
685
|
# @since 2.7.0
|
|
514
|
-
# @api experimental
|
|
515
686
|
def summary
|
|
516
687
|
"#<Client cluster=#{cluster.summary}>"
|
|
517
688
|
end
|
|
@@ -541,7 +712,7 @@ module Mongo
|
|
|
541
712
|
#
|
|
542
713
|
# @return [ BSON::Document ] The user-defined read preference.
|
|
543
714
|
# The document may have the following fields:
|
|
544
|
-
# - *:
|
|
715
|
+
# - *:mode* -- read preference specified as a symbol; valid values are
|
|
545
716
|
# *:primary*, *:primary_preferred*, *:secondary*, *:secondary_preferred*
|
|
546
717
|
# and *:nearest*.
|
|
547
718
|
# - *:tag_sets* -- an array of hashes.
|
|
@@ -589,14 +760,14 @@ module Mongo
|
|
|
589
760
|
# @return [ Mongo::Client ] A new client instance.
|
|
590
761
|
#
|
|
591
762
|
# @since 2.0.0
|
|
592
|
-
def with(new_options =
|
|
763
|
+
def with(new_options = nil)
|
|
593
764
|
clone.tap do |client|
|
|
594
|
-
opts = client.update_options(new_options)
|
|
765
|
+
opts = client.update_options(new_options || Options::Redacted.new)
|
|
595
766
|
Database.create(client)
|
|
596
767
|
# We can't use the same cluster if some options that would affect it
|
|
597
768
|
# have changed.
|
|
598
769
|
if cluster_modifying?(opts)
|
|
599
|
-
Cluster.create(client)
|
|
770
|
+
Cluster.create(client, monitoring: opts[:monitoring])
|
|
600
771
|
end
|
|
601
772
|
end
|
|
602
773
|
end
|
|
@@ -616,6 +787,10 @@ module Mongo
|
|
|
616
787
|
#
|
|
617
788
|
# @api private
|
|
618
789
|
def update_options(new_options)
|
|
790
|
+
old_options = @options
|
|
791
|
+
|
|
792
|
+
new_options = self.class.canonicalize_ruby_options(new_options || {})
|
|
793
|
+
|
|
619
794
|
validate_new_options!(new_options).tap do |opts|
|
|
620
795
|
# Our options are frozen
|
|
621
796
|
options = @options.dup
|
|
@@ -625,8 +800,29 @@ module Mongo
|
|
|
625
800
|
if options[:write_concern] && opts[:write]
|
|
626
801
|
options.delete(:write_concern)
|
|
627
802
|
end
|
|
803
|
+
|
|
628
804
|
options.update(opts)
|
|
629
805
|
@options = options.freeze
|
|
806
|
+
|
|
807
|
+
auto_encryption_options_changed =
|
|
808
|
+
@options[:auto_encryption_options] != old_options[:auto_encryption_options]
|
|
809
|
+
|
|
810
|
+
# If there are new auto_encryption_options, create a new encrypter.
|
|
811
|
+
# Otherwise, allow the new client to share an encrypter with the
|
|
812
|
+
# original client.
|
|
813
|
+
#
|
|
814
|
+
# If auto_encryption_options are nil, set @encrypter to nil, but do not
|
|
815
|
+
# close the encrypter because it may still be used by the original client.
|
|
816
|
+
if @options[:auto_encryption_options] && auto_encryption_options_changed
|
|
817
|
+
@connect_lock.synchronize do
|
|
818
|
+
build_encrypter
|
|
819
|
+
end
|
|
820
|
+
elsif @options[:auto_encryption_options].nil?
|
|
821
|
+
@connect_lock.synchronize do
|
|
822
|
+
@encrypter = nil
|
|
823
|
+
end
|
|
824
|
+
end
|
|
825
|
+
|
|
630
826
|
validate_options!
|
|
631
827
|
validate_authentication_options!
|
|
632
828
|
end
|
|
@@ -644,7 +840,6 @@ module Mongo
|
|
|
644
840
|
options[:read_concern]
|
|
645
841
|
end
|
|
646
842
|
|
|
647
|
-
|
|
648
843
|
# Get the write concern for this client. If no option was provided, then a
|
|
649
844
|
# default single server acknowledgement will be used.
|
|
650
845
|
#
|
|
@@ -664,7 +859,18 @@ module Mongo
|
|
|
664
859
|
#
|
|
665
860
|
# @since 2.1.0
|
|
666
861
|
def close
|
|
667
|
-
@
|
|
862
|
+
@connect_lock.synchronize do
|
|
863
|
+
do_close
|
|
864
|
+
end
|
|
865
|
+
true
|
|
866
|
+
end
|
|
867
|
+
|
|
868
|
+
# Close encrypter and clean up auto-encryption resources.
|
|
869
|
+
#
|
|
870
|
+
# @return [ true ] Always true.
|
|
871
|
+
def close_encrypter
|
|
872
|
+
@encrypter.close if @encrypter
|
|
873
|
+
|
|
668
874
|
true
|
|
669
875
|
end
|
|
670
876
|
|
|
@@ -679,9 +885,16 @@ module Mongo
|
|
|
679
885
|
def reconnect
|
|
680
886
|
addresses = cluster.addresses.map(&:to_s)
|
|
681
887
|
|
|
682
|
-
@
|
|
888
|
+
@connect_lock.synchronize do
|
|
889
|
+
do_close rescue nil
|
|
890
|
+
|
|
891
|
+
@cluster = Cluster.new(addresses, monitoring, cluster_options)
|
|
892
|
+
|
|
893
|
+
if @options[:auto_encryption_options]
|
|
894
|
+
build_encrypter
|
|
895
|
+
end
|
|
896
|
+
end
|
|
683
897
|
|
|
684
|
-
@cluster = Cluster.new(addresses, monitoring, cluster_options)
|
|
685
898
|
true
|
|
686
899
|
end
|
|
687
900
|
|
|
@@ -693,6 +906,16 @@ module Mongo
|
|
|
693
906
|
# @param [ Hash ] filter The filter criteria for getting a list of databases.
|
|
694
907
|
# @param [ Hash ] opts The command options.
|
|
695
908
|
#
|
|
909
|
+
# @option opts [ true, false ] :authorized_databases A flag that determines
|
|
910
|
+
# which databases are returned based on user privileges when access control
|
|
911
|
+
# is enabled
|
|
912
|
+
#
|
|
913
|
+
# See https://mongodb.com/docs/manual/reference/command/listDatabases/
|
|
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.
|
|
918
|
+
#
|
|
696
919
|
# @return [ Array<String> ] The names of the databases.
|
|
697
920
|
#
|
|
698
921
|
# @since 2.0.5
|
|
@@ -709,6 +932,16 @@ module Mongo
|
|
|
709
932
|
# @param [ true, false ] name_only Whether to only return each database name without full metadata.
|
|
710
933
|
# @param [ Hash ] opts The command options.
|
|
711
934
|
#
|
|
935
|
+
# @option opts [ true, false ] :authorized_databases A flag that determines
|
|
936
|
+
# which databases are returned based on user privileges when access control
|
|
937
|
+
# is enabled
|
|
938
|
+
#
|
|
939
|
+
# See https://mongodb.com/docs/manual/reference/command/listDatabases/
|
|
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.
|
|
944
|
+
#
|
|
712
945
|
# @return [ Array<Hash> ] The info for each database.
|
|
713
946
|
#
|
|
714
947
|
# @since 2.0.5
|
|
@@ -716,6 +949,7 @@ module Mongo
|
|
|
716
949
|
cmd = { listDatabases: 1 }
|
|
717
950
|
cmd[:nameOnly] = !!name_only
|
|
718
951
|
cmd[:filter] = filter unless filter.empty?
|
|
952
|
+
cmd[:authorizedDatabases] = true if opts[:authorized_databases]
|
|
719
953
|
use(Database::ADMIN).database.read_command(cmd, opts).first[Database::DATABASES]
|
|
720
954
|
end
|
|
721
955
|
|
|
@@ -727,6 +961,10 @@ module Mongo
|
|
|
727
961
|
# @param [ Hash ] filter The filter criteria for getting a list of databases.
|
|
728
962
|
# @param [ Hash ] opts The command options.
|
|
729
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
|
+
#
|
|
730
968
|
# @return [ Array<Mongo::Database> ] The list of database objects.
|
|
731
969
|
#
|
|
732
970
|
# @since 2.5.0
|
|
@@ -756,8 +994,16 @@ module Mongo
|
|
|
756
994
|
#
|
|
757
995
|
# @since 2.5.0
|
|
758
996
|
def start_session(options = {})
|
|
759
|
-
get_session(options.merge(implicit: false))
|
|
760
|
-
|
|
997
|
+
session = get_session!(options.merge(implicit: false))
|
|
998
|
+
if block_given?
|
|
999
|
+
begin
|
|
1000
|
+
yield session
|
|
1001
|
+
ensure
|
|
1002
|
+
session.end_session
|
|
1003
|
+
end
|
|
1004
|
+
else
|
|
1005
|
+
session
|
|
1006
|
+
end
|
|
761
1007
|
end
|
|
762
1008
|
|
|
763
1009
|
# As of version 3.6 of the MongoDB server, a ``$changeStream`` pipeline stage is supported
|
|
@@ -769,11 +1015,35 @@ module Mongo
|
|
|
769
1015
|
#
|
|
770
1016
|
# @param [ Array<Hash> ] pipeline Optional additional filter operators.
|
|
771
1017
|
# @param [ Hash ] options The change stream options.
|
|
1018
|
+
# @option options [ String ] :full_document Allowed values: nil, 'default',
|
|
1019
|
+
# 'updateLookup', 'whenAvailable', 'required'.
|
|
772
1020
|
#
|
|
773
|
-
#
|
|
774
|
-
#
|
|
775
|
-
#
|
|
776
|
-
#
|
|
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'.
|
|
1040
|
+
#
|
|
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.
|
|
777
1047
|
# @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
|
|
778
1048
|
# for the new change stream.
|
|
779
1049
|
# @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
|
|
@@ -785,6 +1055,13 @@ module Mongo
|
|
|
785
1055
|
# changes that occurred at or after the specified timestamp. Any command run
|
|
786
1056
|
# against the server will return a cluster time that can be used here.
|
|
787
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.
|
|
788
1065
|
#
|
|
789
1066
|
# @note A change stream only allows 'majority' read concern.
|
|
790
1067
|
# @note This helper method is preferable to running a raw aggregation with a $changeStream
|
|
@@ -796,15 +1073,103 @@ module Mongo
|
|
|
796
1073
|
def watch(pipeline = [], options = {})
|
|
797
1074
|
return use(Database::ADMIN).watch(pipeline, options) unless database.name == Database::ADMIN
|
|
798
1075
|
|
|
1076
|
+
view_options = options.dup
|
|
1077
|
+
view_options[:await_data] = true if options[:max_await_time_ms]
|
|
1078
|
+
|
|
799
1079
|
Mongo::Collection::View::ChangeStream.new(
|
|
800
|
-
Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"]),
|
|
1080
|
+
Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"], {}, view_options),
|
|
801
1081
|
pipeline,
|
|
802
1082
|
Mongo::Collection::View::ChangeStream::CLUSTER,
|
|
803
1083
|
options)
|
|
804
1084
|
end
|
|
805
1085
|
|
|
1086
|
+
# Returns a session to use for operations if possible.
|
|
1087
|
+
#
|
|
1088
|
+
# If :session option is set, validates that session and returns it.
|
|
1089
|
+
# Otherwise, if deployment supports sessions, creates a new session and
|
|
1090
|
+
# returns it. When a new session is created, the session will be implicit
|
|
1091
|
+
# (lifecycle is managed by the driver) if the :implicit option is given,
|
|
1092
|
+
# otherwise the session will be explicit (lifecycle managed by the
|
|
1093
|
+
# application). If deployment does not support session, returns nil.
|
|
1094
|
+
#
|
|
1095
|
+
# @option options [ true | false ] :implicit When no session is passed in,
|
|
1096
|
+
# whether to create an implicit session.
|
|
1097
|
+
# @option options [ Session ] :session The session to validate and return.
|
|
1098
|
+
#
|
|
1099
|
+
# @return [ Session | nil ] Session object or nil if sessions are not
|
|
1100
|
+
# supported by the deployment.
|
|
1101
|
+
#
|
|
1102
|
+
# @api private
|
|
1103
|
+
def get_session(options = {})
|
|
1104
|
+
get_session!(options)
|
|
1105
|
+
rescue Error::SessionsNotSupported
|
|
1106
|
+
nil
|
|
1107
|
+
end
|
|
1108
|
+
|
|
1109
|
+
# Creates a session to use for operations if possible and yields it to
|
|
1110
|
+
# the provided block.
|
|
1111
|
+
#
|
|
1112
|
+
# If :session option is set, validates that session and uses it.
|
|
1113
|
+
# Otherwise, if deployment supports sessions, creates a new session and
|
|
1114
|
+
# uses it. When a new session is created, the session will be implicit
|
|
1115
|
+
# (lifecycle is managed by the driver) if the :implicit option is given,
|
|
1116
|
+
# otherwise the session will be explicit (lifecycle managed by the
|
|
1117
|
+
# application). If deployment does not support session, yields nil to
|
|
1118
|
+
# the block.
|
|
1119
|
+
#
|
|
1120
|
+
# When the block finishes, if the session was created and was implicit,
|
|
1121
|
+
# or if an implicit session was passed in, the session is ended which
|
|
1122
|
+
# returns it to the pool of available sessions.
|
|
1123
|
+
#
|
|
1124
|
+
# @option options [ true | false ] :implicit When no session is passed in,
|
|
1125
|
+
# whether to create an implicit session.
|
|
1126
|
+
# @option options [ Session ] :session The session to validate and return.
|
|
1127
|
+
#
|
|
1128
|
+
# @api private
|
|
1129
|
+
def with_session(options = {}, &block)
|
|
1130
|
+
session = get_session(options)
|
|
1131
|
+
|
|
1132
|
+
yield session
|
|
1133
|
+
ensure
|
|
1134
|
+
if session && session.implicit?
|
|
1135
|
+
session.end_session
|
|
1136
|
+
end
|
|
1137
|
+
end
|
|
1138
|
+
|
|
1139
|
+
class << self
|
|
1140
|
+
# Lowercases auth mechanism properties, if given, in the specified
|
|
1141
|
+
# options, then converts the options to an instance of Options::Redacted.
|
|
1142
|
+
#
|
|
1143
|
+
# @api private
|
|
1144
|
+
def canonicalize_ruby_options(options)
|
|
1145
|
+
Options::Redacted.new(Hash[options.map do |k, v|
|
|
1146
|
+
if k == :auth_mech_properties || k == 'auth_mech_properties'
|
|
1147
|
+
if v
|
|
1148
|
+
v = Hash[v.map { |pk, pv| [pk.downcase, pv] }]
|
|
1149
|
+
end
|
|
1150
|
+
end
|
|
1151
|
+
[k, v]
|
|
1152
|
+
end])
|
|
1153
|
+
end
|
|
1154
|
+
end
|
|
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
|
+
|
|
806
1164
|
private
|
|
807
1165
|
|
|
1166
|
+
# Create a new encrypter object using the client's auto encryption options
|
|
1167
|
+
def build_encrypter
|
|
1168
|
+
@encrypter = Crypt::AutoEncrypter.new(
|
|
1169
|
+
@options[:auto_encryption_options].merge(client: self)
|
|
1170
|
+
)
|
|
1171
|
+
end
|
|
1172
|
+
|
|
808
1173
|
# Generate default client options based on the URI and options
|
|
809
1174
|
# passed into the Client constructor.
|
|
810
1175
|
def default_options(options)
|
|
@@ -822,34 +1187,59 @@ module Mongo
|
|
|
822
1187
|
end
|
|
823
1188
|
end
|
|
824
1189
|
|
|
825
|
-
#
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
1190
|
+
# Implementation for #close, assumes the connect lock is already acquired.
|
|
1191
|
+
def do_close
|
|
1192
|
+
@cluster.disconnect!
|
|
1193
|
+
close_encrypter
|
|
1194
|
+
end
|
|
1195
|
+
|
|
1196
|
+
# Returns a session to use for operations.
|
|
829
1197
|
#
|
|
830
|
-
#
|
|
831
|
-
#
|
|
832
|
-
|
|
1198
|
+
# If :session option is set, validates that session and returns it.
|
|
1199
|
+
# Otherwise, if deployment supports sessions, creates a new session and
|
|
1200
|
+
# returns it. When a new session is created, the session will be implicit
|
|
1201
|
+
# (lifecycle is managed by the driver) if the :implicit option is given,
|
|
1202
|
+
# otherwise the session will be explicit (lifecycle managed by the
|
|
1203
|
+
# application). If deployment does not support session, raises
|
|
1204
|
+
# Error::InvalidSession.
|
|
1205
|
+
#
|
|
1206
|
+
# @option options [ true | false ] :implicit When no session is passed in,
|
|
1207
|
+
# whether to create an implicit session.
|
|
1208
|
+
# @option options [ Session ] :session The session to validate and return.
|
|
1209
|
+
#
|
|
1210
|
+
# @return [ Session ] A session object.
|
|
1211
|
+
#
|
|
1212
|
+
# @raise Error::SessionsNotSupported if sessions are not supported by
|
|
1213
|
+
# the deployment.
|
|
1214
|
+
#
|
|
1215
|
+
# @api private
|
|
1216
|
+
def get_session!(options = {})
|
|
833
1217
|
if options[:session]
|
|
834
1218
|
return options[:session].validate!(self)
|
|
835
1219
|
end
|
|
836
1220
|
|
|
837
|
-
|
|
838
|
-
Session.new(cluster.session_pool.checkout, self, { implicit: true }.merge(options))
|
|
839
|
-
end
|
|
840
|
-
end
|
|
1221
|
+
cluster.validate_session_support!
|
|
841
1222
|
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
1223
|
+
options = {implicit: true}.update(options)
|
|
1224
|
+
|
|
1225
|
+
server_session = if options[:implicit]
|
|
1226
|
+
nil
|
|
1227
|
+
else
|
|
1228
|
+
cluster.session_pool.checkout
|
|
848
1229
|
end
|
|
1230
|
+
|
|
1231
|
+
Session.new(server_session, self, options)
|
|
849
1232
|
end
|
|
850
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
|
|
851
1240
|
def initialize_copy(original)
|
|
852
1241
|
@options = original.options.dup
|
|
1242
|
+
@connect_lock = Mutex.new
|
|
853
1243
|
@monitoring = @cluster ? monitoring : Monitoring.new(options)
|
|
854
1244
|
@database = nil
|
|
855
1245
|
@read_preference = nil
|
|
@@ -869,8 +1259,42 @@ module Mongo
|
|
|
869
1259
|
# The argument may contain a subset of options that the client will
|
|
870
1260
|
# eventually have; this method validates each of the provided options
|
|
871
1261
|
# but does not check for interactions between combinations of options.
|
|
872
|
-
def validate_new_options!(opts
|
|
1262
|
+
def validate_new_options!(opts)
|
|
873
1263
|
return Options::Redacted.new unless opts
|
|
1264
|
+
if opts[:read_concern]
|
|
1265
|
+
# Raise an error for non user-settable options
|
|
1266
|
+
if opts[:read_concern][:after_cluster_time]
|
|
1267
|
+
raise Mongo::Error::InvalidReadConcern.new(
|
|
1268
|
+
'The after_cluster_time read_concern option cannot be specified by the user'
|
|
1269
|
+
)
|
|
1270
|
+
end
|
|
1271
|
+
|
|
1272
|
+
given_keys = opts[:read_concern].keys.map(&:to_s)
|
|
1273
|
+
allowed_keys = ['level']
|
|
1274
|
+
invalid_keys = given_keys - allowed_keys
|
|
1275
|
+
# Warn that options are invalid but keep it and forward to the server
|
|
1276
|
+
unless invalid_keys.empty?
|
|
1277
|
+
log_warn("Read concern has invalid keys: #{invalid_keys.join(',')}.")
|
|
1278
|
+
end
|
|
1279
|
+
end
|
|
1280
|
+
|
|
1281
|
+
if server_api = opts[:server_api]
|
|
1282
|
+
unless server_api.is_a?(Hash)
|
|
1283
|
+
raise ArgumentError, ":server_api value must be a hash: #{server_api}"
|
|
1284
|
+
end
|
|
1285
|
+
|
|
1286
|
+
extra_keys = server_api.keys - %w(version strict deprecation_errors)
|
|
1287
|
+
unless extra_keys.empty?
|
|
1288
|
+
raise ArgumentError, "Unknown keys under :server_api: #{extra_keys.map(&:inspect).join(', ')}"
|
|
1289
|
+
end
|
|
1290
|
+
|
|
1291
|
+
if version = server_api[:version]
|
|
1292
|
+
unless VALID_SERVER_API_VERSIONS.include?(version)
|
|
1293
|
+
raise ArgumentError, "Unknown server API version: #{version}"
|
|
1294
|
+
end
|
|
1295
|
+
end
|
|
1296
|
+
end
|
|
1297
|
+
|
|
874
1298
|
Lint.validate_underscore_read_preference(opts[:read])
|
|
875
1299
|
Lint.validate_read_concern_option(opts[:read_concern])
|
|
876
1300
|
opts.each.inject(Options::Redacted.new) do |_options, (k, v)|
|
|
@@ -880,7 +1304,22 @@ module Mongo
|
|
|
880
1304
|
validate_read!(key, opts)
|
|
881
1305
|
if key == :compressors
|
|
882
1306
|
compressors = valid_compressors(v)
|
|
1307
|
+
|
|
1308
|
+
if compressors.include?('snappy')
|
|
1309
|
+
validate_snappy_compression!
|
|
1310
|
+
end
|
|
1311
|
+
|
|
1312
|
+
if compressors.include?('zstd')
|
|
1313
|
+
validate_zstd_compression!
|
|
1314
|
+
end
|
|
1315
|
+
|
|
883
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
|
|
884
1323
|
else
|
|
885
1324
|
_options[key] = v
|
|
886
1325
|
end
|
|
@@ -894,10 +1333,136 @@ module Mongo
|
|
|
894
1333
|
# Validates all options after they are set on the client.
|
|
895
1334
|
# This method is intended to catch combinations of options which are
|
|
896
1335
|
# not allowed.
|
|
897
|
-
def validate_options!
|
|
1336
|
+
def validate_options!(addresses = nil, is_srv: nil)
|
|
898
1337
|
if options[:write] && options[:write_concern] && options[:write] != options[:write_concern]
|
|
899
1338
|
raise ArgumentError, "If :write and :write_concern are both given, they must be identical: #{options.inspect}"
|
|
900
1339
|
end
|
|
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
|
+
|
|
1347
|
+
if options[:direct_connection]
|
|
1348
|
+
if connect && connect != :direct
|
|
1349
|
+
raise ArgumentError, "Conflicting client options: direct_connection=true and connect=#{connect}"
|
|
1350
|
+
end
|
|
1351
|
+
# When a new client is created, we get the list of seed addresses
|
|
1352
|
+
if addresses && addresses.length > 1
|
|
1353
|
+
raise ArgumentError, "direct_connection=true cannot be used with multiple seeds"
|
|
1354
|
+
end
|
|
1355
|
+
# When a client is copied using #with, we have a cluster
|
|
1356
|
+
if cluster && !cluster.topology.is_a?(Mongo::Cluster::Topology::Single)
|
|
1357
|
+
raise ArgumentError, "direct_connection=true cannot be used with topologies other than Single (this client is #{cluster.topology.class.name.sub(/.*::/, '')})"
|
|
1358
|
+
end
|
|
1359
|
+
end
|
|
1360
|
+
|
|
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}"
|
|
1391
|
+
end
|
|
1392
|
+
|
|
1393
|
+
%i(connect_timeout socket_timeout).each do |key|
|
|
1394
|
+
if value = options[key]
|
|
1395
|
+
unless Numeric === value
|
|
1396
|
+
raise ArgumentError, "#{key} must be a non-negative number: #{value}"
|
|
1397
|
+
end
|
|
1398
|
+
if value < 0
|
|
1399
|
+
raise ArgumentError, "#{key} must be a non-negative number: #{value}"
|
|
1400
|
+
end
|
|
1401
|
+
end
|
|
1402
|
+
end
|
|
1403
|
+
|
|
1404
|
+
if value = options[:bg_error_backtrace]
|
|
1405
|
+
case value
|
|
1406
|
+
when Integer
|
|
1407
|
+
if value <= 0
|
|
1408
|
+
raise ArgumentError, ":bg_error_backtrace option value must be true, false, nil or a positive integer: #{value}"
|
|
1409
|
+
end
|
|
1410
|
+
when true
|
|
1411
|
+
# OK
|
|
1412
|
+
else
|
|
1413
|
+
raise ArgumentError, ":bg_error_backtrace option value must be true, false, nil or a positive integer: #{value}"
|
|
1414
|
+
end
|
|
1415
|
+
end
|
|
1416
|
+
|
|
1417
|
+
if libraries = options[:wrapping_libraries]
|
|
1418
|
+
unless Array === libraries
|
|
1419
|
+
raise ArgumentError, ":wrapping_libraries must be an array of hashes: #{libraries}"
|
|
1420
|
+
end
|
|
1421
|
+
|
|
1422
|
+
libraries = libraries.map do |library|
|
|
1423
|
+
Utils.shallow_symbolize_keys(library)
|
|
1424
|
+
end
|
|
1425
|
+
|
|
1426
|
+
libraries.each do |library|
|
|
1427
|
+
unless Hash === library
|
|
1428
|
+
raise ArgumentError, ":wrapping_libraries element is not a hash: #{library}"
|
|
1429
|
+
end
|
|
1430
|
+
|
|
1431
|
+
if library.empty?
|
|
1432
|
+
raise ArgumentError, ":wrapping_libraries element is empty"
|
|
1433
|
+
end
|
|
1434
|
+
|
|
1435
|
+
unless (library.keys - %i(name platform version)).empty?
|
|
1436
|
+
raise ArgumentError, ":wrapping_libraries element has invalid keys (allowed keys: :name, :platform, :version): #{library}"
|
|
1437
|
+
end
|
|
1438
|
+
|
|
1439
|
+
library.each do |key, value|
|
|
1440
|
+
if value.include?('|')
|
|
1441
|
+
raise ArgumentError, ":wrapping_libraries element value cannot include '|': #{value}"
|
|
1442
|
+
end
|
|
1443
|
+
end
|
|
1444
|
+
end
|
|
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
|
|
901
1466
|
end
|
|
902
1467
|
|
|
903
1468
|
# Validates all authentication-related options after they are set on the client
|
|
@@ -911,7 +1476,11 @@ module Mongo
|
|
|
911
1476
|
|
|
912
1477
|
if auth_mech.nil?
|
|
913
1478
|
if user && user.empty?
|
|
914
|
-
raise Mongo::Auth::InvalidConfiguration
|
|
1479
|
+
raise Mongo::Auth::InvalidConfiguration, 'Empty username is not supported for default auth mechanism'
|
|
1480
|
+
end
|
|
1481
|
+
|
|
1482
|
+
if auth_source == ''
|
|
1483
|
+
raise Mongo::Auth::InvalidConfiguration, 'Auth source cannot be empty for default auth mechanism'
|
|
915
1484
|
end
|
|
916
1485
|
|
|
917
1486
|
return
|
|
@@ -921,24 +1490,35 @@ module Mongo
|
|
|
921
1490
|
raise Mongo::Auth::InvalidMechanism.new(auth_mech)
|
|
922
1491
|
end
|
|
923
1492
|
|
|
924
|
-
if user.nil? &&
|
|
925
|
-
raise Mongo::Auth::InvalidConfiguration
|
|
1493
|
+
if user.nil? && !%i(aws mongodb_x509).include?(auth_mech)
|
|
1494
|
+
raise Mongo::Auth::InvalidConfiguration, "Username is required for auth mechanism #{auth_mech}"
|
|
926
1495
|
end
|
|
927
1496
|
|
|
928
|
-
if password.nil? &&
|
|
929
|
-
raise Mongo::Auth::InvalidConfiguration
|
|
1497
|
+
if password.nil? && !%i(aws gssapi mongodb_x509).include?(auth_mech)
|
|
1498
|
+
raise Mongo::Auth::InvalidConfiguration, "Password is required for auth mechanism #{auth_mech}"
|
|
930
1499
|
end
|
|
931
1500
|
|
|
932
1501
|
if password && auth_mech == :mongodb_x509
|
|
933
|
-
raise Mongo::Auth::InvalidConfiguration
|
|
1502
|
+
raise Mongo::Auth::InvalidConfiguration, 'Password is not supported for :mongodb_x509 auth mechanism'
|
|
1503
|
+
end
|
|
1504
|
+
|
|
1505
|
+
if auth_mech == :aws && user && !password
|
|
1506
|
+
raise Mongo::Auth::InvalidConfiguration, 'Username is provided but password is not provided for :aws auth mechanism'
|
|
934
1507
|
end
|
|
935
1508
|
|
|
936
|
-
if
|
|
937
|
-
|
|
1509
|
+
if %i(aws gssapi mongodb_x509).include?(auth_mech)
|
|
1510
|
+
if !['$external', nil].include?(auth_source)
|
|
1511
|
+
raise Mongo::Auth::InvalidConfiguration, "#{auth_source} is an invalid auth source for #{auth_mech}; valid options are $external and nil"
|
|
1512
|
+
end
|
|
1513
|
+
else
|
|
1514
|
+
# Auth source is the database name, and thus cannot be the empty string.
|
|
1515
|
+
if auth_source == ''
|
|
1516
|
+
raise Mongo::Auth::InvalidConfiguration, "Auth source cannot be empty for auth mechanism #{auth_mech}"
|
|
1517
|
+
end
|
|
938
1518
|
end
|
|
939
1519
|
|
|
940
|
-
if mech_properties &&
|
|
941
|
-
raise Mongo::Auth::InvalidConfiguration
|
|
1520
|
+
if mech_properties && !%i(aws gssapi).include?(auth_mech)
|
|
1521
|
+
raise Mongo::Auth::InvalidConfiguration, ":mechanism_properties are not supported for auth mechanism #{auth_mech}"
|
|
942
1522
|
end
|
|
943
1523
|
end
|
|
944
1524
|
|
|
@@ -949,15 +1529,36 @@ module Mongo
|
|
|
949
1529
|
"This compressor will not be used.")
|
|
950
1530
|
false
|
|
951
1531
|
else
|
|
1532
|
+
|
|
952
1533
|
true
|
|
953
1534
|
end
|
|
954
1535
|
end
|
|
955
1536
|
end
|
|
956
1537
|
|
|
1538
|
+
def validate_snappy_compression!
|
|
1539
|
+
return if defined?(Snappy)
|
|
1540
|
+
require 'snappy'
|
|
1541
|
+
rescue LoadError => e
|
|
1542
|
+
raise Error::UnmetDependency, "Cannot enable snappy compression because the snappy gem " \
|
|
1543
|
+
"has not been installed. Add \"gem 'snappy'\" to your Gemfile and run " \
|
|
1544
|
+
"\"bundle install\" to install the gem. (#{e.class}: #{e})"
|
|
1545
|
+
end
|
|
1546
|
+
|
|
1547
|
+
def validate_zstd_compression!
|
|
1548
|
+
return if defined?(Zstd)
|
|
1549
|
+
require 'zstd-ruby'
|
|
1550
|
+
rescue LoadError => e
|
|
1551
|
+
raise Error::UnmetDependency, "Cannot enable zstd compression because the zstd-ruby gem " \
|
|
1552
|
+
"has not been installed. Add \"gem 'zstd-ruby'\" to your Gemfile and run " \
|
|
1553
|
+
"\"bundle install\" to install the gem. (#{e.class}: #{e})"
|
|
1554
|
+
end
|
|
1555
|
+
|
|
957
1556
|
def validate_max_min_pool_size!(option, opts)
|
|
958
1557
|
if option == :min_pool_size && opts[:min_pool_size]
|
|
959
1558
|
max = opts[:max_pool_size] || Server::ConnectionPool::DEFAULT_MAX_SIZE
|
|
960
|
-
|
|
1559
|
+
if max != 0 && opts[:min_pool_size] > max
|
|
1560
|
+
raise Error::InvalidMinPoolSize.new(opts[:min_pool_size], max)
|
|
1561
|
+
end
|
|
961
1562
|
end
|
|
962
1563
|
true
|
|
963
1564
|
end
|