mongo 2.18.2 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +12 -2
- data/Rakefile +4 -3
- data/bin/mongo_console +2 -0
- data/lib/mongo/active_support.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/address/unix.rb +1 -1
- data/lib/mongo/address/validator.rb +1 -1
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/auth/aws/conversation.rb +1 -5
- data/lib/mongo/auth/aws/credentials.rb +38 -0
- data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
- data/lib/mongo/auth/aws/credentials_retriever.rb +172 -37
- data/lib/mongo/auth/aws/request.rb +1 -2
- data/lib/mongo/auth/aws.rb +6 -6
- data/lib/mongo/auth/base.rb +1 -1
- data/lib/mongo/auth/conversation_base.rb +1 -1
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/cr.rb +1 -1
- data/lib/mongo/auth/credential_cache.rb +1 -1
- data/lib/mongo/auth/gssapi/conversation.rb +1 -1
- data/lib/mongo/auth/gssapi.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/ldap.rb +1 -1
- data/lib/mongo/auth/roles.rb +17 -17
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
- data/lib/mongo/auth/scram/conversation.rb +1 -1
- data/lib/mongo/auth/scram.rb +1 -1
- data/lib/mongo/auth/scram256/conversation.rb +1 -1
- data/lib/mongo/auth/scram256.rb +1 -1
- data/lib/mongo/auth/scram_conversation_base.rb +1 -1
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
- data/lib/mongo/auth/stringprep/tables.rb +1 -1
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
- data/lib/mongo/auth/stringprep.rb +1 -1
- data/lib/mongo/auth/user/view.rb +1 -1
- data/lib/mongo/auth/user.rb +1 -1
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/auth/x509.rb +1 -1
- data/lib/mongo/auth.rb +1 -1
- data/lib/mongo/background_thread.rb +1 -1
- data/lib/mongo/bson.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +1 -1
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/result.rb +1 -1
- data/lib/mongo/bulk_write/result_combiner.rb +1 -1
- data/lib/mongo/bulk_write/transformable.rb +1 -1
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/validatable.rb +1 -1
- data/lib/mongo/bulk_write.rb +1 -1
- data/lib/mongo/caching_cursor.rb +1 -1
- data/lib/mongo/client.rb +27 -4
- data/lib/mongo/client_encryption.rb +102 -1
- data/lib/mongo/cluster/periodic_executor.rb +1 -1
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +2 -6
- data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
- data/lib/mongo/cluster/sdam_flow.rb +42 -15
- data/lib/mongo/cluster/topology/base.rb +1 -1
- data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +1 -1
- data/lib/mongo/cluster/topology.rb +1 -1
- data/lib/mongo/cluster.rb +29 -12
- data/lib/mongo/cluster_time.rb +1 -1
- data/lib/mongo/collection/helpers.rb +1 -1
- data/lib/mongo/collection/queryable_encryption.rb +83 -43
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
- data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/builder.rb +1 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +3 -3
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/immutable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +1 -1
- data/lib/mongo/collection/view/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +11 -12
- data/lib/mongo/collection/view/writable.rb +1 -1
- data/lib/mongo/collection/view.rb +1 -1
- data/lib/mongo/collection.rb +26 -11
- data/lib/mongo/condition_variable.rb +58 -0
- data/lib/mongo/config/options.rb +1 -0
- data/lib/mongo/config/validators/option.rb +1 -0
- data/lib/mongo/config.rb +1 -0
- data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
- data/lib/mongo/crypt/auto_encrypter.rb +5 -3
- data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
- data/lib/mongo/crypt/binary.rb +1 -1
- data/lib/mongo/crypt/binding.rb +224 -30
- data/lib/mongo/crypt/context.rb +67 -4
- data/lib/mongo/crypt/data_key_context.rb +1 -1
- data/lib/mongo/crypt/encryption_io.rb +2 -2
- data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
- data/lib/mongo/crypt/explicit_encrypter.rb +120 -34
- data/lib/mongo/crypt/explicit_encryption_context.rb +58 -27
- data/lib/mongo/crypt/explicit_encryption_expression_context.rb +30 -0
- data/lib/mongo/crypt/handle.rb +10 -2
- data/lib/mongo/crypt/hooks.rb +1 -1
- data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
- data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
- data/lib/mongo/crypt/kms/aws.rb +3 -119
- data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
- data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +122 -0
- data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
- data/lib/mongo/crypt/kms/azure.rb +5 -128
- data/lib/mongo/crypt/kms/credentials.rb +17 -2
- data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +58 -0
- data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
- data/lib/mongo/crypt/kms/gcp.rb +4 -172
- data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
- data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
- data/lib/mongo/crypt/kms/kmip.rb +3 -100
- data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
- data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
- data/lib/mongo/crypt/kms/local.rb +3 -66
- data/lib/mongo/crypt/kms/master_key_document.rb +1 -1
- data/lib/mongo/crypt/kms.rb +7 -1
- data/lib/mongo/crypt/kms_context.rb +1 -1
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +1 -1
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +1 -1
- data/lib/mongo/crypt/status.rb +1 -1
- data/lib/mongo/crypt.rb +13 -1
- data/lib/mongo/cursor/kill_spec.rb +1 -1
- data/lib/mongo/cursor.rb +40 -6
- data/lib/mongo/database/view.rb +41 -4
- data/lib/mongo/database.rb +2 -2
- data/lib/mongo/dbref.rb +1 -1
- data/lib/mongo/distinguishing_semaphore.rb +2 -2
- data/lib/mongo/error/auth_error.rb +1 -1
- data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
- data/lib/mongo/error/bulk_write_error.rb +1 -1
- data/lib/mongo/error/change_stream_resumable.rb +1 -1
- data/lib/mongo/error/client_closed.rb +24 -0
- data/lib/mongo/error/closed_stream.rb +1 -1
- data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
- data/lib/mongo/error/connection_perished.rb +3 -1
- data/lib/mongo/error/connection_unavailable.rb +27 -0
- data/lib/mongo/error/credential_check_error.rb +1 -1
- data/lib/mongo/error/crypt_error.rb +1 -1
- data/lib/mongo/error/extra_file_chunk.rb +1 -1
- data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
- data/lib/mongo/error/file_not_found.rb +1 -1
- data/lib/mongo/error/handshake_error.rb +1 -1
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
- data/lib/mongo/error/internal_driver_error.rb +1 -1
- data/lib/mongo/error/invalid_address.rb +1 -1
- data/lib/mongo/error/invalid_application_name.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
- data/lib/mongo/error/invalid_collection_name.rb +1 -1
- data/lib/mongo/error/invalid_config_option.rb +1 -0
- data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
- data/lib/mongo/error/invalid_database_name.rb +1 -1
- data/lib/mongo/error/invalid_document.rb +1 -1
- data/lib/mongo/error/invalid_file.rb +1 -1
- data/lib/mongo/error/invalid_file_revision.rb +1 -1
- data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
- data/lib/mongo/error/invalid_nonce.rb +1 -1
- data/lib/mongo/error/invalid_read_concern.rb +1 -1
- data/lib/mongo/error/invalid_read_option.rb +1 -1
- data/lib/mongo/error/invalid_replacement_document.rb +1 -1
- data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
- data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
- data/lib/mongo/error/invalid_server_preference.rb +1 -1
- data/lib/mongo/error/invalid_session.rb +1 -1
- data/lib/mongo/error/invalid_signature.rb +1 -1
- data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
- data/lib/mongo/error/invalid_txt_record.rb +1 -1
- data/lib/mongo/error/invalid_update_document.rb +1 -1
- data/lib/mongo/error/invalid_uri.rb +1 -1
- data/lib/mongo/error/invalid_write_concern.rb +1 -1
- data/lib/mongo/error/kms_error.rb +1 -1
- data/lib/mongo/error/labelable.rb +1 -1
- data/lib/mongo/error/lint_error.rb +1 -1
- data/lib/mongo/error/max_bson_size.rb +1 -1
- data/lib/mongo/error/max_message_size.rb +1 -1
- data/lib/mongo/error/mismatched_domain.rb +1 -1
- data/lib/mongo/error/missing_connection.rb +4 -2
- data/lib/mongo/error/missing_file_chunk.rb +1 -1
- data/lib/mongo/error/missing_password.rb +1 -1
- data/lib/mongo/error/missing_resume_token.rb +1 -1
- data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
- data/lib/mongo/error/missing_service_id.rb +1 -1
- data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
- data/lib/mongo/error/multi_index_drop.rb +1 -1
- data/lib/mongo/error/need_primary_server.rb +1 -1
- data/lib/mongo/error/no_server_available.rb +1 -1
- data/lib/mongo/error/no_service_connection_available.rb +1 -1
- data/lib/mongo/error/no_srv_records.rb +1 -1
- data/lib/mongo/error/notable.rb +8 -1
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/error/pool_cleared_error.rb +40 -0
- data/lib/mongo/error/pool_closed_error.rb +4 -17
- data/lib/mongo/error/pool_error.rb +45 -0
- data/lib/mongo/error/pool_paused_error.rb +40 -0
- data/lib/mongo/error/raise_original_error.rb +1 -1
- data/lib/mongo/error/read_write_retryable.rb +1 -1
- data/lib/mongo/error/sdam_error_detection.rb +1 -1
- data/lib/mongo/error/server_api_conflict.rb +1 -1
- data/lib/mongo/error/server_api_not_supported.rb +1 -1
- data/lib/mongo/error/server_certificate_revoked.rb +1 -1
- data/lib/mongo/error/server_not_usable.rb +36 -0
- data/lib/mongo/error/session_ended.rb +1 -1
- data/lib/mongo/error/session_not_materialized.rb +1 -1
- data/lib/mongo/error/sessions_not_supported.rb +1 -1
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
- data/lib/mongo/error/socket_error.rb +1 -1
- data/lib/mongo/error/socket_timeout_error.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
- data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
- data/lib/mongo/error/unexpected_response.rb +1 -1
- data/lib/mongo/error/unknown_payload_type.rb +1 -1
- data/lib/mongo/error/unmet_dependency.rb +1 -1
- data/lib/mongo/error/unsupported_array_filters.rb +1 -1
- data/lib/mongo/error/unsupported_collation.rb +1 -1
- data/lib/mongo/error/unsupported_features.rb +1 -1
- data/lib/mongo/error/unsupported_message_type.rb +1 -1
- data/lib/mongo/error/unsupported_option.rb +1 -1
- data/lib/mongo/error/write_retryable.rb +1 -1
- data/lib/mongo/error.rb +7 -1
- data/lib/mongo/event/base.rb +1 -1
- data/lib/mongo/event/listeners.rb +1 -1
- data/lib/mongo/event/publisher.rb +1 -1
- data/lib/mongo/event/subscriber.rb +1 -1
- data/lib/mongo/event.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +3 -2
- data/lib/mongo/grid/file/info.rb +3 -2
- data/lib/mongo/grid/file.rb +1 -1
- data/lib/mongo/grid/fs_bucket.rb +1 -1
- data/lib/mongo/grid/stream/read.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +1 -1
- data/lib/mongo/grid/stream.rb +1 -1
- data/lib/mongo/grid.rb +1 -1
- data/lib/mongo/id.rb +1 -1
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/index.rb +1 -1
- data/lib/mongo/lint.rb +1 -1
- data/lib/mongo/loggable.rb +3 -3
- data/lib/mongo/logger.rb +1 -1
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
- data/lib/mongo/monitoring/event/cmap.rb +2 -1
- data/lib/mongo/monitoring/event/command_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +1 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
- data/lib/mongo/monitoring/event/secure.rb +1 -1
- data/lib/mongo/monitoring/event/server_closed.rb +1 -1
- data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
- data/lib/mongo/monitoring/event/server_opening.rb +1 -1
- data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
- data/lib/mongo/monitoring/event.rb +1 -1
- data/lib/mongo/monitoring/publishable.rb +1 -1
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring.rb +1 -1
- data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
- data/lib/mongo/operation/aggregate/result.rb +1 -1
- data/lib/mongo/operation/aggregate.rb +1 -1
- data/lib/mongo/operation/collections_info/result.rb +1 -1
- data/lib/mongo/operation/collections_info.rb +1 -1
- data/lib/mongo/operation/command/op_msg.rb +1 -1
- data/lib/mongo/operation/command.rb +1 -1
- data/lib/mongo/operation/context.rb +1 -1
- data/lib/mongo/operation/count/op_msg.rb +1 -1
- data/lib/mongo/operation/count.rb +1 -1
- data/lib/mongo/operation/create/op_msg.rb +1 -1
- data/lib/mongo/operation/create.rb +1 -1
- data/lib/mongo/operation/create_index/op_msg.rb +1 -1
- data/lib/mongo/operation/create_index.rb +1 -1
- data/lib/mongo/operation/create_user/op_msg.rb +1 -1
- data/lib/mongo/operation/create_user.rb +1 -1
- data/lib/mongo/operation/delete/bulk_result.rb +1 -1
- data/lib/mongo/operation/delete/op_msg.rb +1 -1
- data/lib/mongo/operation/delete/result.rb +1 -1
- data/lib/mongo/operation/delete.rb +1 -1
- data/lib/mongo/operation/distinct/op_msg.rb +1 -1
- data/lib/mongo/operation/distinct.rb +1 -1
- data/lib/mongo/operation/drop/op_msg.rb +1 -1
- data/lib/mongo/operation/drop.rb +1 -1
- data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
- data/lib/mongo/operation/drop_database.rb +1 -1
- data/lib/mongo/operation/drop_index/op_msg.rb +1 -1
- data/lib/mongo/operation/drop_index.rb +1 -1
- data/lib/mongo/operation/explain/op_msg.rb +1 -1
- data/lib/mongo/operation/explain/result.rb +1 -1
- data/lib/mongo/operation/explain.rb +1 -1
- data/lib/mongo/operation/find/builder/command.rb +1 -1
- data/lib/mongo/operation/find/builder/flags.rb +1 -1
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
- data/lib/mongo/operation/find/builder.rb +1 -1
- data/lib/mongo/operation/find/op_msg.rb +1 -1
- data/lib/mongo/operation/find/result.rb +1 -1
- data/lib/mongo/operation/find.rb +1 -1
- data/lib/mongo/operation/get_more/command_builder.rb +1 -1
- data/lib/mongo/operation/get_more/op_msg.rb +1 -1
- data/lib/mongo/operation/get_more/result.rb +1 -1
- data/lib/mongo/operation/get_more.rb +1 -1
- data/lib/mongo/operation/indexes/op_msg.rb +1 -1
- data/lib/mongo/operation/indexes/result.rb +1 -1
- data/lib/mongo/operation/indexes.rb +1 -1
- data/lib/mongo/operation/insert/bulk_result.rb +1 -1
- data/lib/mongo/operation/insert/op_msg.rb +1 -1
- data/lib/mongo/operation/insert/result.rb +1 -1
- data/lib/mongo/operation/insert.rb +1 -1
- data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
- data/lib/mongo/operation/kill_cursors.rb +1 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +1 -1
- data/lib/mongo/operation/list_collections/result.rb +1 -1
- data/lib/mongo/operation/list_collections.rb +1 -1
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/map_reduce.rb +1 -1
- data/lib/mongo/operation/op_msg_base.rb +1 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
- data/lib/mongo/operation/parallel_scan/result.rb +1 -1
- data/lib/mongo/operation/parallel_scan.rb +1 -1
- data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
- data/lib/mongo/operation/remove_user.rb +1 -1
- data/lib/mongo/operation/result.rb +1 -1
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
- data/lib/mongo/operation/shared/executable.rb +1 -1
- data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
- data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
- data/lib/mongo/operation/shared/idable.rb +1 -1
- data/lib/mongo/operation/shared/limited.rb +1 -1
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
- data/lib/mongo/operation/shared/op_msg_executable.rb +1 -1
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
- data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
- data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
- data/lib/mongo/operation/shared/response_handling.rb +1 -1
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/operation/shared/specifiable.rb +1 -1
- data/lib/mongo/operation/shared/validatable.rb +1 -1
- data/lib/mongo/operation/shared/write.rb +1 -1
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
- data/lib/mongo/operation/update/bulk_result.rb +1 -1
- data/lib/mongo/operation/update/op_msg.rb +1 -1
- data/lib/mongo/operation/update/result.rb +1 -1
- data/lib/mongo/operation/update.rb +1 -1
- data/lib/mongo/operation/update_user/op_msg.rb +1 -1
- data/lib/mongo/operation/update_user.rb +1 -1
- data/lib/mongo/operation/users_info/op_msg.rb +1 -1
- data/lib/mongo/operation/users_info/result.rb +1 -1
- data/lib/mongo/operation/users_info.rb +1 -1
- data/lib/mongo/operation/write_command/op_msg.rb +1 -1
- data/lib/mongo/operation/write_command.rb +1 -1
- data/lib/mongo/operation.rb +1 -1
- data/lib/mongo/options/mapper.rb +1 -1
- data/lib/mongo/options/redacted.rb +1 -1
- data/lib/mongo/options.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +4 -2
- data/lib/mongo/protocol/caching_hash.rb +4 -21
- data/lib/mongo/protocol/compressed.rb +1 -1
- data/lib/mongo/protocol/get_more.rb +1 -1
- data/lib/mongo/protocol/kill_cursors.rb +1 -1
- data/lib/mongo/protocol/message.rb +5 -9
- data/lib/mongo/protocol/msg.rb +2 -1
- data/lib/mongo/protocol/query.rb +1 -1
- data/lib/mongo/protocol/registry.rb +1 -1
- data/lib/mongo/protocol/reply.rb +1 -1
- data/lib/mongo/protocol/serializers.rb +25 -18
- data/lib/mongo/protocol.rb +1 -1
- data/lib/mongo/query_cache.rb +1 -1
- data/lib/mongo/retryable/base_worker.rb +91 -0
- data/lib/mongo/retryable/read_worker.rb +296 -0
- data/lib/mongo/retryable/write_worker.rb +364 -0
- data/lib/mongo/retryable.rb +31 -502
- data/lib/mongo/semaphore.rb +2 -2
- data/lib/mongo/server/app_metadata/environment.rb +259 -0
- data/lib/mongo/server/app_metadata/platform.rb +114 -0
- data/lib/mongo/server/app_metadata/truncator.rb +142 -0
- data/lib/mongo/server/app_metadata.rb +75 -108
- data/lib/mongo/server/connection.rb +61 -20
- data/lib/mongo/server/connection_base.rb +1 -1
- data/lib/mongo/server/connection_common.rb +1 -1
- data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
- data/lib/mongo/server/connection_pool/populator.rb +33 -31
- data/lib/mongo/server/connection_pool.rb +670 -263
- data/lib/mongo/server/description/features.rb +2 -2
- data/lib/mongo/server/description/load_balancer.rb +1 -1
- data/lib/mongo/server/description.rb +7 -6
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +1 -1
- data/lib/mongo/server/monitor.rb +11 -7
- data/lib/mongo/server/pending_connection.rb +1 -1
- data/lib/mongo/server/push_monitor/connection.rb +1 -1
- data/lib/mongo/server/push_monitor.rb +1 -1
- data/lib/mongo/server/round_trip_time_averager.rb +1 -1
- data/lib/mongo/server.rb +96 -30
- data/lib/mongo/server_selector/base.rb +24 -3
- data/lib/mongo/server_selector/nearest.rb +1 -1
- data/lib/mongo/server_selector/primary.rb +1 -1
- data/lib/mongo/server_selector/primary_preferred.rb +1 -1
- data/lib/mongo/server_selector/secondary.rb +1 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/session/server_session.rb +1 -1
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/session.rb +1 -1
- data/lib/mongo/socket/ocsp_cache.rb +1 -1
- data/lib/mongo/socket/ocsp_verifier.rb +1 -1
- data/lib/mongo/socket/ssl.rb +1 -1
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/socket/unix.rb +1 -1
- data/lib/mongo/socket.rb +29 -2
- data/lib/mongo/srv/monitor.rb +1 -3
- data/lib/mongo/srv/resolver.rb +1 -1
- data/lib/mongo/srv/result.rb +1 -1
- data/lib/mongo/srv.rb +1 -1
- data/lib/mongo/timeout.rb +2 -2
- data/lib/mongo/topology_version.rb +1 -1
- data/lib/mongo/uri/options_mapper.rb +321 -81
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/uri.rb +41 -13
- data/lib/mongo/utils.rb +1 -1
- data/lib/mongo/version.rb +2 -2
- data/lib/mongo/write_concern/acknowledged.rb +1 -1
- data/lib/mongo/write_concern/base.rb +1 -1
- data/lib/mongo/write_concern/unacknowledged.rb +1 -1
- data/lib/mongo/write_concern.rb +1 -1
- data/lib/mongo.rb +2 -1
- data/mongo.gemspec +5 -2
- data/spec/atlas/atlas_connectivity_spec.rb +1 -1
- data/spec/atlas/operations_spec.rb +3 -8
- data/spec/integration/auth_spec.rb +1 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
- data/spec/integration/aws_auth_request_spec.rb +2 -2
- data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
- data/spec/integration/aws_lambda_examples_spec.rb +1 -1
- data/spec/integration/bson_symbol_spec.rb +1 -1
- data/spec/integration/bulk_insert_spec.rb +1 -1
- data/spec/integration/bulk_write_error_message_spec.rb +1 -0
- data/spec/integration/bulk_write_spec.rb +1 -1
- data/spec/integration/change_stream_examples_spec.rb +1 -1
- data/spec/integration/change_stream_spec.rb +6 -1
- data/spec/integration/check_clean_slate_spec.rb +1 -1
- data/spec/integration/client_authentication_options_spec.rb +1 -1
- data/spec/integration/client_connectivity_spec.rb +1 -1
- data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
- data/spec/integration/client_construction_spec.rb +23 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +10 -5
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +38 -2
- data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +1 -1
- data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
- data/spec/integration/client_side_encryption/corpus_spec.rb +1 -1
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +3 -3
- data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +59 -58
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +1 -1
- data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +36 -33
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +1 -1
- data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +3 -3
- data/spec/integration/client_side_encryption/kms_tls_spec.rb +1 -1
- data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
- data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
- data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
- data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
- data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +14 -11
- data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
- data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
- data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +20 -16
- data/spec/integration/client_side_encryption/views_spec.rb +1 -1
- data/spec/integration/client_spec.rb +8 -3
- data/spec/integration/client_update_spec.rb +7 -3
- data/spec/integration/collection_indexes_prose_spec.rb +1 -1
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +1 -1
- data/spec/integration/connect_single_rs_name_spec.rb +1 -1
- data/spec/integration/connection/faas_env_spec.rb +62 -0
- data/spec/integration/connection_pool_populator_spec.rb +27 -7
- data/spec/integration/connection_spec.rb +1 -1
- data/spec/integration/crud_spec.rb +1 -1
- data/spec/integration/cursor_pinning_spec.rb +6 -2
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/error_detection_spec.rb +1 -1
- data/spec/integration/fork_reconnect_spec.rb +2 -2
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/grid_fs_bucket_spec.rb +1 -1
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +5 -1
- data/spec/integration/mmapv1_spec.rb +1 -1
- data/spec/integration/mongos_pinning_spec.rb +1 -1
- data/spec/integration/ocsp_connectivity_spec.rb +1 -1
- data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
- data/spec/integration/ocsp_verifier_spec.rb +2 -2
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +1 -0
- data/spec/integration/query_cache_spec.rb +90 -3
- data/spec/integration/query_cache_transactions_spec.rb +1 -1
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/read_preference_spec.rb +1 -1
- data/spec/integration/reconnect_spec.rb +4 -1
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_reads_errors_spec.rb +110 -0
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
- data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
- data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
- data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
- data/spec/integration/retryable_writes_errors_spec.rb +160 -2
- data/spec/integration/sdam_error_handling_spec.rb +65 -4
- data/spec/integration/sdam_events_spec.rb +1 -1
- data/spec/integration/sdam_prose_spec.rb +3 -3
- data/spec/integration/secondary_reads_spec.rb +1 -0
- data/spec/integration/server_description_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +1 -1
- data/spec/integration/server_selection_spec.rb +1 -1
- data/spec/integration/server_selector_spec.rb +5 -3
- data/spec/integration/server_spec.rb +23 -26
- data/spec/integration/shell_examples_spec.rb +1 -1
- data/spec/integration/size_limit_spec.rb +1 -1
- data/spec/integration/snappy_compression_spec.rb +1 -1
- data/spec/integration/snapshot_query_examples_spec.rb +9 -7
- data/spec/integration/srv_monitoring_spec.rb +2 -1
- data/spec/integration/srv_spec.rb +3 -3
- data/spec/integration/ssl_uri_options_spec.rb +1 -1
- data/spec/integration/step_down_spec.rb +5 -3
- data/spec/integration/time_zone_querying_spec.rb +1 -1
- data/spec/integration/transaction_pinning_spec.rb +18 -4
- data/spec/integration/transactions_api_examples_spec.rb +1 -1
- data/spec/integration/transactions_examples_spec.rb +1 -1
- data/spec/integration/truncated_utf8_spec.rb +1 -1
- data/spec/integration/versioned_api_examples_spec.rb +2 -2
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +1 -1
- data/spec/kerberos/kerberos_spec.rb +1 -1
- data/spec/lite_spec_helper.rb +10 -1
- data/spec/mongo/address/ipv4_spec.rb +1 -1
- data/spec/mongo/address/ipv6_spec.rb +1 -1
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address/validator_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +8 -2
- data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
- data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
- data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
- data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
- data/spec/mongo/auth/aws/request_spec.rb +1 -1
- data/spec/mongo/auth/cr_spec.rb +2 -22
- data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
- data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +1 -1
- data/spec/mongo/auth/scram/conversation_spec.rb +1 -1
- data/spec/mongo/auth/scram256/conversation_spec.rb +1 -1
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
- data/spec/mongo/auth/stringprep_spec.rb +1 -1
- data/spec/mongo/auth/user/view_spec.rb +96 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +1 -1
- data/spec/mongo/auth_spec.rb +1 -1
- data/spec/mongo/bson_spec.rb +1 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
- data/spec/mongo/bulk_write/result_spec.rb +1 -1
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
- data/spec/mongo/bulk_write_spec.rb +1 -1
- data/spec/mongo/caching_cursor_spec.rb +1 -1
- data/spec/mongo/client_construction_spec.rb +572 -694
- data/spec/mongo/client_encryption_spec.rb +1 -1
- data/spec/mongo/client_spec.rb +172 -231
- data/spec/mongo/cluster/cursor_reaper_spec.rb +1 -1
- data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
- data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
- data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +1 -1
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +156 -154
- data/spec/mongo/cluster_time_spec.rb +1 -1
- data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
- data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
- data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
- data/spec/mongo/collection/view/change_stream_spec.rb +1 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/immutable_spec.rb +1 -1
- data/spec/mongo/collection/view/iterable_spec.rb +1 -1
- data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
- data/spec/mongo/collection/view/readable_spec.rb +139 -1
- data/spec/mongo/collection/view/writable_spec.rb +1 -1
- data/spec/mongo/collection/view_spec.rb +1 -1
- data/spec/mongo/collection_crud_spec.rb +1 -1
- data/spec/mongo/collection_ddl_spec.rb +112 -66
- data/spec/mongo/collection_spec.rb +3 -3
- data/spec/mongo/condition_variable_spec.rb +104 -0
- data/spec/mongo/config/options_spec.rb +1 -0
- data/spec/mongo/config_spec.rb +2 -1
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/auto_encrypter_spec.rb +8 -1
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/binary_spec.rb +1 -1
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
- data/spec/mongo/crypt/binding/context_spec.rb +1 -1
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +1 -1
- data/spec/mongo/crypt/binding/status_spec.rb +1 -1
- data/spec/mongo/crypt/binding/version_spec.rb +19 -5
- data/spec/mongo/crypt/binding_unloaded_spec.rb +1 -1
- data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
- data/spec/mongo/crypt/encryption_io_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +3 -3
- data/spec/mongo/crypt/handle_spec.rb +19 -4
- data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
- data/spec/mongo/crypt/hooks_spec.rb +2 -2
- data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +17 -1
- data/spec/mongo/crypt/kms_spec.rb +1 -1
- data/spec/mongo/crypt/status_spec.rb +1 -1
- data/spec/mongo/crypt_spec.rb +21 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
- data/spec/mongo/cursor_spec.rb +58 -11
- data/spec/mongo/database_spec.rb +1 -1
- data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
- data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
- data/spec/mongo/error/crypt_error_spec.rb +1 -1
- data/spec/mongo/error/max_bson_size_spec.rb +1 -1
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/notable_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +1 -1
- data/spec/mongo/error/unsupported_option_spec.rb +1 -1
- data/spec/mongo/event/publisher_spec.rb +1 -1
- data/spec/mongo/event/subscriber_spec.rb +1 -1
- data/spec/mongo/grid/file/chunk_spec.rb +1 -1
- data/spec/mongo/grid/file/info_spec.rb +1 -1
- data/spec/mongo/grid/file_spec.rb +1 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
- data/spec/mongo/grid/stream/read_spec.rb +1 -1
- data/spec/mongo/grid/stream/write_spec.rb +1 -1
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/id_spec.rb +2 -2
- data/spec/mongo/index/view_spec.rb +4 -4
- data/spec/mongo/lint_spec.rb +2 -2
- data/spec/mongo/logger_spec.rb +1 -1
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
- data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
- data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
- data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/monitoring_spec.rb +1 -1
- data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +1 -1
- data/spec/mongo/operation/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/command_spec.rb +1 -1
- data/spec/mongo/operation/create/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/create_index_spec.rb +1 -1
- data/spec/mongo/operation/create_user_spec.rb +1 -1
- data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
- data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/delete_spec.rb +1 -1
- data/spec/mongo/operation/drop_index_spec.rb +1 -1
- data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
- data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
- data/spec/mongo/operation/indexes_spec.rb +1 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/insert_spec.rb +1 -1
- data/spec/mongo/operation/limited_spec.rb +1 -1
- data/spec/mongo/operation/map_reduce_spec.rb +1 -1
- data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/remove_user_spec.rb +1 -1
- data/spec/mongo/operation/result_spec.rb +1 -1
- data/spec/mongo/operation/specifiable_spec.rb +1 -1
- data/spec/mongo/operation/update/bulk_spec.rb +1 -1
- data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/update_spec.rb +1 -1
- data/spec/mongo/operation/update_user_spec.rb +1 -1
- data/spec/mongo/options/redacted_spec.rb +2 -2
- data/spec/mongo/protocol/caching_hash_spec.rb +1 -46
- data/spec/mongo/protocol/compressed_spec.rb +1 -1
- data/spec/mongo/protocol/get_more_spec.rb +1 -1
- data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
- data/spec/mongo/protocol/msg_spec.rb +4 -5
- data/spec/mongo/protocol/query_spec.rb +1 -1
- data/spec/mongo/protocol/registry_spec.rb +1 -1
- data/spec/mongo/protocol/reply_spec.rb +1 -1
- data/spec/mongo/query_cache_middleware_spec.rb +1 -1
- data/spec/mongo/query_cache_spec.rb +1 -1
- data/spec/mongo/retryable_spec.rb +5 -3
- data/spec/mongo/semaphore_spec.rb +7 -7
- data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
- data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
- data/spec/mongo/server/app_metadata_spec.rb +44 -66
- data/spec/mongo/server/connection_auth_spec.rb +1 -1
- data/spec/mongo/server/connection_common_spec.rb +1 -1
- data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
- data/spec/mongo/server/connection_pool_spec.rb +447 -10
- data/spec/mongo/server/connection_spec.rb +17 -4
- data/spec/mongo/server/description/features_spec.rb +1 -1
- data/spec/mongo/server/description_query_methods_spec.rb +1 -1
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +3 -3
- data/spec/mongo/server/monitor_spec.rb +6 -5
- data/spec/mongo/server/push_monitor_spec.rb +1 -1
- data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
- data/spec/mongo/server_selector/nearest_spec.rb +1 -1
- data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
- data/spec/mongo/server_selector/primary_spec.rb +1 -1
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
- data/spec/mongo/server_selector/secondary_spec.rb +1 -1
- data/spec/mongo/server_selector_spec.rb +1 -1
- data/spec/mongo/server_spec.rb +32 -5
- data/spec/mongo/session/server_session_spec.rb +1 -1
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/session_spec.rb +1 -1
- data/spec/mongo/session_transaction_spec.rb +2 -2
- data/spec/mongo/socket/ssl_spec.rb +3 -9
- data/spec/mongo/socket/tcp_spec.rb +1 -1
- data/spec/mongo/socket/unix_spec.rb +1 -1
- data/spec/mongo/socket_spec.rb +1 -1
- data/spec/mongo/srv/monitor_spec.rb +1 -1
- data/spec/mongo/srv/result_spec.rb +1 -1
- data/spec/mongo/timeout_spec.rb +1 -1
- data/spec/mongo/tls_context_hooks_spec.rb +1 -1
- data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +150 -2
- data/spec/mongo/uri_option_parsing_spec.rb +1 -1
- data/spec/mongo/uri_spec.rb +143 -2
- data/spec/mongo/utils_spec.rb +1 -1
- data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
- data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
- data/spec/mongo/write_concern_spec.rb +1 -1
- data/spec/runners/auth.rb +1 -1
- data/spec/runners/change_streams/outcome.rb +1 -1
- data/spec/runners/change_streams/spec.rb +1 -1
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/cmap/verifier.rb +2 -2
- data/spec/runners/cmap.rb +188 -45
- data/spec/runners/command_monitoring.rb +1 -1
- data/spec/runners/connection_string.rb +1 -1
- data/spec/runners/crud/context.rb +1 -1
- data/spec/runners/crud/operation.rb +2 -2
- data/spec/runners/crud/outcome.rb +1 -1
- data/spec/runners/crud/requirement.rb +3 -3
- data/spec/runners/crud/spec.rb +2 -2
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/test_base.rb +2 -2
- data/spec/runners/crud/verifier.rb +3 -3
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/gridfs.rb +1 -1
- data/spec/runners/read_write_concern_document.rb +1 -1
- data/spec/runners/sdam/verifier.rb +1 -1
- data/spec/runners/sdam.rb +1 -1
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/server_selection_rtt.rb +1 -1
- data/spec/runners/transactions/operation.rb +15 -9
- data/spec/runners/transactions/spec.rb +1 -1
- data/spec/runners/transactions/test.rb +44 -3
- data/spec/runners/transactions.rb +1 -1
- data/spec/runners/unified/assertions.rb +94 -77
- data/spec/runners/unified/change_stream_operations.rb +14 -3
- data/spec/runners/unified/client_side_encryption_operations.rb +1 -1
- data/spec/runners/unified/crud_operations.rb +11 -2
- data/spec/runners/unified/ddl_operations.rb +80 -4
- data/spec/runners/unified/entity_map.rb +1 -1
- data/spec/runners/unified/error.rb +1 -1
- data/spec/runners/unified/event_subscriber.rb +9 -3
- data/spec/runners/unified/exceptions.rb +1 -1
- data/spec/runners/unified/grid_fs_operations.rb +1 -1
- data/spec/runners/unified/support_operations.rb +66 -2
- data/spec/runners/unified/test.rb +86 -12
- data/spec/runners/unified/test_group.rb +1 -1
- data/spec/runners/unified/thread_operations.rb +73 -0
- data/spec/runners/unified.rb +9 -6
- data/spec/shared/lib/mrss/docker_runner.rb +4 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +24 -19
- data/spec/shared/shlib/server.sh +32 -8
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/solo/clean_exit_spec.rb +4 -11
- data/spec/spec_helper.rb +1 -1
- data/spec/spec_tests/auth_spec.rb +1 -1
- data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
- data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +12 -2
- data/spec/spec_tests/cmap_spec.rb +29 -15
- data/spec/spec_tests/collection_management_spec.rb +1 -1
- data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
- data/spec/spec_tests/connection_string_spec.rb +1 -1
- data/spec/spec_tests/crud_spec.rb +1 -1
- data/spec/spec_tests/crud_unified_spec.rb +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +2 -6
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -3
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -3
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +15 -6
- data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/{fle2-BypassQueryAnalysis.yml → fle2v2-BypassQueryAnalysis.yml} +18 -30
- data/spec/spec_tests/data/client_side_encryption/{fle2-Compact.yml → fle2v2-Compact.yml} +5 -3
- data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
- data/spec/spec_tests/data/client_side_encryption/{fle2-CreateCollection.yml → fle2v2-CreateCollection.yml} +212 -538
- data/spec/spec_tests/data/client_side_encryption/{fle2-DecryptExistingData.yml → fle2v2-DecryptExistingData.yml} +4 -2
- data/spec/spec_tests/data/client_side_encryption/{fle2-Delete.yml → fle2v2-Delete.yml} +17 -24
- data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-EncryptedFieldsMap.yml → fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml} +5 -6
- data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-jsonSchema.yml → fle2v2-EncryptedFields-vs-jsonSchema.yml} +18 -6
- data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFieldsMap-defaults.yml → fle2v2-EncryptedFieldsMap-defaults.yml} +6 -5
- data/spec/spec_tests/data/client_side_encryption/{fle2-FindOneAndUpdate.yml → fle2v2-FindOneAndUpdate.yml} +31 -44
- data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Indexed.yml → fle2v2-InsertFind-Indexed.yml} +16 -6
- data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Unindexed.yml → fle2v2-InsertFind-Unindexed.yml} +10 -4
- data/spec/spec_tests/data/client_side_encryption/{fle2-MissingKey.yml → fle2v2-MissingKey.yml} +5 -3
- data/spec/spec_tests/data/client_side_encryption/{fle2-NoEncryption.yml → fle2v2-NoEncryption.yml} +4 -2
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
- data/spec/spec_tests/data/client_side_encryption/{fle2-Update.yml → fle2v2-Update.yml} +33 -44
- data/spec/spec_tests/data/client_side_encryption/{fle2-validatorAndPartialFieldExpression.yml → fle2v2-validatorAndPartialFieldExpression.yml} +10 -9
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +1 -1
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +1 -1
- data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
- data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
- data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
- data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
- data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
- data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +66 -0
- data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
- data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
- data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
- data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
- data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
- data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
- data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
- data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
- data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
- data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
- data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
- data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
- data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
- data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
- data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
- data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
- data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
- data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
- data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
- data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +44 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
- data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
- data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1266 -53
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +706 -58
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +1 -1
- data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
- data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
- data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
- data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
- data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
- data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
- data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
- data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
- data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
- data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
- data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
- data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
- data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
- data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
- data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
- data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
- data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
- data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
- data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
- data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
- data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
- data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
- data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
- data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
- data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
- data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
- data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
- data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
- data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
- data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +1 -1
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +4 -3
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +4 -3
- data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
- data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
- data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
- data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
- data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
- data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
- data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
- data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
- data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
- data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
- data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +18 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +18 -12
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +2 -2
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +1 -1
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +1 -1
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
- data/spec/spec_tests/gridfs_spec.rb +1 -1
- data/spec/spec_tests/gridfs_unified_spec.rb +1 -1
- data/spec/spec_tests/load_balancers_spec.rb +1 -1
- data/spec/spec_tests/max_staleness_spec.rb +1 -1
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
- data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
- data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
- data/spec/spec_tests/retryable_reads_spec.rb +3 -1
- data/spec/spec_tests/retryable_reads_unified_spec.rb +1 -1
- data/spec/spec_tests/retryable_writes_spec.rb +1 -1
- data/spec/spec_tests/retryable_writes_unified_spec.rb +1 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
- data/spec/spec_tests/sdam_spec.rb +5 -1
- data/spec/spec_tests/sdam_unified_spec.rb +13 -0
- data/spec/spec_tests/seed_list_discovery_spec.rb +1 -1
- data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
- data/spec/spec_tests/server_selection_spec.rb +1 -1
- data/spec/spec_tests/sessions_unified_spec.rb +1 -1
- data/spec/spec_tests/transactions_api_spec.rb +1 -1
- data/spec/spec_tests/transactions_spec.rb +1 -1
- data/spec/spec_tests/transactions_unified_spec.rb +1 -1
- data/spec/spec_tests/unified_spec.rb +1 -6
- data/spec/spec_tests/uri_options_spec.rb +1 -1
- data/spec/spec_tests/versioned_api_spec.rb +1 -1
- data/spec/stress/cleanup_spec.rb +1 -1
- data/spec/stress/connection_pool_stress_spec.rb +1 -62
- data/spec/stress/connection_pool_timing_spec.rb +9 -34
- data/spec/stress/fork_reconnect_stress_spec.rb +7 -8
- data/spec/stress/push_monitor_close_spec.rb +1 -1
- data/spec/support/authorization.rb +1 -1
- data/spec/support/aws_utils/base.rb +1 -1
- data/spec/support/aws_utils/inspector.rb +1 -1
- data/spec/support/aws_utils/orchestrator.rb +20 -8
- data/spec/support/aws_utils/provisioner.rb +1 -1
- data/spec/support/aws_utils.rb +4 -3
- data/spec/support/background_thread_registry.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
- data/spec/support/certificates/atlas-ocsp.crt +103 -103
- data/spec/support/certificates/retrieve-atlas-cert +2 -0
- data/spec/support/client_registry.rb +6 -2
- data/spec/support/client_registry_macros.rb +1 -1
- data/spec/support/cluster_tools.rb +13 -8
- data/spec/support/common_shortcuts.rb +30 -5
- data/spec/support/constraints.rb +15 -1
- data/spec/support/crypt/{encryptedFields.json → encrypted_fields/encryptedFields.json} +0 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
- data/spec/support/crypt.rb +13 -3
- data/spec/support/dns.rb +1 -1
- data/spec/support/json_ext_formatter.rb +1 -1
- data/spec/support/keyword_struct.rb +1 -1
- data/spec/support/local_resource_registry.rb +1 -1
- data/spec/support/macros.rb +1 -0
- data/spec/support/matchers.rb +5 -5
- data/spec/support/mongos_macros.rb +7 -0
- data/spec/support/monitoring_ext.rb +1 -1
- data/spec/support/primary_socket.rb +1 -1
- data/spec/support/sdam_formatter_integration.rb +1 -1
- data/spec/support/shared/app_metadata.rb +15 -3
- data/spec/support/shared/auth_context.rb +1 -0
- data/spec/support/shared/protocol.rb +1 -1
- data/spec/support/shared/scram_conversation.rb +1 -1
- data/spec/support/shared/server_selector.rb +1 -1
- data/spec/support/shared/session.rb +1 -1
- data/spec/support/spec_config.rb +40 -3
- data/spec/support/spec_setup.rb +1 -1
- data/spec/support/using_hash.rb +11 -2
- data/spec/support/utils.rb +277 -249
- data.tar.gz.sig +0 -0
- metadata +1456 -1173
- metadata.gz.sig +0 -0
- data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
- data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -152
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -148
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -219
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
- data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
- data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +0 -15
- data/spec/spec_tests/sdam_integration_spec.rb +0 -16
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
5
|
#
|
|
@@ -102,11 +102,7 @@ module Mongo
|
|
|
102
102
|
uri_options
|
|
103
103
|
end
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
value = value.to_sym
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
#value = apply_transform(key, value, strategy[:type])
|
|
105
|
+
value = apply_transform(key, value, strategy[:type])
|
|
110
106
|
# Sometimes the value here would be nil, for example if we are processing
|
|
111
107
|
# read preference tags or auth mechanism properties and all of the
|
|
112
108
|
# data within is invalid. Ignore such options.
|
|
@@ -119,7 +115,6 @@ module Mongo
|
|
|
119
115
|
end
|
|
120
116
|
end
|
|
121
117
|
|
|
122
|
-
#p uri_options
|
|
123
118
|
uri_options
|
|
124
119
|
end
|
|
125
120
|
|
|
@@ -138,8 +133,51 @@ module Mongo
|
|
|
138
133
|
v = opts[spec[:name]]
|
|
139
134
|
end
|
|
140
135
|
unless v.nil?
|
|
141
|
-
if spec[:type]
|
|
142
|
-
v = send("revert_#{
|
|
136
|
+
if type = spec[:type]
|
|
137
|
+
v = send("revert_#{type}", v)
|
|
138
|
+
end
|
|
139
|
+
canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
|
|
140
|
+
unless canonical_key
|
|
141
|
+
raise ArgumentError, "Option #{uri_key} is not known"
|
|
142
|
+
end
|
|
143
|
+
rv[canonical_key] = v
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
# For options that default to true, remove the value if it is true.
|
|
147
|
+
%w(retryReads retryWrites).each do |k|
|
|
148
|
+
if rv[k]
|
|
149
|
+
rv.delete(k)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
# Remove auth source when it is $external for mechanisms that default
|
|
153
|
+
# (or require) that auth source.
|
|
154
|
+
if %w(MONGODB-AWS).include?(rv['authMechanism']) && rv['authSource'] == '$external'
|
|
155
|
+
rv.delete('authSource')
|
|
156
|
+
end
|
|
157
|
+
# ssl and tls are aliases, remove ssl ones
|
|
158
|
+
rv.delete('ssl')
|
|
159
|
+
# TODO remove authSource if it is the same as the database,
|
|
160
|
+
# requires this method to know the database specified in the client.
|
|
161
|
+
rv
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Converts Ruby options provided to their representation in a URI string.
|
|
165
|
+
#
|
|
166
|
+
# @param [ Hash ] opts Ruby options to convert.
|
|
167
|
+
#
|
|
168
|
+
# @return [ Hash ] URI string hash.
|
|
169
|
+
def ruby_to_string(opts)
|
|
170
|
+
rv = {}
|
|
171
|
+
URI_OPTION_MAP.each do |uri_key, spec|
|
|
172
|
+
if spec[:group]
|
|
173
|
+
v = opts[spec[:group]]
|
|
174
|
+
v = v && v[spec[:name]]
|
|
175
|
+
else
|
|
176
|
+
v = opts[spec[:name]]
|
|
177
|
+
end
|
|
178
|
+
unless v.nil?
|
|
179
|
+
if type = spec[:type]
|
|
180
|
+
v = send("stringify_#{type}", v)
|
|
143
181
|
end
|
|
144
182
|
canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
|
|
145
183
|
unless canonical_key
|
|
@@ -171,9 +209,9 @@ module Mongo
|
|
|
171
209
|
# Applies URI value transformation by either using the default cast
|
|
172
210
|
# or a transformation appropriate for the given type.
|
|
173
211
|
#
|
|
174
|
-
# @param
|
|
175
|
-
# @param
|
|
176
|
-
# @param
|
|
212
|
+
# @param [ String ] key URI option name.
|
|
213
|
+
# @param [ String ] value The value to be transformed.
|
|
214
|
+
# @param [ Symbol ] type The transform method.
|
|
177
215
|
def apply_transform(key, value, type)
|
|
178
216
|
if type
|
|
179
217
|
send("convert_#{type}", key, value)
|
|
@@ -190,9 +228,9 @@ module Mongo
|
|
|
190
228
|
# Specifically required to append an additional tag set
|
|
191
229
|
# to the array of tag sets without overwriting the original.
|
|
192
230
|
#
|
|
193
|
-
# @param
|
|
194
|
-
# @param
|
|
195
|
-
# @param
|
|
231
|
+
# @param [ Hash ] target The destination.
|
|
232
|
+
# @param [ Object ] value The value to be merged.
|
|
233
|
+
# @param [ Symbol ] name The name of the option.
|
|
196
234
|
def merge_uri_option(target, value, name)
|
|
197
235
|
if target.key?(name)
|
|
198
236
|
if REPEATABLE_OPTIONS.include?(name)
|
|
@@ -214,11 +252,11 @@ module Mongo
|
|
|
214
252
|
|
|
215
253
|
# Simple internal dsl to register a MongoDB URI option in the URI_OPTION_MAP.
|
|
216
254
|
#
|
|
217
|
-
# @param
|
|
218
|
-
# @param
|
|
219
|
-
# @param
|
|
220
|
-
# * :group [Symbol] Nested hash where option will go.
|
|
221
|
-
# * :type [Symbol] Name of function to transform value.
|
|
255
|
+
# @param [ String ] uri_key The MongoDB URI option to register.
|
|
256
|
+
# @param [ Symbol ] name The name of the option in the driver.
|
|
257
|
+
# @param [ Hash ] extra Extra options.
|
|
258
|
+
# * :group [ Symbol ] Nested hash where option will go.
|
|
259
|
+
# * :type [ Symbol ] Name of function to transform value.
|
|
222
260
|
def self.uri_option(uri_key, name, **extra)
|
|
223
261
|
URI_OPTION_MAP[uri_key.downcase] = { name: name }.update(extra)
|
|
224
262
|
URI_OPTION_CANONICAL_NAMES[uri_key.downcase] = uri_key
|
|
@@ -290,14 +328,14 @@ module Mongo
|
|
|
290
328
|
# Returns true for 'true', false for 'false', otherwise nil.
|
|
291
329
|
#
|
|
292
330
|
# @param [ String ] name Name of the URI option being processed.
|
|
293
|
-
# @param
|
|
331
|
+
# @param [ String | true | false ] value URI option value.
|
|
294
332
|
#
|
|
295
333
|
# @return [ true | false | nil ] Converted value.
|
|
296
334
|
def convert_bool(name, value)
|
|
297
335
|
case value
|
|
298
|
-
when "true", 'TRUE'
|
|
336
|
+
when true, "true", 'TRUE'
|
|
299
337
|
true
|
|
300
|
-
when "false", 'FALSE'
|
|
338
|
+
when false, "false", 'FALSE'
|
|
301
339
|
false
|
|
302
340
|
else
|
|
303
341
|
log_warn("invalid boolean option for #{name}: #{value}")
|
|
@@ -305,31 +343,64 @@ module Mongo
|
|
|
305
343
|
end
|
|
306
344
|
end
|
|
307
345
|
|
|
346
|
+
# Reverts a boolean type.
|
|
347
|
+
#
|
|
348
|
+
# @param [ true | false | nil ] value The boolean to revert.
|
|
349
|
+
#
|
|
350
|
+
# @return [ true | false | nil ] The passed value.
|
|
308
351
|
def revert_bool(value)
|
|
309
352
|
value
|
|
310
353
|
end
|
|
311
354
|
|
|
355
|
+
# Stringifies a boolean type.
|
|
356
|
+
#
|
|
357
|
+
# @param [ true | false | nil ] value The boolean.
|
|
358
|
+
#
|
|
359
|
+
# @return [ String | nil ] The string.
|
|
360
|
+
def stringify_bool(value)
|
|
361
|
+
revert_bool(value)&.to_s
|
|
362
|
+
end
|
|
363
|
+
|
|
312
364
|
# Converts the value into a boolean and returns it wrapped in an array.
|
|
313
365
|
#
|
|
314
|
-
# @param
|
|
315
|
-
# @param
|
|
366
|
+
# @param [ String ] name Name of the URI option being processed.
|
|
367
|
+
# @param [ String ] value URI option value.
|
|
316
368
|
#
|
|
317
|
-
# @return [ Array<true | false> ] The boolean value parsed and wraped
|
|
369
|
+
# @return [ Array<true | false> | nil ] The boolean value parsed and wraped
|
|
318
370
|
# in an array.
|
|
319
371
|
def convert_repeated_bool(name, value)
|
|
320
372
|
[convert_bool(name, value)]
|
|
321
373
|
end
|
|
322
374
|
|
|
375
|
+
# Reverts a repeated boolean type.
|
|
376
|
+
#
|
|
377
|
+
# @param [ Array<true | false> | true | false | nil ] value The repeated boolean to revert.
|
|
378
|
+
#
|
|
379
|
+
# @return [ Array<true | false> | true | false | nil ] The passed value.
|
|
323
380
|
def revert_repeated_bool(value)
|
|
324
381
|
value
|
|
325
382
|
end
|
|
326
383
|
|
|
384
|
+
# Stringifies a repeated boolean type.
|
|
385
|
+
#
|
|
386
|
+
# @param [ Array<true | false> | nil ] value The repeated boolean.
|
|
387
|
+
#
|
|
388
|
+
# @return [ Array<true | false> | nil ] The string.
|
|
389
|
+
def stringify_repeated_bool(value)
|
|
390
|
+
rep = revert_repeated_bool(value)
|
|
391
|
+
if rep&.is_a?(Array)
|
|
392
|
+
rep.join(",")
|
|
393
|
+
else
|
|
394
|
+
rep
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
327
398
|
# Parses a boolean value and returns its inverse.
|
|
328
399
|
#
|
|
329
400
|
# @param [ String ] name Name of the URI option being processed.
|
|
330
|
-
# @param
|
|
401
|
+
# @param [ String | true | false ] value The URI option value.
|
|
331
402
|
#
|
|
332
|
-
# @return [ true | false | nil ] The inverse of the
|
|
403
|
+
# @return [ true | false | nil ] The inverse of the boolean value parsed out, otherwise nil
|
|
333
404
|
# (and a warning will be logged).
|
|
334
405
|
def convert_inverse_bool(name, value)
|
|
335
406
|
b = convert_bool(name, value)
|
|
@@ -341,20 +412,34 @@ module Mongo
|
|
|
341
412
|
end
|
|
342
413
|
end
|
|
343
414
|
|
|
415
|
+
# Reverts and inverts a boolean type.
|
|
416
|
+
#
|
|
417
|
+
# @param [ true | false | nil ] value The boolean to revert and invert.
|
|
418
|
+
#
|
|
419
|
+
# @return [ true | false | nil ] The inverted boolean.
|
|
344
420
|
def revert_inverse_bool(value)
|
|
345
|
-
!value
|
|
421
|
+
value.nil? ? nil : !value
|
|
346
422
|
end
|
|
347
423
|
|
|
348
|
-
#
|
|
424
|
+
# Inverts and stringifies a boolean.
|
|
425
|
+
#
|
|
426
|
+
# @param [ true | false | nil ] value The boolean.
|
|
427
|
+
#
|
|
428
|
+
# @return [ String | nil ] The string.
|
|
429
|
+
def stringify_inverse_bool(value)
|
|
430
|
+
revert_inverse_bool(value)&.to_s
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
# Converts +value+ into an integer. Only converts positive integers.
|
|
349
434
|
#
|
|
350
435
|
# If the value is not a valid integer, warns and returns nil.
|
|
351
436
|
#
|
|
352
437
|
# @param [ String ] name Name of the URI option being processed.
|
|
353
|
-
# @param
|
|
438
|
+
# @param [ String | Integer ] value URI option value.
|
|
354
439
|
#
|
|
355
440
|
# @return [ nil | Integer ] Converted value.
|
|
356
441
|
def convert_integer(name, value)
|
|
357
|
-
|
|
442
|
+
if value.is_a?(String) && /\A\d+\z/ !~ value
|
|
358
443
|
log_warn("#{value} is not a valid integer for #{name}")
|
|
359
444
|
return nil
|
|
360
445
|
end
|
|
@@ -362,78 +447,143 @@ module Mongo
|
|
|
362
447
|
value.to_i
|
|
363
448
|
end
|
|
364
449
|
|
|
450
|
+
# Reverts an integer.
|
|
451
|
+
#
|
|
452
|
+
# @param [ Integer | nil ] value The integer.
|
|
453
|
+
#
|
|
454
|
+
# @return [ Integer | nil ] The passed value.
|
|
365
455
|
def revert_integer(value)
|
|
366
456
|
value
|
|
367
457
|
end
|
|
368
458
|
|
|
459
|
+
# Stringifies an integer.
|
|
460
|
+
#
|
|
461
|
+
# @param [ Integer | nil ] value The integer.
|
|
462
|
+
#
|
|
463
|
+
# @return [ String | nil ] The string.
|
|
464
|
+
def stringify_integer(value)
|
|
465
|
+
revert_integer(value)&.to_s
|
|
466
|
+
end
|
|
467
|
+
|
|
369
468
|
# Ruby's convention is to provide timeouts in seconds, not milliseconds and
|
|
370
469
|
# to use fractions where more precision is necessary. The connection string
|
|
371
470
|
# options are always in MS so we provide an easy conversion type.
|
|
372
471
|
#
|
|
373
472
|
# @param [ String ] name Name of the URI option being processed.
|
|
374
|
-
# @param [ Integer ] value The millisecond value.
|
|
473
|
+
# @param [ String | Integer | Float ] value The millisecond value.
|
|
375
474
|
#
|
|
376
475
|
# @return [ Float ] The seconds value.
|
|
377
476
|
#
|
|
378
477
|
# @since 2.0.0
|
|
379
478
|
def convert_ms(name, value)
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
479
|
+
case value
|
|
480
|
+
when String
|
|
481
|
+
if /\A-?\d+(\.\d+)?\z/ !~ value
|
|
482
|
+
log_warn("Invalid ms value for #{name}: #{value}")
|
|
483
|
+
return nil
|
|
484
|
+
end
|
|
485
|
+
if value.to_s[0] == '-'
|
|
486
|
+
log_warn("#{name} cannot be a negative number")
|
|
487
|
+
return nil
|
|
488
|
+
end
|
|
489
|
+
when Integer, Float
|
|
490
|
+
if value < 0
|
|
491
|
+
log_warn("#{name} cannot be a negative number")
|
|
492
|
+
return nil
|
|
493
|
+
end
|
|
494
|
+
else
|
|
495
|
+
raise ArgumentError, "Can only convert Strings, Integers, or Floats to ms. Given: #{value.class}"
|
|
388
496
|
end
|
|
389
497
|
|
|
390
498
|
value.to_f / 1000
|
|
391
499
|
end
|
|
392
500
|
|
|
501
|
+
# Reverts an ms.
|
|
502
|
+
#
|
|
503
|
+
# @param [ Float ] value The float.
|
|
504
|
+
#
|
|
505
|
+
# @return [ Integer ] The number multiplied by 1000 as an integer.
|
|
393
506
|
def revert_ms(value)
|
|
394
507
|
(value * 1000).round
|
|
395
508
|
end
|
|
396
509
|
|
|
510
|
+
# Stringifies an ms.
|
|
511
|
+
#
|
|
512
|
+
# @param [ Float ] value The float.
|
|
513
|
+
#
|
|
514
|
+
# @return [ String ] The string.
|
|
515
|
+
def stringify_ms(value)
|
|
516
|
+
revert_ms(value).to_s
|
|
517
|
+
end
|
|
518
|
+
|
|
397
519
|
# Converts +value+ into a symbol.
|
|
398
520
|
#
|
|
399
521
|
# @param [ String ] name Name of the URI option being processed.
|
|
400
|
-
# @param
|
|
522
|
+
# @param [ String | Symbol ] value URI option value.
|
|
401
523
|
#
|
|
402
524
|
# @return [ Symbol ] Converted value.
|
|
403
525
|
def convert_symbol(name, value)
|
|
404
526
|
value.to_sym
|
|
405
527
|
end
|
|
406
528
|
|
|
529
|
+
# Reverts a symbol.
|
|
530
|
+
#
|
|
531
|
+
# @param [ Symbol ] value The symbol.
|
|
532
|
+
#
|
|
533
|
+
# @return [ String ] The passed value as a string.
|
|
407
534
|
def revert_symbol(value)
|
|
408
535
|
value.to_s
|
|
409
536
|
end
|
|
537
|
+
alias :stringify_symbol :revert_symbol
|
|
410
538
|
|
|
411
539
|
# Extract values from the string and put them into an array.
|
|
412
540
|
#
|
|
413
541
|
# @param [ String ] name Name of the URI option being processed.
|
|
414
542
|
# @param [ String ] value The string to build an array from.
|
|
415
543
|
#
|
|
416
|
-
# @return [ Array ] The array built from the string.
|
|
544
|
+
# @return [ Array<String> ] The array built from the string.
|
|
417
545
|
def convert_array(name, value)
|
|
418
546
|
value.split(',')
|
|
419
547
|
end
|
|
420
548
|
|
|
549
|
+
# Reverts an array.
|
|
550
|
+
#
|
|
551
|
+
# @param [ Array<String> ] value An array of strings.
|
|
552
|
+
#
|
|
553
|
+
# @return [ Array<String> ] The passed value.
|
|
421
554
|
def revert_array(value)
|
|
422
555
|
value
|
|
423
556
|
end
|
|
424
557
|
|
|
558
|
+
# Stringifies an array.
|
|
559
|
+
#
|
|
560
|
+
# @param [ Array<String> ] value An array of strings.
|
|
561
|
+
#
|
|
562
|
+
# @return [ String ] The array joined by commas.
|
|
563
|
+
def stringify_array(value)
|
|
564
|
+
value.join(',')
|
|
565
|
+
end
|
|
566
|
+
|
|
425
567
|
# Authentication mechanism transformation.
|
|
426
568
|
#
|
|
427
569
|
# @param [ String ] name Name of the URI option being processed.
|
|
428
|
-
# @param
|
|
570
|
+
# @param [ String ] value The authentication mechanism.
|
|
429
571
|
#
|
|
430
|
-
# @return [Symbol] The transformed authentication mechanism.
|
|
572
|
+
# @return [ Symbol ] The transformed authentication mechanism.
|
|
431
573
|
def convert_auth_mech(name, value)
|
|
432
|
-
|
|
433
|
-
|
|
574
|
+
auth_mech = AUTH_MECH_MAP[value.upcase]
|
|
575
|
+
(auth_mech || value).tap do |mech|
|
|
576
|
+
log_warn("#{value} is not a valid auth mechanism") unless auth_mech
|
|
434
577
|
end
|
|
435
578
|
end
|
|
436
579
|
|
|
580
|
+
# Reverts auth mechanism.
|
|
581
|
+
#
|
|
582
|
+
# @param [ Symbol ] value The auth mechanism.
|
|
583
|
+
#
|
|
584
|
+
# @return [ String ] The auth mechanism as a string.
|
|
585
|
+
#
|
|
586
|
+
# @raise [ ArgumentError ] if its an invalid auth mechanism.
|
|
437
587
|
def revert_auth_mech(value)
|
|
438
588
|
found = AUTH_MECH_MAP.detect do |k, v|
|
|
439
589
|
v == value
|
|
@@ -445,12 +595,21 @@ module Mongo
|
|
|
445
595
|
end
|
|
446
596
|
end
|
|
447
597
|
|
|
598
|
+
# Stringifies auth mechanism.
|
|
599
|
+
#
|
|
600
|
+
# @param [ Symbol ] value The auth mechanism.
|
|
601
|
+
#
|
|
602
|
+
# @return [ String | nil ] The auth mechanism as a string.
|
|
603
|
+
def stringify_auth_mech(value)
|
|
604
|
+
revert_auth_mech(value) rescue nil
|
|
605
|
+
end
|
|
606
|
+
|
|
448
607
|
# Auth mechanism properties extractor.
|
|
449
608
|
#
|
|
450
609
|
# @param [ String ] name Name of the URI option being processed.
|
|
451
|
-
# @param
|
|
610
|
+
# @param [ String ] value The auth mechanism properties string.
|
|
452
611
|
#
|
|
453
|
-
# @return [ Hash ] The auth mechanism properties hash.
|
|
612
|
+
# @return [ Hash | nil ] The auth mechanism properties hash.
|
|
454
613
|
def convert_auth_mech_props(name, value)
|
|
455
614
|
properties = hash_extractor('authMechanismProperties', value)
|
|
456
615
|
if properties
|
|
@@ -463,62 +622,101 @@ module Mongo
|
|
|
463
622
|
properties
|
|
464
623
|
end
|
|
465
624
|
|
|
625
|
+
# Reverts auth mechanism properties.
|
|
626
|
+
#
|
|
627
|
+
# @param [ Hash | nil ] value The auth mech properties.
|
|
628
|
+
#
|
|
629
|
+
# @return [ Hash | nil ] The passed value.
|
|
466
630
|
def revert_auth_mech_props(value)
|
|
467
631
|
value
|
|
468
632
|
end
|
|
469
633
|
|
|
634
|
+
# Stringifies auth mechanism properties.
|
|
635
|
+
#
|
|
636
|
+
# @param [ Hash | nil ] value The auth mech properties.
|
|
637
|
+
#
|
|
638
|
+
# @return [ String | nil ] The string.
|
|
639
|
+
def stringify_auth_mech_props(value)
|
|
640
|
+
return if value.nil?
|
|
641
|
+
value.map { |k, v| "#{k}:#{v}" }.join(',')
|
|
642
|
+
end
|
|
643
|
+
|
|
470
644
|
# Parses the max staleness value, which must be either "0" or an integer
|
|
471
645
|
# greater or equal to 90.
|
|
472
646
|
#
|
|
473
647
|
# @param [ String ] name Name of the URI option being processed.
|
|
474
|
-
# @param
|
|
648
|
+
# @param [ String | Integer ] value The max staleness string.
|
|
475
649
|
#
|
|
476
650
|
# @return [ Integer | nil ] The max staleness integer parsed out if it is valid, otherwise nil
|
|
477
651
|
# (and a warning will be logged).
|
|
478
652
|
def convert_max_staleness(name, value)
|
|
479
|
-
if /\A-?\d+\z/ =~ value
|
|
480
|
-
|
|
653
|
+
int = if value.is_a?(String) && /\A-?\d+\z/ =~ value
|
|
654
|
+
value.to_i
|
|
655
|
+
elsif value.is_a?(Integer)
|
|
656
|
+
value
|
|
657
|
+
end
|
|
481
658
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
659
|
+
if int.nil?
|
|
660
|
+
log_warn("Invalid max staleness value: #{value}")
|
|
661
|
+
return nil
|
|
662
|
+
end
|
|
485
663
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
end
|
|
664
|
+
if int == -1
|
|
665
|
+
int = nil
|
|
666
|
+
end
|
|
490
667
|
|
|
491
|
-
|
|
668
|
+
if int && (int > 0 && int < 90 || int < 0)
|
|
669
|
+
log_warn("max staleness should be either 0 or greater than 90: #{value}")
|
|
670
|
+
int = nil
|
|
492
671
|
end
|
|
493
672
|
|
|
494
|
-
|
|
495
|
-
nil
|
|
673
|
+
int
|
|
496
674
|
end
|
|
497
675
|
|
|
676
|
+
# Reverts max staleness.
|
|
677
|
+
#
|
|
678
|
+
# @param [ Integer | nil ] value The max staleness.
|
|
679
|
+
#
|
|
680
|
+
# @return [ Integer | nil ] The passed value.
|
|
498
681
|
def revert_max_staleness(value)
|
|
499
682
|
value
|
|
500
683
|
end
|
|
501
684
|
|
|
685
|
+
# Stringifies max staleness.
|
|
686
|
+
#
|
|
687
|
+
# @param [ Integer | nil ] value The max staleness.
|
|
688
|
+
#
|
|
689
|
+
# @return [ String | nil ] The string.
|
|
690
|
+
def stringify_max_staleness(value)
|
|
691
|
+
revert_max_staleness(value)&.to_s
|
|
692
|
+
end
|
|
693
|
+
|
|
502
694
|
# Read preference mode transformation.
|
|
503
695
|
#
|
|
504
696
|
# @param [ String ] name Name of the URI option being processed.
|
|
505
|
-
# @param
|
|
697
|
+
# @param [ String ] value The read mode string value.
|
|
506
698
|
#
|
|
507
|
-
# @return [Symbol] The read mode
|
|
699
|
+
# @return [ Symbol | String ] The read mode.
|
|
508
700
|
def convert_read_mode(name, value)
|
|
509
701
|
READ_MODE_MAP[value.downcase] || value
|
|
510
702
|
end
|
|
511
703
|
|
|
704
|
+
# Reverts read mode.
|
|
705
|
+
#
|
|
706
|
+
# @param [ Symbol | String ] value The read mode.
|
|
707
|
+
#
|
|
708
|
+
# @return [ String ] The read mode as a string.
|
|
512
709
|
def revert_read_mode(value)
|
|
513
710
|
value.to_s.gsub(/_(\w)/) { $1.upcase }
|
|
514
711
|
end
|
|
712
|
+
alias :stringify_read_mode :revert_read_mode
|
|
515
713
|
|
|
516
714
|
# Read preference tags transformation.
|
|
517
715
|
#
|
|
518
716
|
# @param [ String ] name Name of the URI option being processed.
|
|
519
|
-
# @param
|
|
717
|
+
# @param [ String ] value The string representing tag set.
|
|
520
718
|
#
|
|
521
|
-
# @return [Array<Hash>] Array with tag set.
|
|
719
|
+
# @return [ Array<Hash> | nil ] Array with tag set.
|
|
522
720
|
def convert_read_tags(name, value)
|
|
523
721
|
converted = convert_read_set(name, value)
|
|
524
722
|
if converted
|
|
@@ -528,16 +726,30 @@ module Mongo
|
|
|
528
726
|
end
|
|
529
727
|
end
|
|
530
728
|
|
|
729
|
+
# Reverts read tags.
|
|
730
|
+
#
|
|
731
|
+
# @param [ Array<Hash> | nil ] value The read tags.
|
|
732
|
+
#
|
|
733
|
+
# @return [ Array<Hash> | nil ] The passed value.
|
|
531
734
|
def revert_read_tags(value)
|
|
532
735
|
value
|
|
533
736
|
end
|
|
534
737
|
|
|
738
|
+
# Stringifies read tags.
|
|
739
|
+
#
|
|
740
|
+
# @param [ Array<Hash> | nil ] value The read tags.
|
|
741
|
+
#
|
|
742
|
+
# @return [ String | nil ] The joined string of read tags.
|
|
743
|
+
def stringify_read_tags(value)
|
|
744
|
+
value&.map { |ar| ar.map { |k, v| "#{k}:#{v}" }.join(',') }
|
|
745
|
+
end
|
|
746
|
+
|
|
535
747
|
# Read preference tag set extractor.
|
|
536
748
|
#
|
|
537
749
|
# @param [ String ] name Name of the URI option being processed.
|
|
538
|
-
# @param
|
|
750
|
+
# @param [ String ] value The tag set string.
|
|
539
751
|
#
|
|
540
|
-
# @return [Hash] The tag set hash.
|
|
752
|
+
# @return [ Hash ] The tag set hash.
|
|
541
753
|
def convert_read_set(name, value)
|
|
542
754
|
hash_extractor('readPreferenceTags', value)
|
|
543
755
|
end
|
|
@@ -549,7 +761,7 @@ module Mongo
|
|
|
549
761
|
# Otherwise returns the string +value+ unchanged.
|
|
550
762
|
#
|
|
551
763
|
# @param [ String ] name Name of the URI option being processed.
|
|
552
|
-
# @param
|
|
764
|
+
# @param [ String | Integer ] value URI option value.
|
|
553
765
|
#
|
|
554
766
|
# @return [ Integer | Symbol | String ] Converted value.
|
|
555
767
|
def convert_w(name, value)
|
|
@@ -563,6 +775,11 @@ module Mongo
|
|
|
563
775
|
end
|
|
564
776
|
end
|
|
565
777
|
|
|
778
|
+
# Reverts write concern.
|
|
779
|
+
#
|
|
780
|
+
# @param [ Integer | Symbol | String ] value The write concern.
|
|
781
|
+
#
|
|
782
|
+
# @return [ Integer | String ] The write concern as a string.
|
|
566
783
|
def revert_w(value)
|
|
567
784
|
case value
|
|
568
785
|
when Symbol
|
|
@@ -572,34 +789,59 @@ module Mongo
|
|
|
572
789
|
end
|
|
573
790
|
end
|
|
574
791
|
|
|
792
|
+
# Stringifies write concern.
|
|
793
|
+
#
|
|
794
|
+
# @param [ Integer | Symbol | String ] value The write concern.
|
|
795
|
+
#
|
|
796
|
+
# @return [ String ] The write concern as a string.
|
|
797
|
+
def stringify_w(value)
|
|
798
|
+
revert_w(value)&.to_s
|
|
799
|
+
end
|
|
800
|
+
|
|
575
801
|
# Parses the zlib compression level.
|
|
576
802
|
#
|
|
577
803
|
# @param [ String ] name Name of the URI option being processed.
|
|
578
|
-
# @param
|
|
804
|
+
# @param [ String | Integer ] value The zlib compression level string.
|
|
579
805
|
#
|
|
580
806
|
# @return [ Integer | nil ] The compression level value if it is between -1 and 9 (inclusive),
|
|
581
807
|
# otherwise nil (and a warning will be logged).
|
|
582
808
|
def convert_zlib_compression_level(name, value)
|
|
583
|
-
if /\A-?\d+\z/ =~ value
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
return i
|
|
588
|
-
end
|
|
809
|
+
i = if value.is_a?(String) && /\A-?\d+\z/ =~ value
|
|
810
|
+
value.to_i
|
|
811
|
+
elsif value.is_a?(Integer)
|
|
812
|
+
value
|
|
589
813
|
end
|
|
590
814
|
|
|
591
|
-
|
|
592
|
-
|
|
815
|
+
if i && (i >= -1 && i <= 9)
|
|
816
|
+
i
|
|
817
|
+
else
|
|
818
|
+
log_warn("#{value} is not a valid zlibCompressionLevel")
|
|
819
|
+
nil
|
|
820
|
+
end
|
|
593
821
|
end
|
|
594
822
|
|
|
823
|
+
# Reverts zlib compression level
|
|
824
|
+
#
|
|
825
|
+
# @param [ Integer | nil ] value The write concern.
|
|
826
|
+
#
|
|
827
|
+
# @return [ Integer | nil ] The passed value.
|
|
595
828
|
def revert_zlib_compression_level(value)
|
|
596
829
|
value
|
|
597
830
|
end
|
|
598
831
|
|
|
832
|
+
# Stringifies zlib compression level
|
|
833
|
+
#
|
|
834
|
+
# @param [ Integer | nil ] value The write concern.
|
|
835
|
+
#
|
|
836
|
+
# @return [ String | nil ] The string.
|
|
837
|
+
def stringify_zlib_compression_level(value)
|
|
838
|
+
revert_zlib_compression_level(value)&.to_s
|
|
839
|
+
end
|
|
840
|
+
|
|
599
841
|
# Extract values from the string and put them into a nested hash.
|
|
600
842
|
#
|
|
601
843
|
# @param [ String ] name Name of the URI option being processed.
|
|
602
|
-
# @param
|
|
844
|
+
# @param [ String ] value The string to build a hash from.
|
|
603
845
|
#
|
|
604
846
|
# @return [ Hash ] The hash built from the string.
|
|
605
847
|
def hash_extractor(name, value)
|
|
@@ -619,8 +861,6 @@ module Mongo
|
|
|
619
861
|
h
|
|
620
862
|
end
|
|
621
863
|
end
|
|
622
|
-
|
|
623
864
|
end
|
|
624
|
-
|
|
625
865
|
end
|
|
626
866
|
end
|