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) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Server
|
|
20
|
-
|
|
21
19
|
# Represents a description of the server, populated by the result of the
|
|
22
20
|
# hello command.
|
|
23
21
|
#
|
|
@@ -30,173 +28,192 @@ module Mongo
|
|
|
30
28
|
#
|
|
31
29
|
# @since 2.0.0
|
|
32
30
|
class Description
|
|
33
|
-
|
|
34
31
|
# Constant for reading arbiter info from config.
|
|
35
32
|
#
|
|
36
33
|
# @since 2.0.0
|
|
37
34
|
# @deprecated
|
|
38
|
-
ARBITER = 'arbiterOnly'
|
|
35
|
+
ARBITER = 'arbiterOnly'
|
|
39
36
|
|
|
40
37
|
# Constant for reading arbiters info from config.
|
|
41
38
|
#
|
|
42
39
|
# @since 2.0.0
|
|
43
|
-
ARBITERS = 'arbiters'
|
|
40
|
+
ARBITERS = 'arbiters'
|
|
44
41
|
|
|
45
42
|
# Constant for reading hidden info from config.
|
|
46
43
|
#
|
|
47
44
|
# @since 2.0.0
|
|
48
|
-
HIDDEN = 'hidden'
|
|
45
|
+
HIDDEN = 'hidden'
|
|
49
46
|
|
|
50
47
|
# Constant for reading hosts info from config.
|
|
51
48
|
#
|
|
52
49
|
# @since 2.0.0
|
|
53
|
-
HOSTS = 'hosts'
|
|
50
|
+
HOSTS = 'hosts'
|
|
54
51
|
|
|
55
52
|
# Constant for the key for the message value.
|
|
56
53
|
#
|
|
57
54
|
# @since 2.0.0
|
|
58
55
|
# @deprecated
|
|
59
|
-
MESSAGE = 'msg'
|
|
56
|
+
MESSAGE = 'msg'
|
|
60
57
|
|
|
61
58
|
# Constant for the message that indicates a sharded cluster.
|
|
62
59
|
#
|
|
63
60
|
# @since 2.0.0
|
|
64
61
|
# @deprecated
|
|
65
|
-
MONGOS_MESSAGE = 'isdbgrid'
|
|
62
|
+
MONGOS_MESSAGE = 'isdbgrid'
|
|
66
63
|
|
|
67
64
|
# Constant for determining ghost servers.
|
|
68
65
|
#
|
|
69
66
|
# @since 2.0.0
|
|
70
67
|
# @deprecated
|
|
71
|
-
REPLICA_SET = 'isreplicaset'
|
|
68
|
+
REPLICA_SET = 'isreplicaset'
|
|
72
69
|
|
|
73
70
|
# Constant for reading max bson size info from config.
|
|
74
71
|
#
|
|
75
72
|
# @since 2.0.0
|
|
76
|
-
MAX_BSON_OBJECT_SIZE = 'maxBsonObjectSize'
|
|
73
|
+
MAX_BSON_OBJECT_SIZE = 'maxBsonObjectSize'
|
|
77
74
|
|
|
78
75
|
# Constant for reading max message size info from config.
|
|
79
76
|
#
|
|
80
77
|
# @since 2.0.0
|
|
81
|
-
MAX_MESSAGE_BYTES = 'maxMessageSizeBytes'
|
|
78
|
+
MAX_MESSAGE_BYTES = 'maxMessageSizeBytes'
|
|
82
79
|
|
|
83
80
|
# Constant for the max wire version.
|
|
84
81
|
#
|
|
85
82
|
# @since 2.0.0
|
|
86
|
-
MAX_WIRE_VERSION = 'maxWireVersion'
|
|
83
|
+
MAX_WIRE_VERSION = 'maxWireVersion'
|
|
87
84
|
|
|
88
85
|
# Constant for min wire version.
|
|
89
86
|
#
|
|
90
87
|
# @since 2.0.0
|
|
91
|
-
MIN_WIRE_VERSION = 'minWireVersion'
|
|
88
|
+
MIN_WIRE_VERSION = 'minWireVersion'
|
|
92
89
|
|
|
93
90
|
# Constant for reading max write batch size.
|
|
94
91
|
#
|
|
95
92
|
# @since 2.0.0
|
|
96
|
-
MAX_WRITE_BATCH_SIZE = 'maxWriteBatchSize'
|
|
93
|
+
MAX_WRITE_BATCH_SIZE = 'maxWriteBatchSize'
|
|
97
94
|
|
|
98
95
|
# Constant for the lastWrite subdocument.
|
|
99
96
|
#
|
|
100
97
|
# @since 2.4.0
|
|
101
|
-
LAST_WRITE = 'lastWrite'
|
|
98
|
+
LAST_WRITE = 'lastWrite'
|
|
102
99
|
|
|
103
100
|
# Constant for the lastWriteDate field in the lastWrite subdocument.
|
|
104
101
|
#
|
|
105
102
|
# @since 2.4.0
|
|
106
|
-
LAST_WRITE_DATE = 'lastWriteDate'
|
|
103
|
+
LAST_WRITE_DATE = 'lastWriteDate'
|
|
107
104
|
|
|
108
105
|
# Constant for reading the me field.
|
|
109
106
|
#
|
|
110
107
|
# @since 2.1.0
|
|
111
|
-
ME = 'me'
|
|
108
|
+
ME = 'me'
|
|
112
109
|
|
|
113
110
|
# Default max write batch size.
|
|
114
111
|
#
|
|
115
112
|
# @since 2.0.0
|
|
116
|
-
DEFAULT_MAX_WRITE_BATCH_SIZE = 1000
|
|
113
|
+
DEFAULT_MAX_WRITE_BATCH_SIZE = 1000
|
|
117
114
|
|
|
118
115
|
# The legacy wire protocol version.
|
|
119
116
|
#
|
|
120
117
|
# @since 2.0.0
|
|
121
118
|
# @deprecated Will be removed in 3.0.
|
|
122
|
-
LEGACY_WIRE_VERSION = 0
|
|
119
|
+
LEGACY_WIRE_VERSION = 0
|
|
123
120
|
|
|
124
121
|
# Constant for reading passive info from config.
|
|
125
122
|
#
|
|
126
123
|
# @since 2.0.0
|
|
127
|
-
PASSIVE = 'passive'
|
|
124
|
+
PASSIVE = 'passive'
|
|
128
125
|
|
|
129
126
|
# Constant for reading the passive server list.
|
|
130
127
|
#
|
|
131
128
|
# @since 2.0.0
|
|
132
|
-
PASSIVES = 'passives'
|
|
129
|
+
PASSIVES = 'passives'
|
|
133
130
|
|
|
134
131
|
# Constant for reading primary info from config.
|
|
135
132
|
#
|
|
136
133
|
# @since 2.0.0
|
|
137
134
|
# @deprecated
|
|
138
|
-
PRIMARY = 'ismaster'
|
|
135
|
+
PRIMARY = 'ismaster'
|
|
139
136
|
|
|
140
137
|
# Constant for reading primary host field from config.
|
|
141
138
|
#
|
|
142
139
|
# @since 2.5.0
|
|
143
|
-
PRIMARY_HOST = 'primary'
|
|
140
|
+
PRIMARY_HOST = 'primary'
|
|
144
141
|
|
|
145
142
|
# Constant for reading secondary info from config.
|
|
146
143
|
#
|
|
147
144
|
# @since 2.0.0
|
|
148
145
|
# @deprecated
|
|
149
|
-
SECONDARY = 'secondary'
|
|
146
|
+
SECONDARY = 'secondary'
|
|
150
147
|
|
|
151
148
|
# Constant for reading replica set name info from config.
|
|
152
149
|
#
|
|
153
150
|
# @since 2.0.0
|
|
154
|
-
SET_NAME = 'setName'
|
|
151
|
+
SET_NAME = 'setName'
|
|
155
152
|
|
|
156
153
|
# Constant for reading tags info from config.
|
|
157
154
|
#
|
|
158
155
|
# @since 2.0.0
|
|
159
|
-
TAGS = 'tags'
|
|
156
|
+
TAGS = 'tags'
|
|
160
157
|
|
|
161
158
|
# Constant for reading electionId info from config.
|
|
162
159
|
#
|
|
163
160
|
# @since 2.1.0
|
|
164
|
-
ELECTION_ID = 'electionId'
|
|
161
|
+
ELECTION_ID = 'electionId'
|
|
165
162
|
|
|
166
163
|
# Constant for reading setVersion info from config.
|
|
167
164
|
#
|
|
168
165
|
# @since 2.2.2
|
|
169
|
-
SET_VERSION = 'setVersion'
|
|
166
|
+
SET_VERSION = 'setVersion'
|
|
170
167
|
|
|
171
168
|
# Constant for reading localTime info from config.
|
|
172
169
|
#
|
|
173
170
|
# @since 2.1.0
|
|
174
|
-
LOCAL_TIME = 'localTime'
|
|
171
|
+
LOCAL_TIME = 'localTime'
|
|
175
172
|
|
|
176
173
|
# Constant for reading operationTime info from config.
|
|
177
174
|
#
|
|
178
175
|
# @since 2.5.0
|
|
179
|
-
OPERATION_TIME = 'operationTime'
|
|
176
|
+
OPERATION_TIME = 'operationTime'
|
|
180
177
|
|
|
181
178
|
# Constant for reading logicalSessionTimeoutMinutes info from config.
|
|
182
179
|
#
|
|
183
180
|
# @since 2.5.0
|
|
184
|
-
LOGICAL_SESSION_TIMEOUT_MINUTES = 'logicalSessionTimeoutMinutes'
|
|
181
|
+
LOGICAL_SESSION_TIMEOUT_MINUTES = 'logicalSessionTimeoutMinutes'
|
|
185
182
|
|
|
186
183
|
# Constant for reading connectionId info from config.
|
|
187
184
|
#
|
|
188
185
|
# @api private
|
|
189
|
-
CONNECTION_ID = 'connectionId'
|
|
186
|
+
CONNECTION_ID = 'connectionId'
|
|
187
|
+
|
|
188
|
+
# Constant for reading the modern primary flag from config.
|
|
189
|
+
#
|
|
190
|
+
# @api private
|
|
191
|
+
IS_WRITABLE_PRIMARY = 'isWritablePrimary'
|
|
192
|
+
|
|
193
|
+
# Constant for reading the helloOk capability flag from config.
|
|
194
|
+
#
|
|
195
|
+
# @api private
|
|
196
|
+
HELLO_OK = 'helloOk'
|
|
190
197
|
|
|
191
198
|
# Fields to exclude when comparing two descriptions.
|
|
192
199
|
#
|
|
200
|
+
# The PRIMARY (legacy `ismaster`), IS_WRITABLE_PRIMARY (modern `hello`),
|
|
201
|
+
# and HELLO_OK keys are excluded because the driver does a one-time
|
|
202
|
+
# legacy-`isMaster` to modern-`hello` protocol switch on the initial
|
|
203
|
+
# handshake (per the SDAM Server Monitoring spec). Two responses for the
|
|
204
|
+
# same logical role differ only in which of these keys is populated.
|
|
205
|
+
# The role itself is still differentiated by the SECONDARY flag and the
|
|
206
|
+
# remaining replica-set metadata.
|
|
207
|
+
#
|
|
193
208
|
# @since 2.0.6
|
|
194
209
|
EXCLUDE_FOR_COMPARISON = [ LOCAL_TIME,
|
|
195
210
|
LAST_WRITE,
|
|
196
211
|
OPERATION_TIME,
|
|
197
212
|
Operation::CLUSTER_TIME,
|
|
198
213
|
CONNECTION_ID,
|
|
199
|
-
|
|
214
|
+
PRIMARY,
|
|
215
|
+
IS_WRITABLE_PRIMARY,
|
|
216
|
+
HELLO_OK, ].freeze
|
|
200
217
|
|
|
201
218
|
# Instantiate the new server description from the result of the hello
|
|
202
219
|
# command or fabricate a placeholder description for Unknown and
|
|
@@ -218,9 +235,8 @@ module Mongo
|
|
|
218
235
|
#
|
|
219
236
|
# @api private
|
|
220
237
|
def initialize(address, config = {}, average_round_trip_time: nil,
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
)
|
|
238
|
+
minimum_round_trip_time: 0, load_balancer: false,
|
|
239
|
+
force_load_balancer: false)
|
|
224
240
|
@address = address
|
|
225
241
|
@config = config
|
|
226
242
|
@load_balancer = !!load_balancer
|
|
@@ -231,56 +247,55 @@ module Mongo
|
|
|
231
247
|
@last_update_time = Time.now.freeze
|
|
232
248
|
@last_update_monotime = Utils.monotonic_time
|
|
233
249
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
fake_service_id = if process_id = topology_version && topology_version['processId']
|
|
267
|
-
"process:#{process_id}"
|
|
268
|
-
else
|
|
269
|
-
"fake:#{rand(2**32-1)+1}"
|
|
270
|
-
end
|
|
271
|
-
@config = @config.merge('serviceId' => fake_service_id)
|
|
250
|
+
# When loadBalanced=true URI option is set, the driver will refuse
|
|
251
|
+
# to work if the server it communicates with does not set serviceId
|
|
252
|
+
# in ismaster/hello response.
|
|
253
|
+
#
|
|
254
|
+
# At the moment we cannot run a proper load balancer setup on evergreen
|
|
255
|
+
#
|
|
256
|
+
# Therefore, when connect=:load_balanced Ruby option is used instead
|
|
257
|
+
# of the loadBalanced=true URI option, if serviceId is not set in
|
|
258
|
+
# ismaster/hello response, the driver fabricates a serviceId and
|
|
259
|
+
# proceeds to treat a server that does not report itself as being
|
|
260
|
+
# behind a load balancer as a server that is behind a load balancer.
|
|
261
|
+
#
|
|
262
|
+
# 5.0+ servers should provide topologyVersion.processId which
|
|
263
|
+
# is specific to the particular process instance. We can use that
|
|
264
|
+
# field as a proxy for serviceId.
|
|
265
|
+
#
|
|
266
|
+
# If the topologyVersion isn't provided for whatever reason, we
|
|
267
|
+
# fabricate a serviceId locally.
|
|
268
|
+
#
|
|
269
|
+
# In either case, a serviceId provided by an actual server behind
|
|
270
|
+
# a load balancer is supposed to be a BSON::ObjectId. The fabricated
|
|
271
|
+
# service ids are strings, to distinguish them from the real ones.
|
|
272
|
+
# In particular processId is also a BSON::ObjectId, but will be
|
|
273
|
+
# mapped to a string for clarity that this is a fake service id.
|
|
274
|
+
#
|
|
275
|
+
# TODO: Remove this when https://jira.mongodb.org/browse/RUBY-2881 is done.
|
|
276
|
+
if load_balancer && ok? && !service_id
|
|
277
|
+
unless force_load_balancer
|
|
278
|
+
raise Error::MissingServiceId,
|
|
279
|
+
"The server at #{address.seed} did not provide a service id in handshake response"
|
|
272
280
|
end
|
|
281
|
+
|
|
282
|
+
fake_service_id = if process_id = topology_version && topology_version['processId']
|
|
283
|
+
"process:#{process_id}"
|
|
284
|
+
else
|
|
285
|
+
"fake:#{rand((2**32) - 1) + 1}"
|
|
286
|
+
end
|
|
287
|
+
@config = @config.merge('serviceId' => fake_service_id)
|
|
273
288
|
end
|
|
274
289
|
|
|
275
|
-
|
|
276
|
-
# prepopulate cache instance variables
|
|
277
|
-
hosts
|
|
278
|
-
arbiters
|
|
279
|
-
passives
|
|
280
|
-
topology_version
|
|
290
|
+
return unless Mongo::Lint.enabled?
|
|
281
291
|
|
|
282
|
-
|
|
283
|
-
|
|
292
|
+
# prepopulate cache instance variables
|
|
293
|
+
hosts
|
|
294
|
+
arbiters
|
|
295
|
+
passives
|
|
296
|
+
topology_version
|
|
297
|
+
|
|
298
|
+
freeze
|
|
284
299
|
end
|
|
285
300
|
|
|
286
301
|
# @return [ Address ] address The server's address.
|
|
@@ -297,14 +312,12 @@ module Mongo
|
|
|
297
312
|
end
|
|
298
313
|
|
|
299
314
|
# @return [ Features ] features The features for the server.
|
|
300
|
-
|
|
301
|
-
@features
|
|
302
|
-
end
|
|
315
|
+
attr_reader :features
|
|
303
316
|
|
|
304
317
|
# @return [ Float ] The moving average time the hello call took to complete.
|
|
305
318
|
attr_reader :average_round_trip_time
|
|
306
319
|
|
|
307
|
-
# @return [ Float ] The minimum time
|
|
320
|
+
# @return [ Float ] The minimum time that the ten last hello calls took
|
|
308
321
|
# to complete.
|
|
309
322
|
attr_reader :minimum_round_trip_time
|
|
310
323
|
|
|
@@ -318,8 +331,8 @@ module Mongo
|
|
|
318
331
|
# @since 2.0.0
|
|
319
332
|
def arbiter?
|
|
320
333
|
ok? &&
|
|
321
|
-
|
|
322
|
-
|
|
334
|
+
config['arbiterOnly'] == true &&
|
|
335
|
+
!!config['setName']
|
|
323
336
|
end
|
|
324
337
|
|
|
325
338
|
# Get a list of all arbiters in the replica set.
|
|
@@ -344,7 +357,7 @@ module Mongo
|
|
|
344
357
|
# @since 2.0.0
|
|
345
358
|
def ghost?
|
|
346
359
|
ok? &&
|
|
347
|
-
|
|
360
|
+
config['isreplicaset'] == true
|
|
348
361
|
end
|
|
349
362
|
|
|
350
363
|
# Will return true if the server is hidden.
|
|
@@ -498,7 +511,7 @@ module Mongo
|
|
|
498
511
|
def topology_version
|
|
499
512
|
unless defined?(@topology_version)
|
|
500
513
|
@topology_version = config['topologyVersion'] &&
|
|
501
|
-
|
|
514
|
+
TopologyVersion.new(config['topologyVersion'])
|
|
502
515
|
end
|
|
503
516
|
@topology_version
|
|
504
517
|
end
|
|
@@ -584,9 +597,9 @@ module Mongo
|
|
|
584
597
|
# but it's referred to it as "RSOther" which means a non-RS member
|
|
585
598
|
# cannot be "other".
|
|
586
599
|
ok? &&
|
|
587
|
-
|
|
600
|
+
!!config['setName'] && (
|
|
588
601
|
config['hidden'] == true ||
|
|
589
|
-
!primary? && !secondary? && !arbiter?
|
|
602
|
+
(!primary? && !secondary? && !arbiter?)
|
|
590
603
|
)
|
|
591
604
|
end
|
|
592
605
|
|
|
@@ -636,8 +649,8 @@ module Mongo
|
|
|
636
649
|
# @since 2.0.0
|
|
637
650
|
def primary?
|
|
638
651
|
ok? &&
|
|
639
|
-
(config['ismaster'] == true || config['isWritablePrimary'] == true
|
|
640
|
-
|
|
652
|
+
(config['ismaster'] == true || config['isWritablePrimary'] == true) &&
|
|
653
|
+
!!config['setName']
|
|
641
654
|
end
|
|
642
655
|
|
|
643
656
|
# Get the name of the replica set the server belongs to, returns nil if
|
|
@@ -675,8 +688,8 @@ module Mongo
|
|
|
675
688
|
# @since 2.0.0
|
|
676
689
|
def secondary?
|
|
677
690
|
ok? &&
|
|
678
|
-
|
|
679
|
-
|
|
691
|
+
config['secondary'] == true &&
|
|
692
|
+
!!config['setName']
|
|
680
693
|
end
|
|
681
694
|
|
|
682
695
|
# Returns the server type as a symbol.
|
|
@@ -696,6 +709,7 @@ module Mongo
|
|
|
696
709
|
return :secondary if secondary?
|
|
697
710
|
return :standalone if standalone?
|
|
698
711
|
return :other if other?
|
|
712
|
+
|
|
699
713
|
:unknown
|
|
700
714
|
end
|
|
701
715
|
|
|
@@ -709,9 +723,9 @@ module Mongo
|
|
|
709
723
|
# @since 2.0.0
|
|
710
724
|
def standalone?
|
|
711
725
|
ok? &&
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
726
|
+
config['msg'] != 'isdbgrid' &&
|
|
727
|
+
config['setName'].nil? &&
|
|
728
|
+
config['isreplicaset'] != true
|
|
715
729
|
end
|
|
716
730
|
|
|
717
731
|
# Returns whether this server is an unknown, per the SDAM spec.
|
|
@@ -724,7 +738,8 @@ module Mongo
|
|
|
724
738
|
# @since 2.0.0
|
|
725
739
|
def unknown?
|
|
726
740
|
return false if load_balancer?
|
|
727
|
-
|
|
741
|
+
|
|
742
|
+
config.empty? || config.keys == %w[topologyVersion] || !ok?
|
|
728
743
|
end
|
|
729
744
|
|
|
730
745
|
# @api private
|
|
@@ -821,9 +836,9 @@ module Mongo
|
|
|
821
836
|
#
|
|
822
837
|
# @since 2.7.0
|
|
823
838
|
def op_time
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
839
|
+
return unless config['lastWrite'] && config['lastWrite']['opTime']
|
|
840
|
+
|
|
841
|
+
config['lastWrite']['opTime']['ts']
|
|
827
842
|
end
|
|
828
843
|
|
|
829
844
|
# Time when this server description was created.
|
|
@@ -872,46 +887,29 @@ module Mongo
|
|
|
872
887
|
def ==(other)
|
|
873
888
|
return false if self.class != other.class
|
|
874
889
|
return false if unknown? || other.unknown?
|
|
890
|
+
return false if server_type != other.server_type
|
|
875
891
|
|
|
876
892
|
(config.keys + other.config.keys).uniq.all? do |k|
|
|
877
893
|
config[k] == other.config[k] || EXCLUDE_FOR_COMPARISON.include?(k)
|
|
878
894
|
end
|
|
879
895
|
end
|
|
880
|
-
|
|
896
|
+
alias eql? ==
|
|
881
897
|
|
|
882
898
|
# @api private
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
12
|
|
895
|
-
when '4.4'
|
|
896
|
-
9
|
|
897
|
-
when '4.2'
|
|
898
|
-
8
|
|
899
|
-
when '4.0'
|
|
900
|
-
7
|
|
901
|
-
when '3.6'
|
|
902
|
-
6
|
|
903
|
-
when '3.4'
|
|
904
|
-
5
|
|
905
|
-
when '3.2'
|
|
906
|
-
4
|
|
907
|
-
when '3.0'
|
|
908
|
-
3
|
|
909
|
-
when '2.6'
|
|
910
|
-
2
|
|
911
|
-
else
|
|
912
|
-
raise ArgumentError, "Bogus required version #{version}"
|
|
913
|
-
end
|
|
899
|
+
SERVER_VERSION_WIRE_VERSION_MAP = {
|
|
900
|
+
'8.2' => 27,
|
|
901
|
+
'8.0' => 25,
|
|
902
|
+
'7.0' => 21,
|
|
903
|
+
'6.0' => 17,
|
|
904
|
+
'5.2' => 15,
|
|
905
|
+
'5.1' => 14,
|
|
906
|
+
'5.0' => 12,
|
|
907
|
+
'4.4' => 9,
|
|
908
|
+
'4.2' => 8,
|
|
909
|
+
}.freeze
|
|
914
910
|
|
|
911
|
+
# @api private
|
|
912
|
+
def server_version_gte?(version)
|
|
915
913
|
if load_balancer?
|
|
916
914
|
# If we are talking to a load balancer, there is no monitoring
|
|
917
915
|
# and we don't know what server is behind the load balancer.
|
|
@@ -920,7 +918,10 @@ module Mongo
|
|
|
920
918
|
return true
|
|
921
919
|
end
|
|
922
920
|
|
|
923
|
-
required_wv
|
|
921
|
+
required_wv = SERVER_VERSION_WIRE_VERSION_MAP[version]
|
|
922
|
+
raise NotImplementedError, "Unexpected server version #{version.inspect}" unless required_wv
|
|
923
|
+
|
|
924
|
+
required_wv <= max_wire_version
|
|
924
925
|
end
|
|
925
926
|
end
|
|
926
927
|
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
|
|
|
@@ -27,9 +26,9 @@ module Mongo
|
|
|
27
26
|
class AppMetadata < Server::AppMetadata
|
|
28
27
|
def initialize(options = {})
|
|
29
28
|
super
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
return unless instance_variable_defined?(:@request_auth_mech)
|
|
30
|
+
|
|
31
|
+
remove_instance_variable(:@request_auth_mech)
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
end
|