mongo 2.22.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 +267 -276
- 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 +152 -184
- data/lib/mongo/cluster_time.rb +14 -31
- data/lib/mongo/collection/helpers.rb +5 -8
- data/lib/mongo/collection/view/aggregation/behavior.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +10 -12
- 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 +44 -35
- data/lib/mongo/collection/view/map_reduce.rb +20 -25
- data/lib/mongo/collection/view/readable.rb +96 -94
- data/lib/mongo/collection/view/writable.rb +104 -114
- data/lib/mongo/collection/view.rb +11 -8
- data/lib/mongo/collection.rb +103 -106
- 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 +6 -4
- data/lib/mongo/crypt/auto_decryption_context.rb +9 -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 +150 -156
- data/lib/mongo/crypt/context.rb +20 -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 +9 -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 +23 -39
- data/lib/mongo/database.rb +68 -65
- data/lib/mongo/dbref.rb +0 -1
- data/lib/mongo/deprecations.rb +98 -0
- 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 +68 -58
- 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 +4 -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 +7 -6
- 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 +29 -31
- 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 +37 -59
- 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 +30 -10
- data/lib/mongo/semaphore.rb +0 -1
- data/lib/mongo/server/app_metadata/environment.rb +3 -3
- data/lib/mongo/server/app_metadata/platform.rb +17 -4
- data/lib/mongo/server/app_metadata.rb +4 -5
- data/lib/mongo/server/connection.rb +79 -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 +51 -59
- 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 +62 -94
- 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 +334 -199
- 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 +10 -11
- data/lib/mongo/srv/resolver.rb +15 -24
- data/lib/mongo/srv/result.rb +25 -21
- 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 +320 -0
- data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +227 -0
- data/lib/mongo/tracing/open_telemetry/tracer.rb +236 -0
- data/lib/mongo/{error/server_api_not_supported.rb → tracing/open_telemetry.rb} +10 -10
- data/lib/mongo/tracing.rb +42 -0
- data/lib/mongo/uri/options_mapper.rb +135 -126
- data/lib/mongo/uri/srv_protocol.rb +34 -42
- 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 +4 -3
- data/mongo.gemspec +17 -17
- metadata +11 -5
- 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) 2021 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,12 +17,10 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Cluster
|
|
20
19
|
module Topology
|
|
21
|
-
|
|
22
20
|
# Defines behavior for when a cluster is in load-balanced topology.
|
|
23
21
|
class LoadBalanced < Base
|
|
24
|
-
|
|
25
22
|
# The display name for the topology.
|
|
26
|
-
NAME = 'LoadBalanced'
|
|
23
|
+
NAME = 'LoadBalanced'
|
|
27
24
|
|
|
28
25
|
# Get the display name.
|
|
29
26
|
#
|
|
@@ -48,7 +45,9 @@ module Mongo
|
|
|
48
45
|
# selector.
|
|
49
46
|
#
|
|
50
47
|
# @return [ true ] A standalone always has a readable server.
|
|
51
|
-
def has_readable_server?(
|
|
48
|
+
def has_readable_server?(_cluster, _server_selector = nil)
|
|
49
|
+
true
|
|
50
|
+
end
|
|
52
51
|
|
|
53
52
|
# Determine if the topology would select a writable server for the
|
|
54
53
|
# provided candidates.
|
|
@@ -56,45 +55,56 @@ module Mongo
|
|
|
56
55
|
# @param [ Cluster ] cluster The cluster.
|
|
57
56
|
#
|
|
58
57
|
# @return [ true ] A standalone always has a writable server.
|
|
59
|
-
def has_writable_server?(
|
|
58
|
+
def has_writable_server?(_cluster)
|
|
59
|
+
true
|
|
60
|
+
end
|
|
60
61
|
|
|
61
62
|
# Returns whether this topology is one of the replica set ones.
|
|
62
63
|
#
|
|
63
64
|
# @return [ false ] Always false.
|
|
64
|
-
def replica_set
|
|
65
|
+
def replica_set?
|
|
66
|
+
false
|
|
67
|
+
end
|
|
65
68
|
|
|
66
69
|
# Select appropriate servers for this topology.
|
|
67
70
|
#
|
|
68
71
|
# @param [ Array<Server> ] servers The known servers.
|
|
69
72
|
#
|
|
70
73
|
# @return [ Array<Server> ] All of the known servers.
|
|
71
|
-
def servers(servers,
|
|
74
|
+
def servers(servers, _name = nil)
|
|
72
75
|
servers
|
|
73
76
|
end
|
|
74
77
|
|
|
75
78
|
# Returns whether this topology is sharded.
|
|
76
79
|
#
|
|
77
80
|
# @return [ false ] Always false.
|
|
78
|
-
def sharded
|
|
81
|
+
def sharded?
|
|
82
|
+
false
|
|
83
|
+
end
|
|
79
84
|
|
|
80
85
|
# Returns whether this topology is Single.
|
|
81
86
|
#
|
|
82
|
-
# @return [
|
|
83
|
-
def single
|
|
87
|
+
# @return [ false ] Always false.
|
|
88
|
+
def single?
|
|
89
|
+
false
|
|
90
|
+
end
|
|
84
91
|
|
|
85
92
|
# Returns whether this topology is Unknown.
|
|
86
93
|
#
|
|
87
94
|
# @return [ false ] Always false.
|
|
88
|
-
def unknown
|
|
95
|
+
def unknown?
|
|
96
|
+
false
|
|
97
|
+
end
|
|
89
98
|
|
|
90
99
|
private
|
|
91
100
|
|
|
92
101
|
def validate_options(options, cluster)
|
|
93
102
|
if cluster.servers_list.length > 1
|
|
94
|
-
raise ArgumentError,
|
|
103
|
+
raise ArgumentError,
|
|
104
|
+
"Cannot instantiate a load-balanced topology with more than one server in the cluster: #{cluster.servers_list.map(&:address).map(&:seed).join(', ')}"
|
|
95
105
|
end
|
|
96
106
|
|
|
97
|
-
super
|
|
107
|
+
super
|
|
98
108
|
end
|
|
99
109
|
end
|
|
100
110
|
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
|
#
|
|
@@ -24,12 +23,10 @@ module Mongo
|
|
|
24
23
|
def validate_options(options, cluster)
|
|
25
24
|
# These options can be set to nil for convenience, but not to
|
|
26
25
|
# any value including an empty string.
|
|
27
|
-
[
|
|
28
|
-
if options[option]
|
|
29
|
-
raise ArgumentError, "Topology #{self.class.name} cannot have the :#{option} option set"
|
|
30
|
-
end
|
|
26
|
+
%i[replica_set_name max_election_id max_set_version].each do |option|
|
|
27
|
+
raise ArgumentError, "Topology #{self.class.name} cannot have the :#{option} option set" if options[option]
|
|
31
28
|
end
|
|
32
|
-
super
|
|
29
|
+
super
|
|
33
30
|
end
|
|
34
31
|
end
|
|
35
32
|
end
|
|
@@ -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
|
#
|
|
@@ -18,19 +17,17 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Cluster
|
|
20
19
|
module Topology
|
|
21
|
-
|
|
22
20
|
# Defines behavior when a cluster is in replica set topology,
|
|
23
21
|
# and there is no primary or the primary has not yet been discovered
|
|
24
22
|
# by the driver.
|
|
25
23
|
#
|
|
26
24
|
# @since 2.0.0
|
|
27
25
|
class ReplicaSetNoPrimary < Base
|
|
28
|
-
|
|
29
26
|
# The display name for the topology.
|
|
30
27
|
#
|
|
31
28
|
# @since 2.0.0
|
|
32
29
|
# @deprecated
|
|
33
|
-
NAME = 'Replica Set'
|
|
30
|
+
NAME = 'Replica Set'
|
|
34
31
|
|
|
35
32
|
# Get the display name.
|
|
36
33
|
#
|
|
@@ -50,16 +47,10 @@ module Mongo
|
|
|
50
47
|
# @since 2.7.0
|
|
51
48
|
def summary
|
|
52
49
|
details = server_descriptions.keys.join(',')
|
|
53
|
-
if details != ''
|
|
54
|
-
details << ','
|
|
55
|
-
end
|
|
50
|
+
details << ',' if details != ''
|
|
56
51
|
details << "name=#{replica_set_name}"
|
|
57
|
-
if max_set_version
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
if max_election_id
|
|
61
|
-
details << ",e=#{max_election_id && max_election_id.to_s.sub(/^0+/, '')}"
|
|
62
|
-
end
|
|
52
|
+
details << ",v=#{max_set_version}" if max_set_version
|
|
53
|
+
details << ",e=#{max_election_id && max_election_id.to_s.sub(/^0+/, '')}" if max_election_id
|
|
63
54
|
"#{display_name}[#{details}]"
|
|
64
55
|
end
|
|
65
56
|
|
|
@@ -104,7 +95,9 @@ module Mongo
|
|
|
104
95
|
# @return [ true ] Always true.
|
|
105
96
|
#
|
|
106
97
|
# @since 2.0.0
|
|
107
|
-
def replica_set
|
|
98
|
+
def replica_set?
|
|
99
|
+
true
|
|
100
|
+
end
|
|
108
101
|
|
|
109
102
|
# Select appropriate servers for this topology.
|
|
110
103
|
#
|
|
@@ -118,8 +111,8 @@ module Mongo
|
|
|
118
111
|
# @since 2.0.0
|
|
119
112
|
def servers(servers)
|
|
120
113
|
servers.select do |server|
|
|
121
|
-
(replica_set_name.nil? || server.replica_set_name == replica_set_name) &&
|
|
122
|
-
server.primary? || server.secondary?
|
|
114
|
+
((replica_set_name.nil? || server.replica_set_name == replica_set_name) &&
|
|
115
|
+
server.primary?) || server.secondary?
|
|
123
116
|
end
|
|
124
117
|
end
|
|
125
118
|
|
|
@@ -131,7 +124,9 @@ module Mongo
|
|
|
131
124
|
# @return [ false ] Always false.
|
|
132
125
|
#
|
|
133
126
|
# @since 2.0.0
|
|
134
|
-
def sharded
|
|
127
|
+
def sharded?
|
|
128
|
+
false
|
|
129
|
+
end
|
|
135
130
|
|
|
136
131
|
# A replica set topology is not single.
|
|
137
132
|
#
|
|
@@ -141,7 +136,9 @@ module Mongo
|
|
|
141
136
|
# @return [ false ] Always false.
|
|
142
137
|
#
|
|
143
138
|
# @since 2.0.0
|
|
144
|
-
def single
|
|
139
|
+
def single?
|
|
140
|
+
false
|
|
141
|
+
end
|
|
145
142
|
|
|
146
143
|
# A replica set topology is not unknown.
|
|
147
144
|
#
|
|
@@ -151,20 +148,20 @@ module Mongo
|
|
|
151
148
|
# @return [ false ] Always false.
|
|
152
149
|
#
|
|
153
150
|
# @since 2.0.0
|
|
154
|
-
def unknown
|
|
151
|
+
def unknown?
|
|
152
|
+
false
|
|
153
|
+
end
|
|
155
154
|
|
|
156
155
|
private
|
|
157
156
|
|
|
158
157
|
def validate_options(options, cluster)
|
|
159
|
-
if options[:replica_set_name] == ''
|
|
160
|
-
options = options.merge(replica_set_name: nil)
|
|
161
|
-
end
|
|
158
|
+
options = options.merge(replica_set_name: nil) if options[:replica_set_name] == ''
|
|
162
159
|
|
|
163
160
|
unless options[:replica_set_name]
|
|
164
161
|
raise ArgumentError, 'Cannot instantiate a replica set topology without a replica set name'
|
|
165
162
|
end
|
|
166
163
|
|
|
167
|
-
super
|
|
164
|
+
super
|
|
168
165
|
end
|
|
169
166
|
end
|
|
170
167
|
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
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Cluster
|
|
20
19
|
module Topology
|
|
21
|
-
|
|
22
20
|
# Defines behavior when a cluster is in replica set topology,
|
|
23
21
|
# and is a no primary which has been discovered by the driver.
|
|
24
22
|
#
|
|
@@ -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
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Cluster
|
|
20
19
|
module Topology
|
|
21
|
-
|
|
22
20
|
# Defines behavior for when a cluster is in sharded topology.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
@@ -28,7 +26,7 @@ module Mongo
|
|
|
28
26
|
# The display name for the topology.
|
|
29
27
|
#
|
|
30
28
|
# @since 2.0.0
|
|
31
|
-
NAME = 'Sharded'
|
|
29
|
+
NAME = 'Sharded'
|
|
32
30
|
|
|
33
31
|
# Get the display name.
|
|
34
32
|
#
|
|
@@ -64,7 +62,9 @@ module Mongo
|
|
|
64
62
|
# @return [ true ] A Sharded cluster always has a readable server.
|
|
65
63
|
#
|
|
66
64
|
# @since 2.4.0
|
|
67
|
-
def has_readable_server?(
|
|
65
|
+
def has_readable_server?(_cluster, _server_selector = nil)
|
|
66
|
+
true
|
|
67
|
+
end
|
|
68
68
|
|
|
69
69
|
# Determine if the topology would select a writable server for the
|
|
70
70
|
# provided candidates.
|
|
@@ -77,7 +77,9 @@ module Mongo
|
|
|
77
77
|
# @return [ true ] A Sharded cluster always has a writable server.
|
|
78
78
|
#
|
|
79
79
|
# @since 2.4.0
|
|
80
|
-
def has_writable_server?(
|
|
80
|
+
def has_writable_server?(_cluster)
|
|
81
|
+
true
|
|
82
|
+
end
|
|
81
83
|
|
|
82
84
|
# A sharded topology is not a replica set.
|
|
83
85
|
#
|
|
@@ -87,7 +89,9 @@ module Mongo
|
|
|
87
89
|
# @return [ false ] Always false.
|
|
88
90
|
#
|
|
89
91
|
# @since 2.0.0
|
|
90
|
-
def replica_set
|
|
92
|
+
def replica_set?
|
|
93
|
+
false
|
|
94
|
+
end
|
|
91
95
|
|
|
92
96
|
# Select appropriate servers for this topology.
|
|
93
97
|
#
|
|
@@ -111,7 +115,9 @@ module Mongo
|
|
|
111
115
|
# @return [ true ] Always true.
|
|
112
116
|
#
|
|
113
117
|
# @since 2.0.0
|
|
114
|
-
def sharded
|
|
118
|
+
def sharded?
|
|
119
|
+
true
|
|
120
|
+
end
|
|
115
121
|
|
|
116
122
|
# A sharded topology is not single.
|
|
117
123
|
#
|
|
@@ -121,7 +127,9 @@ module Mongo
|
|
|
121
127
|
# @return [ false ] Always false.
|
|
122
128
|
#
|
|
123
129
|
# @since 2.0.0
|
|
124
|
-
def single
|
|
130
|
+
def single?
|
|
131
|
+
false
|
|
132
|
+
end
|
|
125
133
|
|
|
126
134
|
# A sharded topology is not unknown.
|
|
127
135
|
#
|
|
@@ -131,7 +139,9 @@ module Mongo
|
|
|
131
139
|
# @return [ false ] Always false.
|
|
132
140
|
#
|
|
133
141
|
# @since 2.0.0
|
|
134
|
-
def unknown
|
|
142
|
+
def unknown?
|
|
143
|
+
false
|
|
144
|
+
end
|
|
135
145
|
end
|
|
136
146
|
end
|
|
137
147
|
end
|
|
@@ -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
|
#
|
|
@@ -18,16 +17,14 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Cluster
|
|
20
19
|
module Topology
|
|
21
|
-
|
|
22
20
|
# Defines behavior for when a cluster is in single topology.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class Single < Base
|
|
26
|
-
|
|
27
24
|
# The display name for the topology.
|
|
28
25
|
#
|
|
29
26
|
# @since 2.0.0
|
|
30
|
-
NAME = 'Single'
|
|
27
|
+
NAME = 'Single'
|
|
31
28
|
|
|
32
29
|
# Get the display name.
|
|
33
30
|
#
|
|
@@ -63,7 +60,9 @@ module Mongo
|
|
|
63
60
|
# @return [ true ] A standalone always has a readable server.
|
|
64
61
|
#
|
|
65
62
|
# @since 2.4.0
|
|
66
|
-
def has_readable_server?(
|
|
63
|
+
def has_readable_server?(_cluster, _server_selector = nil)
|
|
64
|
+
true
|
|
65
|
+
end
|
|
67
66
|
|
|
68
67
|
# Determine if the topology would select a writable server for the
|
|
69
68
|
# provided candidates.
|
|
@@ -76,7 +75,9 @@ module Mongo
|
|
|
76
75
|
# @return [ true ] A standalone always has a writable server.
|
|
77
76
|
#
|
|
78
77
|
# @since 2.4.0
|
|
79
|
-
def has_writable_server?(
|
|
78
|
+
def has_writable_server?(_cluster)
|
|
79
|
+
true
|
|
80
|
+
end
|
|
80
81
|
|
|
81
82
|
# A single topology is not a replica set.
|
|
82
83
|
#
|
|
@@ -86,7 +87,9 @@ module Mongo
|
|
|
86
87
|
# @return [ false ] Always false.
|
|
87
88
|
#
|
|
88
89
|
# @since 2.0.0
|
|
89
|
-
def replica_set
|
|
90
|
+
def replica_set?
|
|
91
|
+
false
|
|
92
|
+
end
|
|
90
93
|
|
|
91
94
|
# Select appropriate servers for this topology.
|
|
92
95
|
#
|
|
@@ -98,7 +101,7 @@ module Mongo
|
|
|
98
101
|
# @return [ Array<Server> ] The single servers.
|
|
99
102
|
#
|
|
100
103
|
# @since 2.0.0
|
|
101
|
-
def servers(servers,
|
|
104
|
+
def servers(servers, _name = nil)
|
|
102
105
|
servers.reject { |server| server.unknown? }
|
|
103
106
|
end
|
|
104
107
|
|
|
@@ -110,7 +113,9 @@ module Mongo
|
|
|
110
113
|
# @return [ false ] Always false.
|
|
111
114
|
#
|
|
112
115
|
# @since 2.0.0
|
|
113
|
-
def sharded
|
|
116
|
+
def sharded?
|
|
117
|
+
false
|
|
118
|
+
end
|
|
114
119
|
|
|
115
120
|
# A single topology is single.
|
|
116
121
|
#
|
|
@@ -120,9 +125,11 @@ module Mongo
|
|
|
120
125
|
# @return [ true ] Always true.
|
|
121
126
|
#
|
|
122
127
|
# @since 2.0.0
|
|
123
|
-
def single
|
|
128
|
+
def single?
|
|
129
|
+
true
|
|
130
|
+
end
|
|
124
131
|
|
|
125
|
-
#
|
|
132
|
+
# A single topology is not unknown.
|
|
126
133
|
#
|
|
127
134
|
# @example Is the topology unknown?
|
|
128
135
|
# Single.unknown?
|
|
@@ -130,16 +137,19 @@ module Mongo
|
|
|
130
137
|
# @return [ false ] Always false.
|
|
131
138
|
#
|
|
132
139
|
# @since 2.0.0
|
|
133
|
-
def unknown
|
|
140
|
+
def unknown?
|
|
141
|
+
false
|
|
142
|
+
end
|
|
134
143
|
|
|
135
144
|
private
|
|
136
145
|
|
|
137
146
|
def validate_options(options, cluster)
|
|
138
147
|
if cluster.servers_list.length > 1
|
|
139
|
-
raise ArgumentError,
|
|
148
|
+
raise ArgumentError,
|
|
149
|
+
"Cannot instantiate a single topology with more than one server in the cluster: #{cluster.servers_list.map(&:address).map(&:seed).join(', ')}"
|
|
140
150
|
end
|
|
141
151
|
|
|
142
|
-
super
|
|
152
|
+
super
|
|
143
153
|
end
|
|
144
154
|
end
|
|
145
155
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2015-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Cluster
|
|
20
19
|
module Topology
|
|
21
|
-
|
|
22
20
|
# Defines behavior for when a cluster is in an unknown state.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
@@ -28,7 +26,7 @@ module Mongo
|
|
|
28
26
|
# The display name for the topology.
|
|
29
27
|
#
|
|
30
28
|
# @since 2.0.0
|
|
31
|
-
NAME = 'Unknown'
|
|
29
|
+
NAME = 'Unknown'
|
|
32
30
|
|
|
33
31
|
# Get the display name.
|
|
34
32
|
#
|
|
@@ -64,7 +62,9 @@ module Mongo
|
|
|
64
62
|
# @return [ false ] An Unknown topology will never have a readable server.
|
|
65
63
|
#
|
|
66
64
|
# @since 2.4.0
|
|
67
|
-
def has_readable_server?(
|
|
65
|
+
def has_readable_server?(_cluster, _server_selector = nil)
|
|
66
|
+
false
|
|
67
|
+
end
|
|
68
68
|
|
|
69
69
|
# Determine if the topology would select a writable server for the
|
|
70
70
|
# provided candidates.
|
|
@@ -77,7 +77,9 @@ module Mongo
|
|
|
77
77
|
# @return [ false ] An Unknown topology will never have a writable server.
|
|
78
78
|
#
|
|
79
79
|
# @since 2.4.0
|
|
80
|
-
def has_writable_server?(
|
|
80
|
+
def has_writable_server?(_cluster)
|
|
81
|
+
false
|
|
82
|
+
end
|
|
81
83
|
|
|
82
84
|
# An unknown topology is not a replica set.
|
|
83
85
|
#
|
|
@@ -87,7 +89,9 @@ module Mongo
|
|
|
87
89
|
# @return [ false ] Always false.
|
|
88
90
|
#
|
|
89
91
|
# @since 2.0.0
|
|
90
|
-
def replica_set
|
|
92
|
+
def replica_set?
|
|
93
|
+
false
|
|
94
|
+
end
|
|
91
95
|
|
|
92
96
|
# Select appropriate servers for this topology.
|
|
93
97
|
#
|
|
@@ -100,7 +104,7 @@ module Mongo
|
|
|
100
104
|
# unknown.
|
|
101
105
|
#
|
|
102
106
|
# @since 2.0.0
|
|
103
|
-
def servers(
|
|
107
|
+
def servers(_servers)
|
|
104
108
|
[]
|
|
105
109
|
end
|
|
106
110
|
|
|
@@ -112,7 +116,9 @@ module Mongo
|
|
|
112
116
|
# @return [ false ] Always false.
|
|
113
117
|
#
|
|
114
118
|
# @since 2.0.0
|
|
115
|
-
def sharded
|
|
119
|
+
def sharded?
|
|
120
|
+
false
|
|
121
|
+
end
|
|
116
122
|
|
|
117
123
|
# An unknown topology is not single.
|
|
118
124
|
#
|
|
@@ -122,7 +128,9 @@ module Mongo
|
|
|
122
128
|
# @return [ true ] Always false.
|
|
123
129
|
#
|
|
124
130
|
# @since 2.0.0
|
|
125
|
-
def single
|
|
131
|
+
def single?
|
|
132
|
+
false
|
|
133
|
+
end
|
|
126
134
|
|
|
127
135
|
# An unknown topology is unknown.
|
|
128
136
|
#
|
|
@@ -132,7 +140,9 @@ module Mongo
|
|
|
132
140
|
# @return [ true ] Always true.
|
|
133
141
|
#
|
|
134
142
|
# @since 2.0.0
|
|
135
|
-
def unknown
|
|
143
|
+
def unknown?
|
|
144
|
+
true
|
|
145
|
+
end
|
|
136
146
|
end
|
|
137
147
|
end
|
|
138
148
|
end
|
|
@@ -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
|
#
|
|
@@ -90,30 +89,35 @@ module Mongo
|
|
|
90
89
|
def initial(cluster, monitoring, options)
|
|
91
90
|
connect = options[:connect]&.to_sym
|
|
92
91
|
cls = if options[:direct_connection]
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
92
|
+
if connect && connect != :direct
|
|
93
|
+
raise ArgumentError, "Conflicting topology options: direct_connection=true and connect=#{connect}"
|
|
94
|
+
end
|
|
95
|
+
if options[:load_balanced]
|
|
96
|
+
raise ArgumentError, 'Conflicting topology options: direct_connection=true and load_balanced=true'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
Single
|
|
100
|
+
elsif options[:direct_connection] == false && connect && connect == :direct
|
|
101
|
+
raise ArgumentError, "Conflicting topology options: direct_connection=false and connect=#{connect}"
|
|
102
|
+
elsif connect && connect != :load_balanced
|
|
103
|
+
if options[:load_balanced]
|
|
104
|
+
raise ArgumentError,
|
|
105
|
+
"Conflicting topology options: connect=#{options[:connect].inspect} and load_balanced=true"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
OPTIONS.fetch(options[:connect].to_sym)
|
|
109
|
+
elsif options.key?(:replica_set) || options.key?(:replica_set_name)
|
|
110
|
+
if options[:load_balanced]
|
|
111
|
+
raise ArgumentError,
|
|
112
|
+
'Conflicting topology options: replica_set/replica_set_name and load_balanced=true'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
ReplicaSetNoPrimary
|
|
116
|
+
elsif options[:load_balanced] || connect == :load_balanced
|
|
117
|
+
LoadBalanced
|
|
118
|
+
else
|
|
119
|
+
Unknown
|
|
120
|
+
end
|
|
117
121
|
# Options here are client/cluster/server options.
|
|
118
122
|
# In particular the replica set name key is different for
|
|
119
123
|
# topology.
|