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/index/view.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
|
#
|
|
@@ -19,7 +18,6 @@ require 'mongo/cursor/nontailable'
|
|
|
19
18
|
|
|
20
19
|
module Mongo
|
|
21
20
|
module Index
|
|
22
|
-
|
|
23
21
|
# A class representing a view of indexes.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.0.0
|
|
@@ -45,43 +43,44 @@ module Mongo
|
|
|
45
43
|
|
|
46
44
|
def_delegators :@collection, :cluster, :database, :read_preference, :write_concern, :client
|
|
47
45
|
def_delegators :cluster, :next_primary
|
|
46
|
+
def_delegators :client, :tracer
|
|
48
47
|
|
|
49
48
|
# The index key field.
|
|
50
49
|
#
|
|
51
50
|
# @since 2.0.0
|
|
52
|
-
KEY = 'key'
|
|
51
|
+
KEY = 'key'
|
|
53
52
|
|
|
54
53
|
# The index name field.
|
|
55
54
|
#
|
|
56
55
|
# @since 2.0.0
|
|
57
|
-
NAME = 'name'
|
|
56
|
+
NAME = 'name'
|
|
58
57
|
|
|
59
58
|
# The mappings of Ruby index options to server options.
|
|
60
59
|
#
|
|
61
60
|
# @since 2.0.0
|
|
62
61
|
OPTIONS = {
|
|
63
|
-
:
|
|
64
|
-
:
|
|
65
|
-
:
|
|
66
|
-
:
|
|
67
|
-
:
|
|
68
|
-
:
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
:
|
|
72
|
-
:
|
|
73
|
-
:
|
|
74
|
-
:
|
|
75
|
-
:
|
|
76
|
-
:
|
|
77
|
-
:
|
|
78
|
-
:
|
|
79
|
-
:
|
|
80
|
-
:
|
|
81
|
-
:
|
|
82
|
-
:
|
|
83
|
-
:
|
|
84
|
-
:
|
|
62
|
+
background: :background,
|
|
63
|
+
bits: :bits,
|
|
64
|
+
bucket_size: :bucketSize,
|
|
65
|
+
default_language: :default_language,
|
|
66
|
+
expire_after: :expireAfterSeconds,
|
|
67
|
+
expire_after_seconds: :expireAfterSeconds,
|
|
68
|
+
key: :key,
|
|
69
|
+
language_override: :language_override,
|
|
70
|
+
max: :max,
|
|
71
|
+
min: :min,
|
|
72
|
+
name: :name,
|
|
73
|
+
partial_filter_expression: :partialFilterExpression,
|
|
74
|
+
sparse: :sparse,
|
|
75
|
+
sphere_version: :'2dsphereIndexVersion',
|
|
76
|
+
storage_engine: :storageEngine,
|
|
77
|
+
text_version: :textIndexVersion,
|
|
78
|
+
unique: :unique,
|
|
79
|
+
version: :v,
|
|
80
|
+
weights: :weights,
|
|
81
|
+
collation: :collation,
|
|
82
|
+
comment: :comment,
|
|
83
|
+
wildcard_projection: :wildcardProjection,
|
|
85
84
|
}.freeze
|
|
86
85
|
|
|
87
86
|
# Drop an index by its name.
|
|
@@ -100,6 +99,7 @@ module Mongo
|
|
|
100
99
|
# @since 2.0.0
|
|
101
100
|
def drop_one(name, options = {})
|
|
102
101
|
raise Error::MultiIndexDrop.new if name == Index::ALL
|
|
102
|
+
|
|
103
103
|
drop_by_name(name, options)
|
|
104
104
|
end
|
|
105
105
|
|
|
@@ -131,7 +131,7 @@ module Mongo
|
|
|
131
131
|
# @option options [ true, false ] :unique (false) If true, this index will enforce
|
|
132
132
|
# a uniqueness constraint on that field.
|
|
133
133
|
# @option options [ true, false ] :background (false) If true, the index will be built
|
|
134
|
-
# in the background
|
|
134
|
+
# in the background
|
|
135
135
|
# @option options [ true, false ] :drop_dups (false) If creating a unique index on
|
|
136
136
|
# this collection, this option will keep the first document the database indexes
|
|
137
137
|
# and drop all subsequent documents with duplicate values on this field.
|
|
@@ -171,7 +171,7 @@ module Mongo
|
|
|
171
171
|
if session = @options[:session]
|
|
172
172
|
create_options[:session] = session
|
|
173
173
|
end
|
|
174
|
-
%i
|
|
174
|
+
%i[commit_quorum session comment timeout_ms max_time_ms].each do |key|
|
|
175
175
|
if value = options.delete(key)
|
|
176
176
|
create_options[key] = value
|
|
177
177
|
end
|
|
@@ -194,9 +194,6 @@ module Mongo
|
|
|
194
194
|
# { commit_quorum: 'majority' }
|
|
195
195
|
# )
|
|
196
196
|
#
|
|
197
|
-
# @note On MongoDB 3.0.0 and higher, the indexes will be created in
|
|
198
|
-
# parallel on the server.
|
|
199
|
-
#
|
|
200
197
|
# @param [ Array<Hash> ] models The index specifications. Each model MUST
|
|
201
198
|
# include a :key option, except for the last item in the Array, which
|
|
202
199
|
# may be a Hash specifying options relevant to the createIndexes operation.
|
|
@@ -216,17 +213,13 @@ module Mongo
|
|
|
216
213
|
def create_many(*models)
|
|
217
214
|
models = models.flatten
|
|
218
215
|
options = {}
|
|
219
|
-
if models && !models.last.key?(:key)
|
|
220
|
-
options = models.pop
|
|
221
|
-
end
|
|
216
|
+
options = models.pop if models && !models.last.key?(:key)
|
|
222
217
|
|
|
223
218
|
client.with_session(@options.merge(options)) do |session|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
indexes = normalize_models(models, server)
|
|
219
|
+
indexes = normalize_models(models)
|
|
227
220
|
indexes.each do |index|
|
|
228
221
|
if index[:bucketSize] || index['bucketSize']
|
|
229
|
-
client.log_warn(
|
|
222
|
+
client.log_warn('Haystack indexes (bucketSize index option) are deprecated as of MongoDB 4.4')
|
|
230
223
|
end
|
|
231
224
|
end
|
|
232
225
|
|
|
@@ -244,7 +237,14 @@ module Mongo
|
|
|
244
237
|
session: session,
|
|
245
238
|
operation_timeouts: operation_timeouts(options)
|
|
246
239
|
)
|
|
247
|
-
Operation::CreateIndex.new(spec)
|
|
240
|
+
operation = Operation::CreateIndex.new(spec)
|
|
241
|
+
tracer.trace_operation(operation, context, op_name: 'createIndexes') do
|
|
242
|
+
retry_enabled = collection.client.options[:retry_writes] != false
|
|
243
|
+
with_overload_retry(context: context, retry_enabled: retry_enabled) do
|
|
244
|
+
server = next_primary(nil, session)
|
|
245
|
+
operation.execute(server, context: context)
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
248
|
end
|
|
249
249
|
end
|
|
250
250
|
|
|
@@ -283,16 +283,16 @@ module Mongo
|
|
|
283
283
|
session: session,
|
|
284
284
|
operation_timeouts: operation_timeouts(@options)
|
|
285
285
|
)
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
286
|
+
op = initial_query_op(session)
|
|
287
|
+
tracer.trace_operation(op, context, op_name: 'listIndexes') do
|
|
288
|
+
cursor = read_with_retry_cursor(session, ServerSelector.primary, self, context: context) do |server|
|
|
289
|
+
send_initial_query(op, server, session, context)
|
|
290
|
+
end
|
|
291
|
+
if block_given?
|
|
292
|
+
cursor.each(&block)
|
|
293
|
+
else
|
|
294
|
+
cursor.to_enum
|
|
293
295
|
end
|
|
294
|
-
else
|
|
295
|
-
cursor.to_enum
|
|
296
296
|
end
|
|
297
297
|
end
|
|
298
298
|
|
|
@@ -359,13 +359,20 @@ module Mongo
|
|
|
359
359
|
write_concern: write_concern,
|
|
360
360
|
}
|
|
361
361
|
spec[:comment] = opts[:comment] unless opts[:comment].nil?
|
|
362
|
-
server = next_primary(nil, session)
|
|
363
362
|
context = Operation::Context.new(
|
|
364
363
|
client: client,
|
|
365
364
|
session: session,
|
|
366
365
|
operation_timeouts: operation_timeouts(opts)
|
|
367
366
|
)
|
|
368
|
-
Operation::DropIndex.new(spec)
|
|
367
|
+
op = Operation::DropIndex.new(spec)
|
|
368
|
+
op_name = (name == Index::ALL) ? 'dropIndexes' : 'dropIndex'
|
|
369
|
+
tracer.trace_operation(op, context, op_name: op_name) do
|
|
370
|
+
retry_enabled = collection.client.options[:retry_writes] != false
|
|
371
|
+
with_overload_retry(context: context, retry_enabled: retry_enabled) do
|
|
372
|
+
server = next_primary(nil, session)
|
|
373
|
+
op.execute(server, context: context)
|
|
374
|
+
end
|
|
375
|
+
end
|
|
369
376
|
end
|
|
370
377
|
end
|
|
371
378
|
|
|
@@ -376,25 +383,28 @@ module Mongo
|
|
|
376
383
|
def indexes_spec(session)
|
|
377
384
|
{ selector: {
|
|
378
385
|
listIndexes: collection.name,
|
|
379
|
-
cursor: batch_size ? { batchSize: batch_size } : {}
|
|
386
|
+
cursor: batch_size ? { batchSize: batch_size } : {}
|
|
387
|
+
},
|
|
380
388
|
coll_name: collection.name,
|
|
381
389
|
db_name: database.name,
|
|
382
|
-
session: session
|
|
383
|
-
}
|
|
390
|
+
session: session }
|
|
384
391
|
end
|
|
385
392
|
|
|
386
393
|
def initial_query_op(session)
|
|
387
394
|
Operation::Indexes.new(indexes_spec(session))
|
|
388
395
|
end
|
|
389
396
|
|
|
390
|
-
def limit
|
|
397
|
+
def limit
|
|
398
|
+
-1
|
|
399
|
+
end
|
|
391
400
|
|
|
392
401
|
def normalize_keys(spec)
|
|
393
402
|
return false if spec.is_a?(String)
|
|
403
|
+
|
|
394
404
|
Options::Mapper.transform_keys_to_strings(spec)
|
|
395
405
|
end
|
|
396
406
|
|
|
397
|
-
def normalize_models(models
|
|
407
|
+
def normalize_models(models)
|
|
398
408
|
models.map do |model|
|
|
399
409
|
# Transform options first which gives us a mutable hash
|
|
400
410
|
Options::Mapper.transform(model, OPTIONS).tap do |model|
|
|
@@ -403,12 +413,12 @@ module Mongo
|
|
|
403
413
|
end
|
|
404
414
|
end
|
|
405
415
|
|
|
406
|
-
def send_initial_query(server,
|
|
416
|
+
def send_initial_query(op, server, _session, context)
|
|
407
417
|
if server.load_balancer?
|
|
408
418
|
connection = server.pool.check_out(context: context)
|
|
409
|
-
|
|
419
|
+
op.execute_with_connection(connection, context: context)
|
|
410
420
|
else
|
|
411
|
-
|
|
421
|
+
op.execute(server, context: context)
|
|
412
422
|
end
|
|
413
423
|
end
|
|
414
424
|
end
|
data/lib/mongo/index.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
|
#
|
|
@@ -18,16 +17,14 @@
|
|
|
18
17
|
require 'mongo/index/view'
|
|
19
18
|
|
|
20
19
|
module Mongo
|
|
21
|
-
|
|
22
20
|
# Contains constants for indexing purposes.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
module Index
|
|
26
|
-
|
|
27
24
|
# Wildcard constant for all.
|
|
28
25
|
#
|
|
29
26
|
# @since 2.1.0
|
|
30
|
-
ALL = '*'
|
|
27
|
+
ALL = '*'
|
|
31
28
|
|
|
32
29
|
# Specify ascending order for an index.
|
|
33
30
|
#
|
|
@@ -42,32 +39,32 @@ module Mongo
|
|
|
42
39
|
# Specify a 2d Geo index.
|
|
43
40
|
#
|
|
44
41
|
# @since 2.0.0
|
|
45
|
-
GEO2D = '2d'
|
|
42
|
+
GEO2D = '2d'
|
|
46
43
|
|
|
47
44
|
# Specify a 2d sphere Geo index.
|
|
48
45
|
#
|
|
49
46
|
# @since 2.0.0
|
|
50
|
-
GEO2DSPHERE = '2dsphere'
|
|
47
|
+
GEO2DSPHERE = '2dsphere'
|
|
51
48
|
|
|
52
49
|
# Specify a geoHaystack index.
|
|
53
50
|
#
|
|
54
51
|
# @since 2.0.0
|
|
55
52
|
# @deprecated
|
|
56
|
-
GEOHAYSTACK = 'geoHaystack'
|
|
53
|
+
GEOHAYSTACK = 'geoHaystack'
|
|
57
54
|
|
|
58
55
|
# Encodes a text index.
|
|
59
56
|
#
|
|
60
57
|
# @since 2.0.0
|
|
61
|
-
TEXT = 'text'
|
|
58
|
+
TEXT = 'text'
|
|
62
59
|
|
|
63
60
|
# Specify a hashed index.
|
|
64
61
|
#
|
|
65
62
|
# @since 2.0.0
|
|
66
|
-
HASHED = 'hashed'
|
|
63
|
+
HASHED = 'hashed'
|
|
67
64
|
|
|
68
65
|
# Constant for the indexes collection.
|
|
69
66
|
#
|
|
70
67
|
# @since 2.0.0
|
|
71
|
-
COLLECTION = 'system.indexes'
|
|
68
|
+
COLLECTION = 'system.indexes'
|
|
72
69
|
end
|
|
73
70
|
end
|
data/lib/mongo/lint.rb
CHANGED
|
@@ -1,57 +1,52 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongo
|
|
5
|
-
|
|
6
4
|
# @api private
|
|
7
5
|
module Lint
|
|
8
|
-
|
|
9
6
|
# Raises LintError if +obj+ is not of type +cls+.
|
|
10
7
|
def assert_type(obj, cls)
|
|
11
8
|
return unless enabled?
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
return if obj.is_a?(cls)
|
|
10
|
+
|
|
11
|
+
raise Error::LintError, "Expected #{obj} to be a #{cls}"
|
|
15
12
|
end
|
|
16
13
|
module_function :assert_type
|
|
17
14
|
|
|
18
15
|
def validate_underscore_read_preference(read_pref)
|
|
19
16
|
return unless enabled?
|
|
20
17
|
return if read_pref.nil?
|
|
21
|
-
unless read_pref.is_a?(Hash)
|
|
22
|
-
|
|
23
|
-
end
|
|
18
|
+
raise Error::LintError, "Read preference is not a hash: #{read_pref}" unless read_pref.is_a?(Hash)
|
|
19
|
+
|
|
24
20
|
validate_underscore_read_preference_mode(read_pref[:mode] || read_pref['mode'])
|
|
25
21
|
end
|
|
26
22
|
module_function :validate_underscore_read_preference
|
|
27
23
|
|
|
28
24
|
def validate_underscore_read_preference_mode(mode)
|
|
29
25
|
return unless enabled?
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
|
|
27
|
+
return unless mode
|
|
28
|
+
return if %w[primary primary_preferred secondary secondary_preferred nearest].include?(mode.to_s)
|
|
29
|
+
|
|
30
|
+
raise Error::LintError, "Invalid read preference mode: #{mode}"
|
|
35
31
|
end
|
|
36
32
|
module_function :validate_underscore_read_preference_mode
|
|
37
33
|
|
|
38
34
|
def validate_camel_case_read_preference(read_pref)
|
|
39
35
|
return unless enabled?
|
|
40
36
|
return if read_pref.nil?
|
|
41
|
-
unless read_pref.is_a?(Hash)
|
|
42
|
-
|
|
43
|
-
end
|
|
37
|
+
raise Error::LintError, "Read preference is not a hash: #{read_pref}" unless read_pref.is_a?(Hash)
|
|
38
|
+
|
|
44
39
|
validate_camel_case_read_preference_mode(read_pref[:mode] || read_pref['mode'])
|
|
45
40
|
end
|
|
46
41
|
module_function :validate_camel_case_read_preference
|
|
47
42
|
|
|
48
43
|
def validate_camel_case_read_preference_mode(mode)
|
|
49
44
|
return unless enabled?
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
|
|
46
|
+
return unless mode
|
|
47
|
+
return if %w[primary primaryPreferred secondary secondaryPreferred nearest].include?(mode.to_s)
|
|
48
|
+
|
|
49
|
+
raise Error::LintError, "Invalid read preference mode: #{mode}"
|
|
55
50
|
end
|
|
56
51
|
module_function :validate_camel_case_read_preference_mode
|
|
57
52
|
|
|
@@ -76,29 +71,28 @@ module Mongo
|
|
|
76
71
|
def validate_read_concern_option(read_concern)
|
|
77
72
|
return unless enabled?
|
|
78
73
|
return if read_concern.nil?
|
|
79
|
-
unless read_concern.is_a?(Hash)
|
|
80
|
-
raise Error::LintError, "Read concern is not a hash: #{read_concern}"
|
|
81
|
-
end
|
|
74
|
+
raise Error::LintError, "Read concern is not a hash: #{read_concern}" unless read_concern.is_a?(Hash)
|
|
82
75
|
return if read_concern.empty?
|
|
76
|
+
|
|
83
77
|
keys = read_concern.keys
|
|
84
|
-
if read_concern.is_a?(BSON::Document)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if keys != allowed_keys
|
|
92
|
-
|
|
93
|
-
end
|
|
78
|
+
allowed_keys = if read_concern.is_a?(BSON::Document)
|
|
79
|
+
# Permits indifferent access
|
|
80
|
+
[ 'level' ]
|
|
81
|
+
else
|
|
82
|
+
# Does not permit indifferent access
|
|
83
|
+
[ :level ]
|
|
84
|
+
end
|
|
85
|
+
raise Error::LintError, "Read concern has invalid keys: #{keys.inspect}" if keys != allowed_keys
|
|
86
|
+
|
|
94
87
|
level = read_concern[:level]
|
|
95
|
-
return if [
|
|
88
|
+
return if %i[local available majority linearizable snapshot].include?(level)
|
|
89
|
+
|
|
96
90
|
raise Error::LintError, "Read concern level is invalid: value must be a symbol: #{level.inspect}"
|
|
97
91
|
end
|
|
98
92
|
module_function :validate_read_concern_option
|
|
99
93
|
|
|
100
94
|
def enabled?
|
|
101
|
-
ENV['MONGO_RUBY_DRIVER_LINT'] && %w
|
|
95
|
+
ENV['MONGO_RUBY_DRIVER_LINT'] && %w[1 yes true on].include?(ENV['MONGO_RUBY_DRIVER_LINT'].downcase)
|
|
102
96
|
end
|
|
103
97
|
module_function :enabled?
|
|
104
98
|
end
|
data/lib/mongo/loggable.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,16 +15,14 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
|
-
|
|
20
18
|
# Allows objects to easily log operations.
|
|
21
19
|
#
|
|
22
20
|
# @since 2.0.0
|
|
23
21
|
module Loggable
|
|
24
|
-
|
|
25
22
|
# The standard MongoDB log prefix.
|
|
26
23
|
#
|
|
27
24
|
# @since 2.0.0
|
|
28
|
-
PREFIX = 'MONGODB'
|
|
25
|
+
PREFIX = 'MONGODB'
|
|
29
26
|
|
|
30
27
|
# Convenience method to log debug messages with the standard prefix.
|
|
31
28
|
#
|
|
@@ -41,7 +38,7 @@ module Mongo
|
|
|
41
38
|
|
|
42
39
|
# Convenience method to log error messages with the standard prefix.
|
|
43
40
|
#
|
|
44
|
-
# @example Log
|
|
41
|
+
# @example Log an error message.
|
|
45
42
|
# log_error('Message')
|
|
46
43
|
#
|
|
47
44
|
# @param [ String ] message The message to log.
|
|
@@ -65,7 +62,7 @@ module Mongo
|
|
|
65
62
|
|
|
66
63
|
# Convenience method to log info messages with the standard prefix.
|
|
67
64
|
#
|
|
68
|
-
# @example Log
|
|
65
|
+
# @example Log an info message.
|
|
69
66
|
# log_info('Message')
|
|
70
67
|
#
|
|
71
68
|
# @param [ String ] message The message to log.
|
|
@@ -96,13 +93,13 @@ module Mongo
|
|
|
96
93
|
#
|
|
97
94
|
# @since 2.1.0
|
|
98
95
|
def logger
|
|
99
|
-
(
|
|
96
|
+
(respond_to?(:options) && options && options[:logger]) || Logger.logger
|
|
100
97
|
end
|
|
101
98
|
|
|
102
99
|
private
|
|
103
100
|
|
|
104
101
|
def format_message(message)
|
|
105
|
-
format(
|
|
102
|
+
format('%s | %s', _mongo_log_prefix, message)
|
|
106
103
|
end
|
|
107
104
|
|
|
108
105
|
def _mongo_log_prefix
|
data/lib/mongo/logger.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,14 +15,11 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
|
-
|
|
20
18
|
# Provides ability to log messages.
|
|
21
19
|
#
|
|
22
20
|
# @since 2.0.0
|
|
23
21
|
class Logger
|
|
24
|
-
|
|
25
22
|
class << self
|
|
26
|
-
|
|
27
23
|
# Get the wrapped logger. If none was set will return a default info
|
|
28
24
|
# level logger.
|
|
29
25
|
#
|
|
@@ -47,9 +43,7 @@ module Mongo
|
|
|
47
43
|
# @return [ ::Logger ] The wrapped logger.
|
|
48
44
|
#
|
|
49
45
|
# @since 2.0.0
|
|
50
|
-
|
|
51
|
-
@logger = other
|
|
52
|
-
end
|
|
46
|
+
attr_writer :logger
|
|
53
47
|
|
|
54
48
|
# Get the global logger level.
|
|
55
49
|
#
|
|
@@ -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,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
|
-
|
|
21
19
|
# Subscribes to command events and logs them.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.1.0
|
|
@@ -56,14 +54,13 @@ module Mongo
|
|
|
56
54
|
#
|
|
57
55
|
# @since 2.1.0
|
|
58
56
|
def started(event)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
end
|
|
57
|
+
return unless logger.debug?
|
|
58
|
+
|
|
59
|
+
_prefix = prefix(event,
|
|
60
|
+
connection_generation: event.connection_generation,
|
|
61
|
+
connection_id: event.connection_id,
|
|
62
|
+
server_connection_id: event.server_connection_id)
|
|
63
|
+
log_debug("#{_prefix} | STARTED | #{format_command(event.command)}")
|
|
67
64
|
end
|
|
68
65
|
|
|
69
66
|
# Handle the command succeeded event.
|
|
@@ -75,9 +72,9 @@ module Mongo
|
|
|
75
72
|
#
|
|
76
73
|
# @since 2.1.0
|
|
77
74
|
def succeeded(event)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
return unless logger.debug?
|
|
76
|
+
|
|
77
|
+
log_debug("#{prefix(event)} | SUCCEEDED | #{'%.3f' % event.duration}s")
|
|
81
78
|
end
|
|
82
79
|
|
|
83
80
|
# Handle the command failed event.
|
|
@@ -89,34 +86,29 @@ module Mongo
|
|
|
89
86
|
#
|
|
90
87
|
# @since 2.1.0
|
|
91
88
|
def failed(event)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
return unless logger.debug?
|
|
90
|
+
|
|
91
|
+
log_debug("#{prefix(event)} | FAILED | #{event.message} | #{event.duration}s")
|
|
95
92
|
end
|
|
96
93
|
|
|
97
94
|
private
|
|
98
95
|
|
|
99
96
|
def format_command(args)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
'<Unable to inspect arguments>'
|
|
104
|
-
end
|
|
97
|
+
truncating? ? truncate(args) : args.inspect
|
|
98
|
+
rescue Exception
|
|
99
|
+
'<Unable to inspect arguments>'
|
|
105
100
|
end
|
|
106
101
|
|
|
107
102
|
def prefix(event, connection_generation: nil, connection_id: nil,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
extra =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
extra += " sconn:#{server_connection_id}"
|
|
118
|
-
end
|
|
119
|
-
"#{event.address.to_s} req:#{event.request_id}#{extra && " #{extra}"} | " +
|
|
103
|
+
server_connection_id: nil)
|
|
104
|
+
extra = [ connection_generation, connection_id ].compact.join(':')
|
|
105
|
+
extra = if extra == ''
|
|
106
|
+
nil
|
|
107
|
+
else
|
|
108
|
+
"conn:#{extra}"
|
|
109
|
+
end
|
|
110
|
+
extra += " sconn:#{server_connection_id}" if server_connection_id
|
|
111
|
+
"#{event.address} req:#{event.request_id}#{extra && " #{extra}"} | " +
|
|
120
112
|
"#{event.database_name}.#{event.command_name}"
|
|
121
113
|
end
|
|
122
114
|
|
|
@@ -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
|
#
|
|
@@ -19,12 +18,10 @@ module Mongo
|
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
20
|
module Cmap
|
|
22
|
-
|
|
23
21
|
# Event published when a connection is unable to be checked out of a pool.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class ConnectionCheckOutFailed < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Symbol ] POOL_CLOSED Indicates that the connection check
|
|
29
26
|
# out failed due to the pool already being closed.
|
|
30
27
|
#
|
|
@@ -79,7 +76,7 @@ module Mongo
|
|
|
79
76
|
# @api experimental
|
|
80
77
|
def summary
|
|
81
78
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} address=#{address} " +
|
|
82
|
-
|
|
79
|
+
"reason=#{reason}>"
|
|
83
80
|
end
|
|
84
81
|
end
|
|
85
82
|
end
|