mongo 2.23.0 → 2.24.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
- data/bin/mongo_console +0 -1
- data/lib/mongo/active_support.rb +1 -2
- data/lib/mongo/address/ipv4.rb +3 -6
- data/lib/mongo/address/ipv6.rb +6 -10
- data/lib/mongo/address/unix.rb +1 -4
- data/lib/mongo/address/validator.rb +16 -28
- data/lib/mongo/address.rb +30 -40
- data/lib/mongo/auth/aws/conversation.rb +6 -10
- data/lib/mongo/auth/aws/credentials.rb +0 -1
- data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
- data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
- data/lib/mongo/auth/aws/request.rb +20 -35
- data/lib/mongo/auth/aws.rb +1 -2
- data/lib/mongo/auth/base.rb +20 -29
- data/lib/mongo/auth/conversation_base.rb +14 -18
- data/lib/mongo/auth/cr/conversation.rb +0 -3
- data/lib/mongo/auth/cr.rb +1 -4
- data/lib/mongo/auth/credential_cache.rb +0 -2
- data/lib/mongo/auth/gssapi/conversation.rb +3 -8
- data/lib/mongo/auth/gssapi.rb +1 -4
- data/lib/mongo/auth/ldap/conversation.rb +0 -3
- data/lib/mongo/auth/ldap.rb +1 -4
- data/lib/mongo/auth/roles.rb +16 -19
- data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
- data/lib/mongo/auth/scram/conversation.rb +2 -5
- data/lib/mongo/auth/scram.rb +5 -10
- data/lib/mongo/auth/scram256/conversation.rb +2 -5
- data/lib/mongo/auth/scram256.rb +1 -3
- data/lib/mongo/auth/scram_conversation_base.rb +18 -24
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
- data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
- data/lib/mongo/auth/stringprep.rb +9 -12
- data/lib/mongo/auth/user/view.rb +3 -5
- data/lib/mongo/auth/user.rb +14 -24
- data/lib/mongo/auth/x509/conversation.rb +0 -3
- data/lib/mongo/auth/x509.rb +7 -9
- data/lib/mongo/auth.rb +18 -30
- data/lib/mongo/background_thread.rb +9 -17
- data/lib/mongo/bson.rb +0 -2
- data/lib/mongo/bulk_write/combineable.rb +0 -3
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/result.rb +11 -16
- data/lib/mongo/bulk_write/result_combiner.rb +9 -12
- data/lib/mongo/bulk_write/transformable.rb +16 -19
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/validatable.rb +11 -18
- data/lib/mongo/bulk_write.rb +76 -91
- data/lib/mongo/caching_cursor.rb +2 -7
- data/lib/mongo/client.rb +230 -275
- data/lib/mongo/client_encryption.rb +4 -5
- data/lib/mongo/cluster/periodic_executor.rb +2 -5
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
- data/lib/mongo/cluster/sdam_flow.rb +136 -159
- data/lib/mongo/cluster/topology/base.rb +15 -18
- data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
- data/lib/mongo/cluster/topology/sharded.rb +19 -9
- data/lib/mongo/cluster/topology/single.rb +24 -14
- data/lib/mongo/cluster/topology/unknown.rb +20 -10
- data/lib/mongo/cluster/topology.rb +29 -25
- data/lib/mongo/cluster.rb +148 -183
- data/lib/mongo/cluster_time.rb +14 -31
- data/lib/mongo/collection/helpers.rb +5 -8
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
- data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
- data/lib/mongo/collection/view/builder.rb +0 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
- data/lib/mongo/collection/view/change_stream.rb +59 -58
- data/lib/mongo/collection/view/explainable.rb +11 -20
- data/lib/mongo/collection/view/immutable.rb +1 -3
- data/lib/mongo/collection/view/iterable.rb +35 -28
- data/lib/mongo/collection/view/map_reduce.rb +20 -25
- data/lib/mongo/collection/view/readable.rb +50 -57
- data/lib/mongo/collection/view/writable.rb +56 -72
- data/lib/mongo/collection/view.rb +9 -8
- data/lib/mongo/collection.rb +63 -76
- data/lib/mongo/condition_variable.rb +4 -4
- data/lib/mongo/config/options.rb +0 -3
- data/lib/mongo/config/validators/option.rb +3 -5
- data/lib/mongo/config.rb +2 -4
- data/lib/mongo/crypt/auto_decryption_context.rb +0 -3
- data/lib/mongo/crypt/auto_encrypter.rb +34 -43
- data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
- data/lib/mongo/crypt/binary.rb +5 -9
- data/lib/mongo/crypt/binding.rb +149 -155
- data/lib/mongo/crypt/context.rb +10 -17
- data/lib/mongo/crypt/data_key_context.rb +2 -7
- data/lib/mongo/crypt/encryption_io.rb +29 -39
- data/lib/mongo/crypt/explicit_decryption_context.rb +0 -3
- data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
- data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
- data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
- data/lib/mongo/crypt/handle.rb +42 -48
- data/lib/mongo/crypt/hooks.rb +12 -15
- data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
- data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
- data/lib/mongo/crypt/kms/aws.rb +0 -2
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
- data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
- data/lib/mongo/crypt/kms/azure.rb +0 -1
- data/lib/mongo/crypt/kms/credentials.rb +13 -27
- data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
- data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
- data/lib/mongo/crypt/kms/gcp.rb +0 -2
- data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
- data/lib/mongo/crypt/kms/kmip.rb +0 -1
- data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
- data/lib/mongo/crypt/kms/local.rb +0 -1
- data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
- data/lib/mongo/crypt/kms.rb +14 -16
- data/lib/mongo/crypt/kms_context.rb +0 -2
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
- data/lib/mongo/crypt/status.rb +12 -14
- data/lib/mongo/crypt.rb +0 -1
- data/lib/mongo/csot_timeout_holder.rb +3 -2
- data/lib/mongo/cursor/kill_spec.rb +7 -10
- data/lib/mongo/cursor.rb +74 -64
- data/lib/mongo/cursor_host.rb +8 -10
- data/lib/mongo/database/view.rb +16 -37
- data/lib/mongo/database.rb +52 -56
- data/lib/mongo/dbref.rb +0 -1
- data/lib/mongo/distinguishing_semaphore.rb +0 -1
- data/lib/mongo/error/auth_error.rb +0 -2
- data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
- data/lib/mongo/error/bulk_write_error.rb +7 -10
- data/lib/mongo/error/change_stream_resumable.rb +0 -2
- data/lib/mongo/error/client_closed.rb +0 -2
- data/lib/mongo/error/closed_stream.rb +1 -4
- data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
- data/lib/mongo/error/connection_perished.rb +0 -2
- data/lib/mongo/error/connection_unavailable.rb +0 -2
- data/lib/mongo/error/credential_check_error.rb +0 -2
- data/lib/mongo/error/crypt_error.rb +0 -2
- data/lib/mongo/error/extra_file_chunk.rb +1 -4
- data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
- data/lib/mongo/error/file_not_found.rb +0 -3
- data/lib/mongo/error/handshake_error.rb +0 -2
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
- data/lib/mongo/error/internal_driver_error.rb +0 -2
- data/lib/mongo/error/invalid_address.rb +0 -2
- data/lib/mongo/error/invalid_application_name.rb +0 -3
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
- data/lib/mongo/error/invalid_collection_name.rb +1 -4
- data/lib/mongo/error/invalid_config_option.rb +0 -3
- data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
- data/lib/mongo/error/invalid_database_name.rb +1 -4
- data/lib/mongo/error/invalid_document.rb +1 -4
- data/lib/mongo/error/invalid_file.rb +0 -3
- data/lib/mongo/error/invalid_file_revision.rb +0 -3
- data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
- data/lib/mongo/error/invalid_nonce.rb +0 -3
- data/lib/mongo/error/invalid_read_concern.rb +2 -4
- data/lib/mongo/error/invalid_read_option.rb +0 -3
- data/lib/mongo/error/invalid_replacement_document.rb +2 -5
- data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
- data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
- data/lib/mongo/error/invalid_server_preference.rb +7 -16
- data/lib/mongo/error/invalid_session.rb +1 -4
- data/lib/mongo/error/invalid_signature.rb +0 -3
- data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
- data/lib/mongo/error/invalid_txt_record.rb +0 -2
- data/lib/mongo/error/invalid_update_document.rb +2 -5
- data/lib/mongo/error/invalid_uri.rb +1 -4
- data/lib/mongo/error/invalid_write_concern.rb +2 -5
- data/lib/mongo/error/kms_error.rb +0 -2
- data/lib/mongo/error/labelable.rb +0 -3
- data/lib/mongo/error/lint_error.rb +0 -2
- data/lib/mongo/error/max_bson_size.rb +8 -11
- data/lib/mongo/error/max_message_size.rb +2 -5
- data/lib/mongo/error/mismatched_domain.rb +0 -2
- data/lib/mongo/error/missing_connection.rb +0 -2
- data/lib/mongo/error/missing_file_chunk.rb +0 -3
- data/lib/mongo/error/missing_password.rb +0 -2
- data/lib/mongo/error/missing_resume_token.rb +1 -4
- data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
- data/lib/mongo/error/missing_service_id.rb +0 -2
- data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
- data/lib/mongo/error/multi_index_drop.rb +0 -3
- data/lib/mongo/error/need_primary_server.rb +0 -2
- data/lib/mongo/error/no_server_available.rb +3 -8
- data/lib/mongo/error/no_service_connection_available.rb +1 -3
- data/lib/mongo/error/no_srv_records.rb +0 -2
- data/lib/mongo/error/notable.rb +8 -16
- data/lib/mongo/error/operation_failure.rb +22 -35
- data/lib/mongo/error/parser.rb +33 -75
- data/lib/mongo/error/pool_cleared_error.rb +1 -3
- data/lib/mongo/error/pool_closed_error.rb +0 -3
- data/lib/mongo/error/pool_error.rb +0 -3
- data/lib/mongo/error/pool_paused_error.rb +0 -2
- data/lib/mongo/error/raise_original_error.rb +1 -3
- data/lib/mongo/error/read_write_retryable.rb +14 -17
- data/lib/mongo/error/sdam_error_detection.rb +3 -5
- data/lib/mongo/error/server_api_conflict.rb +0 -2
- data/lib/mongo/error/server_certificate_revoked.rb +0 -2
- data/lib/mongo/error/server_not_usable.rb +0 -2
- data/lib/mongo/error/session_ended.rb +1 -3
- data/lib/mongo/error/session_not_materialized.rb +1 -3
- data/lib/mongo/error/sessions_not_supported.rb +1 -4
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
- data/lib/mongo/error/socket_error.rb +0 -2
- data/lib/mongo/error/socket_timeout_error.rb +0 -2
- data/lib/mongo/error/transactions_not_supported.rb +3 -6
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
- data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
- data/lib/mongo/error/unexpected_response.rb +1 -4
- data/lib/mongo/error/unknown_payload_type.rb +0 -3
- data/lib/mongo/error/unmet_dependency.rb +0 -2
- data/lib/mongo/error/unsupported_array_filters.rb +3 -24
- data/lib/mongo/error/unsupported_collation.rb +3 -24
- data/lib/mongo/error/unsupported_features.rb +0 -2
- data/lib/mongo/error/unsupported_message_type.rb +0 -2
- data/lib/mongo/error/unsupported_option.rb +19 -21
- data/lib/mongo/error/write_retryable.rb +0 -2
- data/lib/mongo/error.rb +10 -24
- data/lib/mongo/event/base.rb +0 -2
- data/lib/mongo/event/listeners.rb +0 -3
- data/lib/mongo/event/publisher.rb +0 -3
- data/lib/mongo/event/subscriber.rb +0 -4
- data/lib/mongo/event.rb +4 -6
- data/lib/mongo/grid/file/chunk.rb +7 -10
- data/lib/mongo/grid/file/info.rb +20 -24
- data/lib/mongo/grid/file.rb +7 -8
- data/lib/mongo/grid/fs_bucket.rb +40 -48
- data/lib/mongo/grid/stream/read.rb +25 -35
- data/lib/mongo/grid/stream/write.rb +17 -22
- data/lib/mongo/grid/stream.rb +2 -4
- data/lib/mongo/grid.rb +0 -1
- data/lib/mongo/id.rb +0 -1
- data/lib/mongo/index/view.rb +49 -48
- data/lib/mongo/index.rb +7 -10
- data/lib/mongo/lint.rb +31 -37
- data/lib/mongo/loggable.rb +5 -8
- data/lib/mongo/logger.rb +1 -7
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
- data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap.rb +0 -1
- data/lib/mongo/monitoring/event/command_failed.rb +5 -9
- data/lib/mongo/monitoring/event/command_started.rb +8 -12
- data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
- data/lib/mongo/monitoring/event/secure.rb +15 -20
- data/lib/mongo/monitoring/event/server_closed.rb +1 -4
- data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
- data/lib/mongo/monitoring/event/server_opening.rb +1 -4
- data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
- data/lib/mongo/monitoring/event.rb +0 -1
- data/lib/mongo/monitoring/publishable.rb +20 -30
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
- data/lib/mongo/monitoring.rb +38 -39
- data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
- data/lib/mongo/operation/aggregate/result.rb +3 -6
- data/lib/mongo/operation/aggregate.rb +0 -2
- data/lib/mongo/operation/collections_info/result.rb +0 -3
- data/lib/mongo/operation/collections_info.rb +0 -2
- data/lib/mongo/operation/command/op_msg.rb +1 -4
- data/lib/mongo/operation/command.rb +0 -2
- data/lib/mongo/operation/context.rb +13 -16
- data/lib/mongo/operation/count/op_msg.rb +2 -4
- data/lib/mongo/operation/count.rb +0 -2
- data/lib/mongo/operation/create/op_msg.rb +2 -5
- data/lib/mongo/operation/create.rb +0 -2
- data/lib/mongo/operation/create_index/op_msg.rb +3 -7
- data/lib/mongo/operation/create_index.rb +0 -2
- data/lib/mongo/operation/create_user/op_msg.rb +2 -4
- data/lib/mongo/operation/create_user.rb +0 -2
- data/lib/mongo/operation/delete/bulk_result.rb +2 -3
- data/lib/mongo/operation/delete/op_msg.rb +3 -10
- data/lib/mongo/operation/delete/result.rb +0 -3
- data/lib/mongo/operation/delete.rb +1 -5
- data/lib/mongo/operation/distinct/op_msg.rb +2 -5
- data/lib/mongo/operation/distinct.rb +0 -2
- data/lib/mongo/operation/drop/op_msg.rb +0 -2
- data/lib/mongo/operation/drop.rb +0 -2
- data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
- data/lib/mongo/operation/drop_database.rb +0 -2
- data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
- data/lib/mongo/operation/drop_index.rb +0 -2
- data/lib/mongo/operation/explain/op_msg.rb +0 -2
- data/lib/mongo/operation/explain/result.rb +0 -3
- data/lib/mongo/operation/explain.rb +0 -2
- data/lib/mongo/operation/find/builder/command.rb +4 -12
- data/lib/mongo/operation/find/builder/flags.rb +9 -15
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
- data/lib/mongo/operation/find/builder.rb +0 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -12
- data/lib/mongo/operation/find/result.rb +0 -3
- data/lib/mongo/operation/find.rb +0 -2
- data/lib/mongo/operation/get_more/command_builder.rb +1 -6
- data/lib/mongo/operation/get_more/op_msg.rb +10 -4
- data/lib/mongo/operation/get_more/result.rb +0 -3
- data/lib/mongo/operation/get_more.rb +0 -2
- data/lib/mongo/operation/indexes/op_msg.rb +0 -2
- data/lib/mongo/operation/indexes/result.rb +1 -5
- data/lib/mongo/operation/indexes.rb +0 -2
- data/lib/mongo/operation/insert/bulk_result.rb +2 -6
- data/lib/mongo/operation/insert/op_msg.rb +2 -4
- data/lib/mongo/operation/insert/result.rb +0 -3
- data/lib/mongo/operation/insert.rb +2 -5
- data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
- data/lib/mongo/operation/kill_cursors.rb +0 -2
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
- data/lib/mongo/operation/list_collections/result.rb +1 -4
- data/lib/mongo/operation/list_collections.rb +0 -2
- data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
- data/lib/mongo/operation/map_reduce/result.rb +3 -6
- data/lib/mongo/operation/map_reduce.rb +0 -2
- data/lib/mongo/operation/op_msg_base.rb +0 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
- data/lib/mongo/operation/parallel_scan/result.rb +2 -5
- data/lib/mongo/operation/parallel_scan.rb +0 -2
- data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
- data/lib/mongo/operation/remove_user.rb +0 -2
- data/lib/mongo/operation/result.rb +38 -48
- data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
- data/lib/mongo/operation/shared/executable.rb +19 -28
- data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
- data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
- data/lib/mongo/operation/shared/idable.rb +3 -6
- data/lib/mongo/operation/shared/limited.rb +0 -3
- data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
- data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
- data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
- data/lib/mongo/operation/shared/response_handling.rb +13 -26
- data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
- data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
- data/lib/mongo/operation/shared/specifiable.rb +32 -58
- data/lib/mongo/operation/shared/write.rb +12 -17
- data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
- data/lib/mongo/operation/update/bulk_result.rb +13 -17
- data/lib/mongo/operation/update/op_msg.rb +2 -5
- data/lib/mongo/operation/update/result.rb +5 -5
- data/lib/mongo/operation/update.rb +1 -5
- data/lib/mongo/operation/update_user/op_msg.rb +2 -4
- data/lib/mongo/operation/update_user.rb +0 -2
- data/lib/mongo/operation/users_info/op_msg.rb +2 -4
- data/lib/mongo/operation/users_info/result.rb +1 -4
- data/lib/mongo/operation/users_info.rb +0 -2
- data/lib/mongo/operation/write_command/op_msg.rb +2 -10
- data/lib/mongo/operation/write_command.rb +0 -2
- data/lib/mongo/operation.rb +9 -14
- data/lib/mongo/options/mapper.rb +8 -15
- data/lib/mongo/options/redacted.rb +7 -9
- data/lib/mongo/options.rb +0 -1
- data/lib/mongo/protocol/bit_vector.rb +3 -5
- data/lib/mongo/protocol/caching_hash.rb +2 -7
- data/lib/mongo/protocol/compressed.rb +5 -10
- data/lib/mongo/protocol/get_more.rb +2 -8
- data/lib/mongo/protocol/kill_cursors.rb +2 -8
- data/lib/mongo/protocol/message.rb +103 -105
- data/lib/mongo/protocol/msg.rb +48 -63
- data/lib/mongo/protocol/query.rb +32 -41
- data/lib/mongo/protocol/registry.rb +2 -5
- data/lib/mongo/protocol/reply.rb +10 -16
- data/lib/mongo/protocol/serializers.rb +41 -59
- data/lib/mongo/protocol.rb +0 -1
- data/lib/mongo/query_cache.rb +7 -15
- data/lib/mongo/retryable/backpressure.rb +31 -0
- data/lib/mongo/retryable/base_worker.rb +39 -13
- data/lib/mongo/retryable/read_worker.rb +77 -21
- data/lib/mongo/retryable/retry_policy.rb +59 -0
- data/lib/mongo/retryable/write_worker.rb +155 -56
- data/lib/mongo/retryable.rb +70 -9
- data/lib/mongo/search_index/view.rb +1 -1
- data/lib/mongo/semaphore.rb +0 -1
- data/lib/mongo/server/app_metadata/environment.rb +3 -3
- data/lib/mongo/server/app_metadata.rb +4 -5
- data/lib/mongo/server/connection.rb +61 -61
- data/lib/mongo/server/connection_base.rb +43 -53
- data/lib/mongo/server/connection_common.rb +41 -64
- data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
- data/lib/mongo/server/connection_pool/populator.rb +1 -4
- data/lib/mongo/server/connection_pool.rb +195 -167
- data/lib/mongo/server/description/features.rb +23 -60
- data/lib/mongo/server/description/load_balancer.rb +0 -2
- data/lib/mongo/server/description.rb +117 -138
- data/lib/mongo/server/monitor/app_metadata.rb +3 -4
- data/lib/mongo/server/monitor/connection.rb +28 -35
- data/lib/mongo/server/monitor.rb +65 -60
- data/lib/mongo/server/pending_connection.rb +70 -71
- data/lib/mongo/server/push_monitor/connection.rb +0 -3
- data/lib/mongo/server/push_monitor.rb +21 -29
- data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
- data/lib/mongo/server.rb +60 -93
- data/lib/mongo/server_selector/base.rb +133 -157
- data/lib/mongo/server_selector/nearest.rb +2 -5
- data/lib/mongo/server_selector/primary.rb +1 -5
- data/lib/mongo/server_selector/primary_preferred.rb +2 -6
- data/lib/mongo/server_selector/secondary.rb +2 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
- data/lib/mongo/server_selector.rb +3 -4
- data/lib/mongo/session/server_session.rb +6 -7
- data/lib/mongo/session/session_pool.rb +20 -34
- data/lib/mongo/session.rb +287 -188
- data/lib/mongo/socket/ocsp_cache.rb +8 -13
- data/lib/mongo/socket/ocsp_verifier.rb +69 -70
- data/lib/mongo/socket/ssl.rb +44 -43
- data/lib/mongo/socket/tcp.rb +5 -8
- data/lib/mongo/socket/unix.rb +0 -4
- data/lib/mongo/socket.rb +80 -102
- data/lib/mongo/srv/monitor.rb +6 -11
- data/lib/mongo/srv/resolver.rb +15 -24
- data/lib/mongo/srv/result.rb +18 -24
- data/lib/mongo/srv.rb +0 -1
- data/lib/mongo/timeout.rb +4 -11
- data/lib/mongo/topology_version.rb +8 -13
- data/lib/mongo/tracing/open_telemetry/command_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/tracer.rb +1 -1
- data/lib/mongo/uri/options_mapper.rb +135 -126
- data/lib/mongo/uri/srv_protocol.rb +25 -38
- data/lib/mongo/uri.rb +95 -139
- data/lib/mongo/utils.rb +5 -12
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +0 -2
- data/lib/mongo/write_concern/base.rb +6 -6
- data/lib/mongo/write_concern/unacknowledged.rb +0 -2
- data/lib/mongo/write_concern.rb +14 -15
- data/lib/mongo.rb +1 -3
- data/mongo.gemspec +17 -17
- metadata +5 -5
- data/lib/mongo/error/server_api_not_supported.rb +0 -27
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
- data/lib/mongo/operation/shared/validatable.rb +0 -87
data/lib/mongo/timeout.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -16,10 +15,8 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
|
-
|
|
20
18
|
# @api private
|
|
21
19
|
module Timeout
|
|
22
|
-
|
|
23
20
|
# A wrapper around Ruby core's Timeout::timeout method that provides
|
|
24
21
|
# a standardized API for Ruby versions older and newer than 2.4.0,
|
|
25
22
|
# which is when the third argument was introduced.
|
|
@@ -30,12 +27,10 @@ module Mongo
|
|
|
30
27
|
# @param [ String ] message The error message passed to the exception raised
|
|
31
28
|
# on timeout, optional. When no error message is provided, the default
|
|
32
29
|
# error message for the exception class is used.
|
|
33
|
-
def timeout(sec, klass=nil, message=nil)
|
|
30
|
+
def timeout(sec, klass = nil, message = nil, &block)
|
|
34
31
|
if message && RUBY_VERSION < '2.94.0'
|
|
35
32
|
begin
|
|
36
|
-
::Timeout.timeout(sec)
|
|
37
|
-
yield
|
|
38
|
-
end
|
|
33
|
+
::Timeout.timeout(sec, &block)
|
|
39
34
|
rescue ::Timeout::Error
|
|
40
35
|
raise klass, message
|
|
41
36
|
end
|
|
@@ -43,10 +38,8 @@ module Mongo
|
|
|
43
38
|
# Jruby Timeout::timeout method does not support passing nil arguments.
|
|
44
39
|
# Remove the nil arguments before passing them along to the core
|
|
45
40
|
# Timeout::timeout method.
|
|
46
|
-
optional_args = [klass, message].compact
|
|
47
|
-
::Timeout.timeout(sec, *optional_args)
|
|
48
|
-
yield
|
|
49
|
-
end
|
|
41
|
+
optional_args = [ klass, message ].compact
|
|
42
|
+
::Timeout.timeout(sec, *optional_args, &block)
|
|
50
43
|
end
|
|
51
44
|
end
|
|
52
45
|
module_function :timeout
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -23,12 +22,8 @@ module Mongo
|
|
|
23
22
|
class TopologyVersion < BSON::Document
|
|
24
23
|
def initialize(doc)
|
|
25
24
|
if Lint.enabled?
|
|
26
|
-
unless doc['processId']
|
|
27
|
-
|
|
28
|
-
end
|
|
29
|
-
unless doc['counter']
|
|
30
|
-
raise ArgumentError, 'Creating a topology version without counter field'
|
|
31
|
-
end
|
|
25
|
+
raise ArgumentError, 'Creating a topology version without processId field' unless doc['processId']
|
|
26
|
+
raise ArgumentError, 'Creating a topology version without counter field' unless doc['counter']
|
|
32
27
|
end
|
|
33
28
|
|
|
34
29
|
super
|
|
@@ -55,10 +50,10 @@ module Mongo
|
|
|
55
50
|
# @return [ true | false ] Whether this topology version is potentially newer.
|
|
56
51
|
# @api private
|
|
57
52
|
def gt?(other)
|
|
58
|
-
if process_id
|
|
59
|
-
true
|
|
60
|
-
else
|
|
53
|
+
if process_id == other.process_id
|
|
61
54
|
counter > other.counter
|
|
55
|
+
else
|
|
56
|
+
true
|
|
62
57
|
end
|
|
63
58
|
end
|
|
64
59
|
|
|
@@ -73,10 +68,10 @@ module Mongo
|
|
|
73
68
|
# @return [ true | false ] Whether this topology version is potentially newer.
|
|
74
69
|
# @api private
|
|
75
70
|
def gte?(other)
|
|
76
|
-
if process_id
|
|
77
|
-
true
|
|
78
|
-
else
|
|
71
|
+
if process_id == other.process_id
|
|
79
72
|
counter >= other.counter
|
|
73
|
+
else
|
|
74
|
+
true
|
|
80
75
|
end
|
|
81
76
|
end
|
|
82
77
|
|
|
@@ -135,7 +135,7 @@ module Mongo
|
|
|
135
135
|
# @return [ Hash ] base span attributes.
|
|
136
136
|
def base_attributes(message)
|
|
137
137
|
{
|
|
138
|
-
'db.system' => 'mongodb',
|
|
138
|
+
'db.system.name' => 'mongodb',
|
|
139
139
|
'db.namespace' => database(message),
|
|
140
140
|
'db.collection.name' => collection_name(message),
|
|
141
141
|
'db.command.name' => command_name(message),
|
|
@@ -132,7 +132,7 @@ module Mongo
|
|
|
132
132
|
# @return [ Hash ] OpenTelemetry span attributes following MongoDB semantic conventions.
|
|
133
133
|
def span_attributes(operation, op_name)
|
|
134
134
|
{
|
|
135
|
-
'db.system' => 'mongodb',
|
|
135
|
+
'db.system.name' => 'mongodb',
|
|
136
136
|
'db.namespace' => operation.db_name.to_s,
|
|
137
137
|
'db.collection.name' => collection_name(operation),
|
|
138
138
|
'db.operation.name' => operation_name(operation, op_name),
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class URI
|
|
20
|
-
|
|
21
19
|
# Performs mapping between URI options and Ruby options.
|
|
22
20
|
#
|
|
23
21
|
# This class contains:
|
|
@@ -37,10 +35,9 @@ module Mongo
|
|
|
37
35
|
#
|
|
38
36
|
# @api private
|
|
39
37
|
class OptionsMapper
|
|
40
|
-
|
|
41
38
|
include Loggable
|
|
42
39
|
|
|
43
|
-
#
|
|
40
|
+
# Instantiates the options mapper.
|
|
44
41
|
#
|
|
45
42
|
# @option opts [ Logger ] :logger A custom logger to use.
|
|
46
43
|
def initialize(**opts)
|
|
@@ -68,21 +65,19 @@ module Mongo
|
|
|
68
65
|
|
|
69
66
|
group = strategy[:group]
|
|
70
67
|
target = if group
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
uri_options[group] || {}
|
|
69
|
+
else
|
|
70
|
+
uri_options
|
|
71
|
+
end
|
|
75
72
|
value = apply_transform(key, value, strategy[:type])
|
|
76
73
|
# Sometimes the value here would be nil, for example if we are processing
|
|
77
74
|
# read preference tags or auth mechanism properties and all of the
|
|
78
75
|
# data within is invalid. Ignore such options.
|
|
79
|
-
unless value.nil?
|
|
80
|
-
merge_uri_option(target, value, strategy[:name])
|
|
81
|
-
end
|
|
76
|
+
merge_uri_option(target, value, strategy[:name]) unless value.nil?
|
|
82
77
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
return unless group && !target.empty? && !uri_options.key?(group)
|
|
79
|
+
|
|
80
|
+
uri_options[group] = target
|
|
86
81
|
end
|
|
87
82
|
|
|
88
83
|
def smc_to_ruby(opts)
|
|
@@ -97,22 +92,18 @@ module Mongo
|
|
|
97
92
|
|
|
98
93
|
group = strategy[:group]
|
|
99
94
|
target = if group
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
95
|
+
uri_options[group] || {}
|
|
96
|
+
else
|
|
97
|
+
uri_options
|
|
98
|
+
end
|
|
104
99
|
|
|
105
100
|
value = apply_transform(key, value, strategy[:type])
|
|
106
101
|
# Sometimes the value here would be nil, for example if we are processing
|
|
107
102
|
# read preference tags or auth mechanism properties and all of the
|
|
108
103
|
# data within is invalid. Ignore such options.
|
|
109
|
-
unless value.nil?
|
|
110
|
-
merge_uri_option(target, value, strategy[:name])
|
|
111
|
-
end
|
|
104
|
+
merge_uri_option(target, value, strategy[:name]) unless value.nil?
|
|
112
105
|
|
|
113
|
-
if group && !target.empty? && !uri_options.key?(group)
|
|
114
|
-
uri_options[group] = target
|
|
115
|
-
end
|
|
106
|
+
uri_options[group] = target if group && !target.empty? && !uri_options.key?(group)
|
|
116
107
|
end
|
|
117
108
|
|
|
118
109
|
uri_options
|
|
@@ -128,35 +119,30 @@ module Mongo
|
|
|
128
119
|
URI_OPTION_MAP.each do |uri_key, spec|
|
|
129
120
|
if spec[:group]
|
|
130
121
|
v = opts[spec[:group]]
|
|
131
|
-
v
|
|
122
|
+
v &&= v[spec[:name]]
|
|
132
123
|
else
|
|
133
124
|
v = opts[spec[:name]]
|
|
134
125
|
end
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
|
126
|
+
next if v.nil?
|
|
127
|
+
|
|
128
|
+
if type = spec[:type]
|
|
129
|
+
v = send("revert_#{type}", v)
|
|
144
130
|
end
|
|
131
|
+
canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
|
|
132
|
+
raise ArgumentError, "Option #{uri_key} is not known" unless canonical_key
|
|
133
|
+
|
|
134
|
+
rv[canonical_key] = v
|
|
145
135
|
end
|
|
146
136
|
# For options that default to true, remove the value if it is true.
|
|
147
|
-
%w
|
|
148
|
-
if rv[k]
|
|
149
|
-
rv.delete(k)
|
|
150
|
-
end
|
|
137
|
+
%w[retryReads retryWrites].each do |k|
|
|
138
|
+
rv.delete(k) if rv[k]
|
|
151
139
|
end
|
|
152
140
|
# Remove auth source when it is $external for mechanisms that default
|
|
153
141
|
# (or require) that auth source.
|
|
154
|
-
if %w
|
|
155
|
-
rv.delete('authSource')
|
|
156
|
-
end
|
|
142
|
+
rv.delete('authSource') if %w[MONGODB-AWS].include?(rv['authMechanism']) && rv['authSource'] == '$external'
|
|
157
143
|
# ssl and tls are aliases, remove ssl ones
|
|
158
144
|
rv.delete('ssl')
|
|
159
|
-
# TODO remove authSource if it is the same as the database,
|
|
145
|
+
# TODO: remove authSource if it is the same as the database,
|
|
160
146
|
# requires this method to know the database specified in the client.
|
|
161
147
|
rv
|
|
162
148
|
end
|
|
@@ -171,39 +157,56 @@ module Mongo
|
|
|
171
157
|
URI_OPTION_MAP.each do |uri_key, spec|
|
|
172
158
|
if spec[:group]
|
|
173
159
|
v = opts[spec[:group]]
|
|
174
|
-
v
|
|
160
|
+
v &&= v[spec[:name]]
|
|
175
161
|
else
|
|
176
162
|
v = opts[spec[:name]]
|
|
177
163
|
end
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
|
|
183
|
-
unless canonical_key
|
|
184
|
-
raise ArgumentError, "Option #{uri_key} is not known"
|
|
185
|
-
end
|
|
186
|
-
rv[canonical_key] = v
|
|
164
|
+
next if v.nil?
|
|
165
|
+
|
|
166
|
+
if type = spec[:type]
|
|
167
|
+
v = send("stringify_#{type}", v)
|
|
187
168
|
end
|
|
169
|
+
canonical_key = URI_OPTION_CANONICAL_NAMES[uri_key]
|
|
170
|
+
raise ArgumentError, "Option #{uri_key} is not known" unless canonical_key
|
|
171
|
+
|
|
172
|
+
rv[canonical_key] = v
|
|
188
173
|
end
|
|
189
174
|
# For options that default to true, remove the value if it is true.
|
|
190
|
-
%w
|
|
191
|
-
if rv[k]
|
|
192
|
-
rv.delete(k)
|
|
193
|
-
end
|
|
175
|
+
%w[retryReads retryWrites].each do |k|
|
|
176
|
+
rv.delete(k) if rv[k]
|
|
194
177
|
end
|
|
195
178
|
# Remove auth source when it is $external for mechanisms that default
|
|
196
179
|
# (or require) that auth source.
|
|
197
|
-
if %w
|
|
198
|
-
rv.delete('authSource')
|
|
199
|
-
end
|
|
180
|
+
rv.delete('authSource') if %w[MONGODB-AWS].include?(rv['authMechanism']) && rv['authSource'] == '$external'
|
|
200
181
|
# ssl and tls are aliases, remove ssl ones
|
|
201
182
|
rv.delete('ssl')
|
|
202
|
-
# TODO remove authSource if it is the same as the database,
|
|
183
|
+
# TODO: remove authSource if it is the same as the database,
|
|
203
184
|
# requires this method to know the database specified in the client.
|
|
204
185
|
rv
|
|
205
186
|
end
|
|
206
187
|
|
|
188
|
+
# Hash for storing map of URI option parameters to conversion strategies
|
|
189
|
+
# @api private
|
|
190
|
+
URI_OPTION_MAP = {}
|
|
191
|
+
|
|
192
|
+
# @return [ Hash<String, String> ] Map from lowercased to canonical URI
|
|
193
|
+
# option names.
|
|
194
|
+
# @api private
|
|
195
|
+
URI_OPTION_CANONICAL_NAMES = {}
|
|
196
|
+
|
|
197
|
+
# Simple internal dsl to register a MongoDB URI option in the URI_OPTION_MAP.
|
|
198
|
+
#
|
|
199
|
+
# @param [ String ] uri_key The MongoDB URI option to register.
|
|
200
|
+
# @param [ Symbol ] name The name of the option in the driver.
|
|
201
|
+
# @param [ Hash ] extra Extra options.
|
|
202
|
+
# * :group [ Symbol ] Nested hash where option will go.
|
|
203
|
+
# * :type [ Symbol ] Name of function to transform value.
|
|
204
|
+
# @api private
|
|
205
|
+
def self.uri_option(uri_key, name, **extra)
|
|
206
|
+
URI_OPTION_MAP[uri_key.downcase] = { name: name }.update(extra)
|
|
207
|
+
URI_OPTION_CANONICAL_NAMES[uri_key.downcase] = uri_key
|
|
208
|
+
end
|
|
209
|
+
|
|
207
210
|
private
|
|
208
211
|
|
|
209
212
|
# Applies URI value transformation by either using the default cast
|
|
@@ -243,25 +246,6 @@ module Mongo
|
|
|
243
246
|
end
|
|
244
247
|
end
|
|
245
248
|
|
|
246
|
-
# Hash for storing map of URI option parameters to conversion strategies
|
|
247
|
-
URI_OPTION_MAP = {}
|
|
248
|
-
|
|
249
|
-
# @return [ Hash<String, String> ] Map from lowercased to canonical URI
|
|
250
|
-
# option names.
|
|
251
|
-
URI_OPTION_CANONICAL_NAMES = {}
|
|
252
|
-
|
|
253
|
-
# Simple internal dsl to register a MongoDB URI option in the URI_OPTION_MAP.
|
|
254
|
-
#
|
|
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.
|
|
260
|
-
def self.uri_option(uri_key, name, **extra)
|
|
261
|
-
URI_OPTION_MAP[uri_key.downcase] = { name: name }.update(extra)
|
|
262
|
-
URI_OPTION_CANONICAL_NAMES[uri_key.downcase] = uri_key
|
|
263
|
-
end
|
|
264
|
-
|
|
265
249
|
# Replica Set Options
|
|
266
250
|
uri_option 'replicaSet', :replica_set
|
|
267
251
|
|
|
@@ -303,7 +287,7 @@ module Mongo
|
|
|
303
287
|
uri_option 'tlsCertificateKeyFilePassword', :ssl_key_pass_phrase
|
|
304
288
|
uri_option 'tlsInsecure', :ssl_verify, type: :inverse_bool
|
|
305
289
|
uri_option 'tlsDisableOCSPEndpointCheck', :ssl_verify_ocsp_endpoint,
|
|
306
|
-
|
|
290
|
+
type: :inverse_bool
|
|
307
291
|
|
|
308
292
|
# Topology options
|
|
309
293
|
uri_option 'directConnection', :direct_connection, type: :bool
|
|
@@ -323,8 +307,13 @@ module Mongo
|
|
|
323
307
|
uri_option 'readConcernLevel', :level, group: :read_concern, type: :symbol
|
|
324
308
|
uri_option 'retryReads', :retry_reads, type: :bool
|
|
325
309
|
uri_option 'retryWrites', :retry_writes, type: :bool
|
|
310
|
+
uri_option 'enableOverloadRetargeting', :enable_overload_retargeting, type: :bool
|
|
311
|
+
uri_option 'maxAdaptiveRetries', :max_adaptive_retries, type: :integer
|
|
326
312
|
uri_option 'zlibCompressionLevel', :zlib_compression_level, type: :zlib_compression_level
|
|
327
313
|
|
|
314
|
+
# Monitoring Options
|
|
315
|
+
uri_option 'serverMonitoringMode', :server_monitoring_mode, type: :server_monitoring_mode
|
|
316
|
+
|
|
328
317
|
# Converts +value+ to a boolean.
|
|
329
318
|
#
|
|
330
319
|
# Returns true for 'true', false for 'false', otherwise nil.
|
|
@@ -335,9 +324,9 @@ module Mongo
|
|
|
335
324
|
# @return [ true | false | nil ] Converted value.
|
|
336
325
|
def convert_bool(name, value)
|
|
337
326
|
case value
|
|
338
|
-
when true,
|
|
327
|
+
when true, 'true', 'TRUE'
|
|
339
328
|
true
|
|
340
|
-
when false,
|
|
329
|
+
when false, 'false', 'FALSE'
|
|
341
330
|
false
|
|
342
331
|
else
|
|
343
332
|
log_warn("invalid boolean option for #{name}: #{value}")
|
|
@@ -371,7 +360,7 @@ module Mongo
|
|
|
371
360
|
# @return [ Array<true | false> | nil ] The boolean value parsed and wraped
|
|
372
361
|
# in an array.
|
|
373
362
|
def convert_repeated_bool(name, value)
|
|
374
|
-
[convert_bool(name, value)]
|
|
363
|
+
[ convert_bool(name, value) ]
|
|
375
364
|
end
|
|
376
365
|
|
|
377
366
|
# Reverts a repeated boolean type.
|
|
@@ -391,7 +380,7 @@ module Mongo
|
|
|
391
380
|
def stringify_repeated_bool(value)
|
|
392
381
|
rep = revert_repeated_bool(value)
|
|
393
382
|
if rep&.is_a?(Array)
|
|
394
|
-
rep.join(
|
|
383
|
+
rep.join(',')
|
|
395
384
|
else
|
|
396
385
|
rep
|
|
397
386
|
end
|
|
@@ -480,7 +469,7 @@ module Mongo
|
|
|
480
469
|
def convert_ms(name, value)
|
|
481
470
|
case value
|
|
482
471
|
when String
|
|
483
|
-
|
|
472
|
+
unless /\A-?\d+(\.\d+)?\z/.match?(value)
|
|
484
473
|
log_warn("Invalid ms value for #{name}: #{value}")
|
|
485
474
|
return nil
|
|
486
475
|
end
|
|
@@ -524,7 +513,7 @@ module Mongo
|
|
|
524
513
|
# @param [ String | Symbol ] value URI option value.
|
|
525
514
|
#
|
|
526
515
|
# @return [ Symbol ] Converted value.
|
|
527
|
-
def convert_symbol(
|
|
516
|
+
def convert_symbol(_name, value)
|
|
528
517
|
value.to_sym
|
|
529
518
|
end
|
|
530
519
|
|
|
@@ -536,7 +525,7 @@ module Mongo
|
|
|
536
525
|
def revert_symbol(value)
|
|
537
526
|
value.to_s
|
|
538
527
|
end
|
|
539
|
-
alias
|
|
528
|
+
alias stringify_symbol revert_symbol
|
|
540
529
|
|
|
541
530
|
# Extract values from the string and put them into an array.
|
|
542
531
|
#
|
|
@@ -544,7 +533,7 @@ module Mongo
|
|
|
544
533
|
# @param [ String ] value The string to build an array from.
|
|
545
534
|
#
|
|
546
535
|
# @return [ Array<String> ] The array built from the string.
|
|
547
|
-
def convert_array(
|
|
536
|
+
def convert_array(_name, value)
|
|
548
537
|
value.split(',')
|
|
549
538
|
end
|
|
550
539
|
|
|
@@ -572,9 +561,9 @@ module Mongo
|
|
|
572
561
|
# @param [ String ] value The authentication mechanism.
|
|
573
562
|
#
|
|
574
563
|
# @return [ Symbol ] The transformed authentication mechanism.
|
|
575
|
-
def convert_auth_mech(
|
|
564
|
+
def convert_auth_mech(_name, value)
|
|
576
565
|
auth_mech = AUTH_MECH_MAP[value.upcase]
|
|
577
|
-
(auth_mech || value).tap do |
|
|
566
|
+
(auth_mech || value).tap do |_mech|
|
|
578
567
|
log_warn("#{value} is not a valid auth mechanism") unless auth_mech
|
|
579
568
|
end
|
|
580
569
|
end
|
|
@@ -587,14 +576,12 @@ module Mongo
|
|
|
587
576
|
#
|
|
588
577
|
# @raise [ ArgumentError ] if its an invalid auth mechanism.
|
|
589
578
|
def revert_auth_mech(value)
|
|
590
|
-
found = AUTH_MECH_MAP.detect do |
|
|
579
|
+
found = AUTH_MECH_MAP.detect do |_k, v|
|
|
591
580
|
v == value
|
|
592
581
|
end
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
raise ArgumentError, "Unknown auth mechanism #{value}"
|
|
597
|
-
end
|
|
582
|
+
raise ArgumentError, "Unknown auth mechanism #{value}" unless found
|
|
583
|
+
|
|
584
|
+
found.first
|
|
598
585
|
end
|
|
599
586
|
|
|
600
587
|
# Stringifies auth mechanism.
|
|
@@ -603,7 +590,9 @@ module Mongo
|
|
|
603
590
|
#
|
|
604
591
|
# @return [ String | nil ] The auth mechanism as a string.
|
|
605
592
|
def stringify_auth_mech(value)
|
|
606
|
-
revert_auth_mech(value)
|
|
593
|
+
revert_auth_mech(value)
|
|
594
|
+
rescue StandardError
|
|
595
|
+
nil
|
|
607
596
|
end
|
|
608
597
|
|
|
609
598
|
# Auth mechanism properties extractor.
|
|
@@ -612,13 +601,11 @@ module Mongo
|
|
|
612
601
|
# @param [ String ] value The auth mechanism properties string.
|
|
613
602
|
#
|
|
614
603
|
# @return [ Hash | nil ] The auth mechanism properties hash.
|
|
615
|
-
def convert_auth_mech_props(
|
|
604
|
+
def convert_auth_mech_props(_name, value)
|
|
616
605
|
properties = hash_extractor('authMechanismProperties', value)
|
|
617
606
|
if properties
|
|
618
607
|
properties.each do |k, v|
|
|
619
|
-
if k.to_s.downcase == 'canonicalize_host_name' && v
|
|
620
|
-
properties[k] = (v.downcase == 'true')
|
|
621
|
-
end
|
|
608
|
+
properties[k] = (v.downcase == 'true') if k.to_s.downcase == 'canonicalize_host_name' && v
|
|
622
609
|
end
|
|
623
610
|
end
|
|
624
611
|
properties
|
|
@@ -640,6 +627,7 @@ module Mongo
|
|
|
640
627
|
# @return [ String | nil ] The string.
|
|
641
628
|
def stringify_auth_mech_props(value)
|
|
642
629
|
return if value.nil?
|
|
630
|
+
|
|
643
631
|
value.map { |k, v| "#{k}:#{v}" }.join(',')
|
|
644
632
|
end
|
|
645
633
|
|
|
@@ -651,23 +639,21 @@ module Mongo
|
|
|
651
639
|
#
|
|
652
640
|
# @return [ Integer | nil ] The max staleness integer parsed out if it is valid, otherwise nil
|
|
653
641
|
# (and a warning will be logged).
|
|
654
|
-
def convert_max_staleness(
|
|
642
|
+
def convert_max_staleness(_name, value)
|
|
655
643
|
int = if value.is_a?(String) && /\A-?\d+\z/ =~ value
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
644
|
+
value.to_i
|
|
645
|
+
elsif value.is_a?(Integer)
|
|
646
|
+
value
|
|
647
|
+
end
|
|
660
648
|
|
|
661
649
|
if int.nil?
|
|
662
650
|
log_warn("Invalid max staleness value: #{value}")
|
|
663
651
|
return nil
|
|
664
652
|
end
|
|
665
653
|
|
|
666
|
-
if int == -1
|
|
667
|
-
int = nil
|
|
668
|
-
end
|
|
654
|
+
int = nil if int == -1
|
|
669
655
|
|
|
670
|
-
if int && (int > 0 && int < 90 || int < 0)
|
|
656
|
+
if int && ((int > 0 && int < 90) || int < 0)
|
|
671
657
|
log_warn("max staleness should be either 0 or greater than 90: #{value}")
|
|
672
658
|
int = nil
|
|
673
659
|
end
|
|
@@ -699,7 +685,7 @@ module Mongo
|
|
|
699
685
|
# @param [ String ] value The read mode string value.
|
|
700
686
|
#
|
|
701
687
|
# @return [ Symbol | String ] The read mode.
|
|
702
|
-
def convert_read_mode(
|
|
688
|
+
def convert_read_mode(_name, value)
|
|
703
689
|
READ_MODE_MAP[value.downcase] || value
|
|
704
690
|
end
|
|
705
691
|
|
|
@@ -709,9 +695,34 @@ module Mongo
|
|
|
709
695
|
#
|
|
710
696
|
# @return [ String ] The read mode as a string.
|
|
711
697
|
def revert_read_mode(value)
|
|
712
|
-
value.to_s.gsub(/_(\w)/) {
|
|
698
|
+
value.to_s.gsub(/_(\w)/) { ::Regexp.last_match(1).upcase }
|
|
699
|
+
end
|
|
700
|
+
alias stringify_read_mode revert_read_mode
|
|
701
|
+
|
|
702
|
+
# Server monitoring mode transformation.
|
|
703
|
+
#
|
|
704
|
+
# @param [ String ] name Name of the URI option being processed.
|
|
705
|
+
# @param [ String ] value The server monitoring mode string value.
|
|
706
|
+
#
|
|
707
|
+
# @return [ Symbol | nil ] The server monitoring mode symbol.
|
|
708
|
+
def convert_server_monitoring_mode(_name, value)
|
|
709
|
+
mode = value.downcase
|
|
710
|
+
if SERVER_MONITORING_MODES.include?(mode)
|
|
711
|
+
mode.to_sym
|
|
712
|
+
else
|
|
713
|
+
log_warn("#{value} is not a valid server monitoring mode")
|
|
714
|
+
nil
|
|
715
|
+
end
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
# Stringifies server monitoring mode.
|
|
719
|
+
#
|
|
720
|
+
# @param [ Symbol ] value The server monitoring mode.
|
|
721
|
+
#
|
|
722
|
+
# @return [ String ] The server monitoring mode as a string.
|
|
723
|
+
def stringify_server_monitoring_mode(value)
|
|
724
|
+
value.to_s
|
|
713
725
|
end
|
|
714
|
-
alias :stringify_read_mode :revert_read_mode
|
|
715
726
|
|
|
716
727
|
# Read preference tags transformation.
|
|
717
728
|
#
|
|
@@ -721,11 +732,9 @@ module Mongo
|
|
|
721
732
|
# @return [ Array<Hash> | nil ] Array with tag set.
|
|
722
733
|
def convert_read_tags(name, value)
|
|
723
734
|
converted = convert_read_set(name, value)
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
nil
|
|
728
|
-
end
|
|
735
|
+
return unless converted
|
|
736
|
+
|
|
737
|
+
[ converted ]
|
|
729
738
|
end
|
|
730
739
|
|
|
731
740
|
# Reverts read tags.
|
|
@@ -752,7 +761,7 @@ module Mongo
|
|
|
752
761
|
# @param [ String ] value The tag set string.
|
|
753
762
|
#
|
|
754
763
|
# @return [ Hash ] The tag set hash.
|
|
755
|
-
def convert_read_set(
|
|
764
|
+
def convert_read_set(_name, value)
|
|
756
765
|
hash_extractor('readPreferenceTags', value)
|
|
757
766
|
end
|
|
758
767
|
|
|
@@ -766,7 +775,7 @@ module Mongo
|
|
|
766
775
|
# @param [ String | Integer ] value URI option value.
|
|
767
776
|
#
|
|
768
777
|
# @return [ Integer | Symbol | String ] Converted value.
|
|
769
|
-
def convert_w(
|
|
778
|
+
def convert_w(_name, value)
|
|
770
779
|
case value
|
|
771
780
|
when 'majority'
|
|
772
781
|
:majority
|
|
@@ -807,14 +816,14 @@ module Mongo
|
|
|
807
816
|
#
|
|
808
817
|
# @return [ Integer | nil ] The compression level value if it is between -1 and 9 (inclusive),
|
|
809
818
|
# otherwise nil (and a warning will be logged).
|
|
810
|
-
def convert_zlib_compression_level(
|
|
819
|
+
def convert_zlib_compression_level(_name, value)
|
|
811
820
|
i = if value.is_a?(String) && /\A-?\d+\z/ =~ value
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
821
|
+
value.to_i
|
|
822
|
+
elsif value.is_a?(Integer)
|
|
823
|
+
value
|
|
824
|
+
end
|
|
816
825
|
|
|
817
|
-
if i &&
|
|
826
|
+
if i && i >= -1 && i <= 9
|
|
818
827
|
i
|
|
819
828
|
else
|
|
820
829
|
log_warn("#{value} is not a valid zlibCompressionLevel")
|