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/lint.rb
CHANGED
@@ -4,12 +4,13 @@ module Mongo
|
|
4
4
|
module Lint
|
5
5
|
|
6
6
|
# Raises LintError if +obj+ is not of type +cls+.
|
7
|
-
|
7
|
+
def assert_type(obj, cls)
|
8
8
|
return unless enabled?
|
9
9
|
unless obj.is_a?(cls)
|
10
10
|
raise Error::LintError, "Expected #{obj} to be a #{cls}"
|
11
11
|
end
|
12
12
|
end
|
13
|
+
module_function :assert_type
|
13
14
|
|
14
15
|
def validate_underscore_read_preference(read_pref)
|
15
16
|
return unless enabled?
|
data/lib/mongo/logger.rb
CHANGED
@@ -21,7 +21,7 @@ module Mongo
|
|
21
21
|
|
22
22
|
class << self
|
23
23
|
|
24
|
-
# Get the wrapped logger. If none was set will return a default
|
24
|
+
# Get the wrapped logger. If none was set will return a default info
|
25
25
|
# level logger.
|
26
26
|
#
|
27
27
|
# @example Get the wrapped logger.
|
@@ -75,8 +75,8 @@ module Mongo
|
|
75
75
|
private
|
76
76
|
|
77
77
|
def default_logger
|
78
|
-
logger = ::Logger.new(
|
79
|
-
logger.level = ::Logger::
|
78
|
+
logger = ::Logger.new(STDOUT)
|
79
|
+
logger.level = ::Logger::INFO
|
80
80
|
logger
|
81
81
|
end
|
82
82
|
end
|
data/lib/mongo/monitoring.rb
CHANGED
@@ -307,9 +307,9 @@ module Mongo
|
|
307
307
|
# @api private
|
308
308
|
def publish_heartbeat(server, awaited: false)
|
309
309
|
if monitoring?
|
310
|
-
|
310
|
+
started_event = Event::ServerHeartbeatStarted.new(
|
311
311
|
server.address, awaited: awaited)
|
312
|
-
started(SERVER_HEARTBEAT,
|
312
|
+
started(SERVER_HEARTBEAT, started_event)
|
313
313
|
end
|
314
314
|
|
315
315
|
# The duration we publish in heartbeat succeeded/failed events is
|
@@ -328,14 +328,23 @@ module Mongo
|
|
328
328
|
rescue => exc
|
329
329
|
if monitoring?
|
330
330
|
event = Event::ServerHeartbeatFailed.new(
|
331
|
-
server.address,
|
331
|
+
server.address,
|
332
|
+
Time.now-start_time,
|
333
|
+
exc,
|
334
|
+
awaited: awaited,
|
335
|
+
started_event: started_event,
|
336
|
+
)
|
332
337
|
failed(SERVER_HEARTBEAT, event)
|
333
338
|
end
|
334
339
|
raise
|
335
340
|
else
|
336
341
|
if monitoring?
|
337
342
|
event = Event::ServerHeartbeatSucceeded.new(
|
338
|
-
server.address,
|
343
|
+
server.address,
|
344
|
+
Time.now-start_time,
|
345
|
+
awaited: awaited,
|
346
|
+
started_event: started_event,
|
347
|
+
)
|
339
348
|
succeeded(SERVER_HEARTBEAT, event)
|
340
349
|
end
|
341
350
|
result
|
@@ -21,6 +21,29 @@ module Mongo
|
|
21
21
|
# @since 2.7.0
|
22
22
|
class ServerHeartbeatFailed < Mongo::Event::Base
|
23
23
|
|
24
|
+
# Create the event.
|
25
|
+
#
|
26
|
+
# @example Create the event.
|
27
|
+
# ServerHeartbeatSucceeded.new(address, duration)
|
28
|
+
#
|
29
|
+
# @param [ Address ] address The server address.
|
30
|
+
# @param [ Float ] round_trip_time Duration of ismaster call in seconds.
|
31
|
+
# @param [ true | false ] awaited Whether the heartbeat was awaited.
|
32
|
+
# @param [ Monitoring::Event::ServerHeartbeatStarted ] started_event
|
33
|
+
# The corresponding started event.
|
34
|
+
#
|
35
|
+
# @since 2.7.0
|
36
|
+
# @api private
|
37
|
+
def initialize(address, round_trip_time, error, awaited: false,
|
38
|
+
started_event:
|
39
|
+
)
|
40
|
+
@address = address
|
41
|
+
@round_trip_time = round_trip_time
|
42
|
+
@error = error
|
43
|
+
@awaited = !!awaited
|
44
|
+
@started_event = started_event
|
45
|
+
end
|
46
|
+
|
24
47
|
# @return [ Address ] address The server address.
|
25
48
|
attr_reader :address
|
26
49
|
|
@@ -41,23 +64,11 @@ module Mongo
|
|
41
64
|
@awaited
|
42
65
|
end
|
43
66
|
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# @example Create the event.
|
47
|
-
# ServerHeartbeatSucceeded.new(address, duration)
|
48
|
-
#
|
49
|
-
# @param [ Address ] address The server address.
|
50
|
-
# @param [ Float ] round_trip_time Duration of ismaster call in seconds.
|
51
|
-
# @param [ true | false ] awaited Whether the heartbeat was awaited.
|
67
|
+
# @return [ Monitoring::Event::ServerHeartbeatStarted ]
|
68
|
+
# The corresponding started event.
|
52
69
|
#
|
53
|
-
# @
|
54
|
-
|
55
|
-
def initialize(address, round_trip_time, error, awaited: false)
|
56
|
-
@address = address
|
57
|
-
@round_trip_time = round_trip_time
|
58
|
-
@error = error
|
59
|
-
@awaited = !!awaited
|
60
|
-
end
|
70
|
+
# @api experimental
|
71
|
+
attr_reader :started_event
|
61
72
|
|
62
73
|
# Returns a concise yet useful summary of the event.
|
63
74
|
#
|
@@ -21,20 +21,6 @@ module Mongo
|
|
21
21
|
# @since 2.7.0
|
22
22
|
class ServerHeartbeatSucceeded < Mongo::Event::Base
|
23
23
|
|
24
|
-
# @return [ Address ] address The server address.
|
25
|
-
attr_reader :address
|
26
|
-
|
27
|
-
# @return [ Float ] round_trip_time Duration of ismaster call in seconds.
|
28
|
-
attr_reader :round_trip_time
|
29
|
-
|
30
|
-
# Alias of round_trip_time.
|
31
|
-
alias :duration :round_trip_time
|
32
|
-
|
33
|
-
# @return [ true | false ] Whether the heartbeat was awaited.
|
34
|
-
def awaited?
|
35
|
-
@awaited
|
36
|
-
end
|
37
|
-
|
38
24
|
# Create the event.
|
39
25
|
#
|
40
26
|
# @example Create the event.
|
@@ -43,15 +29,40 @@ module Mongo
|
|
43
29
|
# @param [ Address ] address The server address.
|
44
30
|
# @param [ Float ] round_trip_time Duration of ismaster call in seconds.
|
45
31
|
# @param [ true | false ] awaited Whether the heartbeat was awaited.
|
32
|
+
# @param [ Monitoring::Event::ServerHeartbeatStarted ] started_event
|
33
|
+
# The corresponding started event.
|
46
34
|
#
|
47
35
|
# @since 2.7.0
|
48
36
|
# @api private
|
49
|
-
def initialize(address, round_trip_time, awaited: false
|
37
|
+
def initialize(address, round_trip_time, awaited: false,
|
38
|
+
started_event:
|
39
|
+
)
|
50
40
|
@address = address
|
51
41
|
@round_trip_time = round_trip_time
|
52
42
|
@awaited = !!awaited
|
43
|
+
@started_event = started_event
|
53
44
|
end
|
54
45
|
|
46
|
+
# @return [ Address ] address The server address.
|
47
|
+
attr_reader :address
|
48
|
+
|
49
|
+
# @return [ Float ] round_trip_time Duration of ismaster call in seconds.
|
50
|
+
attr_reader :round_trip_time
|
51
|
+
|
52
|
+
# Alias of round_trip_time.
|
53
|
+
alias :duration :round_trip_time
|
54
|
+
|
55
|
+
# @return [ true | false ] Whether the heartbeat was awaited.
|
56
|
+
def awaited?
|
57
|
+
@awaited
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [ Monitoring::Event::ServerHeartbeatStarted ]
|
61
|
+
# The corresponding started event.
|
62
|
+
#
|
63
|
+
# @api experimental
|
64
|
+
attr_reader :started_event
|
65
|
+
|
55
66
|
# Returns a concise yet useful summary of the event.
|
56
67
|
#
|
57
68
|
# @return [ String ] String summary of the event.
|
data/lib/mongo/operation.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mongo/operation/context'
|
1
2
|
require 'mongo/operation/result'
|
2
3
|
|
3
4
|
require 'mongo/operation/shared/response_handling'
|
@@ -5,6 +6,7 @@ require 'mongo/operation/shared/executable'
|
|
5
6
|
require 'mongo/operation/shared/executable_no_validate'
|
6
7
|
require 'mongo/operation/shared/executable_transaction_label'
|
7
8
|
require 'mongo/operation/shared/polymorphic_lookup'
|
9
|
+
require 'mongo/operation/shared/polymorphic_operation'
|
8
10
|
require 'mongo/operation/shared/polymorphic_result'
|
9
11
|
require 'mongo/operation/shared/read_preference_supported'
|
10
12
|
require 'mongo/operation/shared/bypass_document_validation'
|
@@ -18,8 +20,6 @@ require 'mongo/operation/shared/specifiable'
|
|
18
20
|
require 'mongo/operation/shared/object_id_generator'
|
19
21
|
require 'mongo/operation/shared/op_msg_or_command'
|
20
22
|
require 'mongo/operation/shared/op_msg_or_find_command'
|
21
|
-
require 'mongo/operation/shared/op_msg_or_list_indexes_command'
|
22
|
-
require 'mongo/operation/shared/collections_info_or_list_collections'
|
23
23
|
|
24
24
|
require 'mongo/operation/op_msg_base'
|
25
25
|
require 'mongo/operation/command'
|
@@ -50,6 +50,8 @@ require 'mongo/operation/create_index'
|
|
50
50
|
require 'mongo/operation/drop_index'
|
51
51
|
|
52
52
|
module Mongo
|
53
|
+
|
54
|
+
# @api private
|
53
55
|
module Operation
|
54
56
|
|
55
57
|
# The q field constant.
|
@@ -14,25 +14,24 @@
|
|
14
14
|
|
15
15
|
module Mongo
|
16
16
|
module Operation
|
17
|
-
|
18
|
-
# Aggregate result wrapper.
|
19
|
-
#
|
20
|
-
# @since 2.0.0
|
21
17
|
class Aggregate
|
22
18
|
|
23
19
|
# Defines custom behavior of results in an aggregation context.
|
24
20
|
#
|
25
21
|
# @since 2.0.0
|
22
|
+
# @api semiprivate
|
26
23
|
class Result < Operation::Result
|
27
24
|
|
28
25
|
# The field name for the aggregation explain information.
|
29
26
|
#
|
30
27
|
# @since 2.0.5
|
28
|
+
# @api private
|
31
29
|
EXPLAIN = 'stages'.freeze
|
32
30
|
|
33
31
|
# The legacy field name for the aggregation explain information.
|
34
32
|
#
|
35
33
|
# @since 2.0.5
|
34
|
+
# @api private
|
36
35
|
EXPLAIN_LEGACY = 'serverPipeline'.freeze
|
37
36
|
|
38
37
|
# Get the cursor id for the result.
|
@@ -48,6 +47,7 @@ module Mongo
|
|
48
47
|
# @return [ Integer ] The cursor id.
|
49
48
|
#
|
50
49
|
# @since 2.0.0
|
50
|
+
# @api private
|
51
51
|
def cursor_id
|
52
52
|
cursor_document ? cursor_document[CURSOR_ID] : 0
|
53
53
|
end
|
@@ -62,8 +62,8 @@ module Mongo
|
|
62
62
|
end
|
63
63
|
|
64
64
|
# Get the documents for the aggregation result. This is either the
|
65
|
-
# first document's 'result' field, or if a cursor option was selected,
|
66
|
-
# it is the 'firstBatch' field in the 'cursor' field of the first
|
65
|
+
# first document's 'result' field, or if a cursor option was selected,
|
66
|
+
# it is the 'firstBatch' field in the 'cursor' field of the first
|
67
67
|
# document returned. Otherwise, it is an explain document.
|
68
68
|
#
|
69
69
|
# @example Get the documents.
|
@@ -72,10 +72,11 @@ module Mongo
|
|
72
72
|
# @return [ Array<BSON::Document> ] The documents.
|
73
73
|
#
|
74
74
|
# @since 2.0.0
|
75
|
+
# @api public
|
75
76
|
def documents
|
76
|
-
docs = reply.documents[0][RESULT]
|
77
|
+
docs = reply.documents[0][RESULT]
|
77
78
|
docs ||= cursor_document[FIRST_BATCH] if cursor_document
|
78
|
-
docs ||= explain_document
|
79
|
+
docs ||= explain_document
|
79
80
|
docs
|
80
81
|
end
|
81
82
|
|
@@ -25,7 +25,24 @@ module Mongo
|
|
25
25
|
# @since 2.0.0
|
26
26
|
class CollectionsInfo
|
27
27
|
include Specifiable
|
28
|
-
include
|
28
|
+
include PolymorphicOperation
|
29
|
+
include PolymorphicLookup
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def final_operation(connection)
|
34
|
+
op_class = if connection.features.list_collections_enabled?
|
35
|
+
if connection.features.op_msg_enabled?
|
36
|
+
ListCollections::OpMsg
|
37
|
+
else
|
38
|
+
ListCollections::Command
|
39
|
+
end
|
40
|
+
else
|
41
|
+
CollectionsInfo::Command
|
42
|
+
end
|
43
|
+
|
44
|
+
op_class.new(spec)
|
45
|
+
end
|
29
46
|
end
|
30
47
|
end
|
31
48
|
end
|
@@ -27,6 +27,11 @@ module Mongo
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
+
def get_result(connection, context, options = {})
|
31
|
+
# This is a Mongo::Operation::CollectionsInfo::Result
|
32
|
+
Result.new(*dispatch_message(connection, context), db_name)
|
33
|
+
end
|
34
|
+
|
30
35
|
def selector(connection)
|
31
36
|
{}
|
32
37
|
end
|
@@ -20,8 +20,24 @@ module Mongo
|
|
20
20
|
# collection.
|
21
21
|
#
|
22
22
|
# @since 2.1.0
|
23
|
+
# @api semiprivate
|
23
24
|
class Result < Operation::Result
|
24
25
|
|
26
|
+
# Initialize a new result.
|
27
|
+
#
|
28
|
+
# @param [ Array<Protocol::Message> | nil ] replies The wire protocol replies, if any.
|
29
|
+
# @param [ Server::Description ] connection_description
|
30
|
+
# Server description of the server that performed the operation that
|
31
|
+
# this result is for.
|
32
|
+
# @param [ String ] database_name The name of the database that the
|
33
|
+
# query was sent to.
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
def initialize(replies, connection_description, database_name)
|
37
|
+
super(replies, connection_description)
|
38
|
+
@database_name = database_name
|
39
|
+
end
|
40
|
+
|
25
41
|
# Get the namespace for the cursor.
|
26
42
|
#
|
27
43
|
# @example Get the namespace.
|
@@ -30,8 +46,9 @@ module Mongo
|
|
30
46
|
# @return [ String ] The namespace.
|
31
47
|
#
|
32
48
|
# @since 2.1.0
|
49
|
+
# @api private
|
33
50
|
def namespace
|
34
|
-
Database::NAMESPACES
|
51
|
+
"#{@database_name}.#{Database::NAMESPACES}"
|
35
52
|
end
|
36
53
|
end
|
37
54
|
end
|
@@ -0,0 +1,99 @@
|
|
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
|
+
module Operation
|
17
|
+
|
18
|
+
# Context for operations.
|
19
|
+
#
|
20
|
+
# Holds various objects needed to make decisions about operation execution
|
21
|
+
# in a single container, and provides facade methods for the contained
|
22
|
+
# objects.
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
class Context
|
26
|
+
def initialize(client: nil, session: nil, options: nil)
|
27
|
+
if options
|
28
|
+
if client
|
29
|
+
raise ArgumentError, 'Client and options cannot both be specified'
|
30
|
+
end
|
31
|
+
|
32
|
+
if session
|
33
|
+
raise ArgumentError, 'Session and options cannot both be specified'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
@client = client
|
38
|
+
@session = session
|
39
|
+
@options = options
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :client
|
43
|
+
attr_reader :session
|
44
|
+
attr_reader :options
|
45
|
+
|
46
|
+
def in_transaction?
|
47
|
+
session&.in_transaction? || false
|
48
|
+
end
|
49
|
+
|
50
|
+
def starting_transaction?
|
51
|
+
session&.starting_transaction? || false
|
52
|
+
end
|
53
|
+
|
54
|
+
def committing_transaction?
|
55
|
+
in_transaction? && session.committing_transaction?
|
56
|
+
end
|
57
|
+
|
58
|
+
def aborting_transaction?
|
59
|
+
in_transaction? && session.aborting_transaction?
|
60
|
+
end
|
61
|
+
|
62
|
+
def modern_retry_writes?
|
63
|
+
client && client.options[:retry_writes]
|
64
|
+
end
|
65
|
+
|
66
|
+
def legacy_retry_writes?
|
67
|
+
client && !client.options[:retry_writes] && client.max_write_retries > 0
|
68
|
+
end
|
69
|
+
|
70
|
+
def any_retry_writes?
|
71
|
+
modern_retry_writes? || legacy_retry_writes?
|
72
|
+
end
|
73
|
+
|
74
|
+
def server_api
|
75
|
+
if client
|
76
|
+
client.options[:server_api]
|
77
|
+
elsif options
|
78
|
+
options[:server_api]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def encrypt?
|
83
|
+
client&.encrypter&.encrypt? || false
|
84
|
+
end
|
85
|
+
|
86
|
+
def decrypt?
|
87
|
+
!!client&.encrypter
|
88
|
+
end
|
89
|
+
|
90
|
+
def encrypter
|
91
|
+
if client&.encrypter
|
92
|
+
client.encrypter
|
93
|
+
else
|
94
|
+
raise Error::InternalDriverError, 'Encrypter should only be accessed when encryption is to be performed'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|