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) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,133 +16,126 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# This module contains common functionality for convenience methods getting
|
|
22
20
|
# various values from the spec.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
# @api private
|
|
26
24
|
module Specifiable
|
|
27
|
-
|
|
28
25
|
# The field for database name.
|
|
29
26
|
#
|
|
30
27
|
# @since 2.0.0
|
|
31
|
-
DB_NAME = :db_name
|
|
28
|
+
DB_NAME = :db_name
|
|
32
29
|
|
|
33
30
|
# The field for deletes.
|
|
34
31
|
#
|
|
35
32
|
# @since 2.0.0
|
|
36
|
-
DELETES = :deletes
|
|
33
|
+
DELETES = :deletes
|
|
37
34
|
|
|
38
35
|
# The field for delete.
|
|
39
36
|
#
|
|
40
37
|
# @since 2.0.0
|
|
41
|
-
DELETE = :delete
|
|
38
|
+
DELETE = :delete
|
|
42
39
|
|
|
43
40
|
# The field for documents.
|
|
44
41
|
#
|
|
45
42
|
# @since 2.0.0
|
|
46
|
-
DOCUMENTS = :documents
|
|
43
|
+
DOCUMENTS = :documents
|
|
47
44
|
|
|
48
45
|
# The field for collection name.
|
|
49
46
|
#
|
|
50
47
|
# @since 2.0.0
|
|
51
|
-
COLL_NAME = :coll_name
|
|
48
|
+
COLL_NAME = :coll_name
|
|
52
49
|
|
|
53
50
|
# The field for cursor count.
|
|
54
51
|
#
|
|
55
52
|
# @since 2.0.0
|
|
56
|
-
CURSOR_COUNT = :cursor_count
|
|
53
|
+
CURSOR_COUNT = :cursor_count
|
|
57
54
|
|
|
58
55
|
# The field for cursor id.
|
|
59
56
|
#
|
|
60
57
|
# @since 2.0.0
|
|
61
|
-
CURSOR_ID = :cursor_id
|
|
58
|
+
CURSOR_ID = :cursor_id
|
|
62
59
|
|
|
63
60
|
# The field for an index.
|
|
64
61
|
#
|
|
65
62
|
# @since 2.0.0
|
|
66
|
-
INDEX = :index
|
|
63
|
+
INDEX = :index
|
|
67
64
|
|
|
68
65
|
# The field for multiple indexes.
|
|
69
66
|
#
|
|
70
67
|
# @since 2.0.0
|
|
71
|
-
INDEXES = :indexes
|
|
68
|
+
INDEXES = :indexes
|
|
72
69
|
|
|
73
70
|
# The field for index names.
|
|
74
71
|
#
|
|
75
72
|
# @since 2.0.0
|
|
76
|
-
INDEX_NAME = :index_name
|
|
73
|
+
INDEX_NAME = :index_name
|
|
77
74
|
|
|
78
75
|
# The operation id constant.
|
|
79
76
|
#
|
|
80
77
|
# @since 2.1.0
|
|
81
|
-
OPERATION_ID = :operation_id
|
|
78
|
+
OPERATION_ID = :operation_id
|
|
82
79
|
|
|
83
80
|
# The field for options.
|
|
84
81
|
#
|
|
85
82
|
# @since 2.0.0
|
|
86
|
-
OPTIONS = :options
|
|
83
|
+
OPTIONS = :options
|
|
87
84
|
|
|
88
85
|
# The read concern option.
|
|
89
86
|
#
|
|
90
87
|
# @since 2.2.0
|
|
91
|
-
READ_CONCERN = :read_concern
|
|
88
|
+
READ_CONCERN = :read_concern
|
|
92
89
|
|
|
93
90
|
# The max time ms option.
|
|
94
91
|
#
|
|
95
92
|
# @since 2.2.5
|
|
96
|
-
MAX_TIME_MS = :max_time_ms
|
|
93
|
+
MAX_TIME_MS = :max_time_ms
|
|
97
94
|
|
|
98
95
|
# The field for a selector.
|
|
99
96
|
#
|
|
100
97
|
# @since 2.0.0
|
|
101
|
-
SELECTOR = :selector
|
|
102
|
-
|
|
103
|
-
# The field for number to return.
|
|
104
|
-
#
|
|
105
|
-
# @since 2.0.0
|
|
106
|
-
TO_RETURN = :to_return.freeze
|
|
98
|
+
SELECTOR = :selector
|
|
107
99
|
|
|
108
100
|
# The field for updates.
|
|
109
101
|
#
|
|
110
102
|
# @since 2.0.0
|
|
111
|
-
UPDATES = :updates
|
|
103
|
+
UPDATES = :updates
|
|
112
104
|
|
|
113
105
|
# The field for update.
|
|
114
106
|
#
|
|
115
107
|
# @since 2.0.0
|
|
116
|
-
UPDATE = :update
|
|
108
|
+
UPDATE = :update
|
|
117
109
|
|
|
118
110
|
# The field name for a user.
|
|
119
111
|
#
|
|
120
112
|
# @since 2.0.0
|
|
121
|
-
USER = :user
|
|
113
|
+
USER = :user
|
|
122
114
|
|
|
123
115
|
# The field name for user name.
|
|
124
116
|
#
|
|
125
117
|
# @since 2.0.0
|
|
126
|
-
USER_NAME = :user_name
|
|
118
|
+
USER_NAME = :user_name
|
|
127
119
|
|
|
128
120
|
# The field name for a write concern.
|
|
129
121
|
#
|
|
130
122
|
# @since 2.0.0
|
|
131
|
-
WRITE_CONCERN = :write_concern
|
|
123
|
+
WRITE_CONCERN = :write_concern
|
|
132
124
|
|
|
133
125
|
# The field name for the read preference.
|
|
134
126
|
#
|
|
135
127
|
# @since 2.0.0
|
|
136
|
-
READ = :read
|
|
128
|
+
READ = :read
|
|
137
129
|
|
|
138
130
|
# Whether to bypass document level validation.
|
|
139
131
|
#
|
|
140
132
|
# @since 2.2.0
|
|
141
|
-
BYPASS_DOC_VALIDATION = :bypass_document_validation
|
|
133
|
+
BYPASS_DOC_VALIDATION = :bypass_document_validation
|
|
142
134
|
|
|
143
135
|
# A collation to apply to the operation.
|
|
144
136
|
#
|
|
145
137
|
# @since 2.4.0
|
|
146
|
-
COLLATION = :collation
|
|
138
|
+
COLLATION = :collation
|
|
147
139
|
|
|
148
140
|
# @return [ Hash ] spec The specification for the operation.
|
|
149
141
|
attr_reader :spec
|
|
@@ -160,9 +152,10 @@ module Mongo
|
|
|
160
152
|
# @since 2.0.0
|
|
161
153
|
def ==(other)
|
|
162
154
|
return false unless other.is_a?(Specifiable)
|
|
155
|
+
|
|
163
156
|
spec == other.spec
|
|
164
157
|
end
|
|
165
|
-
|
|
158
|
+
alias eql? ==
|
|
166
159
|
|
|
167
160
|
# Get the cursor count from the spec.
|
|
168
161
|
#
|
|
@@ -327,7 +320,7 @@ module Mongo
|
|
|
327
320
|
# @return [ Hash ] The options.
|
|
328
321
|
#
|
|
329
322
|
# @since 2.0.0
|
|
330
|
-
def options(
|
|
323
|
+
def options(_connection)
|
|
331
324
|
spec[OPTIONS] || {}
|
|
332
325
|
end
|
|
333
326
|
|
|
@@ -360,7 +353,7 @@ module Mongo
|
|
|
360
353
|
# Whether or not to bypass document level validation.
|
|
361
354
|
#
|
|
362
355
|
# @example Get the bypass_document_validation option.
|
|
363
|
-
# specifiable.
|
|
356
|
+
# specifiable.bypass_document_validation.
|
|
364
357
|
#
|
|
365
358
|
# @return [ true, false ] Whether to bypass document level validation.
|
|
366
359
|
#
|
|
@@ -390,22 +383,10 @@ module Mongo
|
|
|
390
383
|
# @return [ Hash ] The selector spec.
|
|
391
384
|
#
|
|
392
385
|
# @since 2.0.0
|
|
393
|
-
def selector(
|
|
386
|
+
def selector(_connection)
|
|
394
387
|
spec[SELECTOR]
|
|
395
388
|
end
|
|
396
389
|
|
|
397
|
-
# The number of documents to request from the server.
|
|
398
|
-
#
|
|
399
|
-
# @example Get the to return value from the spec.
|
|
400
|
-
# specifiable.to_return
|
|
401
|
-
#
|
|
402
|
-
# @return [ Integer ] The number of documents to return.
|
|
403
|
-
#
|
|
404
|
-
# @since 2.0.0
|
|
405
|
-
def to_return
|
|
406
|
-
spec[TO_RETURN]
|
|
407
|
-
end
|
|
408
|
-
|
|
409
390
|
# The update documents from the spec.
|
|
410
391
|
#
|
|
411
392
|
# @example Get the update documents.
|
|
@@ -473,9 +454,7 @@ module Mongo
|
|
|
473
454
|
#
|
|
474
455
|
# @since 2.0.0
|
|
475
456
|
def read
|
|
476
|
-
@read ||=
|
|
477
|
-
ServerSelector.get(spec[READ]) if spec[READ]
|
|
478
|
-
end
|
|
457
|
+
@read ||= (ServerSelector.get(spec[READ]) if spec[READ])
|
|
479
458
|
end
|
|
480
459
|
|
|
481
460
|
# Whether the operation is ordered.
|
|
@@ -487,7 +466,7 @@ module Mongo
|
|
|
487
466
|
#
|
|
488
467
|
# @since 2.1.0
|
|
489
468
|
def ordered?
|
|
490
|
-
|
|
469
|
+
!!@spec.fetch(:ordered, true)
|
|
491
470
|
end
|
|
492
471
|
|
|
493
472
|
# The namespace, consisting of the db name and collection name.
|
|
@@ -564,13 +543,8 @@ module Mongo
|
|
|
564
543
|
write_concern.nil? || write_concern.acknowledged?
|
|
565
544
|
end
|
|
566
545
|
|
|
567
|
-
def apply_collation(selector,
|
|
568
|
-
if collation
|
|
569
|
-
unless connection.features.collation_enabled?
|
|
570
|
-
raise Error::UnsupportedCollation
|
|
571
|
-
end
|
|
572
|
-
selector = selector.merge(collation: collation)
|
|
573
|
-
end
|
|
546
|
+
def apply_collation(selector, _connection, collation)
|
|
547
|
+
selector = selector.merge(collation: collation) if collation
|
|
574
548
|
selector
|
|
575
549
|
end
|
|
576
550
|
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
|
#
|
|
@@ -17,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# Shared behavior of operations that write (update, insert, delete).
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.2
|
|
24
22
|
# @api private
|
|
25
23
|
module Write
|
|
26
|
-
|
|
27
24
|
include ResponseHandling
|
|
28
25
|
|
|
29
26
|
# Execute the operation.
|
|
@@ -73,26 +70,24 @@ module Mongo
|
|
|
73
70
|
def bulk_execute(connection, context:)
|
|
74
71
|
Lint.assert_type(connection, Server::Connection)
|
|
75
72
|
|
|
76
|
-
|
|
77
|
-
self.class::OpMsg.new(spec).execute(connection, context: context).bulk_result
|
|
78
|
-
else
|
|
79
|
-
self.class::Command.new(spec).execute(connection, context: context).bulk_result
|
|
80
|
-
end
|
|
73
|
+
self.class::OpMsg.new(spec).execute(connection, context: context).bulk_result
|
|
81
74
|
end
|
|
82
75
|
|
|
83
76
|
private
|
|
84
77
|
|
|
85
78
|
def validate!(connection)
|
|
86
|
-
if
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
raise Error::UnsupportedArrayFilters.new(
|
|
93
|
-
Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE)
|
|
94
|
-
end
|
|
79
|
+
return if acknowledged_write?
|
|
80
|
+
|
|
81
|
+
if collation
|
|
82
|
+
raise Error::UnsupportedCollation.new(
|
|
83
|
+
Error::UnsupportedCollation::UNACKNOWLEDGED_WRITES_MESSAGE
|
|
84
|
+
)
|
|
95
85
|
end
|
|
86
|
+
return unless array_filters(connection)
|
|
87
|
+
|
|
88
|
+
raise Error::UnsupportedArrayFilters.new(
|
|
89
|
+
Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE
|
|
90
|
+
)
|
|
96
91
|
end
|
|
97
92
|
end
|
|
98
93
|
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,25 +16,23 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# Custom behavior for operations that support write concern.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.2
|
|
24
22
|
# @api private
|
|
25
23
|
module WriteConcernSupported
|
|
26
|
-
|
|
27
24
|
private
|
|
28
25
|
|
|
29
|
-
def write_concern_supported?(
|
|
26
|
+
def write_concern_supported?(_connection)
|
|
27
|
+
true
|
|
28
|
+
end
|
|
30
29
|
|
|
31
30
|
def command(connection)
|
|
32
31
|
add_write_concern!(super, connection)
|
|
33
32
|
end
|
|
34
33
|
|
|
35
34
|
def add_write_concern!(sel, connection)
|
|
36
|
-
if write_concern && write_concern_supported?(connection)
|
|
37
|
-
sel[:writeConcern] = write_concern.options
|
|
38
|
-
end
|
|
35
|
+
sel[:writeConcern] = write_concern.options if write_concern && write_concern_supported?(connection)
|
|
39
36
|
sel
|
|
40
37
|
end
|
|
41
38
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,8 +17,7 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class Update
|
|
21
|
-
|
|
22
|
-
# Defines custom behavior of results for an udpate when sent as part of a bulk write.
|
|
20
|
+
# Defines custom behavior of results for an update when sent as part of a bulk write.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
class BulkResult < Operation::Result
|
|
@@ -28,12 +26,12 @@ module Mongo
|
|
|
28
26
|
# The number of modified docs field in the result.
|
|
29
27
|
#
|
|
30
28
|
# @since 2.0.0
|
|
31
|
-
MODIFIED = 'nModified'
|
|
29
|
+
MODIFIED = 'nModified'
|
|
32
30
|
|
|
33
31
|
# The upserted docs field in the result.
|
|
34
32
|
#
|
|
35
33
|
# @since 2.0.0
|
|
36
|
-
UPSERTED = 'upserted'
|
|
34
|
+
UPSERTED = 'upserted'
|
|
37
35
|
|
|
38
36
|
# Gets the number of documents upserted.
|
|
39
37
|
#
|
|
@@ -45,9 +43,10 @@ module Mongo
|
|
|
45
43
|
# @since 2.0.0
|
|
46
44
|
def n_upserted
|
|
47
45
|
return 0 unless acknowledged?
|
|
46
|
+
|
|
48
47
|
@replies.reduce(0) do |n, reply|
|
|
49
48
|
if upsert?(reply)
|
|
50
|
-
n
|
|
49
|
+
n + reply.documents.first[UPSERTED].size
|
|
51
50
|
else
|
|
52
51
|
n
|
|
53
52
|
end
|
|
@@ -64,24 +63,19 @@ module Mongo
|
|
|
64
63
|
# @since 2.0.0
|
|
65
64
|
def n_matched
|
|
66
65
|
return 0 unless acknowledged?
|
|
66
|
+
|
|
67
67
|
@replies.reduce(0) do |n, reply|
|
|
68
68
|
if upsert?(reply)
|
|
69
69
|
reply.documents.first[N] - n_upserted
|
|
70
|
+
elsif reply.documents.first[N]
|
|
71
|
+
n + reply.documents.first[N]
|
|
70
72
|
else
|
|
71
|
-
|
|
72
|
-
n += reply.documents.first[N]
|
|
73
|
-
else
|
|
74
|
-
n
|
|
75
|
-
end
|
|
73
|
+
n
|
|
76
74
|
end
|
|
77
75
|
end
|
|
78
76
|
end
|
|
79
77
|
|
|
80
78
|
# Gets the number of documents modified.
|
|
81
|
-
# Not that in a mixed sharded cluster a call to
|
|
82
|
-
# update could return nModified (>= 2.6) or not (<= 2.4).
|
|
83
|
-
# If any call does not return nModified we can't report
|
|
84
|
-
# a valid final count so set the field to nil.
|
|
85
79
|
#
|
|
86
80
|
# @example Get the modified count.
|
|
87
81
|
# result.n_modified
|
|
@@ -91,9 +85,10 @@ module Mongo
|
|
|
91
85
|
# @since 2.0.0
|
|
92
86
|
def n_modified
|
|
93
87
|
return 0 unless acknowledged?
|
|
88
|
+
|
|
94
89
|
@replies.reduce(0) do |n, reply|
|
|
95
90
|
if n && reply.documents.first[MODIFIED]
|
|
96
|
-
n
|
|
91
|
+
n + reply.documents.first[MODIFIED]
|
|
97
92
|
else
|
|
98
93
|
0
|
|
99
94
|
end
|
|
@@ -110,6 +105,7 @@ module Mongo
|
|
|
110
105
|
# @since 2.1.0
|
|
111
106
|
def upserted
|
|
112
107
|
return [] unless acknowledged?
|
|
108
|
+
|
|
113
109
|
@replies.reduce([]) do |ids, reply|
|
|
114
110
|
if upserted_ids = reply.documents.first[UPSERTED]
|
|
115
111
|
ids += upserted_ids
|
|
@@ -120,7 +116,7 @@ module Mongo
|
|
|
120
116
|
|
|
121
117
|
private
|
|
122
118
|
|
|
123
|
-
def upsert?(
|
|
119
|
+
def upsert?(_reply)
|
|
124
120
|
upserted.any?
|
|
125
121
|
end
|
|
126
122
|
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,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class Update
|
|
21
|
-
|
|
22
20
|
# A MongoDB update operation sent as an op message.
|
|
23
21
|
#
|
|
24
22
|
# @api private
|
|
@@ -29,11 +27,10 @@ module Mongo
|
|
|
29
27
|
include ExecutableNoValidate
|
|
30
28
|
include ExecutableTransactionLabel
|
|
31
29
|
include PolymorphicResult
|
|
32
|
-
include Validatable
|
|
33
30
|
|
|
34
31
|
private
|
|
35
32
|
|
|
36
|
-
def selector(
|
|
33
|
+
def selector(_connection)
|
|
37
34
|
{
|
|
38
35
|
update: coll_name,
|
|
39
36
|
ordered: ordered?,
|
|
@@ -43,7 +40,7 @@ module Mongo
|
|
|
43
40
|
end
|
|
44
41
|
|
|
45
42
|
def message(connection)
|
|
46
|
-
updates =
|
|
43
|
+
updates = send(IDENTIFIER)
|
|
47
44
|
section = Protocol::Msg::Section1.new(IDENTIFIER, updates)
|
|
48
45
|
cmd = apply_relevant_timeouts_to(command(connection), connection)
|
|
49
46
|
Protocol::Msg.new(flags, {}, cmd, section)
|
|
@@ -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,24 +17,22 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class Update
|
|
21
|
-
|
|
22
20
|
# Defines custom behavior of results for an update.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
# @api semiprivate
|
|
26
24
|
class Result < Operation::Result
|
|
27
|
-
|
|
28
25
|
# The number of modified docs field in the result.
|
|
29
26
|
#
|
|
30
27
|
# @since 2.0.0
|
|
31
28
|
# @api private
|
|
32
|
-
MODIFIED = 'nModified'
|
|
29
|
+
MODIFIED = 'nModified'
|
|
33
30
|
|
|
34
31
|
# The upserted docs field in the result.
|
|
35
32
|
#
|
|
36
33
|
# @since 2.0.0
|
|
37
34
|
# @api private
|
|
38
|
-
UPSERTED = 'upserted'
|
|
35
|
+
UPSERTED = 'upserted'
|
|
39
36
|
|
|
40
37
|
# Get the number of documents matched.
|
|
41
38
|
#
|
|
@@ -48,6 +45,7 @@ module Mongo
|
|
|
48
45
|
# @api public
|
|
49
46
|
def matched_count
|
|
50
47
|
return 0 unless acknowledged?
|
|
48
|
+
|
|
51
49
|
if upsert?
|
|
52
50
|
0
|
|
53
51
|
else
|
|
@@ -66,6 +64,7 @@ module Mongo
|
|
|
66
64
|
# @api public
|
|
67
65
|
def modified_count
|
|
68
66
|
return 0 unless acknowledged?
|
|
67
|
+
|
|
69
68
|
first[MODIFIED]
|
|
70
69
|
end
|
|
71
70
|
|
|
@@ -81,6 +80,7 @@ module Mongo
|
|
|
81
80
|
# @api public
|
|
82
81
|
def upserted_id
|
|
83
82
|
return nil unless upsert?
|
|
83
|
+
|
|
84
84
|
upsert?.first['_id']
|
|
85
85
|
end
|
|
86
86
|
|
|
@@ -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
|
#
|
|
@@ -21,7 +20,6 @@ require 'mongo/operation/update/bulk_result'
|
|
|
21
20
|
|
|
22
21
|
module Mongo
|
|
23
22
|
module Operation
|
|
24
|
-
|
|
25
23
|
# A MongoDB update operation.
|
|
26
24
|
#
|
|
27
25
|
# @api private
|
|
@@ -31,9 +29,7 @@ module Mongo
|
|
|
31
29
|
include Specifiable
|
|
32
30
|
include Write
|
|
33
31
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
IDENTIFIER = 'updates'.freeze
|
|
32
|
+
IDENTIFIER = 'updates'
|
|
37
33
|
end
|
|
38
34
|
end
|
|
39
35
|
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,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class UpdateUser
|
|
21
|
-
|
|
22
20
|
# A MongoDB updateuser operation sent as an op message.
|
|
23
21
|
#
|
|
24
22
|
# @api private
|
|
@@ -29,8 +27,8 @@ module Mongo
|
|
|
29
27
|
|
|
30
28
|
private
|
|
31
29
|
|
|
32
|
-
def selector(
|
|
33
|
-
{ :
|
|
30
|
+
def selector(_connection)
|
|
31
|
+
{ updateUser: user.name }.merge(user.spec)
|
|
34
32
|
end
|
|
35
33
|
end
|
|
36
34
|
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
|
#
|
|
@@ -19,7 +18,6 @@ require 'mongo/operation/update_user/op_msg'
|
|
|
19
18
|
|
|
20
19
|
module Mongo
|
|
21
20
|
module Operation
|
|
22
|
-
|
|
23
21
|
# A MongoDB updateuser operation.
|
|
24
22
|
#
|
|
25
23
|
# @api 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,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class UsersInfo
|
|
21
|
-
|
|
22
20
|
# A MongoDB usersinfo operation sent as an op message.
|
|
23
21
|
#
|
|
24
22
|
# @api private
|
|
@@ -30,8 +28,8 @@ module Mongo
|
|
|
30
28
|
|
|
31
29
|
private
|
|
32
30
|
|
|
33
|
-
def selector(
|
|
34
|
-
{ :
|
|
31
|
+
def selector(_connection)
|
|
32
|
+
{ usersInfo: user_name }
|
|
35
33
|
end
|
|
36
34
|
end
|
|
37
35
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,19 +17,17 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class UsersInfo
|
|
21
|
-
|
|
22
20
|
# Defines custom behavior of results when using the
|
|
23
21
|
# usersInfo command.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.1.0
|
|
26
24
|
# @api semiprivate
|
|
27
25
|
class Result < Operation::Result
|
|
28
|
-
|
|
29
26
|
# The field name for the users document in a usersInfo result.
|
|
30
27
|
#
|
|
31
28
|
# @since 2.1.0
|
|
32
29
|
# @api private
|
|
33
|
-
USERS = 'users'
|
|
30
|
+
USERS = 'users'
|
|
34
31
|
|
|
35
32
|
# @api public
|
|
36
33
|
def documents
|
|
@@ -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
|
#
|
|
@@ -20,7 +19,6 @@ require 'mongo/operation/users_info/result'
|
|
|
20
19
|
|
|
21
20
|
module Mongo
|
|
22
21
|
module Operation
|
|
23
|
-
|
|
24
22
|
# A MongoDB usersinfo operation.
|
|
25
23
|
#
|
|
26
24
|
# @api private
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2021 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,23 +17,16 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class WriteCommand
|
|
21
|
-
|
|
22
20
|
# A MongoDB write command operation sent as an op message.
|
|
23
21
|
#
|
|
24
22
|
# @api private
|
|
25
23
|
class OpMsg < OpMsgBase
|
|
26
|
-
include Validatable
|
|
27
|
-
|
|
28
24
|
private
|
|
29
25
|
|
|
30
26
|
def selector(connection)
|
|
31
27
|
super.tap do |selector|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
end
|
|
35
|
-
if wc = spec[:write_concern]
|
|
36
|
-
selector[:writeConcern] = wc.options
|
|
37
|
-
end
|
|
28
|
+
wc = spec[:write_concern]
|
|
29
|
+
selector[:writeConcern] = wc.options if wc
|
|
38
30
|
end
|
|
39
31
|
end
|
|
40
32
|
end
|