mongo 2.23.0 → 2.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/mongo_console +0 -1
- data/lib/mongo/active_support.rb +1 -2
- data/lib/mongo/address/ipv4.rb +3 -6
- data/lib/mongo/address/ipv6.rb +6 -10
- data/lib/mongo/address/unix.rb +1 -4
- data/lib/mongo/address/validator.rb +16 -28
- data/lib/mongo/address.rb +30 -40
- data/lib/mongo/auth/aws/conversation.rb +6 -10
- data/lib/mongo/auth/aws/credentials.rb +0 -1
- data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
- data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
- data/lib/mongo/auth/aws/request.rb +20 -35
- data/lib/mongo/auth/aws.rb +1 -2
- data/lib/mongo/auth/base.rb +20 -29
- data/lib/mongo/auth/conversation_base.rb +14 -18
- data/lib/mongo/auth/cr/conversation.rb +0 -3
- data/lib/mongo/auth/cr.rb +1 -4
- data/lib/mongo/auth/credential_cache.rb +0 -2
- data/lib/mongo/auth/gssapi/conversation.rb +3 -8
- data/lib/mongo/auth/gssapi.rb +1 -4
- data/lib/mongo/auth/ldap/conversation.rb +0 -3
- data/lib/mongo/auth/ldap.rb +1 -4
- data/lib/mongo/auth/roles.rb +16 -19
- data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
- data/lib/mongo/auth/scram/conversation.rb +2 -5
- data/lib/mongo/auth/scram.rb +5 -10
- data/lib/mongo/auth/scram256/conversation.rb +2 -5
- data/lib/mongo/auth/scram256.rb +1 -3
- data/lib/mongo/auth/scram_conversation_base.rb +18 -24
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
- data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
- data/lib/mongo/auth/stringprep.rb +9 -12
- data/lib/mongo/auth/user/view.rb +3 -5
- data/lib/mongo/auth/user.rb +14 -24
- data/lib/mongo/auth/x509/conversation.rb +0 -3
- data/lib/mongo/auth/x509.rb +7 -9
- data/lib/mongo/auth.rb +18 -30
- data/lib/mongo/background_thread.rb +9 -17
- data/lib/mongo/bson.rb +0 -2
- data/lib/mongo/bulk_write/combineable.rb +0 -3
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/result.rb +20 -17
- data/lib/mongo/bulk_write/result_combiner.rb +17 -13
- data/lib/mongo/bulk_write/transformable.rb +16 -19
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/validatable.rb +11 -18
- data/lib/mongo/bulk_write.rb +76 -91
- data/lib/mongo/caching_cursor.rb +2 -7
- data/lib/mongo/client.rb +230 -275
- data/lib/mongo/client_encryption.rb +4 -5
- data/lib/mongo/cluster/periodic_executor.rb +2 -5
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
- data/lib/mongo/cluster/sdam_flow.rb +136 -159
- data/lib/mongo/cluster/topology/base.rb +15 -18
- data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
- data/lib/mongo/cluster/topology/sharded.rb +19 -9
- data/lib/mongo/cluster/topology/single.rb +24 -14
- data/lib/mongo/cluster/topology/unknown.rb +20 -10
- data/lib/mongo/cluster/topology.rb +29 -25
- data/lib/mongo/cluster.rb +148 -183
- data/lib/mongo/cluster_time.rb +14 -31
- data/lib/mongo/collection/helpers.rb +5 -8
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
- data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
- data/lib/mongo/collection/view/builder.rb +0 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
- data/lib/mongo/collection/view/change_stream.rb +59 -58
- data/lib/mongo/collection/view/explainable.rb +11 -20
- data/lib/mongo/collection/view/immutable.rb +1 -3
- data/lib/mongo/collection/view/iterable.rb +35 -28
- data/lib/mongo/collection/view/map_reduce.rb +20 -25
- data/lib/mongo/collection/view/readable.rb +50 -57
- data/lib/mongo/collection/view/writable.rb +56 -72
- data/lib/mongo/collection/view.rb +9 -8
- data/lib/mongo/collection.rb +63 -76
- data/lib/mongo/condition_variable.rb +4 -4
- data/lib/mongo/config/options.rb +0 -3
- data/lib/mongo/config/validators/option.rb +3 -5
- data/lib/mongo/config.rb +7 -4
- data/lib/mongo/crypt/auto_decryption_context.rb +0 -3
- data/lib/mongo/crypt/auto_encrypter.rb +34 -43
- data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
- data/lib/mongo/crypt/binary.rb +5 -9
- data/lib/mongo/crypt/binding.rb +149 -155
- data/lib/mongo/crypt/context.rb +10 -17
- data/lib/mongo/crypt/data_key_context.rb +2 -7
- data/lib/mongo/crypt/encryption_io.rb +29 -39
- data/lib/mongo/crypt/explicit_decryption_context.rb +0 -3
- data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
- data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
- data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
- data/lib/mongo/crypt/handle.rb +42 -48
- data/lib/mongo/crypt/hooks.rb +12 -15
- data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
- data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
- data/lib/mongo/crypt/kms/aws.rb +0 -2
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
- data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
- data/lib/mongo/crypt/kms/azure.rb +0 -1
- data/lib/mongo/crypt/kms/credentials.rb +13 -27
- data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
- data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
- data/lib/mongo/crypt/kms/gcp.rb +0 -2
- data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
- data/lib/mongo/crypt/kms/kmip.rb +0 -1
- data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
- data/lib/mongo/crypt/kms/local.rb +0 -1
- data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
- data/lib/mongo/crypt/kms.rb +14 -16
- data/lib/mongo/crypt/kms_context.rb +0 -2
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
- data/lib/mongo/crypt/status.rb +12 -14
- data/lib/mongo/crypt.rb +0 -1
- data/lib/mongo/csot_timeout_holder.rb +3 -2
- data/lib/mongo/cursor/kill_spec.rb +7 -10
- data/lib/mongo/cursor.rb +74 -64
- data/lib/mongo/cursor_host.rb +8 -10
- data/lib/mongo/database/view.rb +16 -37
- data/lib/mongo/database.rb +52 -56
- data/lib/mongo/dbref.rb +0 -1
- data/lib/mongo/distinguishing_semaphore.rb +0 -1
- data/lib/mongo/error/auth_error.rb +0 -2
- data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
- data/lib/mongo/error/bulk_write_error.rb +35 -10
- data/lib/mongo/error/change_stream_resumable.rb +0 -2
- data/lib/mongo/error/client_closed.rb +0 -2
- data/lib/mongo/error/closed_stream.rb +1 -4
- data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
- data/lib/mongo/error/connection_perished.rb +0 -2
- data/lib/mongo/error/connection_unavailable.rb +0 -2
- data/lib/mongo/error/credential_check_error.rb +0 -2
- data/lib/mongo/error/crypt_error.rb +0 -2
- data/lib/mongo/error/extra_file_chunk.rb +1 -4
- data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
- data/lib/mongo/error/file_not_found.rb +0 -3
- data/lib/mongo/error/handshake_error.rb +0 -2
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
- data/lib/mongo/error/internal_driver_error.rb +0 -2
- data/lib/mongo/error/invalid_address.rb +0 -2
- data/lib/mongo/error/invalid_application_name.rb +0 -3
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
- data/lib/mongo/error/invalid_collection_name.rb +1 -4
- data/lib/mongo/error/invalid_config_option.rb +0 -3
- data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
- data/lib/mongo/error/invalid_database_name.rb +1 -4
- data/lib/mongo/error/invalid_document.rb +1 -4
- data/lib/mongo/error/invalid_file.rb +0 -3
- data/lib/mongo/error/invalid_file_revision.rb +0 -3
- data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
- data/lib/mongo/error/invalid_nonce.rb +0 -3
- data/lib/mongo/error/invalid_read_concern.rb +2 -4
- data/lib/mongo/error/invalid_read_option.rb +0 -3
- data/lib/mongo/error/invalid_replacement_document.rb +2 -5
- data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
- data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
- data/lib/mongo/error/invalid_server_preference.rb +10 -16
- data/lib/mongo/error/invalid_session.rb +1 -4
- data/lib/mongo/error/invalid_signature.rb +0 -3
- data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
- data/lib/mongo/error/invalid_txt_record.rb +0 -2
- data/lib/mongo/error/invalid_update_document.rb +2 -5
- data/lib/mongo/error/invalid_uri.rb +1 -4
- data/lib/mongo/error/invalid_write_concern.rb +2 -5
- data/lib/mongo/error/kms_error.rb +0 -2
- data/lib/mongo/error/labelable.rb +0 -3
- data/lib/mongo/error/lint_error.rb +0 -2
- data/lib/mongo/error/max_bson_size.rb +8 -11
- data/lib/mongo/error/max_message_size.rb +2 -5
- data/lib/mongo/error/mismatched_domain.rb +0 -2
- data/lib/mongo/error/missing_connection.rb +0 -2
- data/lib/mongo/error/missing_file_chunk.rb +0 -3
- data/lib/mongo/error/missing_password.rb +0 -2
- data/lib/mongo/error/missing_resume_token.rb +1 -4
- data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
- data/lib/mongo/error/missing_service_id.rb +0 -2
- data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
- data/lib/mongo/error/multi_index_drop.rb +0 -3
- data/lib/mongo/error/need_primary_server.rb +0 -2
- data/lib/mongo/error/no_server_available.rb +3 -8
- data/lib/mongo/error/no_service_connection_available.rb +1 -3
- data/lib/mongo/error/no_srv_records.rb +0 -2
- data/lib/mongo/error/notable.rb +8 -16
- data/lib/mongo/error/operation_failure.rb +62 -36
- data/lib/mongo/error/parser.rb +33 -75
- data/lib/mongo/error/pool_cleared_error.rb +1 -3
- data/lib/mongo/error/pool_closed_error.rb +0 -3
- data/lib/mongo/error/pool_error.rb +0 -3
- data/lib/mongo/error/pool_paused_error.rb +0 -2
- data/lib/mongo/error/raise_original_error.rb +1 -3
- data/lib/mongo/error/read_write_retryable.rb +14 -17
- data/lib/mongo/error/sdam_error_detection.rb +3 -5
- data/lib/mongo/error/server_api_conflict.rb +0 -2
- data/lib/mongo/error/server_certificate_revoked.rb +0 -2
- data/lib/mongo/error/server_not_usable.rb +0 -2
- data/lib/mongo/error/session_ended.rb +1 -3
- data/lib/mongo/error/session_not_materialized.rb +1 -3
- data/lib/mongo/error/sessions_not_supported.rb +1 -4
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
- data/lib/mongo/error/socket_error.rb +0 -2
- data/lib/mongo/error/socket_timeout_error.rb +0 -2
- data/lib/mongo/error/transactions_not_supported.rb +3 -6
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
- data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
- data/lib/mongo/error/unexpected_response.rb +1 -4
- data/lib/mongo/error/unknown_payload_type.rb +0 -3
- data/lib/mongo/error/unmet_dependency.rb +0 -2
- data/lib/mongo/error/unsupported_array_filters.rb +3 -24
- data/lib/mongo/error/unsupported_collation.rb +3 -24
- data/lib/mongo/error/unsupported_features.rb +0 -2
- data/lib/mongo/error/unsupported_message_type.rb +0 -2
- data/lib/mongo/error/unsupported_option.rb +19 -21
- data/lib/mongo/error/write_retryable.rb +0 -2
- data/lib/mongo/error.rb +10 -24
- data/lib/mongo/event/base.rb +0 -2
- data/lib/mongo/event/listeners.rb +0 -3
- data/lib/mongo/event/publisher.rb +0 -3
- data/lib/mongo/event/subscriber.rb +0 -4
- data/lib/mongo/event.rb +4 -6
- data/lib/mongo/grid/file/chunk.rb +7 -10
- data/lib/mongo/grid/file/info.rb +20 -24
- data/lib/mongo/grid/file.rb +7 -8
- data/lib/mongo/grid/fs_bucket.rb +40 -48
- data/lib/mongo/grid/stream/read.rb +25 -35
- data/lib/mongo/grid/stream/write.rb +17 -22
- data/lib/mongo/grid/stream.rb +2 -4
- data/lib/mongo/grid.rb +0 -1
- data/lib/mongo/id.rb +0 -1
- data/lib/mongo/index/view.rb +49 -48
- data/lib/mongo/index.rb +7 -10
- data/lib/mongo/lint.rb +31 -37
- data/lib/mongo/loggable.rb +5 -8
- data/lib/mongo/logger.rb +1 -7
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
- data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap.rb +0 -1
- data/lib/mongo/monitoring/event/command_failed.rb +5 -9
- data/lib/mongo/monitoring/event/command_started.rb +8 -12
- data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
- data/lib/mongo/monitoring/event/secure.rb +15 -20
- data/lib/mongo/monitoring/event/server_closed.rb +1 -4
- data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
- data/lib/mongo/monitoring/event/server_opening.rb +1 -4
- data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
- data/lib/mongo/monitoring/event.rb +0 -1
- data/lib/mongo/monitoring/publishable.rb +20 -30
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +2 -3
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +8 -8
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
- data/lib/mongo/monitoring.rb +38 -39
- data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
- data/lib/mongo/operation/aggregate/result.rb +3 -6
- data/lib/mongo/operation/aggregate.rb +0 -2
- data/lib/mongo/operation/collections_info/result.rb +0 -3
- data/lib/mongo/operation/collections_info.rb +0 -2
- data/lib/mongo/operation/command/op_msg.rb +1 -4
- data/lib/mongo/operation/command.rb +0 -2
- data/lib/mongo/operation/context.rb +13 -16
- data/lib/mongo/operation/count/op_msg.rb +2 -4
- data/lib/mongo/operation/count.rb +0 -2
- data/lib/mongo/operation/create/op_msg.rb +2 -5
- data/lib/mongo/operation/create.rb +0 -2
- data/lib/mongo/operation/create_index/op_msg.rb +3 -7
- data/lib/mongo/operation/create_index.rb +0 -2
- data/lib/mongo/operation/create_user/op_msg.rb +2 -4
- data/lib/mongo/operation/create_user.rb +0 -2
- data/lib/mongo/operation/delete/bulk_result.rb +2 -3
- data/lib/mongo/operation/delete/op_msg.rb +3 -10
- data/lib/mongo/operation/delete/result.rb +0 -3
- data/lib/mongo/operation/delete.rb +1 -5
- data/lib/mongo/operation/distinct/op_msg.rb +2 -5
- data/lib/mongo/operation/distinct.rb +0 -2
- data/lib/mongo/operation/drop/op_msg.rb +0 -2
- data/lib/mongo/operation/drop.rb +0 -2
- data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
- data/lib/mongo/operation/drop_database.rb +0 -2
- data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
- data/lib/mongo/operation/drop_index.rb +0 -2
- data/lib/mongo/operation/explain/op_msg.rb +0 -2
- data/lib/mongo/operation/explain/result.rb +0 -3
- data/lib/mongo/operation/explain.rb +0 -2
- data/lib/mongo/operation/find/builder/command.rb +4 -12
- data/lib/mongo/operation/find/builder/flags.rb +9 -15
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
- data/lib/mongo/operation/find/builder.rb +0 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -12
- data/lib/mongo/operation/find/result.rb +0 -3
- data/lib/mongo/operation/find.rb +0 -2
- data/lib/mongo/operation/get_more/command_builder.rb +1 -6
- data/lib/mongo/operation/get_more/op_msg.rb +10 -4
- data/lib/mongo/operation/get_more/result.rb +0 -3
- data/lib/mongo/operation/get_more.rb +0 -2
- data/lib/mongo/operation/indexes/op_msg.rb +0 -2
- data/lib/mongo/operation/indexes/result.rb +1 -5
- data/lib/mongo/operation/indexes.rb +0 -2
- data/lib/mongo/operation/insert/bulk_result.rb +2 -6
- data/lib/mongo/operation/insert/op_msg.rb +2 -4
- data/lib/mongo/operation/insert/result.rb +0 -3
- data/lib/mongo/operation/insert.rb +2 -5
- data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
- data/lib/mongo/operation/kill_cursors.rb +0 -2
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
- data/lib/mongo/operation/list_collections/result.rb +1 -4
- data/lib/mongo/operation/list_collections.rb +0 -2
- data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
- data/lib/mongo/operation/map_reduce/result.rb +3 -6
- data/lib/mongo/operation/map_reduce.rb +0 -2
- data/lib/mongo/operation/op_msg_base.rb +0 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
- data/lib/mongo/operation/parallel_scan/result.rb +2 -5
- data/lib/mongo/operation/parallel_scan.rb +0 -2
- data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
- data/lib/mongo/operation/remove_user.rb +0 -2
- data/lib/mongo/operation/result.rb +38 -47
- data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
- data/lib/mongo/operation/shared/executable.rb +20 -29
- data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
- data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
- data/lib/mongo/operation/shared/idable.rb +3 -6
- data/lib/mongo/operation/shared/limited.rb +0 -3
- data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
- data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
- data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
- data/lib/mongo/operation/shared/response_handling.rb +13 -26
- data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
- data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
- data/lib/mongo/operation/shared/specifiable.rb +32 -58
- data/lib/mongo/operation/shared/write.rb +12 -17
- data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
- data/lib/mongo/operation/update/bulk_result.rb +13 -17
- data/lib/mongo/operation/update/op_msg.rb +2 -5
- data/lib/mongo/operation/update/result.rb +5 -5
- data/lib/mongo/operation/update.rb +1 -5
- data/lib/mongo/operation/update_user/op_msg.rb +2 -4
- data/lib/mongo/operation/update_user.rb +0 -2
- data/lib/mongo/operation/users_info/op_msg.rb +2 -4
- data/lib/mongo/operation/users_info/result.rb +1 -4
- data/lib/mongo/operation/users_info.rb +0 -2
- data/lib/mongo/operation/write_command/op_msg.rb +2 -10
- data/lib/mongo/operation/write_command.rb +0 -2
- data/lib/mongo/operation.rb +9 -14
- data/lib/mongo/options/mapper.rb +8 -15
- data/lib/mongo/options/redacted.rb +7 -9
- data/lib/mongo/options.rb +0 -1
- data/lib/mongo/protocol/bit_vector.rb +3 -5
- data/lib/mongo/protocol/caching_hash.rb +2 -7
- data/lib/mongo/protocol/compressed.rb +5 -10
- data/lib/mongo/protocol/get_more.rb +2 -8
- data/lib/mongo/protocol/kill_cursors.rb +2 -8
- data/lib/mongo/protocol/message.rb +103 -105
- data/lib/mongo/protocol/msg.rb +48 -63
- data/lib/mongo/protocol/query.rb +32 -41
- data/lib/mongo/protocol/registry.rb +2 -5
- data/lib/mongo/protocol/reply.rb +10 -16
- data/lib/mongo/protocol/serializers.rb +41 -59
- data/lib/mongo/protocol.rb +0 -1
- data/lib/mongo/query_cache.rb +7 -15
- data/lib/mongo/retryable/backpressure.rb +31 -0
- data/lib/mongo/retryable/base_worker.rb +39 -13
- data/lib/mongo/retryable/read_worker.rb +77 -21
- data/lib/mongo/retryable/retry_policy.rb +59 -0
- data/lib/mongo/retryable/write_worker.rb +155 -56
- data/lib/mongo/retryable.rb +70 -9
- data/lib/mongo/search_index/view.rb +1 -1
- data/lib/mongo/semaphore.rb +0 -1
- data/lib/mongo/server/app_metadata/environment.rb +3 -3
- data/lib/mongo/server/app_metadata.rb +4 -5
- data/lib/mongo/server/connection.rb +61 -61
- data/lib/mongo/server/connection_base.rb +43 -53
- data/lib/mongo/server/connection_common.rb +41 -64
- data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
- data/lib/mongo/server/connection_pool/populator.rb +1 -4
- data/lib/mongo/server/connection_pool.rb +250 -175
- data/lib/mongo/server/description/features.rb +23 -60
- data/lib/mongo/server/description/load_balancer.rb +0 -2
- data/lib/mongo/server/description.rb +138 -137
- data/lib/mongo/server/monitor/app_metadata.rb +3 -4
- data/lib/mongo/server/monitor/connection.rb +28 -35
- data/lib/mongo/server/monitor.rb +65 -60
- data/lib/mongo/server/pending_connection.rb +70 -71
- data/lib/mongo/server/push_monitor/connection.rb +0 -3
- data/lib/mongo/server/push_monitor.rb +21 -29
- data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
- data/lib/mongo/server.rb +60 -93
- data/lib/mongo/server_selector/base.rb +146 -157
- data/lib/mongo/server_selector/nearest.rb +5 -5
- data/lib/mongo/server_selector/primary.rb +4 -5
- data/lib/mongo/server_selector/primary_preferred.rb +5 -6
- data/lib/mongo/server_selector/secondary.rb +5 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +4 -5
- data/lib/mongo/server_selector.rb +3 -4
- data/lib/mongo/session/server_session.rb +6 -7
- data/lib/mongo/session/session_pool.rb +20 -34
- data/lib/mongo/session.rb +321 -189
- data/lib/mongo/socket/ocsp_cache.rb +8 -13
- data/lib/mongo/socket/ocsp_verifier.rb +69 -70
- data/lib/mongo/socket/ssl.rb +44 -43
- data/lib/mongo/socket/tcp.rb +5 -8
- data/lib/mongo/socket/unix.rb +0 -4
- data/lib/mongo/socket.rb +80 -102
- data/lib/mongo/srv/monitor.rb +6 -11
- data/lib/mongo/srv/resolver.rb +15 -24
- data/lib/mongo/srv/result.rb +18 -24
- data/lib/mongo/srv.rb +0 -1
- data/lib/mongo/timeout.rb +4 -11
- data/lib/mongo/topology_version.rb +8 -13
- data/lib/mongo/tracing/open_telemetry/command_tracer.rb +28 -1
- data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/tracer.rb +1 -1
- data/lib/mongo/uri/options_mapper.rb +135 -126
- data/lib/mongo/uri/srv_protocol.rb +25 -38
- data/lib/mongo/uri.rb +95 -139
- data/lib/mongo/utils.rb +5 -12
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +0 -2
- data/lib/mongo/write_concern/base.rb +6 -6
- data/lib/mongo/write_concern/unacknowledged.rb +0 -2
- data/lib/mongo/write_concern.rb +14 -15
- data/lib/mongo.rb +2 -3
- data/mongo.gemspec +17 -17
- metadata +5 -5
- data/lib/mongo/error/server_api_not_supported.rb +0 -27
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
- data/lib/mongo/operation/shared/validatable.rb +0 -87
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,16 +16,14 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Exception raised if the object is not a valid update document.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.0.0
|
|
24
22
|
class InvalidUpdateDocument < Error
|
|
25
|
-
|
|
26
23
|
# The error message.
|
|
27
24
|
#
|
|
28
25
|
# @deprecated
|
|
29
|
-
MESSAGE = 'Invalid update document provided'
|
|
26
|
+
MESSAGE = 'Invalid update document provided'
|
|
30
27
|
|
|
31
28
|
# Construct the error message.
|
|
32
29
|
#
|
|
@@ -36,7 +33,7 @@ module Mongo
|
|
|
36
33
|
#
|
|
37
34
|
# @api private
|
|
38
35
|
def self.message(key)
|
|
39
|
-
message =
|
|
36
|
+
message = 'Invalid update document provided. Update documents must only '
|
|
40
37
|
message += "contain only atomic modifiers. The \"#{key}\" key is invalid."
|
|
41
38
|
message
|
|
42
39
|
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
|
#
|
|
@@ -17,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Exception that is raised when trying to parse a URI that does not match
|
|
22
20
|
# the specification.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class InvalidURI < Error
|
|
26
|
-
|
|
27
24
|
# Instantiate the new exception.
|
|
28
25
|
#
|
|
29
26
|
# @example Instantiate the exception.
|
|
@@ -32,7 +29,7 @@ module Mongo
|
|
|
32
29
|
# @since 2.0.0
|
|
33
30
|
def initialize(uri, details, format = nil)
|
|
34
31
|
message = "Bad URI: #{uri}\n" +
|
|
35
|
-
|
|
32
|
+
"#{details}\n"
|
|
36
33
|
message += "MongoDB URI must be in the following format: #{format}\n" if format
|
|
37
34
|
message += "Please see the following URL for more information: #{Mongo::URI::HELP}\n"
|
|
38
35
|
super(message)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,12 +16,10 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised when an invalid write concern is provided.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.2.0
|
|
24
22
|
class InvalidWriteConcern < Error
|
|
25
|
-
|
|
26
23
|
# Instantiate the new exception.
|
|
27
24
|
#
|
|
28
25
|
# @example Instantiate the exception.
|
|
@@ -30,8 +27,8 @@ module Mongo
|
|
|
30
27
|
#
|
|
31
28
|
# @since 2.2.0
|
|
32
29
|
def initialize(msg = nil)
|
|
33
|
-
super(msg || 'Invalid write concern options. If w is an Integer, it must be greater than or equal to 0. ' +
|
|
34
|
-
|
|
30
|
+
super(msg || ('Invalid write concern options. If w is an Integer, it must be greater than or equal to 0. ' +
|
|
31
|
+
'If w is 0, it cannot be combined with a true value for fsync or j (journal).'))
|
|
35
32
|
end
|
|
36
33
|
end
|
|
37
34
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# A KMS-related error during client-side encryption.
|
|
22
20
|
class KmsError < CryptError
|
|
23
21
|
def initialize(message, code: nil, network_error: nil)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2019-2022 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# A module encapsulating functionality to manage labels added to errors.
|
|
22
20
|
#
|
|
23
21
|
# @note Although methods of this module are part of the public API,
|
|
@@ -26,7 +24,6 @@ module Mongo
|
|
|
26
24
|
#
|
|
27
25
|
# @api semipublic
|
|
28
26
|
module Labelable
|
|
29
|
-
|
|
30
27
|
# Does the error have the given label?
|
|
31
28
|
#
|
|
32
29
|
# @example
|
|
@@ -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
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised when the driver is used incorrectly.
|
|
22
20
|
#
|
|
23
21
|
# Normally the driver passes certain data to the server and lets the
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,17 +16,15 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Exception that is raised when trying to serialize a document that
|
|
22
20
|
# exceeds max BSON object size.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class MaxBSONSize < Error
|
|
26
|
-
|
|
27
24
|
# The message is constant.
|
|
28
25
|
#
|
|
29
26
|
# @since 2.0.0
|
|
30
|
-
MESSAGE =
|
|
27
|
+
MESSAGE = 'The document exceeds maximum allowed BSON size'
|
|
31
28
|
|
|
32
29
|
# Instantiate the new exception.
|
|
33
30
|
#
|
|
@@ -40,13 +37,13 @@ module Mongo
|
|
|
40
37
|
#
|
|
41
38
|
# @since 2.0.0
|
|
42
39
|
def initialize(max_size_or_msg = nil)
|
|
43
|
-
if max_size_or_msg.is_a?(Numeric)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
msg = if max_size_or_msg.is_a?(Numeric)
|
|
41
|
+
"#{MESSAGE}. The maximum allowed size is #{max_size_or_msg}"
|
|
42
|
+
elsif max_size_or_msg
|
|
43
|
+
max_size_or_msg
|
|
44
|
+
else
|
|
45
|
+
MESSAGE
|
|
46
|
+
end
|
|
50
47
|
super(msg)
|
|
51
48
|
end
|
|
52
49
|
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
|
#
|
|
@@ -17,17 +16,15 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Exception that is raised when trying to send a message that exceeds max
|
|
22
20
|
# message size.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class MaxMessageSize < Error
|
|
26
|
-
|
|
27
24
|
# The message is constant.
|
|
28
25
|
#
|
|
29
26
|
# @since 2.0.0
|
|
30
|
-
MESSAGE =
|
|
27
|
+
MESSAGE = 'Message exceeds allowed max message size.'
|
|
31
28
|
|
|
32
29
|
# Instantiate the new exception.
|
|
33
30
|
#
|
|
@@ -38,7 +35,7 @@ module Mongo
|
|
|
38
35
|
#
|
|
39
36
|
# @since 2.0.0
|
|
40
37
|
def initialize(max_size = nil)
|
|
41
|
-
super(max_size ?
|
|
38
|
+
super(max_size ? MESSAGE + " The max is #{max_size}." : MESSAGE)
|
|
42
39
|
end
|
|
43
40
|
end
|
|
44
41
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2017-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# This exception is raised when the URI Parser's DNS query returns SRV record(s)
|
|
22
20
|
# whose parent domain does not match the hostname used for the query.
|
|
23
21
|
#
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2022 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Exception raised when trying to check out a connection with a specific
|
|
22
20
|
# global id, and the connection for that global id no longer exists in the
|
|
23
21
|
# pool.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised if the next chunk when reading from a GridFSBucket does not have the
|
|
22
20
|
# expected sequence number (n).
|
|
23
21
|
#
|
|
24
22
|
# @since 2.1.0
|
|
25
23
|
class MissingFileChunk < Error
|
|
26
|
-
|
|
27
24
|
# Create the new exception.
|
|
28
25
|
#
|
|
29
26
|
# @example Create the new exception.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2019-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised when the operations that require a password (e.g. retrieving
|
|
22
20
|
# a salted or hashed password) are attempted on a User object that was
|
|
23
21
|
# not created with a password.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2017-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,16 +16,14 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised if a change stream document is returned without a resume token.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.0
|
|
24
22
|
class MissingResumeToken < Error
|
|
25
|
-
|
|
26
23
|
# The error message.
|
|
27
24
|
#
|
|
28
25
|
# @since 2.5.0
|
|
29
|
-
MESSAGE = 'Cannot provide resume functionality when the resume token is missing'
|
|
26
|
+
MESSAGE = 'Cannot provide resume functionality when the resume token is missing'
|
|
30
27
|
|
|
31
28
|
# Create the new exception.
|
|
32
29
|
#
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,13 +16,12 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# This exception is raised when the server returned +{done: true}+ in a
|
|
22
20
|
# SCRAM conversation but did not provide a ServerSignature.
|
|
23
21
|
class MissingScramServerSignature < Error
|
|
24
22
|
def initialize(msg = nil)
|
|
25
|
-
msg ||=
|
|
26
|
-
super
|
|
23
|
+
msg ||= 'Server signaled completion of SCRAM conversation without providing ServerSignature'
|
|
24
|
+
super
|
|
27
25
|
end
|
|
28
26
|
end
|
|
29
27
|
end
|
|
@@ -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
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised when the driver is in load-balancing mode via the URI option
|
|
22
20
|
# but a connection does not report a value in the serviceId field.
|
|
23
21
|
class MissingServiceId < Error
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# An error related to spawning mongocryptd for client-side encryption.
|
|
22
20
|
class MongocryptdSpawnError < CryptError
|
|
23
21
|
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
|
#
|
|
@@ -17,12 +16,10 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Exception raised if '*' is passed to drop_one on indexes.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.0.0
|
|
24
22
|
class MultiIndexDrop < Error
|
|
25
|
-
|
|
26
23
|
# Instantiate the new exception.
|
|
27
24
|
#
|
|
28
25
|
# @example Instantiate the exception.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,12 +16,10 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised if there are no servers available matching the preference.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.0.0
|
|
24
22
|
class NoServerAvailable < Error
|
|
25
|
-
|
|
26
23
|
# Instantiate the new exception.
|
|
27
24
|
#
|
|
28
25
|
# @example Instantiate the exception.
|
|
@@ -34,14 +31,12 @@ module Mongo
|
|
|
34
31
|
# performed on. (added in 2.7.0)
|
|
35
32
|
#
|
|
36
33
|
# @since 2.0.0
|
|
37
|
-
def initialize(server_selector, cluster=nil, msg=nil)
|
|
34
|
+
def initialize(server_selector, cluster = nil, msg = nil)
|
|
38
35
|
unless msg
|
|
39
36
|
msg = "No #{server_selector.name} server is available"
|
|
40
|
-
if cluster
|
|
41
|
-
msg += " in cluster: #{cluster.summary}"
|
|
42
|
-
end
|
|
37
|
+
msg += " in cluster: #{cluster.summary}" if cluster
|
|
43
38
|
msg += " with timeout=#{server_selector.server_selection_timeout}, " +
|
|
44
|
-
|
|
39
|
+
"LT=#{server_selector.local_threshold}"
|
|
45
40
|
end
|
|
46
41
|
|
|
47
42
|
super(msg)
|
|
@@ -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
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# Raised when the driver requires a connection to a particular service
|
|
22
20
|
# but no matching connections exist in the connection pool.
|
|
23
21
|
class NoServiceConnectionAvailable < Error
|
|
@@ -41,7 +39,7 @@ module Mongo
|
|
|
41
39
|
new(
|
|
42
40
|
"The connection pool for #{address} does not have a connection for service #{service_id}",
|
|
43
41
|
address: address,
|
|
44
|
-
service_id: service_id
|
|
42
|
+
service_id: service_id
|
|
45
43
|
)
|
|
46
44
|
end
|
|
47
45
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2017-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error
|
|
20
|
-
|
|
21
19
|
# This exception is raised when the URI Parser's DNS query returns no SRV records.
|
|
22
20
|
#
|
|
23
21
|
# @example Instantiate the exception.
|
data/lib/mongo/error/notable.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2019-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Error < StandardError
|
|
20
|
-
|
|
21
19
|
# A module encapsulating functionality to manage data attached to
|
|
22
20
|
# exceptions in the driver, since the driver does not currently have a
|
|
23
21
|
# single exception hierarchy root.
|
|
@@ -25,7 +23,6 @@ module Mongo
|
|
|
25
23
|
# @since 2.11.0
|
|
26
24
|
# @api private
|
|
27
25
|
module Notable
|
|
28
|
-
|
|
29
26
|
# Returns an array of strings with additional information about the
|
|
30
27
|
# exception.
|
|
31
28
|
#
|
|
@@ -43,17 +40,14 @@ module Mongo
|
|
|
43
40
|
|
|
44
41
|
# @api private
|
|
45
42
|
def add_note(note)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# keeping track of *when* a particular exception should have the
|
|
53
|
-
# particular notes attached to it throughout the call stack.
|
|
54
|
-
raise Error::LintError, "Adding a note which already exists in exception #{self}: #{note}"
|
|
55
|
-
end
|
|
43
|
+
@notes ||= []
|
|
44
|
+
if Lint.enabled? && @notes.include?(note)
|
|
45
|
+
# The driver makes an effort to not add duplicated notes, by
|
|
46
|
+
# keeping track of *when* a particular exception should have the
|
|
47
|
+
# particular notes attached to it throughout the call stack.
|
|
48
|
+
raise Error::LintError, "Adding a note which already exists in exception #{self}: #{note}"
|
|
56
49
|
end
|
|
50
|
+
|
|
57
51
|
@notes << note
|
|
58
52
|
end
|
|
59
53
|
|
|
@@ -94,9 +88,7 @@ module Mongo
|
|
|
94
88
|
# @api private
|
|
95
89
|
def notes_tail
|
|
96
90
|
msg = ''
|
|
97
|
-
unless notes.empty?
|
|
98
|
-
msg += " (#{notes.join(', ')})"
|
|
99
|
-
end
|
|
91
|
+
msg += " (#{notes.join(', ')})" unless notes.empty?
|
|
100
92
|
msg
|
|
101
93
|
end
|
|
102
94
|
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
|
#
|
|
@@ -54,29 +53,33 @@ module Mongo
|
|
|
54
53
|
# @api experimental
|
|
55
54
|
attr_reader :server_message
|
|
56
55
|
|
|
56
|
+
# @return [ String | nil ] The address ("host:port") of the server
|
|
57
|
+
# that produced this error, if known.
|
|
58
|
+
attr_reader :server_address
|
|
59
|
+
|
|
57
60
|
# Error codes and code names that should result in a failing getMore
|
|
58
61
|
# command on a change stream NOT being resumed.
|
|
59
62
|
#
|
|
60
63
|
# @api private
|
|
61
64
|
CHANGE_STREAM_RESUME_ERRORS = [
|
|
62
|
-
{code_name: 'HostUnreachable', code: 6},
|
|
63
|
-
{code_name: 'HostNotFound', code: 7},
|
|
64
|
-
{code_name: 'NetworkTimeout', code: 89},
|
|
65
|
-
{code_name: 'ShutdownInProgress', code: 91},
|
|
66
|
-
{code_name: 'PrimarySteppedDown', code: 189},
|
|
67
|
-
{code_name: 'ExceededTimeLimit', code: 262},
|
|
68
|
-
{code_name: 'SocketException', code: 9001},
|
|
69
|
-
{code_name: 'NotMaster', code:
|
|
70
|
-
{code_name: 'InterruptedAtShutdown', code:
|
|
71
|
-
{code_name: 'InterruptedDueToReplStateChange', code:
|
|
72
|
-
{code_name: 'NotPrimaryNoSecondaryOk', code:
|
|
73
|
-
{code_name: 'NotMasterOrSecondary', code:
|
|
74
|
-
|
|
75
|
-
{code_name: 'StaleShardVersion', code: 63},
|
|
76
|
-
{code_name: 'FailedToSatisfyReadPreference', code: 133},
|
|
77
|
-
{code_name: 'StaleEpoch', code: 150},
|
|
78
|
-
{code_name: 'RetryChangeStream', code: 234},
|
|
79
|
-
{code_name: 'StaleConfig', code:
|
|
65
|
+
{ code_name: 'HostUnreachable', code: 6 },
|
|
66
|
+
{ code_name: 'HostNotFound', code: 7 },
|
|
67
|
+
{ code_name: 'NetworkTimeout', code: 89 },
|
|
68
|
+
{ code_name: 'ShutdownInProgress', code: 91 },
|
|
69
|
+
{ code_name: 'PrimarySteppedDown', code: 189 },
|
|
70
|
+
{ code_name: 'ExceededTimeLimit', code: 262 },
|
|
71
|
+
{ code_name: 'SocketException', code: 9001 },
|
|
72
|
+
{ code_name: 'NotMaster', code: 10_107 },
|
|
73
|
+
{ code_name: 'InterruptedAtShutdown', code: 11_600 },
|
|
74
|
+
{ code_name: 'InterruptedDueToReplStateChange', code: 11_602 },
|
|
75
|
+
{ code_name: 'NotPrimaryNoSecondaryOk', code: 13_435 },
|
|
76
|
+
{ code_name: 'NotMasterOrSecondary', code: 13_436 },
|
|
77
|
+
|
|
78
|
+
{ code_name: 'StaleShardVersion', code: 63 },
|
|
79
|
+
{ code_name: 'FailedToSatisfyReadPreference', code: 133 },
|
|
80
|
+
{ code_name: 'StaleEpoch', code: 150 },
|
|
81
|
+
{ code_name: 'RetryChangeStream', code: 234 },
|
|
82
|
+
{ code_name: 'StaleConfig', code: 13_388 },
|
|
80
83
|
].freeze
|
|
81
84
|
|
|
82
85
|
# Change stream can be resumed when these error messages are encountered.
|
|
@@ -173,6 +176,8 @@ module Mongo
|
|
|
173
176
|
# error document.
|
|
174
177
|
# @option options [ String ] server_message The server-returned
|
|
175
178
|
# error message parsed from the response.
|
|
179
|
+
# @option options [ nil | String | Mongo::Address | Mongo::Server::Description ]
|
|
180
|
+
# :server_address The address of the server that produced the error.
|
|
176
181
|
# @option options [ Hash ] :write_concern_error_document The
|
|
177
182
|
# server-supplied write concern error document, if any.
|
|
178
183
|
# @option options [ Integer ] :write_concern_error_code Error code for
|
|
@@ -186,7 +191,8 @@ module Mongo
|
|
|
186
191
|
# @option options [ true | false ] :wtimeout Whether the error is a wtimeout.
|
|
187
192
|
def initialize(message = nil, result = nil, options = {})
|
|
188
193
|
@details = retrieve_details(options[:document])
|
|
189
|
-
|
|
194
|
+
@server_address = normalize_server_address(options[:server_address])
|
|
195
|
+
super(append_server_address(append_details(message, @details)))
|
|
190
196
|
|
|
191
197
|
@result = result
|
|
192
198
|
@code = options[:code]
|
|
@@ -219,20 +225,6 @@ module Mongo
|
|
|
219
225
|
code == 50 # MaxTimeMSExpired
|
|
220
226
|
end
|
|
221
227
|
|
|
222
|
-
# Whether the error is caused by an attempted retryable write
|
|
223
|
-
# on a storage engine that does not support retryable writes.
|
|
224
|
-
#
|
|
225
|
-
# @return [ true | false ] Whether the error is caused by an attempted
|
|
226
|
-
# retryable write on a storage engine that does not support retryable writes.
|
|
227
|
-
#
|
|
228
|
-
# @since 2.10.0
|
|
229
|
-
def unsupported_retryable_write?
|
|
230
|
-
# code 20 is IllegalOperation.
|
|
231
|
-
# Note that the document is expected to be a BSON::Document, thus
|
|
232
|
-
# either having string keys or providing indifferent access.
|
|
233
|
-
code == 20 && server_message&.start_with?("Transaction numbers") || false
|
|
234
|
-
end
|
|
235
|
-
|
|
236
228
|
private
|
|
237
229
|
|
|
238
230
|
# Retrieve the details from a document
|
|
@@ -240,10 +232,11 @@ module Mongo
|
|
|
240
232
|
# @return [ Hash | nil ] the details extracted from the document
|
|
241
233
|
def retrieve_details(document)
|
|
242
234
|
return nil unless document
|
|
235
|
+
|
|
243
236
|
if wce = document['writeConcernError']
|
|
244
|
-
|
|
237
|
+
wce['errInfo']
|
|
245
238
|
elsif we = document['writeErrors']&.first
|
|
246
|
-
|
|
239
|
+
we['errInfo']
|
|
247
240
|
end
|
|
248
241
|
end
|
|
249
242
|
|
|
@@ -252,8 +245,41 @@ module Mongo
|
|
|
252
245
|
# @return [ String ] the message with the details appended to it
|
|
253
246
|
def append_details(message, details)
|
|
254
247
|
return message unless details && message
|
|
248
|
+
|
|
255
249
|
message + " -- #{details.to_json}"
|
|
256
250
|
end
|
|
251
|
+
|
|
252
|
+
# Append the server address suffix to the message when the
|
|
253
|
+
# Mongo.include_server_address_in_errors flag is enabled and
|
|
254
|
+
# a server address is known.
|
|
255
|
+
#
|
|
256
|
+
# @return [ String | nil ] the message with the suffix appended,
|
|
257
|
+
# or the original message unchanged.
|
|
258
|
+
def append_server_address(message)
|
|
259
|
+
return message unless Mongo.include_server_address_in_errors
|
|
260
|
+
return message if @server_address.nil?
|
|
261
|
+
return "(on #{@server_address})" if message.nil? || message.empty?
|
|
262
|
+
|
|
263
|
+
"#{message} (on #{@server_address})"
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# Normalize a server_address option into a String "host:port" form.
|
|
267
|
+
#
|
|
268
|
+
# @param [ nil | String | Mongo::Address | Mongo::Server::Description ] value
|
|
269
|
+
#
|
|
270
|
+
# @return [ String | nil ] The normalized address, or nil.
|
|
271
|
+
def normalize_server_address(value)
|
|
272
|
+
case value
|
|
273
|
+
when nil then nil
|
|
274
|
+
when String then value
|
|
275
|
+
when Mongo::Address then value.seed
|
|
276
|
+
when Mongo::Server::Description
|
|
277
|
+
value.address.is_a?(Mongo::Address) ? value.address.seed : nil
|
|
278
|
+
else
|
|
279
|
+
raise ArgumentError,
|
|
280
|
+
"server_address must be nil, String, Mongo::Address, or Mongo::Server::Description; got #{value.class}"
|
|
281
|
+
end
|
|
282
|
+
end
|
|
257
283
|
end
|
|
258
284
|
|
|
259
285
|
# OperationFailure is the canonical implementor of the
|