mongo 2.23.0 → 2.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/mongo_console +0 -1
- data/lib/mongo/active_support.rb +1 -2
- data/lib/mongo/address/ipv4.rb +3 -6
- data/lib/mongo/address/ipv6.rb +6 -10
- data/lib/mongo/address/unix.rb +1 -4
- data/lib/mongo/address/validator.rb +16 -28
- data/lib/mongo/address.rb +30 -40
- data/lib/mongo/auth/aws/conversation.rb +6 -10
- data/lib/mongo/auth/aws/credentials.rb +0 -1
- data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
- data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
- data/lib/mongo/auth/aws/request.rb +20 -35
- data/lib/mongo/auth/aws.rb +1 -2
- data/lib/mongo/auth/base.rb +20 -29
- data/lib/mongo/auth/conversation_base.rb +14 -18
- data/lib/mongo/auth/cr/conversation.rb +0 -3
- data/lib/mongo/auth/cr.rb +1 -4
- data/lib/mongo/auth/credential_cache.rb +0 -2
- data/lib/mongo/auth/gssapi/conversation.rb +3 -8
- data/lib/mongo/auth/gssapi.rb +1 -4
- data/lib/mongo/auth/ldap/conversation.rb +0 -3
- data/lib/mongo/auth/ldap.rb +1 -4
- data/lib/mongo/auth/roles.rb +16 -19
- data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
- data/lib/mongo/auth/scram/conversation.rb +2 -5
- data/lib/mongo/auth/scram.rb +5 -10
- data/lib/mongo/auth/scram256/conversation.rb +2 -5
- data/lib/mongo/auth/scram256.rb +1 -3
- data/lib/mongo/auth/scram_conversation_base.rb +18 -24
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
- data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
- data/lib/mongo/auth/stringprep.rb +9 -12
- data/lib/mongo/auth/user/view.rb +3 -5
- data/lib/mongo/auth/user.rb +14 -24
- data/lib/mongo/auth/x509/conversation.rb +0 -3
- data/lib/mongo/auth/x509.rb +7 -9
- data/lib/mongo/auth.rb +18 -30
- data/lib/mongo/background_thread.rb +9 -17
- data/lib/mongo/bson.rb +0 -2
- data/lib/mongo/bulk_write/combineable.rb +0 -3
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/result.rb +11 -16
- data/lib/mongo/bulk_write/result_combiner.rb +9 -12
- data/lib/mongo/bulk_write/transformable.rb +16 -19
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/validatable.rb +11 -18
- data/lib/mongo/bulk_write.rb +76 -91
- data/lib/mongo/caching_cursor.rb +2 -7
- data/lib/mongo/client.rb +230 -275
- data/lib/mongo/client_encryption.rb +4 -5
- data/lib/mongo/cluster/periodic_executor.rb +2 -5
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
- data/lib/mongo/cluster/sdam_flow.rb +136 -159
- data/lib/mongo/cluster/topology/base.rb +15 -18
- data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
- data/lib/mongo/cluster/topology/sharded.rb +19 -9
- data/lib/mongo/cluster/topology/single.rb +24 -14
- data/lib/mongo/cluster/topology/unknown.rb +20 -10
- data/lib/mongo/cluster/topology.rb +29 -25
- data/lib/mongo/cluster.rb +148 -183
- data/lib/mongo/cluster_time.rb +14 -31
- data/lib/mongo/collection/helpers.rb +5 -8
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
- data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
- data/lib/mongo/collection/view/builder.rb +0 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
- data/lib/mongo/collection/view/change_stream.rb +59 -58
- data/lib/mongo/collection/view/explainable.rb +11 -20
- data/lib/mongo/collection/view/immutable.rb +1 -3
- data/lib/mongo/collection/view/iterable.rb +35 -28
- data/lib/mongo/collection/view/map_reduce.rb +20 -25
- data/lib/mongo/collection/view/readable.rb +50 -57
- data/lib/mongo/collection/view/writable.rb +56 -72
- data/lib/mongo/collection/view.rb +9 -8
- data/lib/mongo/collection.rb +63 -76
- data/lib/mongo/condition_variable.rb +4 -4
- data/lib/mongo/config/options.rb +0 -3
- data/lib/mongo/config/validators/option.rb +3 -5
- data/lib/mongo/config.rb +2 -4
- data/lib/mongo/crypt/auto_decryption_context.rb +0 -3
- data/lib/mongo/crypt/auto_encrypter.rb +34 -43
- data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
- data/lib/mongo/crypt/binary.rb +5 -9
- data/lib/mongo/crypt/binding.rb +149 -155
- data/lib/mongo/crypt/context.rb +10 -17
- data/lib/mongo/crypt/data_key_context.rb +2 -7
- data/lib/mongo/crypt/encryption_io.rb +29 -39
- data/lib/mongo/crypt/explicit_decryption_context.rb +0 -3
- data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
- data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
- data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
- data/lib/mongo/crypt/handle.rb +42 -48
- data/lib/mongo/crypt/hooks.rb +12 -15
- data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
- data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
- data/lib/mongo/crypt/kms/aws.rb +0 -2
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
- data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
- data/lib/mongo/crypt/kms/azure.rb +0 -1
- data/lib/mongo/crypt/kms/credentials.rb +13 -27
- data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
- data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
- data/lib/mongo/crypt/kms/gcp.rb +0 -2
- data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
- data/lib/mongo/crypt/kms/kmip.rb +0 -1
- data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
- data/lib/mongo/crypt/kms/local.rb +0 -1
- data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
- data/lib/mongo/crypt/kms.rb +14 -16
- data/lib/mongo/crypt/kms_context.rb +0 -2
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
- data/lib/mongo/crypt/status.rb +12 -14
- data/lib/mongo/crypt.rb +0 -1
- data/lib/mongo/csot_timeout_holder.rb +3 -2
- data/lib/mongo/cursor/kill_spec.rb +7 -10
- data/lib/mongo/cursor.rb +74 -64
- data/lib/mongo/cursor_host.rb +8 -10
- data/lib/mongo/database/view.rb +16 -37
- data/lib/mongo/database.rb +52 -56
- data/lib/mongo/dbref.rb +0 -1
- data/lib/mongo/distinguishing_semaphore.rb +0 -1
- data/lib/mongo/error/auth_error.rb +0 -2
- data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
- data/lib/mongo/error/bulk_write_error.rb +7 -10
- data/lib/mongo/error/change_stream_resumable.rb +0 -2
- data/lib/mongo/error/client_closed.rb +0 -2
- data/lib/mongo/error/closed_stream.rb +1 -4
- data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
- data/lib/mongo/error/connection_perished.rb +0 -2
- data/lib/mongo/error/connection_unavailable.rb +0 -2
- data/lib/mongo/error/credential_check_error.rb +0 -2
- data/lib/mongo/error/crypt_error.rb +0 -2
- data/lib/mongo/error/extra_file_chunk.rb +1 -4
- data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
- data/lib/mongo/error/file_not_found.rb +0 -3
- data/lib/mongo/error/handshake_error.rb +0 -2
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
- data/lib/mongo/error/internal_driver_error.rb +0 -2
- data/lib/mongo/error/invalid_address.rb +0 -2
- data/lib/mongo/error/invalid_application_name.rb +0 -3
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
- data/lib/mongo/error/invalid_collection_name.rb +1 -4
- data/lib/mongo/error/invalid_config_option.rb +0 -3
- data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
- data/lib/mongo/error/invalid_database_name.rb +1 -4
- data/lib/mongo/error/invalid_document.rb +1 -4
- data/lib/mongo/error/invalid_file.rb +0 -3
- data/lib/mongo/error/invalid_file_revision.rb +0 -3
- data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
- data/lib/mongo/error/invalid_nonce.rb +0 -3
- data/lib/mongo/error/invalid_read_concern.rb +2 -4
- data/lib/mongo/error/invalid_read_option.rb +0 -3
- data/lib/mongo/error/invalid_replacement_document.rb +2 -5
- data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
- data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
- data/lib/mongo/error/invalid_server_preference.rb +7 -16
- data/lib/mongo/error/invalid_session.rb +1 -4
- data/lib/mongo/error/invalid_signature.rb +0 -3
- data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
- data/lib/mongo/error/invalid_txt_record.rb +0 -2
- data/lib/mongo/error/invalid_update_document.rb +2 -5
- data/lib/mongo/error/invalid_uri.rb +1 -4
- data/lib/mongo/error/invalid_write_concern.rb +2 -5
- data/lib/mongo/error/kms_error.rb +0 -2
- data/lib/mongo/error/labelable.rb +0 -3
- data/lib/mongo/error/lint_error.rb +0 -2
- data/lib/mongo/error/max_bson_size.rb +8 -11
- data/lib/mongo/error/max_message_size.rb +2 -5
- data/lib/mongo/error/mismatched_domain.rb +0 -2
- data/lib/mongo/error/missing_connection.rb +0 -2
- data/lib/mongo/error/missing_file_chunk.rb +0 -3
- data/lib/mongo/error/missing_password.rb +0 -2
- data/lib/mongo/error/missing_resume_token.rb +1 -4
- data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
- data/lib/mongo/error/missing_service_id.rb +0 -2
- data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
- data/lib/mongo/error/multi_index_drop.rb +0 -3
- data/lib/mongo/error/need_primary_server.rb +0 -2
- data/lib/mongo/error/no_server_available.rb +3 -8
- data/lib/mongo/error/no_service_connection_available.rb +1 -3
- data/lib/mongo/error/no_srv_records.rb +0 -2
- data/lib/mongo/error/notable.rb +8 -16
- data/lib/mongo/error/operation_failure.rb +22 -35
- data/lib/mongo/error/parser.rb +33 -75
- data/lib/mongo/error/pool_cleared_error.rb +1 -3
- data/lib/mongo/error/pool_closed_error.rb +0 -3
- data/lib/mongo/error/pool_error.rb +0 -3
- data/lib/mongo/error/pool_paused_error.rb +0 -2
- data/lib/mongo/error/raise_original_error.rb +1 -3
- data/lib/mongo/error/read_write_retryable.rb +14 -17
- data/lib/mongo/error/sdam_error_detection.rb +3 -5
- data/lib/mongo/error/server_api_conflict.rb +0 -2
- data/lib/mongo/error/server_certificate_revoked.rb +0 -2
- data/lib/mongo/error/server_not_usable.rb +0 -2
- data/lib/mongo/error/session_ended.rb +1 -3
- data/lib/mongo/error/session_not_materialized.rb +1 -3
- data/lib/mongo/error/sessions_not_supported.rb +1 -4
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
- data/lib/mongo/error/socket_error.rb +0 -2
- data/lib/mongo/error/socket_timeout_error.rb +0 -2
- data/lib/mongo/error/transactions_not_supported.rb +3 -6
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
- data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
- data/lib/mongo/error/unexpected_response.rb +1 -4
- data/lib/mongo/error/unknown_payload_type.rb +0 -3
- data/lib/mongo/error/unmet_dependency.rb +0 -2
- data/lib/mongo/error/unsupported_array_filters.rb +3 -24
- data/lib/mongo/error/unsupported_collation.rb +3 -24
- data/lib/mongo/error/unsupported_features.rb +0 -2
- data/lib/mongo/error/unsupported_message_type.rb +0 -2
- data/lib/mongo/error/unsupported_option.rb +19 -21
- data/lib/mongo/error/write_retryable.rb +0 -2
- data/lib/mongo/error.rb +10 -24
- data/lib/mongo/event/base.rb +0 -2
- data/lib/mongo/event/listeners.rb +0 -3
- data/lib/mongo/event/publisher.rb +0 -3
- data/lib/mongo/event/subscriber.rb +0 -4
- data/lib/mongo/event.rb +4 -6
- data/lib/mongo/grid/file/chunk.rb +7 -10
- data/lib/mongo/grid/file/info.rb +20 -24
- data/lib/mongo/grid/file.rb +7 -8
- data/lib/mongo/grid/fs_bucket.rb +40 -48
- data/lib/mongo/grid/stream/read.rb +25 -35
- data/lib/mongo/grid/stream/write.rb +17 -22
- data/lib/mongo/grid/stream.rb +2 -4
- data/lib/mongo/grid.rb +0 -1
- data/lib/mongo/id.rb +0 -1
- data/lib/mongo/index/view.rb +49 -48
- data/lib/mongo/index.rb +7 -10
- data/lib/mongo/lint.rb +31 -37
- data/lib/mongo/loggable.rb +5 -8
- data/lib/mongo/logger.rb +1 -7
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
- data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap.rb +0 -1
- data/lib/mongo/monitoring/event/command_failed.rb +5 -9
- data/lib/mongo/monitoring/event/command_started.rb +8 -12
- data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
- data/lib/mongo/monitoring/event/secure.rb +15 -20
- data/lib/mongo/monitoring/event/server_closed.rb +1 -4
- data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
- data/lib/mongo/monitoring/event/server_opening.rb +1 -4
- data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
- data/lib/mongo/monitoring/event.rb +0 -1
- data/lib/mongo/monitoring/publishable.rb +20 -30
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
- data/lib/mongo/monitoring.rb +38 -39
- data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
- data/lib/mongo/operation/aggregate/result.rb +3 -6
- data/lib/mongo/operation/aggregate.rb +0 -2
- data/lib/mongo/operation/collections_info/result.rb +0 -3
- data/lib/mongo/operation/collections_info.rb +0 -2
- data/lib/mongo/operation/command/op_msg.rb +1 -4
- data/lib/mongo/operation/command.rb +0 -2
- data/lib/mongo/operation/context.rb +13 -16
- data/lib/mongo/operation/count/op_msg.rb +2 -4
- data/lib/mongo/operation/count.rb +0 -2
- data/lib/mongo/operation/create/op_msg.rb +2 -5
- data/lib/mongo/operation/create.rb +0 -2
- data/lib/mongo/operation/create_index/op_msg.rb +3 -7
- data/lib/mongo/operation/create_index.rb +0 -2
- data/lib/mongo/operation/create_user/op_msg.rb +2 -4
- data/lib/mongo/operation/create_user.rb +0 -2
- data/lib/mongo/operation/delete/bulk_result.rb +2 -3
- data/lib/mongo/operation/delete/op_msg.rb +3 -10
- data/lib/mongo/operation/delete/result.rb +0 -3
- data/lib/mongo/operation/delete.rb +1 -5
- data/lib/mongo/operation/distinct/op_msg.rb +2 -5
- data/lib/mongo/operation/distinct.rb +0 -2
- data/lib/mongo/operation/drop/op_msg.rb +0 -2
- data/lib/mongo/operation/drop.rb +0 -2
- data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
- data/lib/mongo/operation/drop_database.rb +0 -2
- data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
- data/lib/mongo/operation/drop_index.rb +0 -2
- data/lib/mongo/operation/explain/op_msg.rb +0 -2
- data/lib/mongo/operation/explain/result.rb +0 -3
- data/lib/mongo/operation/explain.rb +0 -2
- data/lib/mongo/operation/find/builder/command.rb +4 -12
- data/lib/mongo/operation/find/builder/flags.rb +9 -15
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
- data/lib/mongo/operation/find/builder.rb +0 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -12
- data/lib/mongo/operation/find/result.rb +0 -3
- data/lib/mongo/operation/find.rb +0 -2
- data/lib/mongo/operation/get_more/command_builder.rb +1 -6
- data/lib/mongo/operation/get_more/op_msg.rb +10 -4
- data/lib/mongo/operation/get_more/result.rb +0 -3
- data/lib/mongo/operation/get_more.rb +0 -2
- data/lib/mongo/operation/indexes/op_msg.rb +0 -2
- data/lib/mongo/operation/indexes/result.rb +1 -5
- data/lib/mongo/operation/indexes.rb +0 -2
- data/lib/mongo/operation/insert/bulk_result.rb +2 -6
- data/lib/mongo/operation/insert/op_msg.rb +2 -4
- data/lib/mongo/operation/insert/result.rb +0 -3
- data/lib/mongo/operation/insert.rb +2 -5
- data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
- data/lib/mongo/operation/kill_cursors.rb +0 -2
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
- data/lib/mongo/operation/list_collections/result.rb +1 -4
- data/lib/mongo/operation/list_collections.rb +0 -2
- data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
- data/lib/mongo/operation/map_reduce/result.rb +3 -6
- data/lib/mongo/operation/map_reduce.rb +0 -2
- data/lib/mongo/operation/op_msg_base.rb +0 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
- data/lib/mongo/operation/parallel_scan/result.rb +2 -5
- data/lib/mongo/operation/parallel_scan.rb +0 -2
- data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
- data/lib/mongo/operation/remove_user.rb +0 -2
- data/lib/mongo/operation/result.rb +38 -48
- data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
- data/lib/mongo/operation/shared/executable.rb +19 -28
- data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
- data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
- data/lib/mongo/operation/shared/idable.rb +3 -6
- data/lib/mongo/operation/shared/limited.rb +0 -3
- data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
- data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
- data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
- data/lib/mongo/operation/shared/response_handling.rb +13 -26
- data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
- data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
- data/lib/mongo/operation/shared/specifiable.rb +32 -58
- data/lib/mongo/operation/shared/write.rb +12 -17
- data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
- data/lib/mongo/operation/update/bulk_result.rb +13 -17
- data/lib/mongo/operation/update/op_msg.rb +2 -5
- data/lib/mongo/operation/update/result.rb +5 -5
- data/lib/mongo/operation/update.rb +1 -5
- data/lib/mongo/operation/update_user/op_msg.rb +2 -4
- data/lib/mongo/operation/update_user.rb +0 -2
- data/lib/mongo/operation/users_info/op_msg.rb +2 -4
- data/lib/mongo/operation/users_info/result.rb +1 -4
- data/lib/mongo/operation/users_info.rb +0 -2
- data/lib/mongo/operation/write_command/op_msg.rb +2 -10
- data/lib/mongo/operation/write_command.rb +0 -2
- data/lib/mongo/operation.rb +9 -14
- data/lib/mongo/options/mapper.rb +8 -15
- data/lib/mongo/options/redacted.rb +7 -9
- data/lib/mongo/options.rb +0 -1
- data/lib/mongo/protocol/bit_vector.rb +3 -5
- data/lib/mongo/protocol/caching_hash.rb +2 -7
- data/lib/mongo/protocol/compressed.rb +5 -10
- data/lib/mongo/protocol/get_more.rb +2 -8
- data/lib/mongo/protocol/kill_cursors.rb +2 -8
- data/lib/mongo/protocol/message.rb +103 -105
- data/lib/mongo/protocol/msg.rb +48 -63
- data/lib/mongo/protocol/query.rb +32 -41
- data/lib/mongo/protocol/registry.rb +2 -5
- data/lib/mongo/protocol/reply.rb +10 -16
- data/lib/mongo/protocol/serializers.rb +41 -59
- data/lib/mongo/protocol.rb +0 -1
- data/lib/mongo/query_cache.rb +7 -15
- data/lib/mongo/retryable/backpressure.rb +31 -0
- data/lib/mongo/retryable/base_worker.rb +39 -13
- data/lib/mongo/retryable/read_worker.rb +77 -21
- data/lib/mongo/retryable/retry_policy.rb +59 -0
- data/lib/mongo/retryable/write_worker.rb +155 -56
- data/lib/mongo/retryable.rb +70 -9
- data/lib/mongo/search_index/view.rb +1 -1
- data/lib/mongo/semaphore.rb +0 -1
- data/lib/mongo/server/app_metadata/environment.rb +3 -3
- data/lib/mongo/server/app_metadata.rb +4 -5
- data/lib/mongo/server/connection.rb +61 -61
- data/lib/mongo/server/connection_base.rb +43 -53
- data/lib/mongo/server/connection_common.rb +41 -64
- data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
- data/lib/mongo/server/connection_pool/populator.rb +1 -4
- data/lib/mongo/server/connection_pool.rb +195 -167
- data/lib/mongo/server/description/features.rb +23 -60
- data/lib/mongo/server/description/load_balancer.rb +0 -2
- data/lib/mongo/server/description.rb +117 -138
- data/lib/mongo/server/monitor/app_metadata.rb +3 -4
- data/lib/mongo/server/monitor/connection.rb +28 -35
- data/lib/mongo/server/monitor.rb +65 -60
- data/lib/mongo/server/pending_connection.rb +70 -71
- data/lib/mongo/server/push_monitor/connection.rb +0 -3
- data/lib/mongo/server/push_monitor.rb +21 -29
- data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
- data/lib/mongo/server.rb +60 -93
- data/lib/mongo/server_selector/base.rb +133 -157
- data/lib/mongo/server_selector/nearest.rb +2 -5
- data/lib/mongo/server_selector/primary.rb +1 -5
- data/lib/mongo/server_selector/primary_preferred.rb +2 -6
- data/lib/mongo/server_selector/secondary.rb +2 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
- data/lib/mongo/server_selector.rb +3 -4
- data/lib/mongo/session/server_session.rb +6 -7
- data/lib/mongo/session/session_pool.rb +20 -34
- data/lib/mongo/session.rb +287 -188
- data/lib/mongo/socket/ocsp_cache.rb +8 -13
- data/lib/mongo/socket/ocsp_verifier.rb +69 -70
- data/lib/mongo/socket/ssl.rb +44 -43
- data/lib/mongo/socket/tcp.rb +5 -8
- data/lib/mongo/socket/unix.rb +0 -4
- data/lib/mongo/socket.rb +80 -102
- data/lib/mongo/srv/monitor.rb +6 -11
- data/lib/mongo/srv/resolver.rb +15 -24
- data/lib/mongo/srv/result.rb +18 -24
- data/lib/mongo/srv.rb +0 -1
- data/lib/mongo/timeout.rb +4 -11
- data/lib/mongo/topology_version.rb +8 -13
- data/lib/mongo/tracing/open_telemetry/command_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/tracer.rb +1 -1
- data/lib/mongo/uri/options_mapper.rb +135 -126
- data/lib/mongo/uri/srv_protocol.rb +25 -38
- data/lib/mongo/uri.rb +95 -139
- data/lib/mongo/utils.rb +5 -12
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +0 -2
- data/lib/mongo/write_concern/base.rb +6 -6
- data/lib/mongo/write_concern/unacknowledged.rb +0 -2
- data/lib/mongo/write_concern.rb +14 -15
- data/lib/mongo.rb +1 -3
- data/mongo.gemspec +17 -17
- metadata +5 -5
- data/lib/mongo/error/server_api_not_supported.rb +0 -27
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
- data/lib/mongo/operation/shared/validatable.rb +0 -87
data/lib/mongo/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
|
|