mongo 2.13.0 → 2.15.0.alpha
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
- checksums.yaml.gz.sig +1 -4
- data.tar.gz.sig +0 -0
- data/README.md +4 -1
- data/Rakefile +46 -18
- data/lib/mongo.rb +32 -0
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/auth/aws/conversation.rb +1 -4
- data/lib/mongo/auth/base.rb +13 -7
- data/lib/mongo/auth/conversation_base.rb +32 -0
- data/lib/mongo/auth/cr/conversation.rb +6 -29
- data/lib/mongo/auth/gssapi/conversation.rb +4 -15
- data/lib/mongo/auth/ldap/conversation.rb +3 -14
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
- data/lib/mongo/auth/scram_conversation_base.rb +7 -34
- data/lib/mongo/auth/user/view.rb +16 -9
- data/lib/mongo/auth/x509/conversation.rb +4 -25
- data/lib/mongo/background_thread.rb +11 -0
- data/lib/mongo/bulk_write.rb +38 -18
- data/lib/mongo/caching_cursor.rb +74 -0
- data/lib/mongo/client.rb +142 -16
- data/lib/mongo/cluster.rb +22 -31
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
- data/lib/mongo/cluster/sdam_flow.rb +14 -0
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/collection.rb +58 -18
- data/lib/mongo/collection/view.rb +24 -20
- data/lib/mongo/collection/view/aggregation.rb +26 -5
- data/lib/mongo/collection/view/builder/find_command.rb +38 -18
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/explainable.rb +27 -8
- data/lib/mongo/collection/view/iterable.rb +73 -13
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +57 -21
- data/lib/mongo/collection/view/writable.rb +29 -15
- data/lib/mongo/crypt/encryption_io.rb +6 -6
- data/lib/mongo/cursor.rb +18 -5
- data/lib/mongo/database.rb +28 -5
- data/lib/mongo/database/view.rb +2 -2
- data/lib/mongo/error.rb +11 -1
- data/lib/mongo/error/bulk_write_error.rb +17 -3
- data/lib/mongo/error/internal_driver_error.rb +22 -0
- data/lib/mongo/error/invalid_read_concern.rb +28 -0
- data/lib/mongo/error/operation_failure.rb +26 -7
- data/lib/mongo/error/parser.rb +65 -12
- data/lib/mongo/error/server_api_conflict.rb +23 -0
- data/lib/mongo/error/server_api_not_supported.rb +24 -0
- data/lib/mongo/error/server_certificate_revoked.rb +22 -0
- data/lib/mongo/error/unmet_dependency.rb +21 -0
- data/lib/mongo/error/unsupported_option.rb +14 -12
- data/lib/mongo/grid/fs_bucket.rb +37 -37
- data/lib/mongo/index/view.rb +21 -11
- data/lib/mongo/lint.rb +2 -1
- data/lib/mongo/logger.rb +3 -3
- data/lib/mongo/monitoring.rb +13 -4
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
- data/lib/mongo/operation.rb +4 -2
- data/lib/mongo/operation/aggregate/result.rb +9 -8
- data/lib/mongo/operation/collections_info.rb +18 -1
- data/lib/mongo/operation/collections_info/command.rb +5 -0
- data/lib/mongo/operation/collections_info/result.rb +18 -1
- data/lib/mongo/operation/context.rb +99 -0
- data/lib/mongo/operation/delete/bulk_result.rb +2 -0
- data/lib/mongo/operation/delete/result.rb +3 -0
- data/lib/mongo/operation/explain/command.rb +4 -0
- data/lib/mongo/operation/explain/legacy.rb +4 -0
- data/lib/mongo/operation/explain/op_msg.rb +6 -0
- data/lib/mongo/operation/explain/result.rb +3 -0
- data/lib/mongo/operation/find/legacy/result.rb +2 -0
- data/lib/mongo/operation/find/result.rb +13 -0
- data/lib/mongo/operation/get_more/result.rb +3 -0
- data/lib/mongo/operation/indexes.rb +15 -1
- data/lib/mongo/operation/indexes/result.rb +5 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -0
- data/lib/mongo/operation/insert/command.rb +2 -2
- data/lib/mongo/operation/insert/legacy.rb +2 -2
- data/lib/mongo/operation/insert/op_msg.rb +2 -2
- data/lib/mongo/operation/insert/result.rb +5 -0
- data/lib/mongo/operation/list_collections/result.rb +9 -1
- data/lib/mongo/operation/map_reduce/result.rb +10 -0
- data/lib/mongo/operation/parallel_scan/result.rb +4 -0
- data/lib/mongo/operation/result.rb +37 -6
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
- data/lib/mongo/operation/shared/executable.rb +25 -14
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/idable.rb +2 -1
- data/lib/mongo/operation/shared/limited.rb +1 -0
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
- data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
- data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
- data/lib/mongo/operation/shared/response_handling.rb +23 -23
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +14 -2
- data/lib/mongo/operation/shared/specifiable.rb +1 -0
- data/lib/mongo/operation/shared/write.rb +9 -18
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
- data/lib/mongo/operation/update/legacy/result.rb +7 -0
- data/lib/mongo/operation/update/result.rb +8 -0
- data/lib/mongo/operation/users_info/result.rb +3 -0
- data/lib/mongo/protocol/compressed.rb +51 -5
- data/lib/mongo/protocol/message.rb +31 -4
- data/lib/mongo/protocol/msg.rb +37 -12
- data/lib/mongo/protocol/query.rb +36 -0
- data/lib/mongo/query_cache.rb +272 -0
- data/lib/mongo/retryable.rb +9 -2
- data/lib/mongo/server.rb +12 -16
- data/lib/mongo/server/app_metadata.rb +52 -18
- data/lib/mongo/server/connection.rb +5 -0
- data/lib/mongo/server/connection_base.rb +16 -15
- data/lib/mongo/server/connection_common.rb +2 -2
- data/lib/mongo/server/connection_pool.rb +9 -4
- data/lib/mongo/server/description.rb +12 -1
- data/lib/mongo/server/description/features.rb +9 -8
- data/lib/mongo/server/monitor.rb +21 -2
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +12 -13
- data/lib/mongo/server/pending_connection.rb +26 -8
- data/lib/mongo/server/push_monitor.rb +12 -2
- data/lib/mongo/server_selector/base.rb +5 -1
- data/lib/mongo/session.rb +7 -3
- data/lib/mongo/session/session_pool.rb +4 -2
- data/lib/mongo/socket.rb +35 -8
- data/lib/mongo/socket/ocsp_cache.rb +97 -0
- data/lib/mongo/socket/ocsp_verifier.rb +368 -0
- data/lib/mongo/socket/ssl.rb +53 -24
- data/lib/mongo/srv/monitor.rb +7 -24
- data/lib/mongo/srv/resolver.rb +14 -10
- data/lib/mongo/timeout.rb +2 -0
- data/lib/mongo/uri.rb +21 -390
- data/lib/mongo/uri/options_mapper.rb +620 -0
- data/lib/mongo/uri/srv_protocol.rb +3 -2
- data/lib/mongo/utils.rb +27 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/NOTES.aws-auth.md +12 -7
- data/spec/README.md +87 -2
- data/spec/integration/auth_spec.rb +25 -15
- data/spec/integration/bson_symbol_spec.rb +4 -2
- data/spec/integration/bulk_write_error_message_spec.rb +41 -0
- data/spec/integration/bulk_write_spec.rb +48 -0
- data/spec/integration/change_stream_spec.rb +5 -5
- data/spec/integration/client_authentication_options_spec.rb +92 -28
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +6 -2
- data/spec/integration/command_monitoring_spec.rb +2 -2
- data/spec/integration/connection_pool_populator_spec.rb +4 -2
- data/spec/integration/connection_spec.rb +2 -0
- data/spec/integration/cursor_reaping_spec.rb +54 -18
- data/spec/integration/docs_examples_spec.rb +8 -1
- data/spec/integration/fork_reconnect_spec.rb +60 -2
- data/spec/integration/ocsp_connectivity_spec.rb +26 -0
- data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
- data/spec/integration/ocsp_verifier_spec.rb +340 -0
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +90 -0
- data/spec/integration/query_cache_spec.rb +1045 -0
- data/spec/integration/query_cache_transactions_spec.rb +190 -0
- data/spec/integration/reconnect_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
- data/spec/integration/sdam_error_handling_spec.rb +86 -1
- data/spec/integration/sdam_events_spec.rb +8 -7
- data/spec/integration/server_selection_spec.rb +36 -0
- data/spec/integration/size_limit_spec.rb +20 -19
- data/spec/integration/snappy_compression_spec.rb +25 -0
- data/spec/integration/srv_monitoring_spec.rb +39 -4
- data/spec/integration/srv_spec.rb +56 -0
- data/spec/integration/transactions_examples_spec.rb +23 -7
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +26 -0
- data/spec/lite_spec_helper.rb +15 -5
- data/spec/mongo/address_spec.rb +16 -12
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/caching_cursor_spec.rb +70 -0
- data/spec/mongo/client_construction_spec.rb +273 -35
- data/spec/mongo/client_encryption_spec.rb +16 -10
- data/spec/mongo/client_spec.rb +64 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +15 -6
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +6 -18
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
- data/spec/mongo/collection/view/explainable_spec.rb +87 -4
- data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
- data/spec/mongo/collection/view/readable_spec.rb +50 -0
- data/spec/mongo/collection_crud_spec.rb +4357 -0
- data/spec/mongo/collection_ddl_spec.rb +534 -0
- data/spec/mongo/collection_spec.rb +5 -4787
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/context_spec.rb +2 -7
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
- data/spec/mongo/crypt/binding/status_spec.rb +1 -6
- data/spec/mongo/crypt/binding/version_spec.rb +1 -6
- data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/status_spec.rb +1 -6
- data/spec/mongo/database_spec.rb +174 -4
- data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +37 -6
- data/spec/mongo/index/view_spec.rb +8 -2
- data/spec/mongo/logger_spec.rb +13 -11
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +2 -1
- data/spec/mongo/operation/collections_info_spec.rb +4 -1
- data/spec/mongo/operation/command_spec.rb +6 -3
- data/spec/mongo/operation/create_index_spec.rb +6 -3
- data/spec/mongo/operation/create_user_spec.rb +6 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
- data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/delete_spec.rb +11 -7
- data/spec/mongo/operation/drop_index_spec.rb +6 -2
- data/spec/mongo/operation/find/legacy_spec.rb +3 -1
- data/spec/mongo/operation/get_more_spec.rb +3 -1
- data/spec/mongo/operation/indexes_spec.rb +5 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
- data/spec/mongo/operation/insert/command_spec.rb +2 -2
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/insert_spec.rb +15 -12
- data/spec/mongo/operation/map_reduce_spec.rb +5 -2
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/remove_user_spec.rb +6 -3
- data/spec/mongo/operation/result_spec.rb +1 -1
- data/spec/mongo/operation/update/bulk_spec.rb +9 -6
- data/spec/mongo/operation/update/command_spec.rb +2 -2
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/update_spec.rb +10 -7
- data/spec/mongo/operation/update_user_spec.rb +4 -1
- data/spec/mongo/protocol/compressed_spec.rb +26 -12
- data/spec/mongo/query_cache_middleware_spec.rb +55 -0
- data/spec/mongo/query_cache_spec.rb +280 -0
- data/spec/mongo/retryable_spec.rb +3 -2
- data/spec/mongo/server/app_metadata_shared.rb +2 -2
- data/spec/mongo/server/app_metadata_spec.rb +2 -0
- data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
- data/spec/mongo/server/connection_pool_spec.rb +8 -4
- data/spec/mongo/server/connection_spec.rb +39 -25
- data/spec/mongo/server/description_spec.rb +18 -0
- data/spec/mongo/server/monitor/connection_spec.rb +17 -7
- data/spec/mongo/server/monitor_spec.rb +9 -1
- data/spec/mongo/server_selector_spec.rb +2 -2
- data/spec/mongo/server_spec.rb +15 -2
- data/spec/mongo/socket/ssl_spec.rb +44 -4
- data/spec/mongo/socket_spec.rb +2 -2
- data/spec/mongo/tls_context_hooks_spec.rb +37 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
- data/spec/mongo/uri_option_parsing_spec.rb +11 -11
- data/spec/mongo/uri_spec.rb +68 -41
- data/spec/mongo/utils_spec.rb +39 -0
- data/spec/runners/auth.rb +3 -0
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/connection_string.rb +31 -124
- data/spec/runners/crud/requirement.rb +40 -3
- data/spec/runners/crud/test_base.rb +0 -19
- data/spec/runners/crud/verifier.rb +8 -0
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/transactions/operation.rb +13 -2
- data/spec/runners/transactions/test.rb +3 -2
- data/spec/runners/unified.rb +96 -0
- data/spec/runners/unified/assertions.rb +249 -0
- data/spec/runners/unified/change_stream_operations.rb +26 -0
- data/spec/runners/unified/crud_operations.rb +199 -0
- data/spec/runners/unified/ddl_operations.rb +96 -0
- data/spec/runners/unified/entity_map.rb +39 -0
- data/spec/runners/unified/error.rb +25 -0
- data/spec/runners/unified/event_subscriber.rb +91 -0
- data/spec/runners/unified/exceptions.rb +21 -0
- data/spec/runners/unified/grid_fs_operations.rb +55 -0
- data/spec/runners/unified/support_operations.rb +250 -0
- data/spec/runners/unified/test.rb +393 -0
- data/spec/runners/unified/test_group.rb +28 -0
- data/spec/runners/unified/using_hash.rb +31 -0
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +218 -0
- data/spec/shared/lib/mrss/constraints.rb +346 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +112 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +231 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +290 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/solo/clean_exit_spec.rb +21 -0
- data/spec/spec_helper.rb +7 -2
- data/spec/spec_tests/cmap_spec.rb +7 -3
- data/spec/spec_tests/crud_unified_spec.rb +10 -0
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -2
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
- data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
- data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
- data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
- data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
- data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
- data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
- data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
- data/spec/spec_tests/unified_spec.rb +15 -0
- data/spec/spec_tests/uri_options_spec.rb +47 -33
- data/spec/spec_tests/versioned_api_spec.rb +10 -0
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
- data/spec/support/certificates/atlas-ocsp.crt +41 -0
- data/spec/support/client_registry_macros.rb +11 -2
- data/spec/support/common_shortcuts.rb +59 -0
- data/spec/support/constraints.rb +6 -253
- data/spec/support/matchers.rb +16 -0
- data/spec/support/ocsp +1 -0
- data/spec/support/session_registry.rb +52 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +68 -3
- data/spec/support/spec_setup.rb +48 -38
- data/spec/support/utils.rb +102 -4
- metadata +1087 -936
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -56
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
- data/spec/support/child_process_helper.rb +0 -78
- data/spec/support/cluster_config.rb +0 -207
- data/spec/support/lite_constraints.rb +0 -141
- data/spec/support/spec_organizer.rb +0 -129
@@ -21,7 +21,7 @@ module Mongo
|
|
21
21
|
# @api private
|
22
22
|
class EncryptionIO
|
23
23
|
|
24
|
-
# Timeout used for
|
24
|
+
# Timeout used for TLS socket connection, reading, and writing.
|
25
25
|
# There is no specific timeout written in the spec. See SPEC-1394
|
26
26
|
# for a discussion and updates on what this timeout should be.
|
27
27
|
SOCKET_TIMEOUT = 10
|
@@ -236,10 +236,10 @@ module Mongo
|
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
239
|
-
# Provide
|
239
|
+
# Provide a TLS socket to be used for KMS calls in a block API
|
240
240
|
#
|
241
|
-
# @param [ String ] endpoint The URI at which to connect the
|
242
|
-
# @yieldparam [ OpenSSL::SSL::SSLSocket ] ssl_socket Yields
|
241
|
+
# @param [ String ] endpoint The URI at which to connect the TLS socket.
|
242
|
+
# @yieldparam [ OpenSSL::SSL::SSLSocket ] ssl_socket Yields a TLS socket
|
243
243
|
# connected to the specified endpoint.
|
244
244
|
#
|
245
245
|
# @raise [ Mongo::Error::KmsError ] If the socket times out or raises
|
@@ -277,7 +277,7 @@ module Mongo
|
|
277
277
|
Timeout.timeout(
|
278
278
|
SOCKET_TIMEOUT,
|
279
279
|
Error::SocketTimeoutError,
|
280
|
-
'KMS
|
280
|
+
'KMS TLS socket close timed out'
|
281
281
|
) do
|
282
282
|
ssl_socket.sysclose
|
283
283
|
end
|
@@ -285,7 +285,7 @@ module Mongo
|
|
285
285
|
end
|
286
286
|
end
|
287
287
|
ensure
|
288
|
-
# Still close tcp socket manually in case
|
288
|
+
# Still close tcp socket manually in case TLS socket creation
|
289
289
|
# fails.
|
290
290
|
begin
|
291
291
|
Timeout.timeout(
|
data/lib/mongo/cursor.rb
CHANGED
@@ -69,12 +69,12 @@ module Mongo
|
|
69
69
|
@view = view
|
70
70
|
@server = server
|
71
71
|
@initial_result = result
|
72
|
+
@namespace = result.namespace
|
72
73
|
@remaining = limit if limited?
|
73
74
|
@cursor_id = result.cursor_id
|
74
75
|
if @cursor_id.nil?
|
75
76
|
raise ArgumentError, 'Cursor id must be present in the result'
|
76
77
|
end
|
77
|
-
@coll_name = nil
|
78
78
|
@options = options
|
79
79
|
@session = @options[:session]
|
80
80
|
unless closed?
|
@@ -138,6 +138,7 @@ module Mongo
|
|
138
138
|
#
|
139
139
|
# @since 2.0.0
|
140
140
|
def each
|
141
|
+
|
141
142
|
# If we already iterated past the first batch (i.e., called get_more
|
142
143
|
# at least once), the cursor on the server side has advanced past
|
143
144
|
# the first batch and restarting iteration from the beginning by
|
@@ -269,7 +270,7 @@ module Mongo
|
|
269
270
|
|
270
271
|
unregister
|
271
272
|
read_with_one_retry do
|
272
|
-
kill_cursors_operation.execute(@server, client: client)
|
273
|
+
kill_cursors_operation.execute(@server, context: Operation::Context.new(client: client, session: @session))
|
273
274
|
end
|
274
275
|
|
275
276
|
nil
|
@@ -287,7 +288,20 @@ module Mongo
|
|
287
288
|
#
|
288
289
|
# @since 2.2.0
|
289
290
|
def collection_name
|
290
|
-
|
291
|
+
# In most cases, this will be equivalent to the name of the collection
|
292
|
+
# object in the driver. However, in some cases (e.g. when connected
|
293
|
+
# to an Atlas Data Lake), the namespace returned by the find command
|
294
|
+
# may be different, which is why we want to use the collection name based
|
295
|
+
# on the namespace in the command result.
|
296
|
+
if @namespace
|
297
|
+
# Often, the namespace will be in the format "database.collection".
|
298
|
+
# However, sometimes the collection name will contain periods, which
|
299
|
+
# is why this method joins all the namespace components after the first.
|
300
|
+
ns_components = @namespace.split('.')
|
301
|
+
ns_components[1...ns_components.length].join('.')
|
302
|
+
else
|
303
|
+
collection.name
|
304
|
+
end
|
291
305
|
end
|
292
306
|
|
293
307
|
# Get the cursor id.
|
@@ -331,7 +345,7 @@ module Mongo
|
|
331
345
|
# doing so may result in silent data loss, the driver no longer retries
|
332
346
|
# getMore operations in any circumstance.
|
333
347
|
# https://github.com/mongodb/specifications/blob/master/source/retryable-reads/retryable-reads.rst#qa
|
334
|
-
process(get_more_operation.execute(@server, client: client))
|
348
|
+
process(get_more_operation.execute(@server, context: Operation::Context.new(client: client, session: @session)))
|
335
349
|
end
|
336
350
|
|
337
351
|
private
|
@@ -381,7 +395,6 @@ module Mongo
|
|
381
395
|
|
382
396
|
def process(result)
|
383
397
|
@remaining -= result.returned_count if limited?
|
384
|
-
@coll_name ||= result.namespace.sub("#{database.name}.", '') if result.namespace
|
385
398
|
# #process is called for the first batch of results. In this case
|
386
399
|
# the @cursor_id may be zero (all results fit in the first batch).
|
387
400
|
# Thus we need to check both @cursor_id and the cursor_id of the result
|
data/lib/mongo/database.rb
CHANGED
@@ -104,6 +104,9 @@ module Mongo
|
|
104
104
|
#
|
105
105
|
# @since 2.0.0
|
106
106
|
def [](collection_name, options = {})
|
107
|
+
if options[:server_api]
|
108
|
+
raise ArgumentError, 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level'
|
109
|
+
end
|
107
110
|
Collection.new(self, collection_name, options)
|
108
111
|
end
|
109
112
|
alias_method :collection, :[]
|
@@ -219,7 +222,9 @@ module Mongo
|
|
219
222
|
:session => session
|
220
223
|
)
|
221
224
|
|
222
|
-
op.execute(server,
|
225
|
+
op.execute(server,
|
226
|
+
context: Operation::Context.new(client: client, session: session),
|
227
|
+
options: execution_opts)
|
223
228
|
end
|
224
229
|
end
|
225
230
|
|
@@ -250,7 +255,7 @@ module Mongo
|
|
250
255
|
:db_name => name,
|
251
256
|
:read => preference,
|
252
257
|
:session => session
|
253
|
-
}).execute(server, client: client)
|
258
|
+
}).execute(server, context: Operation::Context.new(client: client, session: session))
|
254
259
|
end
|
255
260
|
end
|
256
261
|
end
|
@@ -263,6 +268,7 @@ module Mongo
|
|
263
268
|
# @param [ Hash ] options The options for the operation.
|
264
269
|
#
|
265
270
|
# @option options [ Session ] :session The session to use for the operation.
|
271
|
+
# @option opts [ Hash ] :write_concern The write concern options.
|
266
272
|
#
|
267
273
|
# @return [ Result ] The result of the command.
|
268
274
|
#
|
@@ -270,12 +276,17 @@ module Mongo
|
|
270
276
|
def drop(options = {})
|
271
277
|
operation = { :dropDatabase => 1 }
|
272
278
|
client.send(:with_session, options) do |session|
|
279
|
+
write_concern = if options[:write_concern]
|
280
|
+
WriteConcern.get(options[:write_concern])
|
281
|
+
else
|
282
|
+
self.write_concern
|
283
|
+
end
|
273
284
|
Operation::DropDatabase.new({
|
274
285
|
selector: operation,
|
275
286
|
db_name: name,
|
276
287
|
write_concern: write_concern,
|
277
288
|
session: session
|
278
|
-
}).execute(next_primary(nil, session), client: client)
|
289
|
+
}).execute(next_primary(nil, session), context: Operation::Context.new(client: client, session: session))
|
279
290
|
end
|
280
291
|
end
|
281
292
|
|
@@ -315,8 +326,20 @@ module Mongo
|
|
315
326
|
|
316
327
|
# Get the Grid "filesystem" for this database.
|
317
328
|
#
|
318
|
-
# @
|
319
|
-
#
|
329
|
+
# @param [ Hash ] options The GridFS options.
|
330
|
+
#
|
331
|
+
# @option options [ String ] :bucket_name The prefix for the files and chunks
|
332
|
+
# collections.
|
333
|
+
# @option options [ Integer ] :chunk_size Override the default chunk
|
334
|
+
# size.
|
335
|
+
# @option options [ String ] :fs_name The prefix for the files and chunks
|
336
|
+
# collections.
|
337
|
+
# @option options [ String ] :read The read preference.
|
338
|
+
# @option options [ Session ] :session The session to use.
|
339
|
+
# @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
|
340
|
+
# option.
|
341
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
342
|
+
# Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
|
320
343
|
#
|
321
344
|
# @return [ Grid::FSBucket ] The GridFS for the database.
|
322
345
|
#
|
data/lib/mongo/database/view.rb
CHANGED
@@ -100,7 +100,7 @@ module Mongo
|
|
100
100
|
#
|
101
101
|
# @return [ Array<Hash> ] Info for each collection in the database.
|
102
102
|
#
|
103
|
-
# @since 2.0.5
|
103
|
+
# @since 2.0.5
|
104
104
|
def list_collections(options = {})
|
105
105
|
session = client.send(:get_session)
|
106
106
|
collections_info(session, ServerSelector.primary, options)
|
@@ -189,7 +189,7 @@ module Mongo
|
|
189
189
|
end
|
190
190
|
|
191
191
|
def send_initial_query(server, session, options = {})
|
192
|
-
initial_query_op(session, options).execute(server, client: client)
|
192
|
+
initial_query_op(session, options).execute(server, context: Operation::Context.new(client: client, session: session))
|
193
193
|
end
|
194
194
|
end
|
195
195
|
end
|
data/lib/mongo/error.rb
CHANGED
@@ -29,16 +29,19 @@ module Mongo
|
|
29
29
|
# An error field, MongoDB < 2.6
|
30
30
|
#
|
31
31
|
# @since 2.0.0
|
32
|
+
# @deprecated
|
32
33
|
ERR = '$err'.freeze
|
33
34
|
|
34
35
|
# An error field, MongoDB < 2.4
|
35
36
|
#
|
36
37
|
# @since 2.0.0
|
38
|
+
# @deprecated
|
37
39
|
ERROR = 'err'.freeze
|
38
40
|
|
39
41
|
# The standard error message field, MongoDB 3.0+
|
40
42
|
#
|
41
43
|
# @since 2.0.0
|
44
|
+
# @deprecated
|
42
45
|
ERRMSG = 'errmsg'.freeze
|
43
46
|
|
44
47
|
# The constant for the writeErrors array.
|
@@ -174,7 +177,7 @@ require 'mongo/error/credential_check_error'
|
|
174
177
|
require 'mongo/error/crypt_error'
|
175
178
|
require 'mongo/error/extra_file_chunk'
|
176
179
|
require 'mongo/error/file_not_found'
|
177
|
-
require 'mongo/error/
|
180
|
+
require 'mongo/error/handshake_error'
|
178
181
|
require 'mongo/error/invalid_address'
|
179
182
|
require 'mongo/error/invalid_bulk_operation'
|
180
183
|
require 'mongo/error/invalid_bulk_operation_type'
|
@@ -188,6 +191,7 @@ require 'mongo/error/invalid_min_pool_size'
|
|
188
191
|
require 'mongo/error/invalid_read_option'
|
189
192
|
require 'mongo/error/invalid_application_name'
|
190
193
|
require 'mongo/error/invalid_nonce'
|
194
|
+
require 'mongo/error/invalid_read_concern'
|
191
195
|
require 'mongo/error/invalid_replacement_document'
|
192
196
|
require 'mongo/error/invalid_server_auth_response'
|
193
197
|
# Subclass of InvalidServerAuthResponse
|
@@ -201,6 +205,7 @@ require 'mongo/error/invalid_update_document'
|
|
201
205
|
require 'mongo/error/invalid_uri'
|
202
206
|
require 'mongo/error/invalid_write_concern'
|
203
207
|
require 'mongo/error/insufficient_iteration_count'
|
208
|
+
require 'mongo/error/internal_driver_error'
|
204
209
|
require 'mongo/error/kms_error'
|
205
210
|
require 'mongo/error/lint_error'
|
206
211
|
require 'mongo/error/max_bson_size'
|
@@ -213,8 +218,10 @@ require 'mongo/error/no_server_available'
|
|
213
218
|
require 'mongo/error/no_srv_records'
|
214
219
|
require 'mongo/error/session_ended'
|
215
220
|
require 'mongo/error/sessions_not_supported'
|
221
|
+
require 'mongo/error/operation_failure'
|
216
222
|
require 'mongo/error/pool_closed_error'
|
217
223
|
require 'mongo/error/raise_original_error'
|
224
|
+
require 'mongo/error/server_certificate_revoked'
|
218
225
|
require 'mongo/error/socket_error'
|
219
226
|
require 'mongo/error/socket_timeout_error'
|
220
227
|
require 'mongo/error/failed_string_prep_validation'
|
@@ -225,7 +232,10 @@ require 'mongo/error/missing_file_chunk'
|
|
225
232
|
require 'mongo/error/missing_password'
|
226
233
|
require 'mongo/error/missing_resume_token'
|
227
234
|
require 'mongo/error/missing_scram_server_signature'
|
235
|
+
require 'mongo/error/server_api_conflict'
|
236
|
+
require 'mongo/error/server_api_not_supported'
|
228
237
|
require 'mongo/error/unknown_payload_type'
|
238
|
+
require 'mongo/error/unmet_dependency'
|
229
239
|
require 'mongo/error/unsupported_option'
|
230
240
|
require 'mongo/error/unsupported_array_filters'
|
231
241
|
require 'mongo/error/unsupported_collation'
|
@@ -15,9 +15,19 @@
|
|
15
15
|
module Mongo
|
16
16
|
class Error
|
17
17
|
|
18
|
-
# Exception raised if there are write errors upon executing
|
18
|
+
# Exception raised if there are write errors upon executing a bulk
|
19
19
|
# operation.
|
20
20
|
#
|
21
|
+
# Unlike OperationFailure, BulkWriteError does not currently expose
|
22
|
+
# individual error components (such as the error code). The result document
|
23
|
+
# (which can be obtained using the +result+ attribute) provides detailed
|
24
|
+
# error information and can be examined by the application if desired.
|
25
|
+
#
|
26
|
+
# @note A bulk operation that resulted in a BulkWriteError may have
|
27
|
+
# written some of the documents to the database. If the bulk write
|
28
|
+
# was unordered, writes may have also continued past the write that
|
29
|
+
# produced a BulkWriteError.
|
30
|
+
#
|
21
31
|
# @since 2.0.0
|
22
32
|
class BulkWriteError < Error
|
23
33
|
|
@@ -47,11 +57,15 @@ module Mongo
|
|
47
57
|
return nil unless errors
|
48
58
|
|
49
59
|
fragment = errors.first(10).map do |error|
|
50
|
-
"#{error['
|
51
|
-
end.join('
|
60
|
+
"[#{error['code']}]: #{error['errmsg']}"
|
61
|
+
end.join('; ')
|
52
62
|
|
53
63
|
fragment += '...' if errors.length > 10
|
54
64
|
|
65
|
+
if errors.length > 1
|
66
|
+
fragment = "Multiple errors: #{fragment}"
|
67
|
+
end
|
68
|
+
|
55
69
|
fragment
|
56
70
|
end
|
57
71
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright (C) 2021 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# Raised when the driver detects an internal implementation problem.
|
19
|
+
class InternalDriverError < Error
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Copyright (C) 2020 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# Raised when an invalid read concern is provided.
|
19
|
+
class InvalidReadConcern < Error
|
20
|
+
# Instantiate the new exception.
|
21
|
+
def initialize(msg = nil)
|
22
|
+
super(msg || 'Invalid read concern option provided.' \
|
23
|
+
'The only valid key is :level, for which accepted values are' \
|
24
|
+
':local, :majority, and :snapshot')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -89,6 +89,12 @@ module Mongo
|
|
89
89
|
# @since 2.6.0
|
90
90
|
attr_reader :code_name
|
91
91
|
|
92
|
+
# @return [ String ] The server-returned error message
|
93
|
+
# parsed from the response.
|
94
|
+
#
|
95
|
+
# @api experimental
|
96
|
+
attr_reader :server_message
|
97
|
+
|
92
98
|
# Whether the error is a retryable error according to the legacy
|
93
99
|
# read retry logic.
|
94
100
|
#
|
@@ -97,7 +103,8 @@ module Mongo
|
|
97
103
|
# @since 2.1.1
|
98
104
|
# @deprecated
|
99
105
|
def retryable?
|
100
|
-
write_retryable? ||
|
106
|
+
write_retryable? ||
|
107
|
+
code.nil? && RETRY_MESSAGES.any?{ |m| message.include?(m) }
|
101
108
|
end
|
102
109
|
|
103
110
|
# Whether the error is a retryable error according to the modern retryable
|
@@ -110,11 +117,11 @@ module Mongo
|
|
110
117
|
#
|
111
118
|
# @since 2.4.2
|
112
119
|
def write_retryable?
|
113
|
-
|
114
|
-
|
120
|
+
write_retryable_code? ||
|
121
|
+
code.nil? && WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) }
|
115
122
|
end
|
116
123
|
|
117
|
-
def write_retryable_code?
|
124
|
+
private def write_retryable_code?
|
118
125
|
if code
|
119
126
|
WRITE_RETRY_ERRORS.any? { |e| e[:code] == code }
|
120
127
|
else
|
@@ -122,7 +129,6 @@ module Mongo
|
|
122
129
|
false
|
123
130
|
end
|
124
131
|
end
|
125
|
-
private :write_retryable_code?
|
126
132
|
|
127
133
|
# Error codes and code names that should result in a failing getMore
|
128
134
|
# command on a change stream NOT being resumed.
|
@@ -215,6 +221,11 @@ module Mongo
|
|
215
221
|
# @since 2.10.0
|
216
222
|
attr_reader :write_concern_error_code_name
|
217
223
|
|
224
|
+
# @return [ BSON::Document | nil ] The server-returned error document.
|
225
|
+
#
|
226
|
+
# @api experimental
|
227
|
+
attr_reader :document
|
228
|
+
|
218
229
|
# Create the operation failure.
|
219
230
|
#
|
220
231
|
# @example Create the error object
|
@@ -229,6 +240,10 @@ module Mongo
|
|
229
240
|
#
|
230
241
|
# @option options [ Integer ] :code Error code.
|
231
242
|
# @option options [ String ] :code_name Error code name.
|
243
|
+
# @option options [ BSON::Document ] :document The server-returned
|
244
|
+
# error document.
|
245
|
+
# @option options [ String ] server_message The server-returned
|
246
|
+
# error message parsed from the response.
|
232
247
|
# @option options [ Hash ] :write_concern_error_document The
|
233
248
|
# server-supplied write concern error document, if any.
|
234
249
|
# @option options [ Integer ] :write_concern_error_code Error code for
|
@@ -253,6 +268,8 @@ module Mongo
|
|
253
268
|
@write_concern_error_labels = options[:write_concern_error_labels] || []
|
254
269
|
@labels = options[:labels] || []
|
255
270
|
@wtimeout = !!options[:wtimeout]
|
271
|
+
@document = options[:document]
|
272
|
+
@server_message = options[:server_message]
|
256
273
|
end
|
257
274
|
|
258
275
|
# Whether the error is a write concern timeout.
|
@@ -281,8 +298,10 @@ module Mongo
|
|
281
298
|
#
|
282
299
|
# @since 2.10.0
|
283
300
|
def unsupported_retryable_write?
|
284
|
-
# code 20 is IllegalOperation
|
285
|
-
|
301
|
+
# code 20 is IllegalOperation.
|
302
|
+
# Note that the document is expected to be a BSON::Document, thus
|
303
|
+
# either having string keys or providing indifferent access.
|
304
|
+
code == 20 && server_message&.start_with?("Transaction numbers") || false
|
286
305
|
end
|
287
306
|
end
|
288
307
|
end
|