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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0cdda79c0346533e626f9458f748cdb003881c93cbe597957706129277872ac0
|
|
4
|
+
data.tar.gz: 688197ddc194148b4788526763a706bae2a45e1fef0ac3ed5b1c5b55dd25a781
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f60e23e96c0ba93d06bbec7beb8cbb77420a502b5b64efe3ebafa85475e982d5f8d20c292336a716fa84b4aa6e98791cb2bed09fac1de8578b12b4320a12cdca
|
|
7
|
+
data.tar.gz: 34d8751ba7740e254e70397dd204dac01efea33d54d3ee3115cc2d3f6a460c857d625c1f367a672be3f0fc587ac0d09710318fd9011bb4152d110c939f7ec5ae
|
data/bin/mongo_console
CHANGED
data/lib/mongo/active_support.rb
CHANGED
data/lib/mongo/address/ipv4.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Address
|
|
20
|
-
|
|
21
19
|
# Sets up resolution with IPv4 support if the address is an ip
|
|
22
20
|
# address.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class IPv4
|
|
26
|
-
|
|
27
24
|
# @return [ String ] host The host.
|
|
28
25
|
attr_reader :host
|
|
29
26
|
|
|
@@ -41,7 +38,7 @@ module Mongo
|
|
|
41
38
|
# Split value constant.
|
|
42
39
|
#
|
|
43
40
|
# @since 2.1.0
|
|
44
|
-
SPLIT = ':'
|
|
41
|
+
SPLIT = ':'
|
|
45
42
|
|
|
46
43
|
# Parse an IPv4 address into its host and port.
|
|
47
44
|
#
|
|
@@ -56,7 +53,7 @@ module Mongo
|
|
|
56
53
|
def self.parse(address)
|
|
57
54
|
parts = address.split(SPLIT)
|
|
58
55
|
host = parts[0]
|
|
59
|
-
port = (parts[1] ||
|
|
56
|
+
port = (parts[1] || 27_017).to_i
|
|
60
57
|
[ host, port ]
|
|
61
58
|
end
|
|
62
59
|
|
|
@@ -69,7 +66,7 @@ module Mongo
|
|
|
69
66
|
# @param [ Integer ] port The port.
|
|
70
67
|
#
|
|
71
68
|
# @since 2.0.0
|
|
72
|
-
def initialize(host, port, host_name=nil)
|
|
69
|
+
def initialize(host, port, host_name = nil)
|
|
73
70
|
@host = host
|
|
74
71
|
@port = port
|
|
75
72
|
@host_name = host_name
|
data/lib/mongo/address/ipv6.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Address
|
|
20
|
-
|
|
21
19
|
# Sets up resolution with IPv6 support if the address is an ip
|
|
22
20
|
# address.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class IPv6
|
|
26
|
-
|
|
27
24
|
# @return [ String ] host The host.
|
|
28
25
|
attr_reader :host
|
|
29
26
|
|
|
@@ -51,16 +48,15 @@ module Mongo
|
|
|
51
48
|
def self.parse(address)
|
|
52
49
|
# IPAddr's parser handles IP address only, not port.
|
|
53
50
|
# Therefore we need to handle the port ourselves
|
|
54
|
-
if
|
|
51
|
+
if /[\[\]]/.match?(address)
|
|
55
52
|
parts = address.match(/\A\[(.+)\](?::(\d+))?\z/)
|
|
56
|
-
if parts.nil?
|
|
57
|
-
|
|
58
|
-
end
|
|
53
|
+
raise ArgumentError, "Invalid IPv6 address: #{address}" if parts.nil?
|
|
54
|
+
|
|
59
55
|
host = parts[1]
|
|
60
|
-
port = (parts[2] ||
|
|
56
|
+
port = (parts[2] || 27_017).to_i
|
|
61
57
|
else
|
|
62
58
|
host = address
|
|
63
|
-
port =
|
|
59
|
+
port = 27_017
|
|
64
60
|
end
|
|
65
61
|
# Validate host.
|
|
66
62
|
# This will raise IPAddr::InvalidAddressError
|
|
@@ -83,7 +79,7 @@ module Mongo
|
|
|
83
79
|
# @param [ Integer ] port The port.
|
|
84
80
|
#
|
|
85
81
|
# @since 2.0.0
|
|
86
|
-
def initialize(host, port, host_name=nil)
|
|
82
|
+
def initialize(host, port, host_name = nil)
|
|
87
83
|
@host = host
|
|
88
84
|
@port = port
|
|
89
85
|
@host_name = host_name
|
data/lib/mongo/address/unix.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,12 +16,10 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Address
|
|
20
|
-
|
|
21
19
|
# Sets up socket addresses.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.0.0
|
|
24
22
|
class Unix
|
|
25
|
-
|
|
26
23
|
# @return [ String ] host The host.
|
|
27
24
|
attr_reader :host
|
|
28
25
|
|
|
@@ -56,7 +53,7 @@ module Mongo
|
|
|
56
53
|
# @param [ String ] host The host.
|
|
57
54
|
#
|
|
58
55
|
# @since 2.0.0
|
|
59
|
-
def initialize(host,
|
|
56
|
+
def initialize(host, _port = nil, _host_name = nil)
|
|
60
57
|
@host = host
|
|
61
58
|
end
|
|
62
59
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2017-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -16,22 +15,19 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
|
-
|
|
20
18
|
class Address
|
|
21
|
-
|
|
22
19
|
# @api private
|
|
23
20
|
module Validator
|
|
24
|
-
|
|
25
21
|
# Takes an address string in ipv4/ipv6/hostname/socket path format and
|
|
26
22
|
# validates its format.
|
|
27
23
|
def validate_address_str!(address_str)
|
|
28
24
|
case address_str
|
|
29
25
|
when /\A\[[\d:]+\](?::(\d+))?\z/
|
|
30
26
|
# ipv6 with optional port
|
|
31
|
-
if port_str =
|
|
27
|
+
if port_str = ::Regexp.last_match(1)
|
|
32
28
|
validate_port_str!(port_str)
|
|
33
29
|
end
|
|
34
|
-
when
|
|
30
|
+
when %r{\A/}, /\.sock\z/
|
|
35
31
|
# Unix socket path.
|
|
36
32
|
# Spec requires us to validate that the path has no unescaped
|
|
37
33
|
# slashes, but if this were to be the case, parsing would have
|
|
@@ -41,27 +37,23 @@ module Mongo
|
|
|
41
37
|
# socket paths end in ".sock". We accept all paths but special case
|
|
42
38
|
# the .sock extension to avoid relative paths falling into the
|
|
43
39
|
# host:port case below.
|
|
44
|
-
when
|
|
40
|
+
when %r{[/\[\]]}
|
|
45
41
|
# Not a host:port nor an ipv4 address with optional port.
|
|
46
42
|
# Possibly botched ipv6 address with e.g. port delimiter present and
|
|
47
43
|
# port missing, or extra junk before or after.
|
|
48
44
|
raise Error::InvalidAddress,
|
|
49
|
-
|
|
45
|
+
"Invalid hostname: #{address_str}"
|
|
50
46
|
when /:.*:/m
|
|
51
47
|
raise Error::InvalidAddress,
|
|
52
|
-
|
|
48
|
+
"Multiple port delimiters are not allowed: #{address_str}"
|
|
53
49
|
else
|
|
54
50
|
# host:port or ipv4 address with optional port number
|
|
55
51
|
host, port = address_str.split(':')
|
|
56
|
-
if host.empty?
|
|
57
|
-
raise Error::InvalidAddress, "Host is empty: #{address_str}"
|
|
58
|
-
end
|
|
52
|
+
raise Error::InvalidAddress, "Host is empty: #{address_str}" if host.empty?
|
|
59
53
|
|
|
60
54
|
validate_hostname!(host)
|
|
61
55
|
|
|
62
|
-
if port && port.empty?
|
|
63
|
-
raise Error::InvalidAddress, "Port is empty: #{address_str}"
|
|
64
|
-
end
|
|
56
|
+
raise Error::InvalidAddress, "Port is empty: #{address_str}" if port && port.empty?
|
|
65
57
|
|
|
66
58
|
validate_port_str!(port)
|
|
67
59
|
end
|
|
@@ -80,22 +72,18 @@ module Mongo
|
|
|
80
72
|
# and runs of multiple dots. DNS resolution of SRV records yields
|
|
81
73
|
# hostnames with trailing dots, those trailing dots are removed
|
|
82
74
|
# during normalization process prior to validation.
|
|
83
|
-
if host.start_with?('.')
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
end
|
|
89
|
-
if host.include?('..')
|
|
90
|
-
raise Error::InvalidAddress, "Runs of multiple dots are not allowed in hostname: #{host}"
|
|
91
|
-
end
|
|
75
|
+
raise Error::InvalidAddress, "Hostname cannot start with a dot: #{host}" if host.start_with?('.')
|
|
76
|
+
raise Error::InvalidAddress, "Hostname cannot end with a dot: #{host}" if host.end_with?('.')
|
|
77
|
+
return unless host.include?('..')
|
|
78
|
+
|
|
79
|
+
raise Error::InvalidAddress, "Runs of multiple dots are not allowed in hostname: #{host}"
|
|
92
80
|
end
|
|
93
81
|
|
|
94
82
|
def validate_port_str!(port)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
83
|
+
return if port.nil? || (port.length > 0 && port.to_i > 0 && port.to_i <= 65_535)
|
|
84
|
+
|
|
85
|
+
raise Error::InvalidAddress,
|
|
86
|
+
"Invalid port: #{port}. Port must be an integer greater than 0 and less than 65536"
|
|
99
87
|
end
|
|
100
88
|
end
|
|
101
89
|
end
|
data/lib/mongo/address.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -21,7 +20,6 @@ require 'mongo/address/unix'
|
|
|
21
20
|
require 'mongo/address/validator'
|
|
22
21
|
|
|
23
22
|
module Mongo
|
|
24
|
-
|
|
25
23
|
# Represents an address to a server, either with an IP address or socket
|
|
26
24
|
# path.
|
|
27
25
|
#
|
|
@@ -41,7 +39,7 @@ module Mongo
|
|
|
41
39
|
# The localhost constant.
|
|
42
40
|
#
|
|
43
41
|
# @since 2.1.0
|
|
44
|
-
LOCALHOST = 'localhost'
|
|
42
|
+
LOCALHOST = 'localhost'
|
|
45
43
|
|
|
46
44
|
# Initialize the address.
|
|
47
45
|
#
|
|
@@ -73,12 +71,11 @@ module Mongo
|
|
|
73
71
|
#
|
|
74
72
|
# @since 2.0.0
|
|
75
73
|
def initialize(seed, options = {})
|
|
76
|
-
if seed.nil?
|
|
77
|
-
|
|
78
|
-
end
|
|
74
|
+
raise ArgumentError, 'address must be not nil' if seed.nil?
|
|
75
|
+
|
|
79
76
|
@seed = seed
|
|
80
77
|
@host, @port = parse_host_port
|
|
81
|
-
@options = Hash[options.map { |k, v| [k.to_sym, v] }]
|
|
78
|
+
@options = Hash[options.map { |k, v| [ k.to_sym, v ] }]
|
|
82
79
|
end
|
|
83
80
|
|
|
84
81
|
# @return [ String ] seed The seed address.
|
|
@@ -105,6 +102,7 @@ module Mongo
|
|
|
105
102
|
# @since 2.0.0
|
|
106
103
|
def ==(other)
|
|
107
104
|
return false unless other.is_a?(Address)
|
|
105
|
+
|
|
108
106
|
host == other.host && port == other.port
|
|
109
107
|
end
|
|
110
108
|
|
|
@@ -143,7 +141,7 @@ module Mongo
|
|
|
143
141
|
#
|
|
144
142
|
# @since 2.0.0
|
|
145
143
|
def inspect
|
|
146
|
-
"#<Mongo::Address:0x#{object_id} address=#{
|
|
144
|
+
"#<Mongo::Address:0x#{object_id} address=#{self}>"
|
|
147
145
|
end
|
|
148
146
|
|
|
149
147
|
# Get a socket for the address stored in this object, given the options.
|
|
@@ -220,10 +218,10 @@ module Mongo
|
|
|
220
218
|
csot = !!opts[:csot]
|
|
221
219
|
opts = {
|
|
222
220
|
connect_timeout: Server::CONNECT_TIMEOUT,
|
|
223
|
-
}.update(options).update(Hash[opts.map { |k, v| [k.to_sym, v] }])
|
|
221
|
+
}.update(options).update(Hash[opts.map { |k, v| [ k.to_sym, v ] }])
|
|
224
222
|
|
|
225
223
|
map_exceptions(csot) do
|
|
226
|
-
if seed.downcase
|
|
224
|
+
if Unix::MATCH.match?(seed.downcase)
|
|
227
225
|
specific_address = Unix.new(seed.downcase)
|
|
228
226
|
return specific_address.socket(socket_timeout, opts)
|
|
229
227
|
end
|
|
@@ -239,16 +237,14 @@ module Mongo
|
|
|
239
237
|
# eliminate duplicates here.
|
|
240
238
|
infos = getaddrinfo(host, family)
|
|
241
239
|
results = infos.map do |info|
|
|
242
|
-
[info[4], info[3]]
|
|
240
|
+
[ info[4], info[3] ]
|
|
243
241
|
end.uniq
|
|
244
242
|
results.each do |family, address_str|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
error = e
|
|
251
|
-
end
|
|
243
|
+
specific_address = FAMILY_MAP[family].new(address_str, port, host)
|
|
244
|
+
socket = specific_address.socket(socket_timeout, opts)
|
|
245
|
+
return socket
|
|
246
|
+
rescue IOError, SystemCallError, Error::SocketTimeoutError, Error::SocketError => e
|
|
247
|
+
error = e
|
|
252
248
|
end
|
|
253
249
|
raise error
|
|
254
250
|
end
|
|
@@ -285,9 +281,9 @@ module Mongo
|
|
|
285
281
|
def parse_host_port
|
|
286
282
|
address = seed.downcase
|
|
287
283
|
case address
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
284
|
+
when Unix::MATCH then Unix.parse(address)
|
|
285
|
+
when IPv6::MATCH then IPv6.parse(address)
|
|
286
|
+
else IPv4.parse(address)
|
|
291
287
|
end
|
|
292
288
|
end
|
|
293
289
|
|
|
@@ -297,25 +293,19 @@ module Mongo
|
|
|
297
293
|
# @param [ Boolean ] csot Whether the client-side operation timeout
|
|
298
294
|
# should be considered when connecting the socket.
|
|
299
295
|
def map_exceptions(csot)
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
end
|
|
314
|
-
rescue IOError, SystemCallError, ::SocketError => e
|
|
315
|
-
raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
|
|
316
|
-
rescue OpenSSL::SSL::SSLError => e
|
|
317
|
-
raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
|
|
318
|
-
end
|
|
296
|
+
yield
|
|
297
|
+
rescue Errno::ETIMEDOUT => e
|
|
298
|
+
raise Error::TimeoutError, "#{e.class}: #{e} (for #{self})" if csot
|
|
299
|
+
|
|
300
|
+
raise Error::SocketTimeoutError, "#{e.class}: #{e} (for #{self})"
|
|
301
|
+
rescue Error::SocketTimeoutError => e
|
|
302
|
+
raise Error::TimeoutError, "#{e.class}: #{e} (for #{self})" if csot
|
|
303
|
+
|
|
304
|
+
raise e
|
|
305
|
+
rescue IOError, SystemCallError, ::SocketError => e
|
|
306
|
+
raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
|
|
307
|
+
rescue OpenSSL::SSL::SSLError => e
|
|
308
|
+
raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
|
|
319
309
|
end
|
|
320
310
|
end
|
|
321
311
|
end
|
|
@@ -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
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Auth
|
|
20
19
|
class Aws
|
|
21
|
-
|
|
22
20
|
# Defines behavior around a single MONGODB-AWS conversation between the
|
|
23
21
|
# client and server.
|
|
24
22
|
#
|
|
@@ -26,7 +24,6 @@ module Mongo
|
|
|
26
24
|
#
|
|
27
25
|
# @api private
|
|
28
26
|
class Conversation < SaslConversationBase
|
|
29
|
-
|
|
30
27
|
# Continue the AWS conversation. This sends the client final message
|
|
31
28
|
# to the server after setting the reply from the previous server
|
|
32
29
|
# communication.
|
|
@@ -45,12 +42,13 @@ module Mongo
|
|
|
45
42
|
validate_server_nonce!
|
|
46
43
|
@sts_host = payload[:h]
|
|
47
44
|
unless (1..255).include?(@sts_host.bytesize)
|
|
48
|
-
raise Error::InvalidServerAuthConfiguration,
|
|
45
|
+
raise Error::InvalidServerAuthConfiguration,
|
|
46
|
+
"STS host name length is not in 1..255 bytes range: #{@sts_host}"
|
|
49
47
|
end
|
|
50
48
|
|
|
51
49
|
selector = CLIENT_CONTINUE_MESSAGE.merge(
|
|
52
50
|
payload: BSON::Binary.new(client_final_payload),
|
|
53
|
-
conversationId: conversation_id
|
|
51
|
+
conversationId: conversation_id
|
|
54
52
|
)
|
|
55
53
|
build_message(connection, user.auth_source, selector)
|
|
56
54
|
end
|
|
@@ -91,7 +89,7 @@ module Mongo
|
|
|
91
89
|
secret_access_key: credentials.secret_access_key,
|
|
92
90
|
session_token: credentials.session_token,
|
|
93
91
|
host: @sts_host,
|
|
94
|
-
server_nonce: server_nonce
|
|
92
|
+
server_nonce: server_nonce
|
|
95
93
|
)
|
|
96
94
|
|
|
97
95
|
# Uncomment this line to validate obtained credentials on the
|
|
@@ -107,15 +105,13 @@ module Mongo
|
|
|
107
105
|
# rules, validation will fail but credentials may be perfectly OK
|
|
108
106
|
# and the server may be able to authenticate using them just fine
|
|
109
107
|
# (provided the server is allowed to communicate with STS).
|
|
110
|
-
#request.validate!
|
|
108
|
+
# request.validate!
|
|
111
109
|
|
|
112
110
|
payload = {
|
|
113
111
|
a: request.authorization,
|
|
114
112
|
d: request.formatted_time,
|
|
115
113
|
}
|
|
116
|
-
if credentials.session_token
|
|
117
|
-
payload[:t] = credentials.session_token
|
|
118
|
-
end
|
|
114
|
+
payload[:t] = credentials.session_token if credentials.session_token
|
|
119
115
|
payload.to_bson.to_s
|
|
120
116
|
end
|
|
121
117
|
end
|