mongo 2.23.0 → 2.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/mongo_console +0 -1
- data/lib/mongo/active_support.rb +1 -2
- data/lib/mongo/address/ipv4.rb +3 -6
- data/lib/mongo/address/ipv6.rb +6 -10
- data/lib/mongo/address/unix.rb +1 -4
- data/lib/mongo/address/validator.rb +16 -28
- data/lib/mongo/address.rb +30 -40
- data/lib/mongo/auth/aws/conversation.rb +6 -10
- data/lib/mongo/auth/aws/credentials.rb +0 -1
- data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
- data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
- data/lib/mongo/auth/aws/request.rb +20 -35
- data/lib/mongo/auth/aws.rb +1 -2
- data/lib/mongo/auth/base.rb +20 -29
- data/lib/mongo/auth/conversation_base.rb +14 -18
- data/lib/mongo/auth/cr/conversation.rb +0 -3
- data/lib/mongo/auth/cr.rb +1 -4
- data/lib/mongo/auth/credential_cache.rb +0 -2
- data/lib/mongo/auth/gssapi/conversation.rb +3 -8
- data/lib/mongo/auth/gssapi.rb +1 -4
- data/lib/mongo/auth/ldap/conversation.rb +0 -3
- data/lib/mongo/auth/ldap.rb +1 -4
- data/lib/mongo/auth/roles.rb +16 -19
- data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
- data/lib/mongo/auth/scram/conversation.rb +2 -5
- data/lib/mongo/auth/scram.rb +5 -10
- data/lib/mongo/auth/scram256/conversation.rb +2 -5
- data/lib/mongo/auth/scram256.rb +1 -3
- data/lib/mongo/auth/scram_conversation_base.rb +18 -24
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
- data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
- data/lib/mongo/auth/stringprep.rb +9 -12
- data/lib/mongo/auth/user/view.rb +3 -5
- data/lib/mongo/auth/user.rb +14 -24
- data/lib/mongo/auth/x509/conversation.rb +0 -3
- data/lib/mongo/auth/x509.rb +7 -9
- data/lib/mongo/auth.rb +18 -30
- data/lib/mongo/background_thread.rb +9 -17
- data/lib/mongo/bson.rb +0 -2
- data/lib/mongo/bulk_write/combineable.rb +0 -3
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/result.rb +11 -16
- data/lib/mongo/bulk_write/result_combiner.rb +9 -12
- data/lib/mongo/bulk_write/transformable.rb +16 -19
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/validatable.rb +11 -18
- data/lib/mongo/bulk_write.rb +76 -91
- data/lib/mongo/caching_cursor.rb +2 -7
- data/lib/mongo/client.rb +230 -275
- data/lib/mongo/client_encryption.rb +4 -5
- data/lib/mongo/cluster/periodic_executor.rb +2 -5
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
- data/lib/mongo/cluster/sdam_flow.rb +136 -159
- data/lib/mongo/cluster/topology/base.rb +15 -18
- data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
- data/lib/mongo/cluster/topology/sharded.rb +19 -9
- data/lib/mongo/cluster/topology/single.rb +24 -14
- data/lib/mongo/cluster/topology/unknown.rb +20 -10
- data/lib/mongo/cluster/topology.rb +29 -25
- data/lib/mongo/cluster.rb +148 -183
- data/lib/mongo/cluster_time.rb +14 -31
- data/lib/mongo/collection/helpers.rb +5 -8
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
- data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
- data/lib/mongo/collection/view/builder.rb +0 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
- data/lib/mongo/collection/view/change_stream.rb +59 -58
- data/lib/mongo/collection/view/explainable.rb +11 -20
- data/lib/mongo/collection/view/immutable.rb +1 -3
- data/lib/mongo/collection/view/iterable.rb +35 -28
- data/lib/mongo/collection/view/map_reduce.rb +20 -25
- data/lib/mongo/collection/view/readable.rb +50 -57
- data/lib/mongo/collection/view/writable.rb +56 -72
- data/lib/mongo/collection/view.rb +9 -8
- data/lib/mongo/collection.rb +63 -76
- data/lib/mongo/condition_variable.rb +4 -4
- data/lib/mongo/config/options.rb +0 -3
- data/lib/mongo/config/validators/option.rb +3 -5
- data/lib/mongo/config.rb +2 -4
- data/lib/mongo/crypt/auto_decryption_context.rb +0 -3
- data/lib/mongo/crypt/auto_encrypter.rb +34 -43
- data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
- data/lib/mongo/crypt/binary.rb +5 -9
- data/lib/mongo/crypt/binding.rb +149 -155
- data/lib/mongo/crypt/context.rb +10 -17
- data/lib/mongo/crypt/data_key_context.rb +2 -7
- data/lib/mongo/crypt/encryption_io.rb +29 -39
- data/lib/mongo/crypt/explicit_decryption_context.rb +0 -3
- data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
- data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
- data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
- data/lib/mongo/crypt/handle.rb +42 -48
- data/lib/mongo/crypt/hooks.rb +12 -15
- data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
- data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
- data/lib/mongo/crypt/kms/aws.rb +0 -2
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
- data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
- data/lib/mongo/crypt/kms/azure.rb +0 -1
- data/lib/mongo/crypt/kms/credentials.rb +13 -27
- data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
- data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
- data/lib/mongo/crypt/kms/gcp.rb +0 -2
- data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
- data/lib/mongo/crypt/kms/kmip.rb +0 -1
- data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
- data/lib/mongo/crypt/kms/local.rb +0 -1
- data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
- data/lib/mongo/crypt/kms.rb +14 -16
- data/lib/mongo/crypt/kms_context.rb +0 -2
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
- data/lib/mongo/crypt/status.rb +12 -14
- data/lib/mongo/crypt.rb +0 -1
- data/lib/mongo/csot_timeout_holder.rb +3 -2
- data/lib/mongo/cursor/kill_spec.rb +7 -10
- data/lib/mongo/cursor.rb +74 -64
- data/lib/mongo/cursor_host.rb +8 -10
- data/lib/mongo/database/view.rb +16 -37
- data/lib/mongo/database.rb +52 -56
- data/lib/mongo/dbref.rb +0 -1
- data/lib/mongo/distinguishing_semaphore.rb +0 -1
- data/lib/mongo/error/auth_error.rb +0 -2
- data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
- data/lib/mongo/error/bulk_write_error.rb +7 -10
- data/lib/mongo/error/change_stream_resumable.rb +0 -2
- data/lib/mongo/error/client_closed.rb +0 -2
- data/lib/mongo/error/closed_stream.rb +1 -4
- data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
- data/lib/mongo/error/connection_perished.rb +0 -2
- data/lib/mongo/error/connection_unavailable.rb +0 -2
- data/lib/mongo/error/credential_check_error.rb +0 -2
- data/lib/mongo/error/crypt_error.rb +0 -2
- data/lib/mongo/error/extra_file_chunk.rb +1 -4
- data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
- data/lib/mongo/error/file_not_found.rb +0 -3
- data/lib/mongo/error/handshake_error.rb +0 -2
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
- data/lib/mongo/error/internal_driver_error.rb +0 -2
- data/lib/mongo/error/invalid_address.rb +0 -2
- data/lib/mongo/error/invalid_application_name.rb +0 -3
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
- data/lib/mongo/error/invalid_collection_name.rb +1 -4
- data/lib/mongo/error/invalid_config_option.rb +0 -3
- data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
- data/lib/mongo/error/invalid_database_name.rb +1 -4
- data/lib/mongo/error/invalid_document.rb +1 -4
- data/lib/mongo/error/invalid_file.rb +0 -3
- data/lib/mongo/error/invalid_file_revision.rb +0 -3
- data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
- data/lib/mongo/error/invalid_nonce.rb +0 -3
- data/lib/mongo/error/invalid_read_concern.rb +2 -4
- data/lib/mongo/error/invalid_read_option.rb +0 -3
- data/lib/mongo/error/invalid_replacement_document.rb +2 -5
- data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
- data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
- data/lib/mongo/error/invalid_server_preference.rb +7 -16
- data/lib/mongo/error/invalid_session.rb +1 -4
- data/lib/mongo/error/invalid_signature.rb +0 -3
- data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
- data/lib/mongo/error/invalid_txt_record.rb +0 -2
- data/lib/mongo/error/invalid_update_document.rb +2 -5
- data/lib/mongo/error/invalid_uri.rb +1 -4
- data/lib/mongo/error/invalid_write_concern.rb +2 -5
- data/lib/mongo/error/kms_error.rb +0 -2
- data/lib/mongo/error/labelable.rb +0 -3
- data/lib/mongo/error/lint_error.rb +0 -2
- data/lib/mongo/error/max_bson_size.rb +8 -11
- data/lib/mongo/error/max_message_size.rb +2 -5
- data/lib/mongo/error/mismatched_domain.rb +0 -2
- data/lib/mongo/error/missing_connection.rb +0 -2
- data/lib/mongo/error/missing_file_chunk.rb +0 -3
- data/lib/mongo/error/missing_password.rb +0 -2
- data/lib/mongo/error/missing_resume_token.rb +1 -4
- data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
- data/lib/mongo/error/missing_service_id.rb +0 -2
- data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
- data/lib/mongo/error/multi_index_drop.rb +0 -3
- data/lib/mongo/error/need_primary_server.rb +0 -2
- data/lib/mongo/error/no_server_available.rb +3 -8
- data/lib/mongo/error/no_service_connection_available.rb +1 -3
- data/lib/mongo/error/no_srv_records.rb +0 -2
- data/lib/mongo/error/notable.rb +8 -16
- data/lib/mongo/error/operation_failure.rb +22 -35
- data/lib/mongo/error/parser.rb +33 -75
- data/lib/mongo/error/pool_cleared_error.rb +1 -3
- data/lib/mongo/error/pool_closed_error.rb +0 -3
- data/lib/mongo/error/pool_error.rb +0 -3
- data/lib/mongo/error/pool_paused_error.rb +0 -2
- data/lib/mongo/error/raise_original_error.rb +1 -3
- data/lib/mongo/error/read_write_retryable.rb +14 -17
- data/lib/mongo/error/sdam_error_detection.rb +3 -5
- data/lib/mongo/error/server_api_conflict.rb +0 -2
- data/lib/mongo/error/server_certificate_revoked.rb +0 -2
- data/lib/mongo/error/server_not_usable.rb +0 -2
- data/lib/mongo/error/session_ended.rb +1 -3
- data/lib/mongo/error/session_not_materialized.rb +1 -3
- data/lib/mongo/error/sessions_not_supported.rb +1 -4
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
- data/lib/mongo/error/socket_error.rb +0 -2
- data/lib/mongo/error/socket_timeout_error.rb +0 -2
- data/lib/mongo/error/transactions_not_supported.rb +3 -6
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
- data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
- data/lib/mongo/error/unexpected_response.rb +1 -4
- data/lib/mongo/error/unknown_payload_type.rb +0 -3
- data/lib/mongo/error/unmet_dependency.rb +0 -2
- data/lib/mongo/error/unsupported_array_filters.rb +3 -24
- data/lib/mongo/error/unsupported_collation.rb +3 -24
- data/lib/mongo/error/unsupported_features.rb +0 -2
- data/lib/mongo/error/unsupported_message_type.rb +0 -2
- data/lib/mongo/error/unsupported_option.rb +19 -21
- data/lib/mongo/error/write_retryable.rb +0 -2
- data/lib/mongo/error.rb +10 -24
- data/lib/mongo/event/base.rb +0 -2
- data/lib/mongo/event/listeners.rb +0 -3
- data/lib/mongo/event/publisher.rb +0 -3
- data/lib/mongo/event/subscriber.rb +0 -4
- data/lib/mongo/event.rb +4 -6
- data/lib/mongo/grid/file/chunk.rb +7 -10
- data/lib/mongo/grid/file/info.rb +20 -24
- data/lib/mongo/grid/file.rb +7 -8
- data/lib/mongo/grid/fs_bucket.rb +40 -48
- data/lib/mongo/grid/stream/read.rb +25 -35
- data/lib/mongo/grid/stream/write.rb +17 -22
- data/lib/mongo/grid/stream.rb +2 -4
- data/lib/mongo/grid.rb +0 -1
- data/lib/mongo/id.rb +0 -1
- data/lib/mongo/index/view.rb +49 -48
- data/lib/mongo/index.rb +7 -10
- data/lib/mongo/lint.rb +31 -37
- data/lib/mongo/loggable.rb +5 -8
- data/lib/mongo/logger.rb +1 -7
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
- data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap.rb +0 -1
- data/lib/mongo/monitoring/event/command_failed.rb +5 -9
- data/lib/mongo/monitoring/event/command_started.rb +8 -12
- data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
- data/lib/mongo/monitoring/event/secure.rb +15 -20
- data/lib/mongo/monitoring/event/server_closed.rb +1 -4
- data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
- data/lib/mongo/monitoring/event/server_opening.rb +1 -4
- data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
- data/lib/mongo/monitoring/event.rb +0 -1
- data/lib/mongo/monitoring/publishable.rb +20 -30
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
- data/lib/mongo/monitoring.rb +38 -39
- data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
- data/lib/mongo/operation/aggregate/result.rb +3 -6
- data/lib/mongo/operation/aggregate.rb +0 -2
- data/lib/mongo/operation/collections_info/result.rb +0 -3
- data/lib/mongo/operation/collections_info.rb +0 -2
- data/lib/mongo/operation/command/op_msg.rb +1 -4
- data/lib/mongo/operation/command.rb +0 -2
- data/lib/mongo/operation/context.rb +13 -16
- data/lib/mongo/operation/count/op_msg.rb +2 -4
- data/lib/mongo/operation/count.rb +0 -2
- data/lib/mongo/operation/create/op_msg.rb +2 -5
- data/lib/mongo/operation/create.rb +0 -2
- data/lib/mongo/operation/create_index/op_msg.rb +3 -7
- data/lib/mongo/operation/create_index.rb +0 -2
- data/lib/mongo/operation/create_user/op_msg.rb +2 -4
- data/lib/mongo/operation/create_user.rb +0 -2
- data/lib/mongo/operation/delete/bulk_result.rb +2 -3
- data/lib/mongo/operation/delete/op_msg.rb +3 -10
- data/lib/mongo/operation/delete/result.rb +0 -3
- data/lib/mongo/operation/delete.rb +1 -5
- data/lib/mongo/operation/distinct/op_msg.rb +2 -5
- data/lib/mongo/operation/distinct.rb +0 -2
- data/lib/mongo/operation/drop/op_msg.rb +0 -2
- data/lib/mongo/operation/drop.rb +0 -2
- data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
- data/lib/mongo/operation/drop_database.rb +0 -2
- data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
- data/lib/mongo/operation/drop_index.rb +0 -2
- data/lib/mongo/operation/explain/op_msg.rb +0 -2
- data/lib/mongo/operation/explain/result.rb +0 -3
- data/lib/mongo/operation/explain.rb +0 -2
- data/lib/mongo/operation/find/builder/command.rb +4 -12
- data/lib/mongo/operation/find/builder/flags.rb +9 -15
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
- data/lib/mongo/operation/find/builder.rb +0 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -12
- data/lib/mongo/operation/find/result.rb +0 -3
- data/lib/mongo/operation/find.rb +0 -2
- data/lib/mongo/operation/get_more/command_builder.rb +1 -6
- data/lib/mongo/operation/get_more/op_msg.rb +10 -4
- data/lib/mongo/operation/get_more/result.rb +0 -3
- data/lib/mongo/operation/get_more.rb +0 -2
- data/lib/mongo/operation/indexes/op_msg.rb +0 -2
- data/lib/mongo/operation/indexes/result.rb +1 -5
- data/lib/mongo/operation/indexes.rb +0 -2
- data/lib/mongo/operation/insert/bulk_result.rb +2 -6
- data/lib/mongo/operation/insert/op_msg.rb +2 -4
- data/lib/mongo/operation/insert/result.rb +0 -3
- data/lib/mongo/operation/insert.rb +2 -5
- data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
- data/lib/mongo/operation/kill_cursors.rb +0 -2
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
- data/lib/mongo/operation/list_collections/result.rb +1 -4
- data/lib/mongo/operation/list_collections.rb +0 -2
- data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
- data/lib/mongo/operation/map_reduce/result.rb +3 -6
- data/lib/mongo/operation/map_reduce.rb +0 -2
- data/lib/mongo/operation/op_msg_base.rb +0 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
- data/lib/mongo/operation/parallel_scan/result.rb +2 -5
- data/lib/mongo/operation/parallel_scan.rb +0 -2
- data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
- data/lib/mongo/operation/remove_user.rb +0 -2
- data/lib/mongo/operation/result.rb +38 -48
- data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
- data/lib/mongo/operation/shared/executable.rb +19 -28
- data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
- data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
- data/lib/mongo/operation/shared/idable.rb +3 -6
- data/lib/mongo/operation/shared/limited.rb +0 -3
- data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
- data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
- data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
- data/lib/mongo/operation/shared/response_handling.rb +13 -26
- data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
- data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
- data/lib/mongo/operation/shared/specifiable.rb +32 -58
- data/lib/mongo/operation/shared/write.rb +12 -17
- data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
- data/lib/mongo/operation/update/bulk_result.rb +13 -17
- data/lib/mongo/operation/update/op_msg.rb +2 -5
- data/lib/mongo/operation/update/result.rb +5 -5
- data/lib/mongo/operation/update.rb +1 -5
- data/lib/mongo/operation/update_user/op_msg.rb +2 -4
- data/lib/mongo/operation/update_user.rb +0 -2
- data/lib/mongo/operation/users_info/op_msg.rb +2 -4
- data/lib/mongo/operation/users_info/result.rb +1 -4
- data/lib/mongo/operation/users_info.rb +0 -2
- data/lib/mongo/operation/write_command/op_msg.rb +2 -10
- data/lib/mongo/operation/write_command.rb +0 -2
- data/lib/mongo/operation.rb +9 -14
- data/lib/mongo/options/mapper.rb +8 -15
- data/lib/mongo/options/redacted.rb +7 -9
- data/lib/mongo/options.rb +0 -1
- data/lib/mongo/protocol/bit_vector.rb +3 -5
- data/lib/mongo/protocol/caching_hash.rb +2 -7
- data/lib/mongo/protocol/compressed.rb +5 -10
- data/lib/mongo/protocol/get_more.rb +2 -8
- data/lib/mongo/protocol/kill_cursors.rb +2 -8
- data/lib/mongo/protocol/message.rb +103 -105
- data/lib/mongo/protocol/msg.rb +48 -63
- data/lib/mongo/protocol/query.rb +32 -41
- data/lib/mongo/protocol/registry.rb +2 -5
- data/lib/mongo/protocol/reply.rb +10 -16
- data/lib/mongo/protocol/serializers.rb +41 -59
- data/lib/mongo/protocol.rb +0 -1
- data/lib/mongo/query_cache.rb +7 -15
- data/lib/mongo/retryable/backpressure.rb +31 -0
- data/lib/mongo/retryable/base_worker.rb +39 -13
- data/lib/mongo/retryable/read_worker.rb +77 -21
- data/lib/mongo/retryable/retry_policy.rb +59 -0
- data/lib/mongo/retryable/write_worker.rb +155 -56
- data/lib/mongo/retryable.rb +70 -9
- data/lib/mongo/search_index/view.rb +1 -1
- data/lib/mongo/semaphore.rb +0 -1
- data/lib/mongo/server/app_metadata/environment.rb +3 -3
- data/lib/mongo/server/app_metadata.rb +4 -5
- data/lib/mongo/server/connection.rb +61 -61
- data/lib/mongo/server/connection_base.rb +43 -53
- data/lib/mongo/server/connection_common.rb +41 -64
- data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
- data/lib/mongo/server/connection_pool/populator.rb +1 -4
- data/lib/mongo/server/connection_pool.rb +195 -167
- data/lib/mongo/server/description/features.rb +23 -60
- data/lib/mongo/server/description/load_balancer.rb +0 -2
- data/lib/mongo/server/description.rb +117 -138
- data/lib/mongo/server/monitor/app_metadata.rb +3 -4
- data/lib/mongo/server/monitor/connection.rb +28 -35
- data/lib/mongo/server/monitor.rb +65 -60
- data/lib/mongo/server/pending_connection.rb +70 -71
- data/lib/mongo/server/push_monitor/connection.rb +0 -3
- data/lib/mongo/server/push_monitor.rb +21 -29
- data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
- data/lib/mongo/server.rb +60 -93
- data/lib/mongo/server_selector/base.rb +133 -157
- data/lib/mongo/server_selector/nearest.rb +2 -5
- data/lib/mongo/server_selector/primary.rb +1 -5
- data/lib/mongo/server_selector/primary_preferred.rb +2 -6
- data/lib/mongo/server_selector/secondary.rb +2 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
- data/lib/mongo/server_selector.rb +3 -4
- data/lib/mongo/session/server_session.rb +6 -7
- data/lib/mongo/session/session_pool.rb +20 -34
- data/lib/mongo/session.rb +287 -188
- data/lib/mongo/socket/ocsp_cache.rb +8 -13
- data/lib/mongo/socket/ocsp_verifier.rb +69 -70
- data/lib/mongo/socket/ssl.rb +44 -43
- data/lib/mongo/socket/tcp.rb +5 -8
- data/lib/mongo/socket/unix.rb +0 -4
- data/lib/mongo/socket.rb +80 -102
- data/lib/mongo/srv/monitor.rb +6 -11
- data/lib/mongo/srv/resolver.rb +15 -24
- data/lib/mongo/srv/result.rb +18 -24
- data/lib/mongo/srv.rb +0 -1
- data/lib/mongo/timeout.rb +4 -11
- data/lib/mongo/topology_version.rb +8 -13
- data/lib/mongo/tracing/open_telemetry/command_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +1 -1
- data/lib/mongo/tracing/open_telemetry/tracer.rb +1 -1
- data/lib/mongo/uri/options_mapper.rb +135 -126
- data/lib/mongo/uri/srv_protocol.rb +25 -38
- data/lib/mongo/uri.rb +95 -139
- data/lib/mongo/utils.rb +5 -12
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +0 -2
- data/lib/mongo/write_concern/base.rb +6 -6
- data/lib/mongo/write_concern/unacknowledged.rb +0 -2
- data/lib/mongo/write_concern.rb +14 -15
- data/lib/mongo.rb +1 -3
- data/mongo.gemspec +17 -17
- metadata +5 -5
- data/lib/mongo/error/server_api_not_supported.rb +0 -27
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
- data/lib/mongo/operation/shared/validatable.rb +0 -87
|
@@ -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
|
-
# Event published when a connection is successfully checked out out of a pool.
|
|
21
|
+
# Event published when a connection is successfully checked out of a pool.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class ConnectionCheckedOut < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Mongo::Address ] address The address of the server that the connection will
|
|
29
26
|
# connect to.
|
|
30
27
|
#
|
|
@@ -66,7 +63,7 @@ module Mongo
|
|
|
66
63
|
# @api experimental
|
|
67
64
|
def summary
|
|
68
65
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
69
|
-
|
|
66
|
+
"address=#{address} connection_id=#{connection_id} pool=0x#{pool.object_id}>"
|
|
70
67
|
end
|
|
71
68
|
end
|
|
72
69
|
end
|
|
@@ -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 closed.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class ConnectionClosed < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Symbol ] STALE Indicates that the connection was closed due to it being stale.
|
|
29
26
|
#
|
|
30
27
|
# @since 2.9.0
|
|
@@ -97,7 +94,7 @@ module Mongo
|
|
|
97
94
|
# @api experimental
|
|
98
95
|
def summary
|
|
99
96
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
100
|
-
|
|
97
|
+
"address=#{address} connection_id=#{connection_id} reason=#{reason}>"
|
|
101
98
|
end
|
|
102
99
|
end
|
|
103
100
|
end
|
|
@@ -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 created.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class ConnectionCreated < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Mongo::Address ] address The address of the server the connection will connect
|
|
29
26
|
# to.
|
|
30
27
|
#
|
|
@@ -58,7 +55,7 @@ module Mongo
|
|
|
58
55
|
# @api experimental
|
|
59
56
|
def summary
|
|
60
57
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
61
|
-
|
|
58
|
+
"address=#{address} connection_id=#{connection_id}>"
|
|
62
59
|
end
|
|
63
60
|
end
|
|
64
61
|
end
|
|
@@ -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 ready to be used for operations.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class ConnectionReady < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Mongo::Address ] address The address of the server the connection is connected
|
|
29
26
|
# to.
|
|
30
27
|
#
|
|
@@ -58,7 +55,7 @@ module Mongo
|
|
|
58
55
|
# @api experimental
|
|
59
56
|
def summary
|
|
60
57
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
61
|
-
|
|
58
|
+
"address=#{address} connection_id=#{connection_id}>"
|
|
62
59
|
end
|
|
63
60
|
end
|
|
64
61
|
end
|
|
@@ -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 pool is cleared.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class PoolCleared < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Mongo::Address ] address The address of the server the pool's connections will
|
|
29
26
|
# connect to.
|
|
30
27
|
#
|
|
@@ -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 pool is closed.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class PoolClosed < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Mongo::Address ] address The address of the server the pool's connections will
|
|
29
26
|
# connect to.
|
|
30
27
|
#
|
|
@@ -59,7 +56,7 @@ module Mongo
|
|
|
59
56
|
# @api experimental
|
|
60
57
|
def summary
|
|
61
58
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
62
|
-
|
|
59
|
+
"address=#{address} pool=0x#{pool.object_id}>"
|
|
63
60
|
end
|
|
64
61
|
end
|
|
65
62
|
end
|
|
@@ -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 pool is created.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.9.0
|
|
26
24
|
class PoolCreated < Base
|
|
27
|
-
|
|
28
25
|
# @return [ Mongo::Address ] address The address of the server the pool's connections will
|
|
29
26
|
# connect to.
|
|
30
27
|
#
|
|
@@ -66,7 +63,7 @@ module Mongo
|
|
|
66
63
|
# @api experimental
|
|
67
64
|
def summary
|
|
68
65
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
69
|
-
|
|
66
|
+
"address=#{address} options=#{options} pool=0x#{pool.object_id}>"
|
|
70
67
|
end
|
|
71
68
|
end
|
|
72
69
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2019-present MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -19,10 +18,8 @@ module Mongo
|
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
20
|
module Cmap
|
|
22
|
-
|
|
23
21
|
# Event published when a connection pool is marked ready.
|
|
24
22
|
class PoolReady < Base
|
|
25
|
-
|
|
26
23
|
# @return [ Mongo::Address ] address The address of the server the pool's connections will
|
|
27
24
|
# connect to.
|
|
28
25
|
attr_reader :address
|
|
@@ -58,7 +55,7 @@ module Mongo
|
|
|
58
55
|
# @api experimental
|
|
59
56
|
def summary
|
|
60
57
|
"#<#{self.class.name.sub(/^Mongo::Monitoring::Event::Cmap::/, '')} " +
|
|
61
|
-
|
|
58
|
+
"address=#{address} options=#{options} pool=0x#{pool.object_id}>"
|
|
62
59
|
end
|
|
63
60
|
end
|
|
64
61
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2015-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event that is fired when a command operation fails.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.1.0
|
|
@@ -83,9 +81,8 @@ module Mongo
|
|
|
83
81
|
#
|
|
84
82
|
# @api private
|
|
85
83
|
def initialize(command_name, database_name, address,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
)
|
|
84
|
+
request_id, operation_id, message, failure, duration,
|
|
85
|
+
started_event:, server_connection_id: nil, service_id: nil)
|
|
89
86
|
@command_name = command_name.to_s
|
|
90
87
|
@database_name = database_name
|
|
91
88
|
@address = address
|
|
@@ -130,9 +127,8 @@ module Mongo
|
|
|
130
127
|
# @since 2.1.0
|
|
131
128
|
# @api private
|
|
132
129
|
def self.generate(address, operation_id, payload, message,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
)
|
|
130
|
+
failure, duration, started_event:, server_connection_id: nil,
|
|
131
|
+
service_id: nil)
|
|
136
132
|
new(
|
|
137
133
|
payload[:command_name],
|
|
138
134
|
payload[:database_name],
|
|
@@ -144,7 +140,7 @@ module Mongo
|
|
|
144
140
|
duration,
|
|
145
141
|
started_event: started_event,
|
|
146
142
|
server_connection_id: server_connection_id,
|
|
147
|
-
service_id: service_id
|
|
143
|
+
service_id: service_id
|
|
148
144
|
)
|
|
149
145
|
end
|
|
150
146
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2015-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event that is fired when a command operation starts.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.1.0
|
|
@@ -83,10 +81,9 @@ module Mongo
|
|
|
83
81
|
# @since 2.1.0
|
|
84
82
|
# @api private
|
|
85
83
|
def initialize(command_name, database_name, address, request_id,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
)
|
|
84
|
+
operation_id, command, socket_object_id: nil, connection_id: nil,
|
|
85
|
+
connection_generation: nil, server_connection_id: nil,
|
|
86
|
+
service_id: nil)
|
|
90
87
|
@command_name = command_name.to_s
|
|
91
88
|
@database_name = database_name
|
|
92
89
|
@address = address
|
|
@@ -121,9 +118,9 @@ module Mongo
|
|
|
121
118
|
# @return [ String ] The command summary.
|
|
122
119
|
private def command_summary
|
|
123
120
|
command = self.command
|
|
124
|
-
remove_keys = %w
|
|
121
|
+
remove_keys = %w[$clusterTime lsid signature]
|
|
125
122
|
if remove_keys.any? { |k| command.key?(k) }
|
|
126
|
-
command = Hash[command.reject { |k,
|
|
123
|
+
command = Hash[command.reject { |k, _v| remove_keys.include?(k) }]
|
|
127
124
|
suffix = ' ...'
|
|
128
125
|
else
|
|
129
126
|
suffix = ''
|
|
@@ -148,9 +145,8 @@ module Mongo
|
|
|
148
145
|
# @since 2.1.0
|
|
149
146
|
# @api private
|
|
150
147
|
def self.generate(address, operation_id, payload,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
)
|
|
148
|
+
socket_object_id: nil, connection_id: nil, connection_generation: nil,
|
|
149
|
+
server_connection_id: nil, service_id: nil)
|
|
154
150
|
new(
|
|
155
151
|
payload[:command_name],
|
|
156
152
|
payload[:database_name],
|
|
@@ -167,7 +163,7 @@ module Mongo
|
|
|
167
163
|
connection_id: connection_id,
|
|
168
164
|
connection_generation: connection_generation,
|
|
169
165
|
server_connection_id: server_connection_id,
|
|
170
|
-
service_id: service_id
|
|
166
|
+
service_id: service_id
|
|
171
167
|
)
|
|
172
168
|
end
|
|
173
169
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2015-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event that is fired when a command operation succeeds.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.1.0
|
|
@@ -76,9 +74,8 @@ module Mongo
|
|
|
76
74
|
# @since 2.1.0
|
|
77
75
|
# @api private
|
|
78
76
|
def initialize(command_name, database_name, address, request_id,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
)
|
|
77
|
+
operation_id, reply, duration, started_event:,
|
|
78
|
+
server_connection_id: nil, service_id: nil)
|
|
82
79
|
@command_name = command_name.to_s
|
|
83
80
|
@database_name = database_name
|
|
84
81
|
@address = address
|
|
@@ -121,9 +118,8 @@ module Mongo
|
|
|
121
118
|
# @since 2.1.0
|
|
122
119
|
# @api private
|
|
123
120
|
def self.generate(address, operation_id, command_payload,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
)
|
|
121
|
+
reply_payload, duration, started_event:, server_connection_id: nil,
|
|
122
|
+
service_id: nil)
|
|
127
123
|
new(
|
|
128
124
|
command_payload[:command_name],
|
|
129
125
|
command_payload[:database_name],
|
|
@@ -134,19 +130,15 @@ module Mongo
|
|
|
134
130
|
duration,
|
|
135
131
|
started_event: started_event,
|
|
136
132
|
server_connection_id: server_connection_id,
|
|
137
|
-
service_id: service_id
|
|
133
|
+
service_id: service_id
|
|
138
134
|
)
|
|
139
135
|
end
|
|
140
136
|
|
|
141
|
-
private
|
|
142
|
-
|
|
143
137
|
def self.generate_reply(command_payload, reply_payload)
|
|
144
138
|
if reply_payload
|
|
145
139
|
reply = reply_payload[:reply]
|
|
146
|
-
if cursor = reply[:cursor]
|
|
147
|
-
|
|
148
|
-
cursor.merge!(Collection::NS => namespace(command_payload))
|
|
149
|
-
end
|
|
140
|
+
if (cursor = reply[:cursor]) && !cursor.key?(Collection::NS)
|
|
141
|
+
cursor.merge!(Collection::NS => namespace(command_payload))
|
|
150
142
|
end
|
|
151
143
|
reply
|
|
152
144
|
else
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2015-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,26 +17,24 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Provides behavior to redact sensitive information from commands and
|
|
23
21
|
# replies.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.1.0
|
|
26
24
|
module Secure
|
|
27
|
-
|
|
28
25
|
# The list of commands that has the data redacted for security.
|
|
29
26
|
#
|
|
30
27
|
# @since 2.1.0
|
|
31
|
-
REDACTED_COMMANDS = [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
REDACTED_COMMANDS = %w[
|
|
29
|
+
authenticate
|
|
30
|
+
saslStart
|
|
31
|
+
saslContinue
|
|
32
|
+
getnonce
|
|
33
|
+
createUser
|
|
34
|
+
updateUser
|
|
35
|
+
copydbgetnonce
|
|
36
|
+
copydbsaslstart
|
|
37
|
+
copydb
|
|
41
38
|
].freeze
|
|
42
39
|
|
|
43
40
|
# Check whether the command is sensitive in terms of command monitoring
|
|
@@ -52,10 +49,9 @@ module Mongo
|
|
|
52
49
|
def sensitive?(command_name:, document:)
|
|
53
50
|
if REDACTED_COMMANDS.include?(command_name.to_s)
|
|
54
51
|
true
|
|
55
|
-
elsif %w
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
# According to Command Monitoring spec,for hello/legacy hello commands
|
|
52
|
+
elsif %w[hello ismaster isMaster].include?(command_name.to_s) &&
|
|
53
|
+
document['speculativeAuthenticate']
|
|
54
|
+
# According to Command Monitoring spec, for hello/legacy hello commands
|
|
59
55
|
# when speculativeAuthenticate is present, their commands AND replies
|
|
60
56
|
# MUST be redacted from the events.
|
|
61
57
|
# See https://github.com/mongodb/specifications/blob/master/source/command-logging-and-monitoring/command-logging-and-monitoring.md#security
|
|
@@ -81,10 +77,10 @@ module Mongo
|
|
|
81
77
|
#
|
|
82
78
|
# @since 2.1.0
|
|
83
79
|
def redacted(command_name, document)
|
|
84
|
-
if %w
|
|
80
|
+
if %w[1 true yes].include?(ENV['MONGO_RUBY_DRIVER_UNREDACT_EVENTS']&.downcase)
|
|
85
81
|
document
|
|
86
82
|
elsif respond_to?(:started_event) && started_event.sensitive
|
|
87
|
-
|
|
83
|
+
BSON::Document.new
|
|
88
84
|
elsif sensitive?(command_name: command_name, document: document)
|
|
89
85
|
BSON::Document.new
|
|
90
86
|
else
|
|
@@ -92,7 +88,6 @@ module Mongo
|
|
|
92
88
|
end
|
|
93
89
|
end
|
|
94
90
|
|
|
95
|
-
|
|
96
91
|
# Is compression allowed for a given command message.
|
|
97
92
|
#
|
|
98
93
|
# @example Determine if compression is allowed for a given command.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2016-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,12 +17,10 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event fired when the server is closed.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.4.0
|
|
25
23
|
class ServerClosed < Mongo::Event::Base
|
|
26
|
-
|
|
27
24
|
# @return [ Address ] address The server address.
|
|
28
25
|
attr_reader :address
|
|
29
26
|
|
|
@@ -54,7 +51,7 @@ module Mongo
|
|
|
54
51
|
# @api experimental
|
|
55
52
|
def summary
|
|
56
53
|
"#<#{short_class_name}" +
|
|
57
|
-
|
|
54
|
+
" address=#{address} topology=#{topology.summary}>"
|
|
58
55
|
end
|
|
59
56
|
end
|
|
60
57
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2016-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,12 +17,10 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event fired when a server's description changes.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.4.0
|
|
25
23
|
class ServerDescriptionChanged < Mongo::Event::Base
|
|
26
|
-
|
|
27
24
|
# @return [ Address ] address The server address.
|
|
28
25
|
attr_reader :address
|
|
29
26
|
|
|
@@ -60,8 +57,7 @@ module Mongo
|
|
|
60
57
|
# @since 2.4.0
|
|
61
58
|
# @api private
|
|
62
59
|
def initialize(address, topology, previous_description, new_description,
|
|
63
|
-
|
|
64
|
-
)
|
|
60
|
+
awaited: false)
|
|
65
61
|
@address = address
|
|
66
62
|
@topology = topology
|
|
67
63
|
@previous_description = previous_description
|
|
@@ -79,9 +75,9 @@ module Mongo
|
|
|
79
75
|
# @api experimental
|
|
80
76
|
def summary
|
|
81
77
|
"#<#{short_class_name}" +
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
78
|
+
" address=#{address}" +
|
|
79
|
+
# TODO: Add summaries to descriptions and use them here
|
|
80
|
+
" prev=#{previous_description.server_type.upcase} new=#{new_description.server_type.upcase}#{awaited_indicator}>"
|
|
85
81
|
end
|
|
86
82
|
|
|
87
83
|
private
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,12 +17,10 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event fired when a server heartbeat is dispatched.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.7.0
|
|
25
23
|
class ServerHeartbeatFailed < Mongo::Event::Base
|
|
26
|
-
|
|
27
24
|
# Create the event.
|
|
28
25
|
#
|
|
29
26
|
# @example Create the event.
|
|
@@ -37,9 +34,7 @@ module Mongo
|
|
|
37
34
|
#
|
|
38
35
|
# @since 2.7.0
|
|
39
36
|
# @api private
|
|
40
|
-
def initialize(address, round_trip_time, error, awaited: false
|
|
41
|
-
started_event:
|
|
42
|
-
)
|
|
37
|
+
def initialize(address, round_trip_time, error, started_event:, awaited: false)
|
|
43
38
|
@address = address
|
|
44
39
|
@round_trip_time = round_trip_time
|
|
45
40
|
@error = error
|
|
@@ -54,13 +49,13 @@ module Mongo
|
|
|
54
49
|
attr_reader :round_trip_time
|
|
55
50
|
|
|
56
51
|
# Alias of round_trip_time.
|
|
57
|
-
alias
|
|
52
|
+
alias duration round_trip_time
|
|
58
53
|
|
|
59
54
|
# @return [ Exception ] error The exception that occurred in hello call.
|
|
60
55
|
attr_reader :error
|
|
61
56
|
|
|
62
57
|
# Alias of error for SDAM spec compliance.
|
|
63
|
-
alias
|
|
58
|
+
alias failure error
|
|
64
59
|
|
|
65
60
|
# @return [ true | false ] Whether the heartbeat was awaited.
|
|
66
61
|
def awaited?
|
|
@@ -83,8 +78,8 @@ module Mongo
|
|
|
83
78
|
# @api experimental
|
|
84
79
|
def summary
|
|
85
80
|
"#<#{short_class_name}" +
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
" address=#{address}" +
|
|
82
|
+
" error=#{error.inspect}>"
|
|
88
83
|
end
|
|
89
84
|
end
|
|
90
85
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,12 +17,10 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event fired when a server heartbeat is dispatched.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.7.0
|
|
25
23
|
class ServerHeartbeatStarted < Mongo::Event::Base
|
|
26
|
-
|
|
27
24
|
# @return [ Address ] address The server address.
|
|
28
25
|
attr_reader :address
|
|
29
26
|
|
|
@@ -57,7 +54,7 @@ module Mongo
|
|
|
57
54
|
# @api experimental
|
|
58
55
|
def summary
|
|
59
56
|
"#<#{short_class_name}" +
|
|
60
|
-
|
|
57
|
+
" address=#{address}>"
|
|
61
58
|
end
|
|
62
59
|
end
|
|
63
60
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,12 +17,10 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class Monitoring
|
|
20
19
|
module Event
|
|
21
|
-
|
|
22
20
|
# Event fired when a server heartbeat is dispatched.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.7.0
|
|
25
23
|
class ServerHeartbeatSucceeded < Mongo::Event::Base
|
|
26
|
-
|
|
27
24
|
# Create the event.
|
|
28
25
|
#
|
|
29
26
|
# @example Create the event.
|
|
@@ -37,9 +34,7 @@ module Mongo
|
|
|
37
34
|
#
|
|
38
35
|
# @since 2.7.0
|
|
39
36
|
# @api private
|
|
40
|
-
def initialize(address, round_trip_time, awaited: false
|
|
41
|
-
started_event:
|
|
42
|
-
)
|
|
37
|
+
def initialize(address, round_trip_time, started_event:, awaited: false)
|
|
43
38
|
@address = address
|
|
44
39
|
@round_trip_time = round_trip_time
|
|
45
40
|
@awaited = !!awaited
|
|
@@ -53,7 +48,7 @@ module Mongo
|
|
|
53
48
|
attr_reader :round_trip_time
|
|
54
49
|
|
|
55
50
|
# Alias of round_trip_time.
|
|
56
|
-
alias
|
|
51
|
+
alias duration round_trip_time
|
|
57
52
|
|
|
58
53
|
# @return [ true | false ] Whether the heartbeat was awaited.
|
|
59
54
|
def awaited?
|
|
@@ -76,7 +71,7 @@ module Mongo
|
|
|
76
71
|
# @api experimental
|
|
77
72
|
def summary
|
|
78
73
|
"#<#{short_class_name}" +
|
|
79
|
-
|
|
74
|
+
" address=#{address}>"
|
|
80
75
|
end
|
|
81
76
|
end
|
|
82
77
|
end
|