mongo 2.23.0 → 2.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- 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 +20 -17
- data/lib/mongo/bulk_write/result_combiner.rb +17 -13
- 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 +7 -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 +35 -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 +10 -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 +62 -36
- 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 +2 -3
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +8 -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 -47
- 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 +20 -29
- 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 +250 -175
- 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 +138 -137
- 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 +146 -157
- data/lib/mongo/server_selector/nearest.rb +5 -5
- data/lib/mongo/server_selector/primary.rb +4 -5
- data/lib/mongo/server_selector/primary_preferred.rb +5 -6
- data/lib/mongo/server_selector/secondary.rb +5 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +4 -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 +321 -189
- 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 +28 -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 +2 -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
|
@@ -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 Server
|
|
20
|
-
|
|
21
19
|
# A monitor utilizing server-pushed hello requests.
|
|
22
20
|
#
|
|
23
21
|
# When a Monitor handshakes with a 4.4+ server, it creates an instance
|
|
@@ -33,15 +31,10 @@ module Mongo
|
|
|
33
31
|
include BackgroundThread
|
|
34
32
|
|
|
35
33
|
def initialize(monitor, topology_version, monitoring, **options)
|
|
36
|
-
if topology_version.nil?
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
raise ArgumentError, 'App metadata is required'
|
|
41
|
-
end
|
|
42
|
-
unless options[:check_document]
|
|
43
|
-
raise ArgumentError, 'Check document is required'
|
|
44
|
-
end
|
|
34
|
+
raise ArgumentError, 'Topology version must be provided but it was nil' if topology_version.nil?
|
|
35
|
+
raise ArgumentError, 'App metadata is required' unless options[:app_metadata]
|
|
36
|
+
raise ArgumentError, 'Check document is required' unless options[:check_document]
|
|
37
|
+
|
|
45
38
|
@app_metadata = options[:app_metadata]
|
|
46
39
|
@check_document = options[:check_document]
|
|
47
40
|
@monitor = monitor
|
|
@@ -78,7 +71,11 @@ module Mongo
|
|
|
78
71
|
if @connection
|
|
79
72
|
# Interrupt any in-progress exhausted hello reads by
|
|
80
73
|
# disconnecting the connection.
|
|
81
|
-
|
|
74
|
+
begin
|
|
75
|
+
@connection.send(:socket).close
|
|
76
|
+
rescue StandardError
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
82
79
|
end
|
|
83
80
|
end
|
|
84
81
|
super.tap do
|
|
@@ -107,10 +104,8 @@ module Mongo
|
|
|
107
104
|
# https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-monitoring.md#streamable-hello-or-legacy-hello-command
|
|
108
105
|
# says that topologyVersion should only be updated from successful
|
|
109
106
|
# hello responses.
|
|
110
|
-
if new_description.topology_version
|
|
111
|
-
|
|
112
|
-
end
|
|
113
|
-
rescue IOError, SocketError, SystemCallError, Mongo::Error => exc
|
|
107
|
+
@topology_version = new_description.topology_version if new_description.topology_version
|
|
108
|
+
rescue IOError, SocketError, SystemCallError, Mongo::Error => e
|
|
114
109
|
stop_requested = @lock.synchronize { @stop_requested }
|
|
115
110
|
if stop_requested
|
|
116
111
|
# Ignore the exception, see RUBY-2771.
|
|
@@ -118,11 +113,10 @@ module Mongo
|
|
|
118
113
|
end
|
|
119
114
|
|
|
120
115
|
msg = "Error running awaited hello on #{server.address}"
|
|
121
|
-
Utils.warn_bg_exception(msg,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
)
|
|
116
|
+
Utils.warn_bg_exception(msg, e,
|
|
117
|
+
logger: options[:logger],
|
|
118
|
+
log_prefix: options[:log_prefix],
|
|
119
|
+
bg_error_backtrace: options[:bg_error_backtrace])
|
|
126
120
|
|
|
127
121
|
# If a request failed on a connection, stop push monitoring.
|
|
128
122
|
# In case the server is dead we don't want to have two connections
|
|
@@ -153,9 +147,7 @@ module Mongo
|
|
|
153
147
|
end
|
|
154
148
|
|
|
155
149
|
resp_msg = begin
|
|
156
|
-
unless @server_pushing
|
|
157
|
-
write_check_command
|
|
158
|
-
end
|
|
150
|
+
write_check_command unless @server_pushing
|
|
159
151
|
read_response
|
|
160
152
|
rescue Mongo::Error
|
|
161
153
|
@lock.synchronize do
|
|
@@ -173,10 +165,10 @@ module Mongo
|
|
|
173
165
|
def write_check_command
|
|
174
166
|
document = @check_document.merge(
|
|
175
167
|
topologyVersion: topology_version.to_doc,
|
|
176
|
-
maxAwaitTimeMS: monitor.heartbeat_interval * 1000
|
|
168
|
+
maxAwaitTimeMS: monitor.heartbeat_interval * 1000
|
|
177
169
|
)
|
|
178
170
|
command = Protocol::Msg.new(
|
|
179
|
-
[:exhaust_allowed], {}, document.merge({'$db' => Database::ADMIN})
|
|
171
|
+
[ :exhaust_allowed ], {}, document.merge({ '$db' => Database::ADMIN })
|
|
180
172
|
)
|
|
181
173
|
@lock.synchronize { @connection }.write_bytes(command.serialize.to_s)
|
|
182
174
|
end
|
|
@@ -184,14 +176,15 @@ module Mongo
|
|
|
184
176
|
def read_response
|
|
185
177
|
if timeout = options[:connect_timeout]
|
|
186
178
|
if timeout < 0
|
|
187
|
-
raise Mongo::SocketTimeoutError,
|
|
179
|
+
raise Mongo::SocketTimeoutError, 'Requested to read with a negative timeout: '
|
|
188
180
|
elsif timeout > 0
|
|
189
181
|
timeout += options[:heartbeat_frequency] || Monitor::DEFAULT_HEARTBEAT_INTERVAL
|
|
190
182
|
end
|
|
191
183
|
end
|
|
192
184
|
# We set the timeout twice: once passed into read_socket which applies
|
|
193
185
|
# to each individual read operation, and again around the entire read.
|
|
194
|
-
Timeout.timeout(timeout, Error::SocketTimeoutError,
|
|
186
|
+
Timeout.timeout(timeout, Error::SocketTimeoutError,
|
|
187
|
+
"Failed to read an awaited hello response in #{timeout} seconds") do
|
|
195
188
|
@lock.synchronize { @connection }.read_response(socket_timeout: timeout)
|
|
196
189
|
end
|
|
197
190
|
end
|
|
@@ -199,7 +192,6 @@ module Mongo
|
|
|
199
192
|
def to_s
|
|
200
193
|
"#<#{self.class.name}:#{object_id} #{server.address}>"
|
|
201
194
|
end
|
|
202
|
-
|
|
203
195
|
end
|
|
204
196
|
end
|
|
205
197
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2018-2020 MongoDB Inc.
|
|
5
4
|
|
|
@@ -19,10 +18,9 @@ module Mongo
|
|
|
19
18
|
class Server
|
|
20
19
|
# @api private
|
|
21
20
|
class RoundTripTimeCalculator
|
|
22
|
-
|
|
23
21
|
# The weighting factor (alpha) for calculating the average moving
|
|
24
22
|
# round trip time.
|
|
25
|
-
RTT_WEIGHT_FACTOR = 0.2
|
|
23
|
+
RTT_WEIGHT_FACTOR = 0.2
|
|
26
24
|
private_constant :RTT_WEIGHT_FACTOR
|
|
27
25
|
|
|
28
26
|
RTT_SAMPLES_FOR_MINIMUM = 10
|
|
@@ -39,9 +37,7 @@ module Mongo
|
|
|
39
37
|
@rtts = []
|
|
40
38
|
end
|
|
41
39
|
|
|
42
|
-
attr_reader :last_round_trip_time
|
|
43
|
-
attr_reader :average_round_trip_time
|
|
44
|
-
attr_reader :minimum_round_trip_time
|
|
40
|
+
attr_reader :last_round_trip_time, :average_round_trip_time, :minimum_round_trip_time
|
|
45
41
|
|
|
46
42
|
def measure
|
|
47
43
|
start = Utils.monotonic_time
|
|
@@ -51,7 +47,7 @@ module Mongo
|
|
|
51
47
|
# If we encountered a network error, the round-trip is not
|
|
52
48
|
# complete and thus RTT for it does not make sense.
|
|
53
49
|
raise
|
|
54
|
-
rescue Error, Error::AuthError =>
|
|
50
|
+
rescue Error, Error::AuthError => e
|
|
55
51
|
# For other errors, RTT is valid.
|
|
56
52
|
end
|
|
57
53
|
last_rtt = Utils.monotonic_time - start
|
|
@@ -59,7 +55,7 @@ module Mongo
|
|
|
59
55
|
# If hello fails, we need to return the last round trip time
|
|
60
56
|
# because it is used in the heartbeat failed SDAM event,
|
|
61
57
|
# but we must not update the round trip time recorded in the server.
|
|
62
|
-
unless
|
|
58
|
+
unless e
|
|
63
59
|
@last_round_trip_time = last_rtt
|
|
64
60
|
@lock.synchronize do
|
|
65
61
|
update_average_round_trip_time
|
|
@@ -67,19 +63,17 @@ module Mongo
|
|
|
67
63
|
end
|
|
68
64
|
end
|
|
69
65
|
|
|
70
|
-
if
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
rv
|
|
74
|
-
end
|
|
66
|
+
raise e if e
|
|
67
|
+
|
|
68
|
+
rv
|
|
75
69
|
end
|
|
76
70
|
|
|
77
71
|
def update_average_round_trip_time
|
|
78
72
|
@average_round_trip_time = if average_round_trip_time
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
(RTT_WEIGHT_FACTOR * last_round_trip_time) + ((1 - RTT_WEIGHT_FACTOR) * average_round_trip_time)
|
|
74
|
+
else
|
|
75
|
+
last_round_trip_time
|
|
76
|
+
end
|
|
83
77
|
end
|
|
84
78
|
|
|
85
79
|
def update_minimum_round_trip_time
|
data/lib/mongo/server.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
|
#
|
|
@@ -16,7 +15,6 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
|
-
|
|
20
18
|
# Represents a single server on the server side that can be standalone, part of
|
|
21
19
|
# a replica set, or a mongos.
|
|
22
20
|
#
|
|
@@ -29,7 +27,7 @@ module Mongo
|
|
|
29
27
|
# The default time in seconds to timeout a connection attempt.
|
|
30
28
|
#
|
|
31
29
|
# @since 2.4.3
|
|
32
|
-
CONNECT_TIMEOUT = 10
|
|
30
|
+
CONNECT_TIMEOUT = 10
|
|
33
31
|
|
|
34
32
|
# Instantiate a new server object. Will start the background refresh and
|
|
35
33
|
# subscribe to the appropriate events.
|
|
@@ -82,21 +80,18 @@ module Mongo
|
|
|
82
80
|
@scan_semaphore = DistinguishingSemaphore.new
|
|
83
81
|
@round_trip_time_calculator = RoundTripTimeCalculator.new
|
|
84
82
|
@description = Description.new(address, {},
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
)
|
|
83
|
+
load_balancer: !!@options[:load_balancer],
|
|
84
|
+
force_load_balancer: force_load_balancer?)
|
|
88
85
|
@last_scan = nil
|
|
89
86
|
@last_scan_monotime = nil
|
|
90
87
|
unless options[:monitoring_io] == false
|
|
91
88
|
@monitor = Monitor.new(self, event_listeners, monitoring,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
unless _monitor == false
|
|
98
|
-
start_monitoring
|
|
99
|
-
end
|
|
89
|
+
options.merge(
|
|
90
|
+
app_metadata: cluster.monitor_app_metadata,
|
|
91
|
+
push_monitor_app_metadata: cluster.push_monitor_app_metadata,
|
|
92
|
+
heartbeat_interval: cluster.heartbeat_interval
|
|
93
|
+
))
|
|
94
|
+
start_monitoring unless _monitor == false
|
|
100
95
|
end
|
|
101
96
|
@connected = true
|
|
102
97
|
@pool_lock = Mutex.new
|
|
@@ -108,7 +103,7 @@ module Mongo
|
|
|
108
103
|
# @return [ Cluster ] cluster The server cluster.
|
|
109
104
|
attr_reader :cluster
|
|
110
105
|
|
|
111
|
-
# @return [ nil | Monitor ] monitor The server monitor. nil if the
|
|
106
|
+
# @return [ nil | Monitor ] monitor The server monitor. nil if the server
|
|
112
107
|
# was created with monitoring_io: false option.
|
|
113
108
|
attr_reader :monitor
|
|
114
109
|
|
|
@@ -154,14 +149,13 @@ module Mongo
|
|
|
154
149
|
end
|
|
155
150
|
end
|
|
156
151
|
|
|
157
|
-
|
|
158
152
|
# @deprecated
|
|
159
153
|
def heartbeat_frequency
|
|
160
154
|
cluster.heartbeat_interval
|
|
161
155
|
end
|
|
162
156
|
|
|
163
157
|
# @deprecated
|
|
164
|
-
alias
|
|
158
|
+
alias heartbeat_frequency_seconds heartbeat_frequency
|
|
165
159
|
|
|
166
160
|
# Performs an immediate, synchronous check of the server.
|
|
167
161
|
#
|
|
@@ -170,8 +164,8 @@ module Mongo
|
|
|
170
164
|
|
|
171
165
|
# The compressor negotiated by the server monitor, if any.
|
|
172
166
|
#
|
|
173
|
-
# This attribute is nil if no server check has
|
|
174
|
-
# no compression was
|
|
167
|
+
# This attribute is nil if no server check has yet completed, and if
|
|
168
|
+
# no compression was negotiated.
|
|
175
169
|
#
|
|
176
170
|
# @note Compression is negotiated for each connection separately.
|
|
177
171
|
#
|
|
@@ -179,11 +173,9 @@ module Mongo
|
|
|
179
173
|
#
|
|
180
174
|
# @deprecated
|
|
181
175
|
def compressor
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
nil
|
|
186
|
-
end
|
|
176
|
+
return unless monitor
|
|
177
|
+
|
|
178
|
+
monitor.compressor
|
|
187
179
|
end
|
|
188
180
|
|
|
189
181
|
# Delegate convenience methods to the monitor description.
|
|
@@ -246,6 +238,7 @@ module Mongo
|
|
|
246
238
|
# @since 2.0.0
|
|
247
239
|
def ==(other)
|
|
248
240
|
return false unless other.is_a?(Server)
|
|
241
|
+
|
|
249
242
|
address == other.address
|
|
250
243
|
end
|
|
251
244
|
|
|
@@ -275,9 +268,7 @@ module Mongo
|
|
|
275
268
|
#
|
|
276
269
|
# @since 2.0.0
|
|
277
270
|
def disconnect!
|
|
278
|
-
if monitor
|
|
279
|
-
monitor.stop!
|
|
280
|
-
end
|
|
271
|
+
monitor.stop! if monitor
|
|
281
272
|
|
|
282
273
|
@connected = false
|
|
283
274
|
|
|
@@ -294,9 +285,7 @@ module Mongo
|
|
|
294
285
|
end
|
|
295
286
|
|
|
296
287
|
def close
|
|
297
|
-
if monitor
|
|
298
|
-
monitor.stop!
|
|
299
|
-
end
|
|
288
|
+
monitor.stop! if monitor
|
|
300
289
|
|
|
301
290
|
@connected = false
|
|
302
291
|
|
|
@@ -331,9 +320,9 @@ module Mongo
|
|
|
331
320
|
# @api private
|
|
332
321
|
def start_monitoring
|
|
333
322
|
publish_opening_event
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
323
|
+
return unless options[:monitoring_io] != false
|
|
324
|
+
|
|
325
|
+
monitor.run!
|
|
337
326
|
end
|
|
338
327
|
|
|
339
328
|
# Publishes the server opening event.
|
|
@@ -362,24 +351,23 @@ module Mongo
|
|
|
362
351
|
#
|
|
363
352
|
# @api private
|
|
364
353
|
def status
|
|
365
|
-
|
|
366
|
-
when load_balancer?
|
|
354
|
+
if load_balancer?
|
|
367
355
|
'LB'
|
|
368
|
-
|
|
356
|
+
elsif primary?
|
|
369
357
|
'PRIMARY'
|
|
370
|
-
|
|
358
|
+
elsif secondary?
|
|
371
359
|
'SECONDARY'
|
|
372
|
-
|
|
360
|
+
elsif standalone?
|
|
373
361
|
'STANDALONE'
|
|
374
|
-
|
|
362
|
+
elsif arbiter?
|
|
375
363
|
'ARBITER'
|
|
376
|
-
|
|
364
|
+
elsif ghost?
|
|
377
365
|
'GHOST'
|
|
378
|
-
|
|
366
|
+
elsif other?
|
|
379
367
|
'OTHER'
|
|
380
|
-
|
|
368
|
+
elsif mongos?
|
|
381
369
|
'MONGOS'
|
|
382
|
-
|
|
370
|
+
elsif unknown?
|
|
383
371
|
'UNKNOWN'
|
|
384
372
|
else
|
|
385
373
|
# Since the summary method is often used for debugging, do not raise
|
|
@@ -394,23 +382,17 @@ module Mongo
|
|
|
394
382
|
# @since 2.7.0
|
|
395
383
|
def summary
|
|
396
384
|
status = self.status || ''
|
|
397
|
-
if replica_set_name
|
|
398
|
-
status += " replica_set=#{replica_set_name}"
|
|
399
|
-
end
|
|
385
|
+
status += " replica_set=#{replica_set_name}" if replica_set_name
|
|
400
386
|
|
|
401
|
-
unless monitor&.running?
|
|
402
|
-
status += " NO-MONITORING"
|
|
403
|
-
end
|
|
387
|
+
status += ' NO-MONITORING' unless monitor&.running?
|
|
404
388
|
|
|
405
|
-
if @pool
|
|
406
|
-
status += " pool=#{@pool.summary}"
|
|
407
|
-
end
|
|
389
|
+
status += " pool=#{@pool.summary}" if @pool
|
|
408
390
|
|
|
409
391
|
address_bit = if address
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
392
|
+
"#{address.host}:#{address.port}"
|
|
393
|
+
else
|
|
394
|
+
'nil'
|
|
395
|
+
end
|
|
414
396
|
|
|
415
397
|
"#<Server address=#{address_bit} #{status}>"
|
|
416
398
|
end
|
|
@@ -424,9 +406,7 @@ module Mongo
|
|
|
424
406
|
#
|
|
425
407
|
# @since 2.0.0
|
|
426
408
|
def pool
|
|
427
|
-
if unknown?
|
|
428
|
-
raise Error::ServerNotUsable, address
|
|
429
|
-
end
|
|
409
|
+
raise Error::ServerNotUsable, address if unknown?
|
|
430
410
|
|
|
431
411
|
@pool_lock.synchronize do
|
|
432
412
|
opts = connected? ? options : options.merge(populator_io: false)
|
|
@@ -475,9 +455,7 @@ module Mongo
|
|
|
475
455
|
#
|
|
476
456
|
# @since 2.1.0
|
|
477
457
|
def reconnect!
|
|
478
|
-
if options[:monitoring_io] != false
|
|
479
|
-
monitor.restart!
|
|
480
|
-
end
|
|
458
|
+
monitor.restart! if options[:monitoring_io] != false
|
|
481
459
|
@connected = true
|
|
482
460
|
end
|
|
483
461
|
|
|
@@ -507,11 +485,13 @@ module Mongo
|
|
|
507
485
|
def handle_handshake_failure!
|
|
508
486
|
yield
|
|
509
487
|
rescue Mongo::Error::SocketError, Mongo::Error::SocketTimeoutError => e
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
488
|
+
unless e.label?('SystemOverloadedError')
|
|
489
|
+
unknown!(
|
|
490
|
+
generation: e.generation,
|
|
491
|
+
service_id: e.service_id,
|
|
492
|
+
stop_push_monitor: true
|
|
493
|
+
)
|
|
494
|
+
end
|
|
515
495
|
raise
|
|
516
496
|
end
|
|
517
497
|
|
|
@@ -538,7 +518,7 @@ module Mongo
|
|
|
538
518
|
unknown!(
|
|
539
519
|
generation: e.generation,
|
|
540
520
|
service_id: e.service_id,
|
|
541
|
-
stop_push_monitor: true
|
|
521
|
+
stop_push_monitor: true
|
|
542
522
|
)
|
|
543
523
|
raise
|
|
544
524
|
end
|
|
@@ -547,7 +527,7 @@ module Mongo
|
|
|
547
527
|
#
|
|
548
528
|
# @api private
|
|
549
529
|
def retry_reads?
|
|
550
|
-
!!
|
|
530
|
+
!!logical_session_timeout
|
|
551
531
|
end
|
|
552
532
|
|
|
553
533
|
# Will writes sent to this server be retried.
|
|
@@ -557,18 +537,17 @@ module Mongo
|
|
|
557
537
|
#
|
|
558
538
|
# @return [ true, false ] If writes will be retried.
|
|
559
539
|
#
|
|
560
|
-
# @note Retryable writes are only available
|
|
561
|
-
# sharded clusters or replica sets.
|
|
540
|
+
# @note Retryable writes are only available with sharded clusters or replica sets.
|
|
562
541
|
#
|
|
563
542
|
# @note Some of the conditions in this method automatically return false for
|
|
564
|
-
#
|
|
543
|
+
# load balanced topologies. The conditions in this method should
|
|
565
544
|
# always be true, since load-balanced topologies are only available on
|
|
566
545
|
# MongoDB 5.0+, and not for standalone topologies. Therefore, we can
|
|
567
546
|
# assume that retry writes are enabled.
|
|
568
547
|
#
|
|
569
548
|
# @since 2.5.0
|
|
570
549
|
def retry_writes?
|
|
571
|
-
!!(
|
|
550
|
+
!!((logical_session_timeout && !standalone?) || load_balancer?)
|
|
572
551
|
end
|
|
573
552
|
|
|
574
553
|
# Marks server unknown and publishes the associated SDAM event
|
|
@@ -619,42 +598,30 @@ module Mongo
|
|
|
619
598
|
|
|
620
599
|
# NOTE: You cannot use safe navigation here because if pool is nil you end
|
|
621
600
|
# up trying to evaluate Integer < nil which is invalid.
|
|
622
|
-
if options[:generation] && pool && options[:generation] < pool.generation
|
|
623
|
-
return
|
|
624
|
-
end
|
|
601
|
+
return if options[:generation] && pool && options[:generation] < pool.generation
|
|
625
602
|
|
|
626
603
|
if options[:topology_version] && description.topology_version &&
|
|
627
|
-
|
|
628
|
-
then
|
|
604
|
+
!options[:topology_version].gt?(description.topology_version)
|
|
629
605
|
return
|
|
630
606
|
end
|
|
631
607
|
|
|
632
|
-
if options[:stop_push_monitor]
|
|
633
|
-
monitor&.stop_push_monitor!
|
|
634
|
-
end
|
|
608
|
+
monitor&.stop_push_monitor! if options[:stop_push_monitor]
|
|
635
609
|
|
|
636
610
|
# SDAM flow will update description on the server without in-place
|
|
637
611
|
# mutations and invoke SDAM transitions as needed.
|
|
638
612
|
config = {}
|
|
639
|
-
if options[:service_id]
|
|
640
|
-
|
|
641
|
-
end
|
|
642
|
-
if options[:topology_version]
|
|
643
|
-
config['topologyVersion'] = options[:topology_version]
|
|
644
|
-
end
|
|
613
|
+
config['serviceId'] = options[:service_id] if options[:service_id]
|
|
614
|
+
config['topologyVersion'] = options[:topology_version] if options[:topology_version]
|
|
645
615
|
new_description = Description.new(address, config,
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
)
|
|
616
|
+
load_balancer: load_balancer?,
|
|
617
|
+
force_load_balancer: options[:connect] == :load_balanced)
|
|
649
618
|
cluster.run_sdam_flow(description, new_description, options)
|
|
650
619
|
end
|
|
651
620
|
|
|
652
621
|
# @api private
|
|
653
622
|
def update_description(description)
|
|
654
623
|
pool = pool_internal
|
|
655
|
-
if pool && !description.unknown?
|
|
656
|
-
pool.ready
|
|
657
|
-
end
|
|
624
|
+
pool.ready if pool && !description.unknown?
|
|
658
625
|
@description = description
|
|
659
626
|
end
|
|
660
627
|
|