mongo 2.15.0 → 2.16.1
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 +0 -0
- data/README.md +1 -1
- data/lib/mongo/bulk_write.rb +2 -2
- data/lib/mongo/client.rb +45 -5
- data/lib/mongo/cluster/periodic_executor.rb +4 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +76 -43
- data/lib/mongo/cluster/sdam_flow.rb +9 -3
- data/lib/mongo/cluster/topology/base.rb +13 -9
- data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
- data/lib/mongo/cluster/topology.rb +28 -8
- data/lib/mongo/cluster.rb +136 -51
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -5
- data/lib/mongo/collection/view/builder/map_reduce.rb +12 -49
- data/lib/mongo/collection/view/builder.rb +0 -4
- data/lib/mongo/collection/view/iterable.rb +58 -24
- data/lib/mongo/collection/view/map_reduce.rb +39 -15
- data/lib/mongo/collection/view/readable.rb +60 -51
- data/lib/mongo/collection/view/writable.rb +178 -175
- data/lib/mongo/collection/view.rb +15 -21
- data/lib/mongo/collection.rb +13 -13
- data/lib/mongo/cursor/kill_spec.rb +38 -0
- data/lib/mongo/cursor.rb +72 -31
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
- data/lib/mongo/error/missing_service_id.rb +26 -0
- data/lib/mongo/error/no_service_connection_available.rb +49 -0
- data/lib/mongo/error/notable.rb +7 -0
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/grid/fs_bucket.rb +21 -2
- data/lib/mongo/id.rb +7 -5
- data/lib/mongo/index/view.rb +22 -41
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +7 -4
- data/lib/mongo/monitoring/event/command_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +2 -0
- data/lib/mongo/monitoring/publishable.rb +2 -2
- data/lib/mongo/operation/aggregate/command.rb +8 -0
- data/lib/mongo/operation/context.rb +19 -1
- data/lib/mongo/operation/count/command.rb +6 -0
- data/lib/mongo/operation/count/op_msg.rb +6 -0
- data/lib/mongo/operation/create/command.rb +7 -1
- data/lib/mongo/operation/create/op_msg.rb +7 -0
- data/lib/mongo/operation/create_index/command.rb +17 -1
- data/lib/mongo/operation/create_index/op_msg.rb +17 -4
- data/lib/mongo/operation/delete/command.rb +6 -3
- data/lib/mongo/operation/delete/legacy.rb +9 -2
- data/lib/mongo/operation/delete/op_msg.rb +8 -1
- data/lib/mongo/operation/distinct/command.rb +6 -0
- data/lib/mongo/operation/distinct/op_msg.rb +7 -0
- data/lib/mongo/operation/explain/command.rb +13 -1
- data/lib/mongo/operation/explain/legacy.rb +12 -5
- data/lib/mongo/operation/explain/op_msg.rb +9 -1
- data/lib/mongo/operation/find/builder/command.rb +110 -0
- data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +10 -14
- data/lib/mongo/operation/find/builder/legacy.rb +123 -0
- data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +31 -25
- data/lib/mongo/{cursor → operation/find}/builder.rb +4 -4
- data/lib/mongo/operation/find/command.rb +9 -0
- data/lib/mongo/operation/find/legacy.rb +10 -1
- data/lib/mongo/operation/find/op_msg.rb +12 -0
- data/lib/mongo/operation/find.rb +1 -0
- data/lib/mongo/operation/get_more/command.rb +1 -0
- data/lib/mongo/operation/get_more/command_builder.rb +38 -0
- data/lib/mongo/operation/get_more/op_msg.rb +1 -0
- data/lib/mongo/operation/get_more.rb +1 -0
- data/lib/mongo/operation/kill_cursors/command.rb +8 -0
- data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
- data/lib/mongo/operation/kill_cursors/legacy.rb +2 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +10 -0
- data/lib/mongo/operation/kill_cursors.rb +1 -0
- data/lib/mongo/operation/map_reduce/command.rb +8 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/shared/executable.rb +15 -1
- data/lib/mongo/operation/shared/polymorphic_operation.rb +1 -1
- data/lib/mongo/operation/shared/read_preference_supported.rb +3 -1
- data/lib/mongo/operation/shared/response_handling.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +12 -12
- data/lib/mongo/operation/shared/specifiable.rb +11 -29
- data/lib/mongo/operation/shared/validatable.rb +87 -0
- data/lib/mongo/operation/shared/write.rb +1 -1
- data/lib/mongo/operation/update/command.rb +6 -3
- data/lib/mongo/operation/update/legacy.rb +19 -11
- data/lib/mongo/operation/update/op_msg.rb +7 -4
- data/lib/mongo/operation/write_command/command.rb +51 -0
- data/lib/mongo/operation/write_command/op_msg.rb +43 -0
- data/lib/mongo/operation/write_command.rb +32 -0
- data/lib/mongo/operation.rb +10 -0
- data/lib/mongo/protocol/query.rb +35 -18
- data/lib/mongo/server/connection.rb +25 -3
- data/lib/mongo/server/connection_base.rb +12 -1
- data/lib/mongo/server/connection_common.rb +38 -1
- data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
- data/lib/mongo/server/connection_pool.rb +100 -27
- data/lib/mongo/server/description/features.rb +17 -16
- data/lib/mongo/server/description/load_balancer.rb +33 -0
- data/lib/mongo/server/description.rb +85 -6
- data/lib/mongo/server/monitor/connection.rb +5 -6
- data/lib/mongo/server/monitor.rb +2 -1
- data/lib/mongo/server/pending_connection.rb +47 -31
- data/lib/mongo/server/push_monitor.rb +10 -1
- data/lib/mongo/server.rb +73 -26
- data/lib/mongo/server_selector/base.rb +5 -1
- data/lib/mongo/session/session_pool.rb +11 -0
- data/lib/mongo/session.rb +21 -1
- data/lib/mongo/socket/ocsp_verifier.rb +6 -37
- data/lib/mongo/uri/options_mapper.rb +1 -0
- data/lib/mongo/uri/srv_protocol.rb +6 -8
- data/lib/mongo/uri.rb +18 -0
- data/lib/mongo/utils.rb +0 -7
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/integration/auth_spec.rb +31 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- data/spec/integration/bulk_write_spec.rb +1 -1
- data/spec/integration/change_stream_spec.rb +3 -3
- data/spec/integration/client_construction_spec.rb +54 -0
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
- data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
- data/spec/integration/client_spec.rb +2 -0
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +1 -1
- data/spec/integration/connection_spec.rb +52 -35
- data/spec/integration/crud_spec.rb +174 -1
- data/spec/integration/cursor_pinning_spec.rb +121 -0
- data/spec/integration/cursor_reaping_spec.rb +8 -4
- data/spec/integration/fork_reconnect_spec.rb +1 -5
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +77 -0
- data/spec/integration/query_cache_spec.rb +47 -2
- data/spec/integration/query_cache_transactions_spec.rb +1 -1
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/read_preference_spec.rb +1 -1
- data/spec/integration/reconnect_spec.rb +30 -12
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
- data/spec/integration/sdam_error_handling_spec.rb +5 -3
- data/spec/integration/sdam_events_spec.rb +35 -19
- data/spec/integration/sdam_prose_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +1 -0
- data/spec/integration/server_selector_spec.rb +22 -5
- data/spec/integration/server_spec.rb +2 -0
- data/spec/integration/srv_monitoring_spec.rb +1 -1
- data/spec/integration/step_down_spec.rb +1 -1
- data/spec/integration/transaction_pinning_spec.rb +120 -0
- data/spec/integration/versioned_api_examples_spec.rb +45 -0
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/lite_spec_helper.rb +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -0
- data/spec/mongo/auth/cr_spec.rb +2 -3
- data/spec/mongo/auth/ldap_spec.rb +2 -3
- data/spec/mongo/auth/scram_spec.rb +2 -3
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +2 -3
- data/spec/mongo/bulk_write_spec.rb +3 -3
- data/spec/mongo/client_construction_spec.rb +259 -28
- data/spec/mongo/client_spec.rb +6 -4
- data/spec/mongo/cluster/cursor_reaper_spec.rb +36 -21
- data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
- data/spec/mongo/cluster_spec.rb +44 -3
- data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
- data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
- data/spec/mongo/collection_crud_spec.rb +7 -2
- data/spec/mongo/collection_ddl_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +1 -1
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
- data/spec/mongo/cursor_spec.rb +15 -5
- data/spec/mongo/database_spec.rb +15 -15
- data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
- data/spec/mongo/grid/stream/write_spec.rb +3 -9
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/index/view_spec.rb +2 -2
- data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
- data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
- data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +1 -0
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/kill_cursors_spec.rb +4 -1
- data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +2 -0
- data/spec/mongo/operation/update/bulk_spec.rb +1 -1
- data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
- data/spec/mongo/query_cache_spec.rb +6 -2
- data/spec/mongo/server/connection_common_spec.rb +62 -11
- data/spec/mongo/server/connection_pool_spec.rb +73 -7
- data/spec/mongo/server/connection_spec.rb +138 -43
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +22 -0
- data/spec/mongo/server/monitor_spec.rb +4 -3
- data/spec/mongo/server/push_monitor_spec.rb +101 -0
- data/spec/mongo/session/session_pool_spec.rb +42 -10
- data/spec/mongo/session_transaction_spec.rb +15 -30
- data/spec/mongo/socket/unix_spec.rb +1 -0
- data/spec/mongo/uri_option_parsing_spec.rb +38 -5
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/cmap.rb +1 -1
- data/spec/runners/connection_string.rb +7 -3
- data/spec/runners/crud/operation.rb +5 -3
- data/spec/runners/crud/requirement.rb +1 -0
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/sdam.rb +2 -1
- data/spec/runners/transactions/test.rb +2 -2
- data/spec/runners/unified/assertions.rb +2 -3
- data/spec/runners/unified/event_subscriber.rb +2 -2
- data/spec/runners/unified/support_operations.rb +10 -2
- data/spec/runners/unified/test.rb +3 -0
- data/spec/runners/unified.rb +1 -1
- data/spec/shared/lib/mrss/cluster_config.rb +6 -1
- data/spec/shared/lib/mrss/constraints.rb +11 -5
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
- data/spec/shared/share/Dockerfile.erb +5 -4
- data/spec/shared/shlib/server.sh +70 -20
- data/spec/spec_tests/change_streams_spec.rb +1 -1
- data/spec/spec_tests/cmap_spec.rb +4 -1
- data/spec/spec_tests/command_monitoring_spec.rb +2 -2
- data/spec/spec_tests/data/command_monitoring/find.yml +9 -9
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
- data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
- data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
- data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
- data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
- data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/mapReduce.yml +3 -1
- data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +3 -1
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +3 -1
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-abort.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-writes.yml +2 -0
- data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
- data/spec/spec_tests/load_balancers_spec.rb +15 -0
- data/spec/spec_tests/retryable_reads_spec.rb +2 -2
- data/spec/spec_tests/retryable_writes_spec.rb +1 -1
- data/spec/spec_tests/sdam_integration_spec.rb +1 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
- data/spec/spec_tests/sdam_spec.rb +1 -1
- data/spec/spec_tests/seed_list_discovery_spec.rb +118 -0
- data/spec/spec_tests/uri_options_spec.rb +4 -4
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -5
- data/spec/stress/push_monitor_close_spec.rb +44 -0
- data/spec/support/certificates/atlas-ocsp-ca.crt +82 -90
- data/spec/support/certificates/atlas-ocsp.crt +127 -122
- data/spec/support/common_shortcuts.rb +2 -3
- data/spec/support/matchers.rb +13 -0
- data/spec/support/shared/auth_context.rb +16 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +10 -11
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +1077 -1029
- metadata.gz.sig +0 -0
- data/lib/mongo/collection/view/builder/find_command.rb +0 -173
- data/lib/mongo/collection/view/builder/op_query.rb +0 -94
- data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
- data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
- data/lib/mongo/server/context.rb +0 -72
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
- data/spec/runners/unified/using_hash.rb +0 -34
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
- data/spec/support/event_subscriber.rb +0 -221
File without changes
|
File without changes
|
data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
uri: "mongodb+srv://test1.test.build.10gen.cc/adminDB?replicaSet=repl0"
|
2
|
+
seeds:
|
3
|
+
- localhost.test.build.10gen.cc:27017
|
4
|
+
- localhost.test.build.10gen.cc:27018
|
5
|
+
hosts:
|
6
|
+
- localhost:27017
|
7
|
+
- localhost:27018
|
8
|
+
- localhost:27019
|
9
|
+
options:
|
10
|
+
replicaSet: repl0
|
11
|
+
ssl: true
|
12
|
+
parsed_options:
|
13
|
+
auth_database: adminDB
|
@@ -0,0 +1,12 @@
|
|
1
|
+
uri: "mongodb+srv://auser:apass@test1.test.build.10gen.cc/?replicaSet=repl0"
|
2
|
+
seeds:
|
3
|
+
- localhost.test.build.10gen.cc:27017
|
4
|
+
- localhost.test.build.10gen.cc:27018
|
5
|
+
hosts:
|
6
|
+
- localhost:27017
|
7
|
+
- localhost:27018
|
8
|
+
- localhost:27019
|
9
|
+
parsed_options:
|
10
|
+
user: auser
|
11
|
+
password: apass
|
12
|
+
comment: Should preserve auth credentials
|
File without changes
|
File without changes
|
@@ -147,3 +147,63 @@ tests:
|
|
147
147
|
hosts: ~
|
148
148
|
auth: ~
|
149
149
|
options: {}
|
150
|
+
-
|
151
|
+
description: loadBalanced=true
|
152
|
+
uri: "mongodb://example.com/?loadBalanced=true"
|
153
|
+
valid: true
|
154
|
+
warning: false
|
155
|
+
hosts: ~
|
156
|
+
auth: ~
|
157
|
+
options:
|
158
|
+
loadBalanced: true
|
159
|
+
-
|
160
|
+
description: loadBalanced=true with directConnection=false
|
161
|
+
uri: "mongodb://example.com/?loadBalanced=true&directConnection=false"
|
162
|
+
valid: true
|
163
|
+
warning: false
|
164
|
+
hosts: ~
|
165
|
+
auth: ~
|
166
|
+
options:
|
167
|
+
loadBalanced: true
|
168
|
+
directConnection: false
|
169
|
+
-
|
170
|
+
description: loadBalanced=false
|
171
|
+
uri: "mongodb://example.com/?loadBalanced=false"
|
172
|
+
valid: true
|
173
|
+
warning: false
|
174
|
+
hosts: ~
|
175
|
+
auth: ~
|
176
|
+
options:
|
177
|
+
loadBalanced: false
|
178
|
+
-
|
179
|
+
description: Invalid loadBalanced value
|
180
|
+
uri: "mongodb://example.com/?loadBalanced=1"
|
181
|
+
valid: true
|
182
|
+
warning: true
|
183
|
+
hosts: ~
|
184
|
+
auth: ~
|
185
|
+
options: {}
|
186
|
+
-
|
187
|
+
description: loadBalanced=true with multiple hosts causes an error
|
188
|
+
uri: "mongodb://example1,example2/?loadBalanced=true"
|
189
|
+
valid: false
|
190
|
+
warning: false
|
191
|
+
hosts: ~
|
192
|
+
auth: ~
|
193
|
+
options: {}
|
194
|
+
-
|
195
|
+
description: loadBalanced=true with directConnection=true causes an error
|
196
|
+
uri: "mongodb://example.com/?loadBalanced=true&directConnection=true"
|
197
|
+
valid: false
|
198
|
+
warning: false
|
199
|
+
hosts: ~
|
200
|
+
auth: ~
|
201
|
+
options: {}
|
202
|
+
-
|
203
|
+
description: loadBalanced=true with replicaSet causes an error
|
204
|
+
uri: "mongodb://example.com/?loadBalanced=true&replicaSet=replset"
|
205
|
+
valid: false
|
206
|
+
warning: false
|
207
|
+
hosts: ~
|
208
|
+
auth: ~
|
209
|
+
options: {}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
require 'runners/unified'
|
7
|
+
|
8
|
+
base = "#{CURRENT_PATH}/spec_tests/data/load_balancers"
|
9
|
+
LOAD_BALANCER_TESTS = Dir.glob("#{base}/**/*.yml").sort
|
10
|
+
|
11
|
+
describe 'Load balancer spec tests' do
|
12
|
+
require_topology :load_balanced
|
13
|
+
|
14
|
+
define_unified_spec_tests(base, LOAD_BALANCER_TESTS)
|
15
|
+
end
|
@@ -7,7 +7,7 @@ require 'runners/crud'
|
|
7
7
|
|
8
8
|
describe 'Retryable reads spec tests' do
|
9
9
|
require_wired_tiger
|
10
|
-
|
10
|
+
require_no_multi_mongos
|
11
11
|
|
12
12
|
define_crud_spec_tests(RETRYABLE_READS_TESTS) do |spec, req, test|
|
13
13
|
let(:client) do
|
@@ -19,7 +19,7 @@ describe 'Retryable reads spec tests' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
describe 'Retryable reads spec tests - legacy' do
|
22
|
-
|
22
|
+
require_no_multi_mongos
|
23
23
|
|
24
24
|
define_crud_spec_tests(RETRYABLE_READS_TESTS) do |spec, req, test|
|
25
25
|
let(:client_options) do
|
@@ -7,7 +7,7 @@ require 'runners/crud'
|
|
7
7
|
|
8
8
|
describe 'Retryable writes spec tests' do
|
9
9
|
require_wired_tiger
|
10
|
-
|
10
|
+
require_no_multi_mongos
|
11
11
|
|
12
12
|
# Do not run these tests when write retries are disabled globally -
|
13
13
|
# the tests won't work in that case and testing them with retries enabled
|
@@ -9,7 +9,7 @@ require 'runners/transactions'
|
|
9
9
|
SDAM_INTEGRATION_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/sdam_integration/*.yml").sort
|
10
10
|
|
11
11
|
describe 'SDAM integration tests' do
|
12
|
-
|
12
|
+
require_no_multi_mongos
|
13
13
|
require_wired_tiger
|
14
14
|
|
15
15
|
define_transactions_spec_tests(SDAM_INTEGRATION_TESTS)
|
@@ -16,7 +16,7 @@ describe 'SDAM Monitoring' do
|
|
16
16
|
context("#{spec.description} (#{file.sub(%r'.*/data/sdam_monitoring/', '')})") do
|
17
17
|
|
18
18
|
before(:all) do
|
19
|
-
@subscriber = PhasedEventSubscriber.new
|
19
|
+
@subscriber = Mrss::PhasedEventSubscriber.new
|
20
20
|
sdam_proc = lambda do |client|
|
21
21
|
client.subscribe(Mongo::Monitoring::SERVER_OPENING, @subscriber)
|
22
22
|
client.subscribe(Mongo::Monitoring::SERVER_CLOSED, @subscriber)
|
@@ -39,8 +39,13 @@ describe 'SDAM Monitoring' do
|
|
39
39
|
# Since we set monitoring_io: false, servers are not monitored
|
40
40
|
# by the cluster. Start monitoring on them manually (this publishes
|
41
41
|
# the server opening event but, again due to monitoring_io being
|
42
|
-
# false, does not do network I/O or change server status)
|
43
|
-
|
42
|
+
# false, does not do network I/O or change server status).
|
43
|
+
#
|
44
|
+
# If the server is a load balancer, it doesn't normally get monitored
|
45
|
+
# so don't start here either.
|
46
|
+
unless server.load_balancer?
|
47
|
+
server.start_monitoring
|
48
|
+
end
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
@@ -53,7 +58,7 @@ describe 'SDAM Monitoring' do
|
|
53
58
|
context("Phase: #{phase_index + 1}") do
|
54
59
|
|
55
60
|
before(:all) do
|
56
|
-
phase.responses
|
61
|
+
phase.responses&.each do |response|
|
57
62
|
# For each response in the phase, we need to change that server's description.
|
58
63
|
server = find_server(@client, response.address)
|
59
64
|
server ||= @servers_cache[response.address.to_s]
|
@@ -68,7 +73,7 @@ describe 'SDAM Monitoring' do
|
|
68
73
|
result['minWireVersion'] ||= 0
|
69
74
|
result['maxWireVersion'] ||= 0
|
70
75
|
new_description = Mongo::Server::Description.new(
|
71
|
-
server.description.address, result, 0.5)
|
76
|
+
server.description.address, result, average_round_trip_time: 0.5)
|
72
77
|
@client.cluster.run_sdam_flow(server.description, new_description)
|
73
78
|
end
|
74
79
|
@subscriber.phase_finished(phase_index)
|
@@ -98,7 +98,7 @@ describe 'Server Discovery and Monitoring' do
|
|
98
98
|
result['minWireVersion'] ||= 0
|
99
99
|
result['maxWireVersion'] ||= 0
|
100
100
|
new_description = Mongo::Server::Description.new(
|
101
|
-
server.description.address, result, 0.5)
|
101
|
+
server.description.address, result, average_round_trip_time: 0.5)
|
102
102
|
@client.cluster.run_sdam_flow(server.description, new_description)
|
103
103
|
end
|
104
104
|
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'lite_spec_helper'
|
5
|
+
|
6
|
+
require 'support/using_hash'
|
7
|
+
require 'runners/connection_string'
|
8
|
+
|
9
|
+
SEED_LIST_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/seed_list_discovery/**/*.yml").sort
|
10
|
+
|
11
|
+
describe 'DNS Seedlist Discovery' do
|
12
|
+
require_external_connectivity
|
13
|
+
|
14
|
+
include Mongo::ConnectionString
|
15
|
+
|
16
|
+
SEED_LIST_DISCOVERY_TESTS.each do |test_path|
|
17
|
+
|
18
|
+
spec = YAML.load(File.read(test_path))
|
19
|
+
|
20
|
+
test = Mongo::ConnectionString::Test.new(spec)
|
21
|
+
|
22
|
+
context(File.basename(test_path)) do
|
23
|
+
|
24
|
+
if test.raise_error?
|
25
|
+
context 'the uri is invalid' do
|
26
|
+
|
27
|
+
let(:valid_errors) do
|
28
|
+
[
|
29
|
+
Mongo::Error::InvalidTXTRecord,
|
30
|
+
Mongo::Error::NoSRVRecords,
|
31
|
+
Mongo::Error::InvalidURI,
|
32
|
+
Mongo::Error::MismatchedDomain,
|
33
|
+
# This is unfortunate. RUBY-2624
|
34
|
+
ArgumentError,
|
35
|
+
]
|
36
|
+
end
|
37
|
+
|
38
|
+
let(:error) do
|
39
|
+
begin
|
40
|
+
test.client
|
41
|
+
rescue => ex
|
42
|
+
end
|
43
|
+
ex
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'raises an error' do
|
47
|
+
expect(valid_errors).to include(error.class)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
else
|
52
|
+
|
53
|
+
context 'the uri is valid' do
|
54
|
+
|
55
|
+
it 'does not raise an exception' do
|
56
|
+
expect(test.uri).to be_a(Mongo::URI::SRVProtocol)
|
57
|
+
end
|
58
|
+
|
59
|
+
if test.seeds
|
60
|
+
# DNS seed list tests specify both seeds and hosts.
|
61
|
+
# To get the hosts, the client must do SDAM (as required in the
|
62
|
+
# spec tests' description), but this isn't testing DNS seed list -
|
63
|
+
# it is testing SDAM. Plus, all of the hosts are always the same.
|
64
|
+
# If seed list is given in the expectations, just test the seed
|
65
|
+
# list and not the expanded hosts.
|
66
|
+
it 'creates a client with the correct seeds' do
|
67
|
+
expect(test.client).to have_hosts(test, test.seeds)
|
68
|
+
end
|
69
|
+
else
|
70
|
+
it 'creates a client with the correct hosts' do
|
71
|
+
expect(test.client).to have_hosts(test, test.hosts)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
if test.expected_options
|
76
|
+
it 'creates a client with the correct uri options' do
|
77
|
+
mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
|
78
|
+
# Connection string spec tests do not use canonical URI option names
|
79
|
+
actual = Utils.downcase_keys(mapped)
|
80
|
+
expected = Utils.downcase_keys(test.expected_options)
|
81
|
+
# SRV tests use ssl URI option instead of tls one
|
82
|
+
if expected.key?('ssl') && !expected.key?('tls')
|
83
|
+
expected['tls'] = expected.delete('ssl')
|
84
|
+
end
|
85
|
+
# The client object contains auth source in options which
|
86
|
+
# isn't asserted in some tests.
|
87
|
+
if actual.key?('authsource') && !expected.key?('authsource')
|
88
|
+
actual.delete('authsource')
|
89
|
+
end
|
90
|
+
actual.should == expected
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
if test.non_uri_options
|
95
|
+
it 'creates a client with the correct non-uri options' do
|
96
|
+
opts = UsingHash[test.non_uri_options]
|
97
|
+
if user = opts.use('user')
|
98
|
+
test.client.options[:user].should == user
|
99
|
+
end
|
100
|
+
if password = opts.use('password')
|
101
|
+
test.client.options[:password].should == password
|
102
|
+
end
|
103
|
+
if db = opts.use('db')
|
104
|
+
test.client.database.name.should == db
|
105
|
+
end
|
106
|
+
if auth_source = opts.use('auth_database')
|
107
|
+
Mongo::Auth::User.new(test.client.options).auth_source == auth_source
|
108
|
+
end
|
109
|
+
unless opts.empty?
|
110
|
+
raise "Unhandled keys: #{opts}"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -52,8 +52,8 @@ describe 'URI options' do
|
|
52
52
|
expect(test.client).to match_auth(test)
|
53
53
|
end
|
54
54
|
|
55
|
-
if test.
|
56
|
-
if
|
55
|
+
if opts = test.expected_options
|
56
|
+
if opts['compressors'] && opts['compressors'].include?('snappy')
|
57
57
|
before do
|
58
58
|
unless ENV.fetch('BUNDLE_GEMFILE', '') =~ /snappy/
|
59
59
|
skip "This test requires snappy compression"
|
@@ -61,7 +61,7 @@ describe 'URI options' do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
if
|
64
|
+
if opts['compressors'] && opts['compressors'].include?('zstd')
|
65
65
|
before do
|
66
66
|
unless ENV.fetch('BUNDLE_GEMFILE', '') =~ /zstd/
|
67
67
|
skip "This test requires zstd compression"
|
@@ -72,7 +72,7 @@ describe 'URI options' do
|
|
72
72
|
it 'creates a client with the correct options' do
|
73
73
|
mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
|
74
74
|
expected = Mongo::ConnectionString.adjust_expected_mongo_client_options(
|
75
|
-
|
75
|
+
opts,
|
76
76
|
)
|
77
77
|
mapped.should == expected
|
78
78
|
end
|
@@ -10,11 +10,7 @@ describe 'fork reconnect' do
|
|
10
10
|
# On multi-shard sharded clusters a succeeding write request does not
|
11
11
|
# guarantee that the next operation will succeed (since it could be sent to
|
12
12
|
# another shard with a dead connection).
|
13
|
-
|
14
|
-
|
15
|
-
# On Ruby 2.3 $?.exitstatus is sometimes nil after Process.wait returns which
|
16
|
-
# is not supposed to happen.
|
17
|
-
ruby_version_gte '2.4'
|
13
|
+
require_no_multi_mongos
|
18
14
|
|
19
15
|
require_stress
|
20
16
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
# This test repeatedly creates and closes clients across several threads.
|
7
|
+
# Its goal is to ensure that the push monitor connections specifically get
|
8
|
+
# closed without any errors or warnings being reported to applications.
|
9
|
+
#
|
10
|
+
# Although the test is specifically meant to test 4.4+ servers (that utilize
|
11
|
+
# the push monitor) in non-LB connections, run it everywhere for good measure.
|
12
|
+
describe 'Push monitor close test' do
|
13
|
+
require_stress
|
14
|
+
|
15
|
+
let(:options) do
|
16
|
+
SpecConfig.instance.all_test_options
|
17
|
+
end
|
18
|
+
|
19
|
+
before(:all) do
|
20
|
+
# load if necessary
|
21
|
+
ClusterConfig.instance.primary_address
|
22
|
+
ClientRegistry.instance.close_all_clients
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'does not warn/error on cleanup' do
|
26
|
+
Mongo::Logger.logger.should_not receive(:warn)
|
27
|
+
|
28
|
+
threads = 10.times.map do
|
29
|
+
Thread.new do
|
30
|
+
10.times do
|
31
|
+
client = new_local_client([ClusterConfig.instance.primary_address.seed], options)
|
32
|
+
if rand > 0.33
|
33
|
+
client.command(ping: 1)
|
34
|
+
sleep(rand * 3)
|
35
|
+
end
|
36
|
+
client.close
|
37
|
+
STDOUT << '.'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
threads.each(&:join)
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
end
|