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) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -21,8 +20,7 @@ require 'mongo/auth/stringprep/profiles/sasl'
|
|
|
21
20
|
module Mongo
|
|
22
21
|
module Auth
|
|
23
22
|
# This namespace contains all behavior related to string preparation
|
|
24
|
-
# (RFC 3454). It's used to implement SCRAM-SHA-256 authentication
|
|
25
|
-
# which is available in MongoDB server versions 4.0 and later.
|
|
23
|
+
# (RFC 3454). It's used to implement SCRAM-SHA-256 authentication.
|
|
26
24
|
#
|
|
27
25
|
# @since 2.6.0
|
|
28
26
|
# @api private
|
|
@@ -72,15 +70,14 @@ module Mongo
|
|
|
72
70
|
raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
|
|
73
71
|
end
|
|
74
72
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
unless table_contains?(Tables::D1, out[0]) && table_contains?(Tables::D1, out[-1])
|
|
81
|
-
raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
|
|
82
|
-
end
|
|
73
|
+
return unless out.each_char.any? { |c| table_contains?(Tables::D1, c) }
|
|
74
|
+
if out.each_char.any? { |c| table_contains?(Tables::D2, c) }
|
|
75
|
+
raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
|
|
83
76
|
end
|
|
77
|
+
|
|
78
|
+
return if table_contains?(Tables::D1, out[0]) && table_contains?(Tables::D1, out[-1])
|
|
79
|
+
|
|
80
|
+
raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
|
|
84
81
|
end
|
|
85
82
|
|
|
86
83
|
def check_prohibited!(out, prohibited)
|
|
@@ -95,7 +92,7 @@ module Mongo
|
|
|
95
92
|
|
|
96
93
|
def mapping(c, mappings)
|
|
97
94
|
m = mappings.find { |m| m.has_key?(c) }
|
|
98
|
-
mapped = (m && m[c]) || [c]
|
|
95
|
+
mapped = (m && m[c]) || [ c ]
|
|
99
96
|
mapped.map { |i| i.chr(Encoding::UTF_8) }.join
|
|
100
97
|
end
|
|
101
98
|
|
data/lib/mongo/auth/user/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
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Auth
|
|
20
19
|
class User
|
|
21
|
-
|
|
22
20
|
# Defines behavior for user related operation on databases.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
@@ -52,7 +50,7 @@ module Mongo
|
|
|
52
50
|
user: user,
|
|
53
51
|
db_name: database.name,
|
|
54
52
|
session: session,
|
|
55
|
-
write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
|
|
53
|
+
write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
|
|
56
54
|
)
|
|
57
55
|
end
|
|
58
56
|
end
|
|
@@ -89,7 +87,7 @@ module Mongo
|
|
|
89
87
|
user_name: name,
|
|
90
88
|
db_name: database.name,
|
|
91
89
|
session: session,
|
|
92
|
-
write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
|
|
90
|
+
write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
|
|
93
91
|
)
|
|
94
92
|
end
|
|
95
93
|
end
|
|
@@ -115,7 +113,7 @@ module Mongo
|
|
|
115
113
|
user: user,
|
|
116
114
|
db_name: database.name,
|
|
117
115
|
session: session,
|
|
118
|
-
write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
|
|
116
|
+
write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
|
|
119
117
|
)
|
|
120
118
|
end
|
|
121
119
|
end
|
data/lib/mongo/auth/user.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/auth/user/view'
|
|
|
19
18
|
|
|
20
19
|
module Mongo
|
|
21
20
|
module Auth
|
|
22
|
-
|
|
23
21
|
# Represents a user in MongoDB.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.0.0
|
|
@@ -68,6 +66,7 @@ module Mongo
|
|
|
68
66
|
# @since 2.0.0
|
|
69
67
|
def ==(other)
|
|
70
68
|
return false unless other.is_a?(User)
|
|
69
|
+
|
|
71
70
|
name == other.name && database == other.database && password == other.password
|
|
72
71
|
end
|
|
73
72
|
|
|
@@ -96,7 +95,7 @@ module Mongo
|
|
|
96
95
|
#
|
|
97
96
|
# @since 2.0.0
|
|
98
97
|
def encoded_name
|
|
99
|
-
name.encode(BSON::UTF8).gsub('=','=3D').gsub(',','=2C')
|
|
98
|
+
name.encode(BSON::UTF8).gsub('=', '=3D').gsub(',', '=2C')
|
|
100
99
|
end
|
|
101
100
|
|
|
102
101
|
# Get the hash key for the user.
|
|
@@ -120,9 +119,7 @@ module Mongo
|
|
|
120
119
|
#
|
|
121
120
|
# @since 2.0.0
|
|
122
121
|
def hashed_password
|
|
123
|
-
unless password
|
|
124
|
-
raise Error::MissingPassword
|
|
125
|
-
end
|
|
122
|
+
raise Error::MissingPassword unless password
|
|
126
123
|
|
|
127
124
|
@hashed_password ||= Digest::MD5.hexdigest("#{name}:mongo:#{password}").encode(BSON::UTF8)
|
|
128
125
|
end
|
|
@@ -131,14 +128,12 @@ module Mongo
|
|
|
131
128
|
#
|
|
132
129
|
# @api private
|
|
133
130
|
def sasl_prepped_password
|
|
134
|
-
unless password
|
|
135
|
-
raise Error::MissingPassword
|
|
136
|
-
end
|
|
131
|
+
raise Error::MissingPassword unless password
|
|
137
132
|
|
|
138
133
|
@sasl_prepped_password ||= StringPrep.prepare(password,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
134
|
+
StringPrep::Profiles::SASL::MAPPINGS,
|
|
135
|
+
StringPrep::Profiles::SASL::PROHIBITED,
|
|
136
|
+
normalize: true, bidi: true).encode(BSON::UTF8)
|
|
142
137
|
end
|
|
143
138
|
|
|
144
139
|
# Create the new user.
|
|
@@ -176,14 +171,13 @@ module Mongo
|
|
|
176
171
|
# have not enforced this; warn, reject in lint mode
|
|
177
172
|
if Lint.enabled?
|
|
178
173
|
raise Error::LintError, "Auth mechanism #{@mechanism.inspect} must be specified as a symbol"
|
|
179
|
-
else
|
|
180
|
-
log_warn("Auth mechanism #{@mechanism.inspect} should be specified as a symbol")
|
|
181
|
-
@mechanism = @mechanism.to_sym
|
|
182
174
|
end
|
|
175
|
+
|
|
176
|
+
log_warn("Auth mechanism #{@mechanism.inspect} should be specified as a symbol")
|
|
177
|
+
@mechanism = @mechanism.to_sym
|
|
178
|
+
|
|
183
179
|
end
|
|
184
|
-
unless Auth::SOURCES.key?(@mechanism)
|
|
185
|
-
raise InvalidMechanism.new(options[:auth_mech])
|
|
186
|
-
end
|
|
180
|
+
raise InvalidMechanism.new(options[:auth_mech]) unless Auth::SOURCES.key?(@mechanism)
|
|
187
181
|
end
|
|
188
182
|
@auth_mech_properties = options[:auth_mech_properties] || {}
|
|
189
183
|
@roles = options[:roles] || []
|
|
@@ -198,15 +192,11 @@ module Mongo
|
|
|
198
192
|
#
|
|
199
193
|
# @since 2.0.0
|
|
200
194
|
def spec
|
|
201
|
-
{roles: roles}.tap do |spec|
|
|
202
|
-
if password
|
|
203
|
-
spec[:pwd] = password
|
|
204
|
-
end
|
|
195
|
+
{ roles: roles }.tap do |spec|
|
|
196
|
+
spec[:pwd] = password if password
|
|
205
197
|
end
|
|
206
198
|
end
|
|
207
199
|
|
|
208
|
-
private
|
|
209
|
-
|
|
210
200
|
# Generate default auth source based on the URI and options
|
|
211
201
|
#
|
|
212
202
|
# @api private
|
|
@@ -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,14 +17,12 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Auth
|
|
20
19
|
class X509
|
|
21
|
-
|
|
22
20
|
# Defines behavior around a single X.509 conversation between the
|
|
23
21
|
# client and server.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.0.0
|
|
26
24
|
# @api private
|
|
27
25
|
class Conversation < ConversationBase
|
|
28
|
-
|
|
29
26
|
# The login message.
|
|
30
27
|
#
|
|
31
28
|
# @since 2.0.0
|
data/lib/mongo/auth/x509.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
|
#
|
|
@@ -17,17 +16,15 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Auth
|
|
20
|
-
|
|
21
19
|
# Defines behavior for X.509 authentication.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.0.0
|
|
24
22
|
# @api private
|
|
25
23
|
class X509 < Base
|
|
26
|
-
|
|
27
24
|
# The authentication mechanism string.
|
|
28
25
|
#
|
|
29
26
|
# @since 2.0.0
|
|
30
|
-
MECHANISM = 'MONGODB-X509'
|
|
27
|
+
MECHANISM = 'MONGODB-X509'
|
|
31
28
|
|
|
32
29
|
# Initializes the X.509 authenticator.
|
|
33
30
|
#
|
|
@@ -37,11 +34,12 @@ module Mongo
|
|
|
37
34
|
# The only valid database for X.509 authentication is $external.
|
|
38
35
|
if user.auth_source != '$external'
|
|
39
36
|
user_name_msg = if user.name
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
raise Auth::InvalidConfiguration,
|
|
37
|
+
" #{user.name}"
|
|
38
|
+
else
|
|
39
|
+
''
|
|
40
|
+
end
|
|
41
|
+
raise Auth::InvalidConfiguration,
|
|
42
|
+
"User#{user_name_msg} specifies auth source '#{user.auth_source}', but the only valid auth source for X.509 is '$external'"
|
|
45
43
|
end
|
|
46
44
|
|
|
47
45
|
super
|
data/lib/mongo/auth.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
|
#
|
|
@@ -33,9 +32,7 @@ require 'mongo/auth/x509'
|
|
|
33
32
|
require 'mongo/error/read_write_retryable'
|
|
34
33
|
require 'mongo/error/labelable'
|
|
35
34
|
|
|
36
|
-
|
|
37
35
|
module Mongo
|
|
38
|
-
|
|
39
36
|
# This namespace contains all authentication related behavior.
|
|
40
37
|
#
|
|
41
38
|
# @since 2.0.0
|
|
@@ -46,7 +43,7 @@ module Mongo
|
|
|
46
43
|
#
|
|
47
44
|
# @since 2.0.0
|
|
48
45
|
# @api private
|
|
49
|
-
EXTERNAL = '$external'
|
|
46
|
+
EXTERNAL = '$external'
|
|
50
47
|
|
|
51
48
|
# Constant for the nonce command.
|
|
52
49
|
#
|
|
@@ -58,7 +55,7 @@ module Mongo
|
|
|
58
55
|
#
|
|
59
56
|
# @since 2.0.0
|
|
60
57
|
# @api private
|
|
61
|
-
NONCE = 'nonce'
|
|
58
|
+
NONCE = 'nonce'
|
|
62
59
|
|
|
63
60
|
# Map the symbols parsed from the URI connection string to strategies.
|
|
64
61
|
#
|
|
@@ -96,7 +93,8 @@ module Mongo
|
|
|
96
93
|
# @api private
|
|
97
94
|
def get(user, connection, **opts)
|
|
98
95
|
mechanism = user.mechanism
|
|
99
|
-
raise InvalidMechanism.new(mechanism)
|
|
96
|
+
raise InvalidMechanism.new(mechanism) unless SOURCES.has_key?(mechanism)
|
|
97
|
+
|
|
100
98
|
SOURCES[mechanism].new(user, connection, **opts)
|
|
101
99
|
end
|
|
102
100
|
|
|
@@ -109,7 +107,6 @@ module Mongo
|
|
|
109
107
|
#
|
|
110
108
|
# @since 2.0.0
|
|
111
109
|
class InvalidMechanism < InvalidConfiguration
|
|
112
|
-
|
|
113
110
|
# Instantiate the new error.
|
|
114
111
|
#
|
|
115
112
|
# @example Instantiate the error.
|
|
@@ -151,8 +148,7 @@ module Mongo
|
|
|
151
148
|
#
|
|
152
149
|
# @since 2.0.0
|
|
153
150
|
def initialize(user, used_mechanism: nil, message: nil,
|
|
154
|
-
|
|
155
|
-
)
|
|
151
|
+
server: nil, code: nil)
|
|
156
152
|
@code = code
|
|
157
153
|
|
|
158
154
|
configured_bits = []
|
|
@@ -160,36 +156,28 @@ module Mongo
|
|
|
160
156
|
"auth source: #{user.auth_source}",
|
|
161
157
|
]
|
|
162
158
|
|
|
163
|
-
if user.mechanism
|
|
164
|
-
configured_bits << "mechanism: #{user.mechanism}"
|
|
165
|
-
end
|
|
159
|
+
configured_bits << "mechanism: #{user.mechanism}" if user.mechanism
|
|
166
160
|
|
|
167
|
-
if used_mechanism
|
|
168
|
-
used_bits << "used mechanism: #{used_mechanism}"
|
|
169
|
-
end
|
|
161
|
+
used_bits << "used mechanism: #{used_mechanism}" if used_mechanism
|
|
170
162
|
|
|
171
|
-
if server
|
|
172
|
-
used_bits << "used server: #{server.address} (#{server.status})"
|
|
173
|
-
end
|
|
163
|
+
used_bits << "used server: #{server.address} (#{server.status})" if server
|
|
174
164
|
|
|
175
165
|
used_user = if user.mechanism == :mongodb_x509
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
166
|
+
'Client certificate'
|
|
167
|
+
else
|
|
168
|
+
"User #{user.name}"
|
|
169
|
+
end
|
|
180
170
|
|
|
181
|
-
if configured_bits.empty?
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
171
|
+
configured_bits = if configured_bits.empty?
|
|
172
|
+
''
|
|
173
|
+
else
|
|
174
|
+
" (#{configured_bits.join(', ')})"
|
|
175
|
+
end
|
|
186
176
|
|
|
187
177
|
used_bits = " (#{used_bits.join(', ')})"
|
|
188
178
|
|
|
189
179
|
msg = "#{used_user}#{configured_bits} is not authorized to access #{user.database}#{used_bits}"
|
|
190
|
-
if message
|
|
191
|
-
msg += ': ' + message
|
|
192
|
-
end
|
|
180
|
+
msg += ': ' + message if message
|
|
193
181
|
super(msg)
|
|
194
182
|
end
|
|
195
183
|
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
|
#
|
|
@@ -16,7 +15,6 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
|
-
|
|
20
18
|
# The run!, running? and stop! methods used to be part of the public API
|
|
21
19
|
# in some of the classes which now include this module. Therefore these
|
|
22
20
|
# methods must be considered part of the driver's public API for backwards
|
|
@@ -111,9 +109,7 @@ module Mongo
|
|
|
111
109
|
def start!
|
|
112
110
|
@thread = Thread.new do
|
|
113
111
|
catch(:done) do
|
|
114
|
-
until @stop_requested
|
|
115
|
-
do_work
|
|
116
|
-
end
|
|
112
|
+
do_work until @stop_requested
|
|
117
113
|
end
|
|
118
114
|
end
|
|
119
115
|
end
|
|
@@ -130,17 +126,15 @@ module Mongo
|
|
|
130
126
|
# a background thread could be performing, say, network I/O and if
|
|
131
127
|
# the network is no longer available that could take a long time.
|
|
132
128
|
start_time = Utils.monotonic_time
|
|
133
|
-
([0.1, 0.15] + [0.2] * 5 + [0.3] * 20).each do |interval|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
@thread.join
|
|
137
|
-
end
|
|
138
|
-
break
|
|
139
|
-
rescue ::Timeout::Error
|
|
129
|
+
([ 0.1, 0.15 ] + ([ 0.2 ] * 5) + ([ 0.3 ] * 20)).each do |interval|
|
|
130
|
+
Timeout.timeout(interval) do
|
|
131
|
+
@thread.join
|
|
140
132
|
end
|
|
133
|
+
break
|
|
134
|
+
rescue ::Timeout::Error
|
|
141
135
|
end
|
|
142
136
|
|
|
143
|
-
# Some driver objects can be reconnected, for backwards
|
|
137
|
+
# Some driver objects can be reconnected, for backwards compatibility
|
|
144
138
|
# reasons. Clear the thread instance variable to support this cleanly.
|
|
145
139
|
if @thread.alive?
|
|
146
140
|
log_warn("Failed to stop the background thread in #{self} in #{(Utils.monotonic_time - start_time).to_i} seconds: #{@thread.inspect} (thread status: #{@thread.status})")
|
|
@@ -162,12 +156,10 @@ module Mongo
|
|
|
162
156
|
end
|
|
163
157
|
|
|
164
158
|
# Override this method to do the work in the background thread.
|
|
165
|
-
def do_work
|
|
166
|
-
end
|
|
159
|
+
def do_work; end
|
|
167
160
|
|
|
168
161
|
# Override this method to perform additional signaling for the background
|
|
169
162
|
# thread to stop.
|
|
170
|
-
def pre_stop
|
|
171
|
-
end
|
|
163
|
+
def pre_stop; end
|
|
172
164
|
end
|
|
173
165
|
end
|
data/lib/mongo/bson.rb
CHANGED
|
@@ -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
|
#
|
|
@@ -19,7 +18,6 @@
|
|
|
19
18
|
#
|
|
20
19
|
# @since 2.2.1
|
|
21
20
|
class Symbol
|
|
22
|
-
|
|
23
21
|
# Overrides the default BSON type to use the symbol type instead of a
|
|
24
22
|
# string type.
|
|
25
23
|
#
|
|
@@ -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,14 +16,12 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class BulkWrite
|
|
20
|
-
|
|
21
19
|
# Defines behavior around combiners
|
|
22
20
|
#
|
|
23
21
|
# @api private
|
|
24
22
|
#
|
|
25
23
|
# @since 2.1.0
|
|
26
24
|
module Combineable
|
|
27
|
-
|
|
28
25
|
# @return [ Array<Hash, BSON::Document> ] requests The provided requests.
|
|
29
26
|
attr_reader :requests
|
|
30
27
|
|
|
@@ -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 BulkWrite
|
|
20
|
-
|
|
21
19
|
# Combines groups of bulk write operations in order.
|
|
22
20
|
#
|
|
23
21
|
# @api private
|
|
@@ -45,7 +43,7 @@ module Mongo
|
|
|
45
43
|
private
|
|
46
44
|
|
|
47
45
|
def add(operations, name, document)
|
|
48
|
-
operations.push({ name => []}) if next_group?(name, operations)
|
|
46
|
+
operations.push({ name => [] }) if next_group?(name, operations)
|
|
49
47
|
operations[-1][name].push(transform(name, document))
|
|
50
48
|
operations
|
|
51
49
|
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 BulkWrite
|
|
20
|
-
|
|
21
19
|
# Wraps a series of bulk write operations in a result object.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.0.6
|
|
24
22
|
class Result
|
|
25
|
-
|
|
26
23
|
# @return [ Boolean ] Is the result acknowledged?
|
|
27
24
|
def acknowledged?
|
|
28
25
|
@acknowledged
|
|
@@ -31,42 +28,42 @@ module Mongo
|
|
|
31
28
|
# Constant for number removed.
|
|
32
29
|
#
|
|
33
30
|
# @since 2.1.0
|
|
34
|
-
REMOVED_COUNT = 'n_removed'
|
|
31
|
+
REMOVED_COUNT = 'n_removed'
|
|
35
32
|
|
|
36
33
|
# Constant for number inserted.
|
|
37
34
|
#
|
|
38
35
|
# @since 2.1.0
|
|
39
|
-
INSERTED_COUNT = 'n_inserted'
|
|
36
|
+
INSERTED_COUNT = 'n_inserted'
|
|
40
37
|
|
|
41
38
|
# Constant for inserted ids.
|
|
42
39
|
#
|
|
43
40
|
# @since 2.1.0
|
|
44
|
-
INSERTED_IDS = 'inserted_ids'
|
|
41
|
+
INSERTED_IDS = 'inserted_ids'
|
|
45
42
|
|
|
46
43
|
# Constant for number matched.
|
|
47
44
|
#
|
|
48
45
|
# @since 2.1.0
|
|
49
|
-
MATCHED_COUNT = 'n_matched'
|
|
46
|
+
MATCHED_COUNT = 'n_matched'
|
|
50
47
|
|
|
51
48
|
# Constant for number modified.
|
|
52
49
|
#
|
|
53
50
|
# @since 2.1.0
|
|
54
|
-
MODIFIED_COUNT = 'n_modified'
|
|
51
|
+
MODIFIED_COUNT = 'n_modified'
|
|
55
52
|
|
|
56
53
|
# Constant for upserted.
|
|
57
54
|
#
|
|
58
55
|
# @since 2.1.0
|
|
59
|
-
UPSERTED = 'upserted'
|
|
56
|
+
UPSERTED = 'upserted'
|
|
60
57
|
|
|
61
58
|
# Constant for number upserted.
|
|
62
59
|
#
|
|
63
60
|
# @since 2.1.0
|
|
64
|
-
UPSERTED_COUNT = 'n_upserted'
|
|
61
|
+
UPSERTED_COUNT = 'n_upserted'
|
|
65
62
|
|
|
66
63
|
# Constant for upserted ids.
|
|
67
64
|
#
|
|
68
65
|
# @since 2.1.0
|
|
69
|
-
UPSERTED_IDS = 'upserted_ids'
|
|
66
|
+
UPSERTED_IDS = 'upserted_ids'
|
|
70
67
|
|
|
71
68
|
# The fields contained in the result document returned from executing the
|
|
72
69
|
# operations.
|
|
@@ -192,11 +189,9 @@ module Mongo
|
|
|
192
189
|
#
|
|
193
190
|
# @since 2.1.0
|
|
194
191
|
def validate!
|
|
195
|
-
if @results['writeErrors'] || @results['writeConcernErrors']
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
self
|
|
199
|
-
end
|
|
192
|
+
raise Error::BulkWriteError.new(@results) if @results['writeErrors'] || @results['writeConcernErrors']
|
|
193
|
+
|
|
194
|
+
self
|
|
200
195
|
end
|
|
201
196
|
end
|
|
202
197
|
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,14 +16,12 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
class BulkWrite
|
|
20
|
-
|
|
21
19
|
# Combines bulk write results together.
|
|
22
20
|
#
|
|
23
21
|
# @api private
|
|
24
22
|
#
|
|
25
23
|
# @since 2.1.0
|
|
26
24
|
class ResultCombiner
|
|
27
|
-
|
|
28
25
|
# @return [ Integer ] count The number of documents in the entire batch.
|
|
29
26
|
attr_reader :count
|
|
30
27
|
|
|
@@ -97,12 +94,12 @@ module Mongo
|
|
|
97
94
|
def combine_ids!(result)
|
|
98
95
|
if result.respond_to?(Result::INSERTED_IDS)
|
|
99
96
|
results[Result::INSERTED_IDS] = (results[Result::INSERTED_IDS] || []) +
|
|
100
|
-
|
|
101
|
-
end
|
|
102
|
-
if result.respond_to?(Result::UPSERTED)
|
|
103
|
-
results[Result::UPSERTED_IDS] = (results[Result::UPSERTED_IDS] || []) +
|
|
104
|
-
result.upserted.map{ |doc| doc['_id'] }
|
|
97
|
+
result.inserted_ids
|
|
105
98
|
end
|
|
99
|
+
return unless result.respond_to?(Result::UPSERTED)
|
|
100
|
+
|
|
101
|
+
results[Result::UPSERTED_IDS] = (results[Result::UPSERTED_IDS] || []) +
|
|
102
|
+
result.upserted.map { |doc| doc['_id'] }
|
|
106
103
|
end
|
|
107
104
|
|
|
108
105
|
def combine_errors!(result)
|
|
@@ -121,10 +118,10 @@ module Mongo
|
|
|
121
118
|
end
|
|
122
119
|
|
|
123
120
|
def combine_write_concern_errors!(result)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
return unless write_concern_errors = result.aggregate_write_concern_errors(count)
|
|
122
|
+
|
|
123
|
+
results['writeConcernErrors'] = (results['writeConcernErrors'] || []) +
|
|
124
|
+
write_concern_errors
|
|
128
125
|
end
|
|
129
126
|
end
|
|
130
127
|
end
|