mongo 2.22.0 → 2.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/mongo_console +0 -1
- data/lib/mongo/active_support.rb +1 -2
- data/lib/mongo/address/ipv4.rb +3 -6
- data/lib/mongo/address/ipv6.rb +6 -10
- data/lib/mongo/address/unix.rb +1 -4
- data/lib/mongo/address/validator.rb +16 -28
- data/lib/mongo/address.rb +30 -40
- data/lib/mongo/auth/aws/conversation.rb +6 -10
- data/lib/mongo/auth/aws/credentials.rb +0 -1
- data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
- data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
- data/lib/mongo/auth/aws/request.rb +20 -35
- data/lib/mongo/auth/aws.rb +1 -2
- data/lib/mongo/auth/base.rb +20 -29
- data/lib/mongo/auth/conversation_base.rb +14 -18
- data/lib/mongo/auth/cr/conversation.rb +0 -3
- data/lib/mongo/auth/cr.rb +1 -4
- data/lib/mongo/auth/credential_cache.rb +0 -2
- data/lib/mongo/auth/gssapi/conversation.rb +3 -8
- data/lib/mongo/auth/gssapi.rb +1 -4
- data/lib/mongo/auth/ldap/conversation.rb +0 -3
- data/lib/mongo/auth/ldap.rb +1 -4
- data/lib/mongo/auth/roles.rb +16 -19
- data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
- data/lib/mongo/auth/scram/conversation.rb +2 -5
- data/lib/mongo/auth/scram.rb +5 -10
- data/lib/mongo/auth/scram256/conversation.rb +2 -5
- data/lib/mongo/auth/scram256.rb +1 -3
- data/lib/mongo/auth/scram_conversation_base.rb +18 -24
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
- data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
- data/lib/mongo/auth/stringprep.rb +9 -12
- data/lib/mongo/auth/user/view.rb +3 -5
- data/lib/mongo/auth/user.rb +14 -24
- data/lib/mongo/auth/x509/conversation.rb +0 -3
- data/lib/mongo/auth/x509.rb +7 -9
- data/lib/mongo/auth.rb +18 -30
- data/lib/mongo/background_thread.rb +9 -17
- data/lib/mongo/bson.rb +0 -2
- data/lib/mongo/bulk_write/combineable.rb +0 -3
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/result.rb +11 -16
- data/lib/mongo/bulk_write/result_combiner.rb +9 -12
- data/lib/mongo/bulk_write/transformable.rb +16 -19
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
- data/lib/mongo/bulk_write/validatable.rb +11 -18
- data/lib/mongo/bulk_write.rb +76 -91
- data/lib/mongo/caching_cursor.rb +2 -7
- data/lib/mongo/client.rb +267 -276
- data/lib/mongo/client_encryption.rb +4 -5
- data/lib/mongo/cluster/periodic_executor.rb +2 -5
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
- data/lib/mongo/cluster/sdam_flow.rb +136 -159
- data/lib/mongo/cluster/topology/base.rb +15 -18
- data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
- data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
- data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
- data/lib/mongo/cluster/topology/sharded.rb +19 -9
- data/lib/mongo/cluster/topology/single.rb +24 -14
- data/lib/mongo/cluster/topology/unknown.rb +20 -10
- data/lib/mongo/cluster/topology.rb +29 -25
- data/lib/mongo/cluster.rb +152 -184
- data/lib/mongo/cluster_time.rb +14 -31
- data/lib/mongo/collection/helpers.rb +5 -8
- data/lib/mongo/collection/view/aggregation/behavior.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +10 -12
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
- data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
- data/lib/mongo/collection/view/builder.rb +0 -1
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
- data/lib/mongo/collection/view/change_stream.rb +59 -58
- data/lib/mongo/collection/view/explainable.rb +11 -20
- data/lib/mongo/collection/view/immutable.rb +1 -3
- data/lib/mongo/collection/view/iterable.rb +44 -35
- data/lib/mongo/collection/view/map_reduce.rb +20 -25
- data/lib/mongo/collection/view/readable.rb +96 -94
- data/lib/mongo/collection/view/writable.rb +104 -114
- data/lib/mongo/collection/view.rb +11 -8
- data/lib/mongo/collection.rb +103 -106
- data/lib/mongo/condition_variable.rb +4 -4
- data/lib/mongo/config/options.rb +0 -3
- data/lib/mongo/config/validators/option.rb +3 -5
- data/lib/mongo/config.rb +6 -4
- data/lib/mongo/crypt/auto_decryption_context.rb +9 -3
- data/lib/mongo/crypt/auto_encrypter.rb +34 -43
- data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
- data/lib/mongo/crypt/binary.rb +5 -9
- data/lib/mongo/crypt/binding.rb +150 -156
- data/lib/mongo/crypt/context.rb +20 -17
- data/lib/mongo/crypt/data_key_context.rb +2 -7
- data/lib/mongo/crypt/encryption_io.rb +29 -39
- data/lib/mongo/crypt/explicit_decryption_context.rb +9 -3
- data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
- data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
- data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
- data/lib/mongo/crypt/handle.rb +42 -48
- data/lib/mongo/crypt/hooks.rb +12 -15
- data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
- data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
- data/lib/mongo/crypt/kms/aws.rb +0 -2
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
- data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
- data/lib/mongo/crypt/kms/azure.rb +0 -1
- data/lib/mongo/crypt/kms/credentials.rb +13 -27
- data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
- data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
- data/lib/mongo/crypt/kms/gcp.rb +0 -2
- data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
- data/lib/mongo/crypt/kms/kmip.rb +0 -1
- data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
- data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
- data/lib/mongo/crypt/kms/local.rb +0 -1
- data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
- data/lib/mongo/crypt/kms.rb +14 -16
- data/lib/mongo/crypt/kms_context.rb +0 -2
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
- data/lib/mongo/crypt/status.rb +12 -14
- data/lib/mongo/crypt.rb +0 -1
- data/lib/mongo/csot_timeout_holder.rb +3 -2
- data/lib/mongo/cursor/kill_spec.rb +7 -10
- data/lib/mongo/cursor.rb +74 -64
- data/lib/mongo/cursor_host.rb +8 -10
- data/lib/mongo/database/view.rb +23 -39
- data/lib/mongo/database.rb +68 -65
- data/lib/mongo/dbref.rb +0 -1
- data/lib/mongo/deprecations.rb +98 -0
- data/lib/mongo/distinguishing_semaphore.rb +0 -1
- data/lib/mongo/error/auth_error.rb +0 -2
- data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
- data/lib/mongo/error/bulk_write_error.rb +7 -10
- data/lib/mongo/error/change_stream_resumable.rb +0 -2
- data/lib/mongo/error/client_closed.rb +0 -2
- data/lib/mongo/error/closed_stream.rb +1 -4
- data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
- data/lib/mongo/error/connection_perished.rb +0 -2
- data/lib/mongo/error/connection_unavailable.rb +0 -2
- data/lib/mongo/error/credential_check_error.rb +0 -2
- data/lib/mongo/error/crypt_error.rb +0 -2
- data/lib/mongo/error/extra_file_chunk.rb +1 -4
- data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
- data/lib/mongo/error/file_not_found.rb +0 -3
- data/lib/mongo/error/handshake_error.rb +0 -2
- data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
- data/lib/mongo/error/internal_driver_error.rb +0 -2
- data/lib/mongo/error/invalid_address.rb +0 -2
- data/lib/mongo/error/invalid_application_name.rb +0 -3
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
- data/lib/mongo/error/invalid_collection_name.rb +1 -4
- data/lib/mongo/error/invalid_config_option.rb +0 -3
- data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
- data/lib/mongo/error/invalid_database_name.rb +1 -4
- data/lib/mongo/error/invalid_document.rb +1 -4
- data/lib/mongo/error/invalid_file.rb +0 -3
- data/lib/mongo/error/invalid_file_revision.rb +0 -3
- data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
- data/lib/mongo/error/invalid_nonce.rb +0 -3
- data/lib/mongo/error/invalid_read_concern.rb +2 -4
- data/lib/mongo/error/invalid_read_option.rb +0 -3
- data/lib/mongo/error/invalid_replacement_document.rb +2 -5
- data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
- data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
- data/lib/mongo/error/invalid_server_preference.rb +7 -16
- data/lib/mongo/error/invalid_session.rb +1 -4
- data/lib/mongo/error/invalid_signature.rb +0 -3
- data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
- data/lib/mongo/error/invalid_txt_record.rb +0 -2
- data/lib/mongo/error/invalid_update_document.rb +2 -5
- data/lib/mongo/error/invalid_uri.rb +1 -4
- data/lib/mongo/error/invalid_write_concern.rb +2 -5
- data/lib/mongo/error/kms_error.rb +0 -2
- data/lib/mongo/error/labelable.rb +0 -3
- data/lib/mongo/error/lint_error.rb +0 -2
- data/lib/mongo/error/max_bson_size.rb +8 -11
- data/lib/mongo/error/max_message_size.rb +2 -5
- data/lib/mongo/error/mismatched_domain.rb +0 -2
- data/lib/mongo/error/missing_connection.rb +0 -2
- data/lib/mongo/error/missing_file_chunk.rb +0 -3
- data/lib/mongo/error/missing_password.rb +0 -2
- data/lib/mongo/error/missing_resume_token.rb +1 -4
- data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
- data/lib/mongo/error/missing_service_id.rb +0 -2
- data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
- data/lib/mongo/error/multi_index_drop.rb +0 -3
- data/lib/mongo/error/need_primary_server.rb +0 -2
- data/lib/mongo/error/no_server_available.rb +3 -8
- data/lib/mongo/error/no_service_connection_available.rb +1 -3
- data/lib/mongo/error/no_srv_records.rb +0 -2
- data/lib/mongo/error/notable.rb +8 -16
- data/lib/mongo/error/operation_failure.rb +22 -35
- data/lib/mongo/error/parser.rb +33 -75
- data/lib/mongo/error/pool_cleared_error.rb +1 -3
- data/lib/mongo/error/pool_closed_error.rb +0 -3
- data/lib/mongo/error/pool_error.rb +0 -3
- data/lib/mongo/error/pool_paused_error.rb +0 -2
- data/lib/mongo/error/raise_original_error.rb +1 -3
- data/lib/mongo/error/read_write_retryable.rb +14 -17
- data/lib/mongo/error/sdam_error_detection.rb +3 -5
- data/lib/mongo/error/server_api_conflict.rb +0 -2
- data/lib/mongo/error/server_certificate_revoked.rb +0 -2
- data/lib/mongo/error/server_not_usable.rb +0 -2
- data/lib/mongo/error/session_ended.rb +1 -3
- data/lib/mongo/error/session_not_materialized.rb +1 -3
- data/lib/mongo/error/sessions_not_supported.rb +1 -4
- data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
- data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
- data/lib/mongo/error/socket_error.rb +0 -2
- data/lib/mongo/error/socket_timeout_error.rb +0 -2
- data/lib/mongo/error/transactions_not_supported.rb +3 -6
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
- data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
- data/lib/mongo/error/unexpected_response.rb +1 -4
- data/lib/mongo/error/unknown_payload_type.rb +0 -3
- data/lib/mongo/error/unmet_dependency.rb +0 -2
- data/lib/mongo/error/unsupported_array_filters.rb +3 -24
- data/lib/mongo/error/unsupported_collation.rb +3 -24
- data/lib/mongo/error/unsupported_features.rb +0 -2
- data/lib/mongo/error/unsupported_message_type.rb +0 -2
- data/lib/mongo/error/unsupported_option.rb +19 -21
- data/lib/mongo/error/write_retryable.rb +0 -2
- data/lib/mongo/error.rb +10 -24
- data/lib/mongo/event/base.rb +0 -2
- data/lib/mongo/event/listeners.rb +0 -3
- data/lib/mongo/event/publisher.rb +0 -3
- data/lib/mongo/event/subscriber.rb +0 -4
- data/lib/mongo/event.rb +4 -6
- data/lib/mongo/grid/file/chunk.rb +7 -10
- data/lib/mongo/grid/file/info.rb +20 -24
- data/lib/mongo/grid/file.rb +7 -8
- data/lib/mongo/grid/fs_bucket.rb +40 -48
- data/lib/mongo/grid/stream/read.rb +25 -35
- data/lib/mongo/grid/stream/write.rb +17 -22
- data/lib/mongo/grid/stream.rb +2 -4
- data/lib/mongo/grid.rb +0 -1
- data/lib/mongo/id.rb +0 -1
- data/lib/mongo/index/view.rb +68 -58
- data/lib/mongo/index.rb +7 -10
- data/lib/mongo/lint.rb +31 -37
- data/lib/mongo/loggable.rb +5 -8
- data/lib/mongo/logger.rb +1 -7
- data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
- data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
- data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
- data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
- data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
- data/lib/mongo/monitoring/event/cmap.rb +0 -1
- data/lib/mongo/monitoring/event/command_failed.rb +5 -9
- data/lib/mongo/monitoring/event/command_started.rb +8 -12
- data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
- data/lib/mongo/monitoring/event/secure.rb +15 -20
- data/lib/mongo/monitoring/event/server_closed.rb +1 -4
- data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
- data/lib/mongo/monitoring/event/server_opening.rb +1 -4
- data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
- data/lib/mongo/monitoring/event.rb +0 -1
- data/lib/mongo/monitoring/publishable.rb +20 -30
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
- data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
- data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
- data/lib/mongo/monitoring.rb +38 -39
- data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
- data/lib/mongo/operation/aggregate/result.rb +3 -6
- data/lib/mongo/operation/aggregate.rb +0 -2
- data/lib/mongo/operation/collections_info/result.rb +0 -3
- data/lib/mongo/operation/collections_info.rb +0 -2
- data/lib/mongo/operation/command/op_msg.rb +1 -4
- data/lib/mongo/operation/command.rb +0 -2
- data/lib/mongo/operation/context.rb +13 -16
- data/lib/mongo/operation/count/op_msg.rb +2 -4
- data/lib/mongo/operation/count.rb +0 -2
- data/lib/mongo/operation/create/op_msg.rb +2 -5
- data/lib/mongo/operation/create.rb +4 -2
- data/lib/mongo/operation/create_index/op_msg.rb +3 -7
- data/lib/mongo/operation/create_index.rb +0 -2
- data/lib/mongo/operation/create_user/op_msg.rb +2 -4
- data/lib/mongo/operation/create_user.rb +0 -2
- data/lib/mongo/operation/delete/bulk_result.rb +2 -3
- data/lib/mongo/operation/delete/op_msg.rb +3 -10
- data/lib/mongo/operation/delete/result.rb +0 -3
- data/lib/mongo/operation/delete.rb +1 -5
- data/lib/mongo/operation/distinct/op_msg.rb +2 -5
- data/lib/mongo/operation/distinct.rb +0 -2
- data/lib/mongo/operation/drop/op_msg.rb +0 -2
- data/lib/mongo/operation/drop.rb +0 -2
- data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
- data/lib/mongo/operation/drop_database.rb +0 -2
- data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
- data/lib/mongo/operation/drop_index.rb +0 -2
- data/lib/mongo/operation/explain/op_msg.rb +0 -2
- data/lib/mongo/operation/explain/result.rb +0 -3
- data/lib/mongo/operation/explain.rb +0 -2
- data/lib/mongo/operation/find/builder/command.rb +4 -12
- data/lib/mongo/operation/find/builder/flags.rb +9 -15
- data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
- data/lib/mongo/operation/find/builder.rb +0 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -12
- data/lib/mongo/operation/find/result.rb +0 -3
- data/lib/mongo/operation/find.rb +0 -2
- data/lib/mongo/operation/get_more/command_builder.rb +1 -6
- data/lib/mongo/operation/get_more/op_msg.rb +10 -4
- data/lib/mongo/operation/get_more/result.rb +0 -3
- data/lib/mongo/operation/get_more.rb +0 -2
- data/lib/mongo/operation/indexes/op_msg.rb +0 -2
- data/lib/mongo/operation/indexes/result.rb +1 -5
- data/lib/mongo/operation/indexes.rb +0 -2
- data/lib/mongo/operation/insert/bulk_result.rb +2 -6
- data/lib/mongo/operation/insert/op_msg.rb +7 -6
- data/lib/mongo/operation/insert/result.rb +0 -3
- data/lib/mongo/operation/insert.rb +2 -5
- data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
- data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
- data/lib/mongo/operation/kill_cursors.rb +0 -2
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
- data/lib/mongo/operation/list_collections/result.rb +1 -4
- data/lib/mongo/operation/list_collections.rb +0 -2
- data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
- data/lib/mongo/operation/map_reduce/result.rb +3 -6
- data/lib/mongo/operation/map_reduce.rb +0 -2
- data/lib/mongo/operation/op_msg_base.rb +0 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
- data/lib/mongo/operation/parallel_scan/result.rb +2 -5
- data/lib/mongo/operation/parallel_scan.rb +0 -2
- data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
- data/lib/mongo/operation/remove_user.rb +0 -2
- data/lib/mongo/operation/result.rb +38 -48
- data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
- data/lib/mongo/operation/shared/executable.rb +29 -31
- data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
- data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
- data/lib/mongo/operation/shared/idable.rb +3 -6
- data/lib/mongo/operation/shared/limited.rb +0 -3
- data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
- data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
- data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
- data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
- data/lib/mongo/operation/shared/response_handling.rb +13 -26
- data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
- data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
- data/lib/mongo/operation/shared/specifiable.rb +37 -59
- data/lib/mongo/operation/shared/write.rb +12 -17
- data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
- data/lib/mongo/operation/update/bulk_result.rb +13 -17
- data/lib/mongo/operation/update/op_msg.rb +2 -5
- data/lib/mongo/operation/update/result.rb +5 -5
- data/lib/mongo/operation/update.rb +1 -5
- data/lib/mongo/operation/update_user/op_msg.rb +2 -4
- data/lib/mongo/operation/update_user.rb +0 -2
- data/lib/mongo/operation/users_info/op_msg.rb +2 -4
- data/lib/mongo/operation/users_info/result.rb +1 -4
- data/lib/mongo/operation/users_info.rb +0 -2
- data/lib/mongo/operation/write_command/op_msg.rb +2 -10
- data/lib/mongo/operation/write_command.rb +0 -2
- data/lib/mongo/operation.rb +9 -14
- data/lib/mongo/options/mapper.rb +8 -15
- data/lib/mongo/options/redacted.rb +7 -9
- data/lib/mongo/options.rb +0 -1
- data/lib/mongo/protocol/bit_vector.rb +3 -5
- data/lib/mongo/protocol/caching_hash.rb +2 -7
- data/lib/mongo/protocol/compressed.rb +5 -10
- data/lib/mongo/protocol/get_more.rb +2 -8
- data/lib/mongo/protocol/kill_cursors.rb +2 -8
- data/lib/mongo/protocol/message.rb +103 -105
- data/lib/mongo/protocol/msg.rb +48 -63
- data/lib/mongo/protocol/query.rb +32 -41
- data/lib/mongo/protocol/registry.rb +2 -5
- data/lib/mongo/protocol/reply.rb +10 -16
- data/lib/mongo/protocol/serializers.rb +41 -59
- data/lib/mongo/protocol.rb +0 -1
- data/lib/mongo/query_cache.rb +7 -15
- data/lib/mongo/retryable/backpressure.rb +31 -0
- data/lib/mongo/retryable/base_worker.rb +39 -13
- data/lib/mongo/retryable/read_worker.rb +77 -21
- data/lib/mongo/retryable/retry_policy.rb +59 -0
- data/lib/mongo/retryable/write_worker.rb +155 -56
- data/lib/mongo/retryable.rb +70 -9
- data/lib/mongo/search_index/view.rb +30 -10
- data/lib/mongo/semaphore.rb +0 -1
- data/lib/mongo/server/app_metadata/environment.rb +3 -3
- data/lib/mongo/server/app_metadata/platform.rb +17 -4
- data/lib/mongo/server/app_metadata.rb +4 -5
- data/lib/mongo/server/connection.rb +79 -61
- data/lib/mongo/server/connection_base.rb +43 -53
- data/lib/mongo/server/connection_common.rb +41 -64
- data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
- data/lib/mongo/server/connection_pool/populator.rb +1 -4
- data/lib/mongo/server/connection_pool.rb +195 -167
- data/lib/mongo/server/description/features.rb +51 -59
- data/lib/mongo/server/description/load_balancer.rb +0 -2
- data/lib/mongo/server/description.rb +117 -138
- data/lib/mongo/server/monitor/app_metadata.rb +3 -4
- data/lib/mongo/server/monitor/connection.rb +28 -35
- data/lib/mongo/server/monitor.rb +65 -60
- data/lib/mongo/server/pending_connection.rb +70 -71
- data/lib/mongo/server/push_monitor/connection.rb +0 -3
- data/lib/mongo/server/push_monitor.rb +21 -29
- data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
- data/lib/mongo/server.rb +62 -94
- data/lib/mongo/server_selector/base.rb +133 -157
- data/lib/mongo/server_selector/nearest.rb +2 -5
- data/lib/mongo/server_selector/primary.rb +1 -5
- data/lib/mongo/server_selector/primary_preferred.rb +2 -6
- data/lib/mongo/server_selector/secondary.rb +2 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
- data/lib/mongo/server_selector.rb +3 -4
- data/lib/mongo/session/server_session.rb +6 -7
- data/lib/mongo/session/session_pool.rb +20 -34
- data/lib/mongo/session.rb +334 -199
- data/lib/mongo/socket/ocsp_cache.rb +8 -13
- data/lib/mongo/socket/ocsp_verifier.rb +69 -70
- data/lib/mongo/socket/ssl.rb +44 -43
- data/lib/mongo/socket/tcp.rb +5 -8
- data/lib/mongo/socket/unix.rb +0 -4
- data/lib/mongo/socket.rb +80 -102
- data/lib/mongo/srv/monitor.rb +10 -11
- data/lib/mongo/srv/resolver.rb +15 -24
- data/lib/mongo/srv/result.rb +25 -21
- data/lib/mongo/srv.rb +0 -1
- data/lib/mongo/timeout.rb +4 -11
- data/lib/mongo/topology_version.rb +8 -13
- data/lib/mongo/tracing/open_telemetry/command_tracer.rb +320 -0
- data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +227 -0
- data/lib/mongo/tracing/open_telemetry/tracer.rb +236 -0
- data/lib/mongo/{error/server_api_not_supported.rb → tracing/open_telemetry.rb} +10 -10
- data/lib/mongo/tracing.rb +42 -0
- data/lib/mongo/uri/options_mapper.rb +135 -126
- data/lib/mongo/uri/srv_protocol.rb +34 -42
- data/lib/mongo/uri.rb +95 -139
- data/lib/mongo/utils.rb +5 -12
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +0 -2
- data/lib/mongo/write_concern/base.rb +6 -6
- data/lib/mongo/write_concern/unacknowledged.rb +0 -2
- data/lib/mongo/write_concern.rb +14 -15
- data/lib/mongo.rb +4 -3
- data/mongo.gemspec +17 -17
- metadata +11 -5
- data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
- data/lib/mongo/operation/shared/validatable.rb +0 -87
|
@@ -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/map_reduce/result'
|
|
|
20
19
|
|
|
21
20
|
module Mongo
|
|
22
21
|
module Operation
|
|
23
|
-
|
|
24
22
|
# A MongoDB mapreduce 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) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class ParallelScan
|
|
21
|
-
|
|
22
20
|
# A MongoDB parallelscan operation sent as an op message.
|
|
23
21
|
#
|
|
24
22
|
# @api private
|
|
@@ -31,12 +29,13 @@ module Mongo
|
|
|
31
29
|
|
|
32
30
|
private
|
|
33
31
|
|
|
34
|
-
def selector(
|
|
35
|
-
sel = { :
|
|
32
|
+
def selector(_connection)
|
|
33
|
+
sel = { parallelCollectionScan: coll_name, numCursors: cursor_count }
|
|
36
34
|
sel[:maxTimeMS] = max_time_ms if max_time_ms
|
|
37
35
|
if read_concern
|
|
38
36
|
sel[:readConcern] = Options::Mapper.transform_values_to_strings(
|
|
39
|
-
read_concern
|
|
37
|
+
read_concern
|
|
38
|
+
)
|
|
40
39
|
end
|
|
41
40
|
sel
|
|
42
41
|
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,18 +17,16 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class ParallelScan
|
|
21
|
-
|
|
22
20
|
# Defines custom behavior of results in a parallel scan.
|
|
23
21
|
#
|
|
24
22
|
# @since 2.0.0
|
|
25
23
|
# @api semiprivate
|
|
26
24
|
class Result < Operation::Result
|
|
27
|
-
|
|
28
25
|
# The name of the cursors field in the result.
|
|
29
26
|
#
|
|
30
27
|
# @since 2.0.0
|
|
31
28
|
# @api private
|
|
32
|
-
CURSORS = 'cursors'
|
|
29
|
+
CURSORS = 'cursors'
|
|
33
30
|
|
|
34
31
|
# Get all the cursor ids from the result.
|
|
35
32
|
#
|
|
@@ -41,7 +38,7 @@ module Mongo
|
|
|
41
38
|
# @since 2.0.0
|
|
42
39
|
# @api private
|
|
43
40
|
def cursor_ids
|
|
44
|
-
documents.map {|doc| doc[CURSOR][CURSOR_ID]}
|
|
41
|
+
documents.map { |doc| doc[CURSOR][CURSOR_ID] }
|
|
45
42
|
end
|
|
46
43
|
|
|
47
44
|
# Get the documents from parallel scan.
|
|
@@ -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/parallel_scan/result'
|
|
|
20
19
|
|
|
21
20
|
module Mongo
|
|
22
21
|
module Operation
|
|
23
|
-
|
|
24
22
|
# A MongoDB parallelscan 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) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -18,7 +17,6 @@
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
19
|
class RemoveUser
|
|
21
|
-
|
|
22
20
|
# A MongoDB removeuser 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
|
+
{ dropUser: user_name }
|
|
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/remove_user/op_msg'
|
|
|
19
18
|
|
|
20
19
|
module Mongo
|
|
21
20
|
module Operation
|
|
22
|
-
|
|
23
21
|
# A MongoDB removeuser 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) 2014-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -16,11 +15,9 @@
|
|
|
16
15
|
# limitations under the License.
|
|
17
16
|
|
|
18
17
|
require 'mongo/operation/shared/result/aggregatable'
|
|
19
|
-
require 'mongo/operation/shared/result/use_legacy_error_parser'
|
|
20
18
|
|
|
21
19
|
module Mongo
|
|
22
20
|
module Operation
|
|
23
|
-
|
|
24
21
|
# Result wrapper for wire protocol replies.
|
|
25
22
|
#
|
|
26
23
|
# An operation has zero or one replies. The only operations producing zero
|
|
@@ -39,49 +36,49 @@ module Mongo
|
|
|
39
36
|
#
|
|
40
37
|
# @since 2.2.0
|
|
41
38
|
# @api private
|
|
42
|
-
CURSOR = 'cursor'
|
|
39
|
+
CURSOR = 'cursor'
|
|
43
40
|
|
|
44
41
|
# The cursor id field in the cursor document.
|
|
45
42
|
#
|
|
46
43
|
# @since 2.2.0
|
|
47
44
|
# @api private
|
|
48
|
-
CURSOR_ID = 'id'
|
|
45
|
+
CURSOR_ID = 'id'
|
|
49
46
|
|
|
50
47
|
# The field name for the first batch of a cursor.
|
|
51
48
|
#
|
|
52
49
|
# @since 2.2.0
|
|
53
50
|
# @api private
|
|
54
|
-
FIRST_BATCH = 'firstBatch'
|
|
51
|
+
FIRST_BATCH = 'firstBatch'
|
|
55
52
|
|
|
56
53
|
# The field name for the next batch of a cursor.
|
|
57
54
|
#
|
|
58
55
|
# @since 2.2.0
|
|
59
56
|
# @api private
|
|
60
|
-
NEXT_BATCH = 'nextBatch'
|
|
57
|
+
NEXT_BATCH = 'nextBatch'
|
|
61
58
|
|
|
62
59
|
# The namespace field in the cursor document.
|
|
63
60
|
#
|
|
64
61
|
# @since 2.2.0
|
|
65
62
|
# @api private
|
|
66
|
-
NAMESPACE = 'ns'
|
|
63
|
+
NAMESPACE = 'ns'
|
|
67
64
|
|
|
68
65
|
# The number of documents updated in the write.
|
|
69
66
|
#
|
|
70
67
|
# @since 2.0.0
|
|
71
68
|
# @api private
|
|
72
|
-
N = 'n'
|
|
69
|
+
N = 'n'
|
|
73
70
|
|
|
74
71
|
# The ok status field in the result.
|
|
75
72
|
#
|
|
76
73
|
# @since 2.0.0
|
|
77
74
|
# @api private
|
|
78
|
-
OK = 'ok'
|
|
75
|
+
OK = 'ok'
|
|
79
76
|
|
|
80
77
|
# The result field constant.
|
|
81
78
|
#
|
|
82
79
|
# @since 2.2.0
|
|
83
80
|
# @api private
|
|
84
|
-
RESULT = 'result'
|
|
81
|
+
RESULT = 'result'
|
|
85
82
|
|
|
86
83
|
# Initialize a new result.
|
|
87
84
|
#
|
|
@@ -107,23 +104,23 @@ module Mongo
|
|
|
107
104
|
def initialize(replies, connection_description = nil, connection_global_id = nil, context: nil, connection: nil)
|
|
108
105
|
@context = context
|
|
109
106
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
end
|
|
119
|
-
unless reply.is_a?(Protocol::Message)
|
|
120
|
-
raise ArgumentError, "Argument must be a Message instance, but is a #{reply.class}: #{reply.inspect}"
|
|
121
|
-
end
|
|
122
|
-
@replies = [ reply ]
|
|
123
|
-
@connection_description = connection_description
|
|
124
|
-
@connection_global_id = connection_global_id
|
|
125
|
-
@connection = connection
|
|
107
|
+
return unless replies
|
|
108
|
+
|
|
109
|
+
if replies.is_a?(Array)
|
|
110
|
+
raise ArgumentError, "Only one (or zero) reply is supported, given #{replies.length}" if replies.length != 1
|
|
111
|
+
|
|
112
|
+
reply = replies.first
|
|
113
|
+
else
|
|
114
|
+
reply = replies
|
|
126
115
|
end
|
|
116
|
+
unless reply.is_a?(Protocol::Message)
|
|
117
|
+
raise ArgumentError, "Argument must be a Message instance, but is a #{reply.class}: #{reply.inspect}"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
@replies = [ reply ]
|
|
121
|
+
@connection_description = connection_description
|
|
122
|
+
@connection_global_id = connection_global_id
|
|
123
|
+
@connection = connection
|
|
127
124
|
end
|
|
128
125
|
|
|
129
126
|
# @return [ Array<Protocol::Message> ] replies The wrapped wire protocol replies.
|
|
@@ -153,16 +150,10 @@ module Mongo
|
|
|
153
150
|
|
|
154
151
|
# @api private
|
|
155
152
|
def_delegators :parser,
|
|
156
|
-
|
|
153
|
+
:not_master?, :node_recovering?, :node_shutting_down?
|
|
157
154
|
|
|
158
155
|
# Is the result acknowledged?
|
|
159
156
|
#
|
|
160
|
-
# @note On MongoDB 2.6 and higher all writes are acknowledged since the
|
|
161
|
-
# driver uses write commands for all write operations. On 2.4 and
|
|
162
|
-
# lower, the result is acknowledged if the GLE has been executed after
|
|
163
|
-
# the command. If not, no replies will be specified. Reads will always
|
|
164
|
-
# return true here since a replies is always provided.
|
|
165
|
-
#
|
|
166
157
|
# @return [ true, false ] If the result is acknowledged.
|
|
167
158
|
#
|
|
168
159
|
# @since 2.0.0
|
|
@@ -263,11 +254,9 @@ module Mongo
|
|
|
263
254
|
# @since 2.0.0
|
|
264
255
|
# @api private
|
|
265
256
|
def reply
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
nil
|
|
270
|
-
end
|
|
257
|
+
return unless acknowledged?
|
|
258
|
+
|
|
259
|
+
replies.first
|
|
271
260
|
end
|
|
272
261
|
|
|
273
262
|
# Get the number of documents returned by the server in this batch.
|
|
@@ -298,7 +287,8 @@ module Mongo
|
|
|
298
287
|
# @since 2.0.0
|
|
299
288
|
# @api public
|
|
300
289
|
def successful?
|
|
301
|
-
return true
|
|
290
|
+
return true unless acknowledged?
|
|
291
|
+
|
|
302
292
|
if first_document.has_key?(OK)
|
|
303
293
|
ok? && parser.message.empty?
|
|
304
294
|
else
|
|
@@ -340,7 +330,7 @@ module Mongo
|
|
|
340
330
|
# @since 2.0.0
|
|
341
331
|
# @api private
|
|
342
332
|
def validate!
|
|
343
|
-
|
|
333
|
+
successful? ? self : raise_operation_failure
|
|
344
334
|
end
|
|
345
335
|
|
|
346
336
|
# The exception instance (of Error::OperationFailure::Family)
|
|
@@ -365,7 +355,7 @@ module Mongo
|
|
|
365
355
|
wtimeout: parser.wtimeout,
|
|
366
356
|
connection_description: connection_description,
|
|
367
357
|
document: parser.document,
|
|
368
|
-
server_message: parser.server_message
|
|
358
|
+
server_message: parser.server_message
|
|
369
359
|
)
|
|
370
360
|
end
|
|
371
361
|
|
|
@@ -383,7 +373,7 @@ module Mongo
|
|
|
383
373
|
def topology_version
|
|
384
374
|
unless defined?(@topology_version)
|
|
385
375
|
@topology_version = first_document['topologyVersion'] &&
|
|
386
|
-
|
|
376
|
+
TopologyVersion.new(first_document['topologyVersion'])
|
|
387
377
|
end
|
|
388
378
|
@topology_version
|
|
389
379
|
end
|
|
@@ -406,7 +396,7 @@ module Mongo
|
|
|
406
396
|
end
|
|
407
397
|
|
|
408
398
|
# @api public
|
|
409
|
-
alias
|
|
399
|
+
alias n written_count
|
|
410
400
|
|
|
411
401
|
# Get the operation time reported in the server response.
|
|
412
402
|
#
|
|
@@ -459,9 +449,9 @@ module Mongo
|
|
|
459
449
|
end
|
|
460
450
|
|
|
461
451
|
def snapshot_timestamp
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
452
|
+
return unless doc = reply.documents.first
|
|
453
|
+
|
|
454
|
+
doc['cursor']&.[]('atClusterTime') || doc['atClusterTime']
|
|
465
455
|
end
|
|
466
456
|
|
|
467
457
|
private
|
|
@@ -483,7 +473,7 @@ module Mongo
|
|
|
483
473
|
|
|
484
474
|
def aggregate_written_count
|
|
485
475
|
documents.reduce(0) do |n, document|
|
|
486
|
-
n +=
|
|
476
|
+
n += document[N] || 0
|
|
487
477
|
n
|
|
488
478
|
end
|
|
489
479
|
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,20 +16,16 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# Custom behavior for operations that support the bypassdocumentvalidation option.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.2
|
|
24
22
|
# @api private
|
|
25
23
|
module BypassDocumentValidation
|
|
26
|
-
|
|
27
24
|
private
|
|
28
25
|
|
|
29
26
|
def command(connection)
|
|
30
|
-
if Lint.enabled?
|
|
31
|
-
|
|
32
|
-
raise Error::LintError, "Connection is not a Connection instance: #{connection}"
|
|
33
|
-
end
|
|
27
|
+
if Lint.enabled? && !connection.is_a?(Server::Connection)
|
|
28
|
+
raise Error::LintError, "Connection is not a Connection instance: #{connection}"
|
|
34
29
|
end
|
|
35
30
|
|
|
36
31
|
sel = super
|
|
@@ -39,6 +34,7 @@ module Mongo
|
|
|
39
34
|
|
|
40
35
|
def add_bypass_document_validation(sel)
|
|
41
36
|
return sel unless bypass_document_validation
|
|
37
|
+
|
|
42
38
|
sel.merge(bypassDocumentValidation: true)
|
|
43
39
|
end
|
|
44
40
|
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
|
# Custom behavior for operations that support causal consistency.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.2
|
|
24
22
|
# @api private
|
|
25
23
|
module CausalConsistencySupported
|
|
26
|
-
|
|
27
24
|
private
|
|
28
25
|
|
|
29
26
|
# Adds causal consistency document to the selector, if one can be
|
|
@@ -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,13 +18,11 @@ require 'mongo/error'
|
|
|
19
18
|
|
|
20
19
|
module Mongo
|
|
21
20
|
module Operation
|
|
22
|
-
|
|
23
21
|
# Shared executable behavior of operations.
|
|
24
22
|
#
|
|
25
23
|
# @since 2.5.2
|
|
26
24
|
# @api private
|
|
27
25
|
module Executable
|
|
28
|
-
|
|
29
26
|
include ResponseHandling
|
|
30
27
|
|
|
31
28
|
# @return [ Operation::Context | nil ] the operation context used to
|
|
@@ -45,11 +42,10 @@ module Mongo
|
|
|
45
42
|
add_error_labels(connection, context) do
|
|
46
43
|
check_for_network_error do
|
|
47
44
|
add_server_diagnostics(connection) do
|
|
48
|
-
get_result(connection, context, options)
|
|
45
|
+
get_result(connection, context, options) do |result|
|
|
49
46
|
if session
|
|
50
47
|
if session.in_transaction? &&
|
|
51
|
-
|
|
52
|
-
then
|
|
48
|
+
connection.description.load_balancer?
|
|
53
49
|
if session.pinned_connection_global_id
|
|
54
50
|
unless session.pinned_connection_global_id == connection.global_id
|
|
55
51
|
raise(
|
|
@@ -57,9 +53,9 @@ module Mongo
|
|
|
57
53
|
"Expected operation to use connection #{session.pinned_connection_global_id} but it used #{connection.global_id}"
|
|
58
54
|
)
|
|
59
55
|
end
|
|
60
|
-
|
|
61
|
-
session.pin_to_connection(connection.global_id)
|
|
62
|
-
connection.pin
|
|
56
|
+
elsif !session.committing_transaction? && !session.aborting_transaction?
|
|
57
|
+
session.pin_to_connection(connection.global_id, connection: connection)
|
|
58
|
+
connection.pin(:transaction)
|
|
63
59
|
end
|
|
64
60
|
end
|
|
65
61
|
|
|
@@ -69,8 +65,7 @@ module Mongo
|
|
|
69
65
|
end
|
|
70
66
|
|
|
71
67
|
if result.has_cursor_id? &&
|
|
72
|
-
|
|
73
|
-
then
|
|
68
|
+
connection.description.load_balancer?
|
|
74
69
|
if result.cursor_id == 0
|
|
75
70
|
connection.unpin
|
|
76
71
|
else
|
|
@@ -86,10 +81,8 @@ module Mongo
|
|
|
86
81
|
end
|
|
87
82
|
|
|
88
83
|
def execute(connection, context:, options: {})
|
|
89
|
-
if Lint.enabled?
|
|
90
|
-
|
|
91
|
-
raise Error::LintError, "Connection argument is of wrong type: #{connection}"
|
|
92
|
-
end
|
|
84
|
+
if Lint.enabled? && !connection.is_a?(Mongo::Server::Connection)
|
|
85
|
+
raise Error::LintError, "Connection argument is of wrong type: #{connection}"
|
|
93
86
|
end
|
|
94
87
|
|
|
95
88
|
do_execute(connection, context, options).tap do |result|
|
|
@@ -104,15 +97,23 @@ module Mongo
|
|
|
104
97
|
end
|
|
105
98
|
|
|
106
99
|
def get_result(connection, context, options = {})
|
|
107
|
-
|
|
100
|
+
message = build_message(connection, context)
|
|
101
|
+
connection.tracer.trace_command(message, context, connection) do
|
|
102
|
+
result = result_class.new(*dispatch_message(message, connection, context, options), context: context,
|
|
103
|
+
connection: connection)
|
|
104
|
+
if block_given?
|
|
105
|
+
yield result
|
|
106
|
+
else
|
|
107
|
+
result
|
|
108
|
+
end
|
|
109
|
+
end
|
|
108
110
|
end
|
|
109
111
|
|
|
110
112
|
# Returns a Protocol::Message or nil as reply.
|
|
111
|
-
def dispatch_message(connection, context, options = {})
|
|
112
|
-
message = build_message(connection, context)
|
|
113
|
+
def dispatch_message(message, connection, context, options = {})
|
|
113
114
|
message = message.maybe_encrypt(connection, context)
|
|
114
115
|
reply = connection.dispatch([ message ], context, options)
|
|
115
|
-
[reply, connection.description, connection.global_id]
|
|
116
|
+
[ reply, connection.description, connection.global_id ]
|
|
116
117
|
end
|
|
117
118
|
|
|
118
119
|
# @param [ Mongo::Server::Connection ] connection The connection on which
|
|
@@ -131,29 +132,26 @@ module Mongo
|
|
|
131
132
|
|
|
132
133
|
process_result_for_sdam(result, connection)
|
|
133
134
|
|
|
134
|
-
if session
|
|
135
|
-
session.process(result)
|
|
136
|
-
end
|
|
135
|
+
session.process(result) if session
|
|
137
136
|
|
|
138
137
|
result
|
|
139
138
|
end
|
|
140
139
|
|
|
141
140
|
def process_result_for_sdam(result, connection)
|
|
142
141
|
if (result.not_master? || result.node_recovering?) &&
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
end
|
|
142
|
+
connection.generation >= connection.server.pool.generation(service_id: connection.service_id)
|
|
143
|
+
keep_pool = if result.node_shutting_down?
|
|
144
|
+
false
|
|
145
|
+
else
|
|
146
|
+
# Max wire version needs to be examined while the server is known
|
|
147
|
+
connection.description.server_version_gte?('4.2')
|
|
148
|
+
end
|
|
151
149
|
|
|
152
150
|
connection.server.unknown!(
|
|
153
151
|
keep_connection_pool: keep_pool,
|
|
154
152
|
generation: connection.generation,
|
|
155
153
|
service_id: connection.service_id,
|
|
156
|
-
topology_version: result.topology_version
|
|
154
|
+
topology_version: result.topology_version
|
|
157
155
|
)
|
|
158
156
|
|
|
159
157
|
connection.server.scan_semaphore.signal
|
|
@@ -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 executable behavior of operations for operations
|
|
22
20
|
# whose result should not be validated.
|
|
23
21
|
#
|
|
24
22
|
# @api private
|
|
25
23
|
module ExecutableNoValidate
|
|
26
|
-
|
|
27
24
|
def execute(connection, context:)
|
|
28
25
|
do_execute(connection, context)
|
|
29
26
|
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,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# Shared behavior of applying transaction error label to execution result.
|
|
22
20
|
#
|
|
23
21
|
# @note This module should be included after ExecutableNoValidate,
|
|
@@ -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
|
-
# Shared behavior of operations that require its documents to each have an id.
|
|
19
|
+
# Shared behavior of operations that require their documents to each have an id.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.2
|
|
24
22
|
# @api private
|
|
25
23
|
module Idable
|
|
26
|
-
|
|
27
24
|
def documents
|
|
28
25
|
@documents ||= ensure_ids(super)
|
|
29
26
|
end
|
|
@@ -33,7 +30,7 @@ module Mongo
|
|
|
33
30
|
# The option for a custom id generator.
|
|
34
31
|
#
|
|
35
32
|
# @since 2.2.0
|
|
36
|
-
ID_GENERATOR = :id_generator
|
|
33
|
+
ID_GENERATOR = :id_generator
|
|
37
34
|
|
|
38
35
|
# Get the id generator.
|
|
39
36
|
#
|
|
@@ -44,7 +41,7 @@ module Mongo
|
|
|
44
41
|
#
|
|
45
42
|
# @since 2.2.0
|
|
46
43
|
def id_generator
|
|
47
|
-
@id_generator ||=
|
|
44
|
+
@id_generator ||= spec[ID_GENERATOR] || Operation::ObjectIdGenerator.new
|
|
48
45
|
end
|
|
49
46
|
|
|
50
47
|
def id(doc)
|
|
@@ -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,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# Shared behavior of operations that require its documents to each have an id.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.5.2
|
|
24
22
|
# @api private
|
|
25
23
|
module Limited
|
|
26
|
-
|
|
27
24
|
private
|
|
28
25
|
|
|
29
26
|
# Get the options for executing the operation on a particular connection.
|
|
@@ -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,13 +16,11 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# The default generator of ids for documents.
|
|
22
20
|
#
|
|
23
21
|
# @since 2.2.0
|
|
24
22
|
# @api private
|
|
25
23
|
class ObjectIdGenerator
|
|
26
|
-
|
|
27
24
|
# Generate a new id.
|
|
28
25
|
#
|
|
29
26
|
# @example Generate the id.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
# Copyright (C) 2018-2020 MongoDB Inc.
|
|
5
4
|
#
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
module Mongo
|
|
19
18
|
module Operation
|
|
20
|
-
|
|
21
19
|
# Shared behavior of looking up a class based on the name of
|
|
22
20
|
# the receiver's class.
|
|
23
21
|
#
|