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
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.
|
|
@@ -218,7 +210,8 @@ module Mongo
|
|
|
218
210
|
# @api private
|
|
219
211
|
def_delegators :cluster,
|
|
220
212
|
:monitor_app_metadata,
|
|
221
|
-
:push_monitor_app_metadata
|
|
213
|
+
:push_monitor_app_metadata,
|
|
214
|
+
:tracer
|
|
222
215
|
|
|
223
216
|
def_delegators :features,
|
|
224
217
|
:check_driver_support!
|
|
@@ -245,6 +238,7 @@ module Mongo
|
|
|
245
238
|
# @since 2.0.0
|
|
246
239
|
def ==(other)
|
|
247
240
|
return false unless other.is_a?(Server)
|
|
241
|
+
|
|
248
242
|
address == other.address
|
|
249
243
|
end
|
|
250
244
|
|
|
@@ -274,9 +268,7 @@ module Mongo
|
|
|
274
268
|
#
|
|
275
269
|
# @since 2.0.0
|
|
276
270
|
def disconnect!
|
|
277
|
-
if monitor
|
|
278
|
-
monitor.stop!
|
|
279
|
-
end
|
|
271
|
+
monitor.stop! if monitor
|
|
280
272
|
|
|
281
273
|
@connected = false
|
|
282
274
|
|
|
@@ -293,9 +285,7 @@ module Mongo
|
|
|
293
285
|
end
|
|
294
286
|
|
|
295
287
|
def close
|
|
296
|
-
if monitor
|
|
297
|
-
monitor.stop!
|
|
298
|
-
end
|
|
288
|
+
monitor.stop! if monitor
|
|
299
289
|
|
|
300
290
|
@connected = false
|
|
301
291
|
|
|
@@ -330,9 +320,9 @@ module Mongo
|
|
|
330
320
|
# @api private
|
|
331
321
|
def start_monitoring
|
|
332
322
|
publish_opening_event
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
323
|
+
return unless options[:monitoring_io] != false
|
|
324
|
+
|
|
325
|
+
monitor.run!
|
|
336
326
|
end
|
|
337
327
|
|
|
338
328
|
# Publishes the server opening event.
|
|
@@ -361,24 +351,23 @@ module Mongo
|
|
|
361
351
|
#
|
|
362
352
|
# @api private
|
|
363
353
|
def status
|
|
364
|
-
|
|
365
|
-
when load_balancer?
|
|
354
|
+
if load_balancer?
|
|
366
355
|
'LB'
|
|
367
|
-
|
|
356
|
+
elsif primary?
|
|
368
357
|
'PRIMARY'
|
|
369
|
-
|
|
358
|
+
elsif secondary?
|
|
370
359
|
'SECONDARY'
|
|
371
|
-
|
|
360
|
+
elsif standalone?
|
|
372
361
|
'STANDALONE'
|
|
373
|
-
|
|
362
|
+
elsif arbiter?
|
|
374
363
|
'ARBITER'
|
|
375
|
-
|
|
364
|
+
elsif ghost?
|
|
376
365
|
'GHOST'
|
|
377
|
-
|
|
366
|
+
elsif other?
|
|
378
367
|
'OTHER'
|
|
379
|
-
|
|
368
|
+
elsif mongos?
|
|
380
369
|
'MONGOS'
|
|
381
|
-
|
|
370
|
+
elsif unknown?
|
|
382
371
|
'UNKNOWN'
|
|
383
372
|
else
|
|
384
373
|
# Since the summary method is often used for debugging, do not raise
|
|
@@ -393,23 +382,17 @@ module Mongo
|
|
|
393
382
|
# @since 2.7.0
|
|
394
383
|
def summary
|
|
395
384
|
status = self.status || ''
|
|
396
|
-
if replica_set_name
|
|
397
|
-
status += " replica_set=#{replica_set_name}"
|
|
398
|
-
end
|
|
385
|
+
status += " replica_set=#{replica_set_name}" if replica_set_name
|
|
399
386
|
|
|
400
|
-
unless monitor&.running?
|
|
401
|
-
status += " NO-MONITORING"
|
|
402
|
-
end
|
|
387
|
+
status += ' NO-MONITORING' unless monitor&.running?
|
|
403
388
|
|
|
404
|
-
if @pool
|
|
405
|
-
status += " pool=#{@pool.summary}"
|
|
406
|
-
end
|
|
389
|
+
status += " pool=#{@pool.summary}" if @pool
|
|
407
390
|
|
|
408
391
|
address_bit = if address
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
392
|
+
"#{address.host}:#{address.port}"
|
|
393
|
+
else
|
|
394
|
+
'nil'
|
|
395
|
+
end
|
|
413
396
|
|
|
414
397
|
"#<Server address=#{address_bit} #{status}>"
|
|
415
398
|
end
|
|
@@ -423,9 +406,7 @@ module Mongo
|
|
|
423
406
|
#
|
|
424
407
|
# @since 2.0.0
|
|
425
408
|
def pool
|
|
426
|
-
if unknown?
|
|
427
|
-
raise Error::ServerNotUsable, address
|
|
428
|
-
end
|
|
409
|
+
raise Error::ServerNotUsable, address if unknown?
|
|
429
410
|
|
|
430
411
|
@pool_lock.synchronize do
|
|
431
412
|
opts = connected? ? options : options.merge(populator_io: false)
|
|
@@ -474,9 +455,7 @@ module Mongo
|
|
|
474
455
|
#
|
|
475
456
|
# @since 2.1.0
|
|
476
457
|
def reconnect!
|
|
477
|
-
if options[:monitoring_io] != false
|
|
478
|
-
monitor.restart!
|
|
479
|
-
end
|
|
458
|
+
monitor.restart! if options[:monitoring_io] != false
|
|
480
459
|
@connected = true
|
|
481
460
|
end
|
|
482
461
|
|
|
@@ -506,11 +485,13 @@ module Mongo
|
|
|
506
485
|
def handle_handshake_failure!
|
|
507
486
|
yield
|
|
508
487
|
rescue Mongo::Error::SocketError, Mongo::Error::SocketTimeoutError => e
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
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
|
|
514
495
|
raise
|
|
515
496
|
end
|
|
516
497
|
|
|
@@ -537,7 +518,7 @@ module Mongo
|
|
|
537
518
|
unknown!(
|
|
538
519
|
generation: e.generation,
|
|
539
520
|
service_id: e.service_id,
|
|
540
|
-
stop_push_monitor: true
|
|
521
|
+
stop_push_monitor: true
|
|
541
522
|
)
|
|
542
523
|
raise
|
|
543
524
|
end
|
|
@@ -546,7 +527,7 @@ module Mongo
|
|
|
546
527
|
#
|
|
547
528
|
# @api private
|
|
548
529
|
def retry_reads?
|
|
549
|
-
!!
|
|
530
|
+
!!logical_session_timeout
|
|
550
531
|
end
|
|
551
532
|
|
|
552
533
|
# Will writes sent to this server be retried.
|
|
@@ -556,18 +537,17 @@ module Mongo
|
|
|
556
537
|
#
|
|
557
538
|
# @return [ true, false ] If writes will be retried.
|
|
558
539
|
#
|
|
559
|
-
# @note Retryable writes are only available
|
|
560
|
-
# sharded clusters or replica sets.
|
|
540
|
+
# @note Retryable writes are only available with sharded clusters or replica sets.
|
|
561
541
|
#
|
|
562
542
|
# @note Some of the conditions in this method automatically return false for
|
|
563
|
-
#
|
|
543
|
+
# load balanced topologies. The conditions in this method should
|
|
564
544
|
# always be true, since load-balanced topologies are only available on
|
|
565
545
|
# MongoDB 5.0+, and not for standalone topologies. Therefore, we can
|
|
566
546
|
# assume that retry writes are enabled.
|
|
567
547
|
#
|
|
568
548
|
# @since 2.5.0
|
|
569
549
|
def retry_writes?
|
|
570
|
-
!!(
|
|
550
|
+
!!((logical_session_timeout && !standalone?) || load_balancer?)
|
|
571
551
|
end
|
|
572
552
|
|
|
573
553
|
# Marks server unknown and publishes the associated SDAM event
|
|
@@ -618,42 +598,30 @@ module Mongo
|
|
|
618
598
|
|
|
619
599
|
# NOTE: You cannot use safe navigation here because if pool is nil you end
|
|
620
600
|
# up trying to evaluate Integer < nil which is invalid.
|
|
621
|
-
if options[:generation] && pool && options[:generation] < pool.generation
|
|
622
|
-
return
|
|
623
|
-
end
|
|
601
|
+
return if options[:generation] && pool && options[:generation] < pool.generation
|
|
624
602
|
|
|
625
603
|
if options[:topology_version] && description.topology_version &&
|
|
626
|
-
|
|
627
|
-
then
|
|
604
|
+
!options[:topology_version].gt?(description.topology_version)
|
|
628
605
|
return
|
|
629
606
|
end
|
|
630
607
|
|
|
631
|
-
if options[:stop_push_monitor]
|
|
632
|
-
monitor&.stop_push_monitor!
|
|
633
|
-
end
|
|
608
|
+
monitor&.stop_push_monitor! if options[:stop_push_monitor]
|
|
634
609
|
|
|
635
610
|
# SDAM flow will update description on the server without in-place
|
|
636
611
|
# mutations and invoke SDAM transitions as needed.
|
|
637
612
|
config = {}
|
|
638
|
-
if options[:service_id]
|
|
639
|
-
|
|
640
|
-
end
|
|
641
|
-
if options[:topology_version]
|
|
642
|
-
config['topologyVersion'] = options[:topology_version]
|
|
643
|
-
end
|
|
613
|
+
config['serviceId'] = options[:service_id] if options[:service_id]
|
|
614
|
+
config['topologyVersion'] = options[:topology_version] if options[:topology_version]
|
|
644
615
|
new_description = Description.new(address, config,
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
)
|
|
616
|
+
load_balancer: load_balancer?,
|
|
617
|
+
force_load_balancer: options[:connect] == :load_balanced)
|
|
648
618
|
cluster.run_sdam_flow(description, new_description, options)
|
|
649
619
|
end
|
|
650
620
|
|
|
651
621
|
# @api private
|
|
652
622
|
def update_description(description)
|
|
653
623
|
pool = pool_internal
|
|
654
|
-
if pool && !description.unknown?
|
|
655
|
-
pool.ready
|
|
656
|
-
end
|
|
624
|
+
pool.ready if pool && !description.unknown?
|
|
657
625
|
@description = description
|
|
658
626
|
end
|
|
659
627
|
|