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
data/lib/mongo/error/parser.rb
CHANGED
@@ -42,28 +42,53 @@ module Mongo
|
|
42
42
|
# Class for parsing the various forms that errors can come in from MongoDB
|
43
43
|
# command responses.
|
44
44
|
#
|
45
|
+
# The errors can be reported by the server in a number of ways:
|
46
|
+
# - {ok:0} response indicates failure. In newer servers, code, codeName
|
47
|
+
# and errmsg fields should be set. In older servers some may not be set.
|
48
|
+
# - {ok:1} response with a write concern error (writeConcernError top-level
|
49
|
+
# field). This indicates that the node responding successfully executed
|
50
|
+
# the request, but not enough other nodes successfully executed the
|
51
|
+
# request to satisfy the write concern.
|
52
|
+
# - {ok:1} response with writeErrors top-level field. This can be obtained
|
53
|
+
# in a bulk write but also in a non-bulk write. In a non-bulk write
|
54
|
+
# there should be exactly one error in the writeErrors list.
|
55
|
+
# The case of multiple errors is handled by BulkWrite::Result.
|
56
|
+
# - {ok:1} response with writeConcernErrors top-level field. This can
|
57
|
+
# only be obtained in a bulk write and is handled by BulkWrite::Result,
|
58
|
+
# not by this class.
|
59
|
+
#
|
60
|
+
# Note that writeErrors do not have codeName fields - they just provide
|
61
|
+
# codes and messages. writeConcernErrors may similarly not provide code
|
62
|
+
# names.
|
63
|
+
#
|
45
64
|
# @since 2.0.0
|
65
|
+
# @api private
|
46
66
|
class Parser
|
47
67
|
include SdamErrorDetection
|
48
68
|
|
49
|
-
# @return [ BSON::Document ]
|
69
|
+
# @return [ BSON::Document ] The returned document.
|
50
70
|
attr_reader :document
|
51
71
|
|
52
|
-
# @return [ String ]
|
72
|
+
# @return [ String ] The full error message to be used in the
|
73
|
+
# raised exception.
|
53
74
|
attr_reader :message
|
54
75
|
|
55
|
-
# @return [
|
76
|
+
# @return [ String ] The server-returned error message
|
77
|
+
# parsed from the response.
|
78
|
+
attr_reader :server_message
|
79
|
+
|
80
|
+
# @return [ Array<Protocol::Message> ] The message replies.
|
56
81
|
attr_reader :replies
|
57
82
|
|
58
|
-
# @return [ Integer ]
|
83
|
+
# @return [ Integer ] The error code parsed from the document.
|
59
84
|
# @since 2.6.0
|
60
85
|
attr_reader :code
|
61
86
|
|
62
|
-
# @return [ String ]
|
87
|
+
# @return [ String ] The error code name parsed from the document.
|
63
88
|
# @since 2.6.0
|
64
89
|
attr_reader :code_name
|
65
90
|
|
66
|
-
# @return [ Array<String> ]
|
91
|
+
# @return [ Array<String> ] The set of labels associated with the error.
|
67
92
|
# @since 2.7.0
|
68
93
|
attr_reader :labels
|
69
94
|
|
@@ -145,33 +170,61 @@ module Mongo
|
|
145
170
|
write_concern_error_document && write_concern_error_document['errorLabels']
|
146
171
|
end
|
147
172
|
|
173
|
+
class << self
|
174
|
+
def build_message(code: nil, code_name: nil, message: nil)
|
175
|
+
if code_name && code
|
176
|
+
"[#{code}:#{code_name}]: #{message}"
|
177
|
+
elsif code_name
|
178
|
+
# This surely should never happen, if there's a code name
|
179
|
+
# there ought to also be the code provided.
|
180
|
+
# Handle this case for completeness.
|
181
|
+
"[#{code_name}]: #{message}"
|
182
|
+
elsif code
|
183
|
+
"[#{code}]: #{message}"
|
184
|
+
else
|
185
|
+
message
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
148
190
|
private
|
149
191
|
|
150
192
|
def parse!
|
193
|
+
if document['ok'] != 1 && document['writeErrors']
|
194
|
+
raise ArgumentError, "writeErrors should only be given in successful responses"
|
195
|
+
end
|
196
|
+
|
151
197
|
@message = ""
|
152
|
-
parse_single(@message,
|
153
|
-
parse_single(@message,
|
154
|
-
parse_single(@message,
|
198
|
+
parse_single(@message, '$err')
|
199
|
+
parse_single(@message, 'err')
|
200
|
+
parse_single(@message, 'errmsg')
|
155
201
|
parse_multiple(@message, 'writeErrors')
|
156
202
|
if write_concern_error_document
|
157
|
-
parse_single(@message,
|
203
|
+
parse_single(@message, 'errmsg', write_concern_error_document)
|
158
204
|
end
|
159
205
|
parse_flag(@message)
|
160
206
|
parse_code
|
161
207
|
parse_labels
|
162
208
|
parse_wtimeout
|
209
|
+
|
210
|
+
@server_message = @message
|
211
|
+
@message = self.class.build_message(
|
212
|
+
code: code,
|
213
|
+
code_name: code_name,
|
214
|
+
message: @message,
|
215
|
+
)
|
163
216
|
end
|
164
217
|
|
165
218
|
def parse_single(message, key, doc = document)
|
166
219
|
if error = doc[key]
|
167
|
-
append(message
|
220
|
+
append(message, error)
|
168
221
|
end
|
169
222
|
end
|
170
223
|
|
171
224
|
def parse_multiple(message, key)
|
172
225
|
if errors = document[key]
|
173
226
|
errors.each do |error|
|
174
|
-
parse_single(message,
|
227
|
+
parse_single(message, 'errmsg', error)
|
175
228
|
end
|
176
229
|
end
|
177
230
|
end
|
@@ -0,0 +1,23 @@
|
|
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
|
+
# Exception raised when a Client has :server_api configured and an
|
19
|
+
# operation attempts to specify any of server API version parameters.
|
20
|
+
class ServerApiConflict < Error
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
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
|
+
# Exception raised when a Client has :server_api configured and an
|
19
|
+
# operation is executed against a pre-3.6 MongoDB server using a legacy
|
20
|
+
# wire protocol message that does not permit sending API parameters.
|
21
|
+
class ServerApiNotSupported < Error
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
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
|
+
# Server certificate has been revoked (determined via OCSP).
|
19
|
+
class ServerCertificateRevoked < Error
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
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 if an optional dependency of the driver is not met.
|
19
|
+
class UnmetDependency < Error; end
|
20
|
+
end
|
21
|
+
end
|
@@ -17,39 +17,39 @@ module Mongo
|
|
17
17
|
|
18
18
|
# Raised if an unsupported option is specified for an operation.
|
19
19
|
class UnsupportedOption < Error
|
20
|
-
# @api private
|
21
|
-
#
|
22
20
|
# The error message provided when the user passes the hint option to
|
23
21
|
# a write operation against a server that does not support the hint
|
24
22
|
# option and does not provide option validation.
|
23
|
+
#
|
24
|
+
# @api private
|
25
25
|
HINT_MESSAGE = "The MongoDB server handling this request does not support " \
|
26
26
|
"the hint option on this command. The hint option is supported on update " \
|
27
27
|
"commands on MongoDB server versions 4.2 and later and on findAndModify " \
|
28
28
|
"and delete commands on MongoDB server versions 4.4 and later"
|
29
29
|
|
30
|
-
# @api private
|
31
|
-
#
|
32
30
|
# The error message provided when the user passes the hint option to
|
33
31
|
# an unacknowledged write operation.
|
32
|
+
#
|
33
|
+
# @api private
|
34
34
|
UNACKNOWLEDGED_HINT_MESSAGE = "The hint option cannot be specified on " \
|
35
35
|
"an unacknowledged write operation. Remove the hint option or perform " \
|
36
36
|
"this operation with a write concern of at least { w: 1 }"
|
37
37
|
|
38
|
-
# @api private
|
39
|
-
#
|
40
38
|
# The error message provided when the user passes the allow_disk_use
|
41
39
|
# option to a find operation against a server that does not support the
|
42
40
|
# allow_disk_use operation and does not provide option validation.
|
41
|
+
#
|
42
|
+
# @api private
|
43
43
|
ALLOW_DISK_USE_MESSAGE = "The MongoDB server handling this request does " \
|
44
44
|
"not support the allow_disk_use option on this command. The " \
|
45
45
|
"allow_disk_use option is supported on find commands on MongoDB " \
|
46
46
|
"server versions 4.4 and later"
|
47
47
|
|
48
|
-
# @api private
|
49
|
-
#
|
50
48
|
# The error message provided when the user passes the commit_quorum option
|
51
49
|
# to a createIndexes operation against a server that does not support
|
52
50
|
# that option.
|
51
|
+
#
|
52
|
+
# @api private
|
53
53
|
COMMIT_QUORUM_MESSAGE = "The MongoDB server handling this request does " \
|
54
54
|
"not support the commit_quorum option on this command. The commit_quorum " \
|
55
55
|
"option is supported on createIndexes commands on MongoDB server versions " \
|
@@ -57,14 +57,14 @@ module Mongo
|
|
57
57
|
|
58
58
|
# Raise an error about an unsupported hint option.
|
59
59
|
#
|
60
|
-
# @param [ Hash ] options
|
61
|
-
#
|
62
60
|
# @option options [ Boolean ] unacknowledged_write Whether this error
|
63
61
|
# pertains to a hint option passed to an unacknowledged write. Defaults
|
64
62
|
# to false.
|
65
63
|
#
|
66
64
|
# @return [ Mongo::Error::UnsupportedOption ] An error with a default
|
67
65
|
# error message.
|
66
|
+
#
|
67
|
+
# @api private
|
68
68
|
def self.hint_error(**options)
|
69
69
|
unacknowledged_write = options[:unacknowledged_write] || false
|
70
70
|
|
@@ -79,10 +79,10 @@ module Mongo
|
|
79
79
|
|
80
80
|
# Raise an error about an unsupported allow_disk_use option.
|
81
81
|
#
|
82
|
-
# @param [ Hash ] options
|
83
|
-
#
|
84
82
|
# @return [ Mongo::Error::UnsupportedOption ] An error with a default
|
85
83
|
# error message.
|
84
|
+
#
|
85
|
+
# @api private
|
86
86
|
def self.allow_disk_use_error
|
87
87
|
new(ALLOW_DISK_USE_MESSAGE)
|
88
88
|
end
|
@@ -91,6 +91,8 @@ module Mongo
|
|
91
91
|
#
|
92
92
|
# @return [ Mongo::Error::UnsupportedOption ] An error with a default
|
93
93
|
# error message.
|
94
|
+
#
|
95
|
+
# @api private
|
94
96
|
def self.commit_quorum_error
|
95
97
|
new(COMMIT_QUORUM_MESSAGE)
|
96
98
|
end
|
data/lib/mongo/grid/fs_bucket.rb
CHANGED
@@ -36,6 +36,43 @@ module Mongo
|
|
36
36
|
# @since 2.1.0
|
37
37
|
FILES_INDEX = { filename: 1, uploadDate: 1 }.freeze
|
38
38
|
|
39
|
+
# Create the GridFS.
|
40
|
+
#
|
41
|
+
# @example Create the GridFS.
|
42
|
+
# Grid::FSBucket.new(database)
|
43
|
+
#
|
44
|
+
# @param [ Database ] database The database the files reside in.
|
45
|
+
# @param [ Hash ] options The GridFS options.
|
46
|
+
#
|
47
|
+
# @option options [ String ] :bucket_name The prefix for the files and chunks
|
48
|
+
# collections.
|
49
|
+
# @option options [ Integer ] :chunk_size Override the default chunk
|
50
|
+
# size.
|
51
|
+
# @option options [ String ] :fs_name The prefix for the files and chunks
|
52
|
+
# collections.
|
53
|
+
# @option options [ String ] :read The read preference.
|
54
|
+
# @option options [ Session ] :session The session to use.
|
55
|
+
# @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
|
56
|
+
# option.
|
57
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
58
|
+
# Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
|
59
|
+
#
|
60
|
+
# @since 2.0.0
|
61
|
+
def initialize(database, options = {})
|
62
|
+
@database = database
|
63
|
+
@options = options.dup
|
64
|
+
=begin WriteConcern object support
|
65
|
+
if @options[:write_concern].is_a?(WriteConcern::Base)
|
66
|
+
# Cache the instance so that we do not needlessly reconstruct it.
|
67
|
+
@write_concern = @options[:write_concern]
|
68
|
+
@options[:write_concern] = @write_concern.options
|
69
|
+
end
|
70
|
+
=end
|
71
|
+
@options.freeze
|
72
|
+
@chunks_collection = database[chunks_name]
|
73
|
+
@files_collection = database[files_name]
|
74
|
+
end
|
75
|
+
|
39
76
|
# @return [ Collection ] chunks_collection The chunks collection.
|
40
77
|
#
|
41
78
|
# @since 2.0.0
|
@@ -133,43 +170,6 @@ module Mongo
|
|
133
170
|
file.id
|
134
171
|
end
|
135
172
|
|
136
|
-
# Create the GridFS.
|
137
|
-
#
|
138
|
-
# @example Create the GridFS.
|
139
|
-
# Grid::FSBucket.new(database)
|
140
|
-
#
|
141
|
-
# @param [ Database ] database The database the files reside in.
|
142
|
-
# @param [ Hash ] options The GridFS options.
|
143
|
-
#
|
144
|
-
# @option options [ String ] :fs_name The prefix for the files and chunks
|
145
|
-
# collections.
|
146
|
-
# @option options [ String ] :bucket_name The prefix for the files and chunks
|
147
|
-
# collections.
|
148
|
-
# @option options [ Integer ] :chunk_size Override the default chunk
|
149
|
-
# size.
|
150
|
-
# @option options [ String ] :read The read preference.
|
151
|
-
# @option options [ Session ] :session The session to use.
|
152
|
-
# @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
|
153
|
-
# option.
|
154
|
-
# @option options [ Hash ] :write_concern The write concern options.
|
155
|
-
# Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
|
156
|
-
#
|
157
|
-
# @since 2.0.0
|
158
|
-
def initialize(database, options = {})
|
159
|
-
@database = database
|
160
|
-
@options = options.dup
|
161
|
-
=begin WriteConcern object support
|
162
|
-
if @options[:write_concern].is_a?(WriteConcern::Base)
|
163
|
-
# Cache the instance so that we do not needlessly reconstruct it.
|
164
|
-
@write_concern = @options[:write_concern]
|
165
|
-
@options[:write_concern] = @write_concern.options
|
166
|
-
end
|
167
|
-
=end
|
168
|
-
@options.freeze
|
169
|
-
@chunks_collection = database[chunks_name]
|
170
|
-
@files_collection = database[files_name]
|
171
|
-
end
|
172
|
-
|
173
173
|
# Get the prefix for the GridFS
|
174
174
|
#
|
175
175
|
# @example Get the prefix.
|
data/lib/mongo/index/view.rb
CHANGED
@@ -127,6 +127,7 @@ module Mongo
|
|
127
127
|
# data-bearing members of a replica set, including the primary, must
|
128
128
|
# complete the index builds successfully before the primary marks
|
129
129
|
# the indexes as ready.
|
130
|
+
# @option options [ Session ] :session The session to use for the operation.
|
130
131
|
#
|
131
132
|
# @note Note that the options listed may be subset of those available.
|
132
133
|
# See the MongoDB documentation for a full list of supported options by server version.
|
@@ -137,7 +138,15 @@ module Mongo
|
|
137
138
|
def create_one(keys, options = {})
|
138
139
|
options = options.dup
|
139
140
|
|
140
|
-
create_options = {
|
141
|
+
create_options = {}
|
142
|
+
if session = @options[:session]
|
143
|
+
create_options[:session] = session
|
144
|
+
end
|
145
|
+
%i(commit_quorum session).each do |key|
|
146
|
+
if value = options.delete(key)
|
147
|
+
create_options[key] = value
|
148
|
+
end
|
149
|
+
end
|
141
150
|
create_many({ key: keys }.merge(options), create_options)
|
142
151
|
end
|
143
152
|
|
@@ -166,19 +175,20 @@ module Mongo
|
|
166
175
|
# - commit_quorum: Specify how many data-bearing members of a replica set,
|
167
176
|
# including the primary, must complete the index builds successfully
|
168
177
|
# before the primary marks the indexes as ready.
|
178
|
+
# - session: The session to use.
|
169
179
|
#
|
170
180
|
# @return [ Result ] The result of the command.
|
171
181
|
#
|
172
182
|
# @since 2.0.0
|
173
183
|
def create_many(*models)
|
174
|
-
|
175
|
-
|
184
|
+
models = models.flatten
|
185
|
+
options = {}
|
186
|
+
if models && !models.last.key?(:key)
|
187
|
+
options = models.pop
|
188
|
+
end
|
176
189
|
|
177
|
-
|
178
|
-
|
179
|
-
if models && !models.last.key?(:key)
|
180
|
-
options = models.pop
|
181
|
-
end
|
190
|
+
client.send(:with_session, @options.merge(options)) do |session|
|
191
|
+
server = next_primary(nil, session)
|
182
192
|
|
183
193
|
# While server versions 3.4 and newer generally perform option
|
184
194
|
# validation, there was a bug on server versions 4.2.0 - 4.2.5 where
|
@@ -208,7 +218,7 @@ module Mongo
|
|
208
218
|
|
209
219
|
spec[:write_concern] = write_concern if description.features.collation_enabled?
|
210
220
|
|
211
|
-
Operation::CreateIndex.new(spec).execute(server, client: client)
|
221
|
+
Operation::CreateIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
|
212
222
|
end
|
213
223
|
end
|
214
224
|
|
@@ -286,7 +296,7 @@ module Mongo
|
|
286
296
|
}
|
287
297
|
server = next_primary(nil, session)
|
288
298
|
spec[:write_concern] = write_concern if server.with_connection { |connection| connection.features }.collation_enabled?
|
289
|
-
Operation::DropIndex.new(spec).execute(server, client: client)
|
299
|
+
Operation::DropIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
|
290
300
|
end
|
291
301
|
end
|
292
302
|
|
@@ -322,7 +332,7 @@ module Mongo
|
|
322
332
|
end
|
323
333
|
|
324
334
|
def send_initial_query(server, session)
|
325
|
-
initial_query_op(session).execute(server, client: client)
|
335
|
+
initial_query_op(session).execute(server, context: Operation::Context.new(client: client, session: session))
|
326
336
|
end
|
327
337
|
|
328
338
|
def with_generated_names(models, server)
|