mongo 2.15.0 → 2.16.0.alpha1
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 -1
- 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 +6 -0
- 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_spec.rb +4 -3
- 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/test.rb +3 -0
- data/spec/runners/unified.rb +1 -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 +2 -1
- 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 +9 -10
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +1 -1
- data.tar.gz.sig +2 -4
- metadata +1050 -1004
- 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
data/lib/mongo/error/notable.rb
CHANGED
@@ -63,6 +63,13 @@ module Mongo
|
|
63
63
|
# @return [ Integer | nil ] Connection pool generation.
|
64
64
|
attr_accessor :generation
|
65
65
|
|
66
|
+
# Returns service id for the connection on which the error occurred.
|
67
|
+
#
|
68
|
+
# @return [ Object | nil ] Service id.
|
69
|
+
#
|
70
|
+
# @api experimental
|
71
|
+
attr_accessor :service_id
|
72
|
+
|
66
73
|
# @api public
|
67
74
|
def to_s
|
68
75
|
super + notes_tail
|
data/lib/mongo/error.rb
CHANGED
@@ -168,6 +168,7 @@ module Mongo
|
|
168
168
|
end
|
169
169
|
|
170
170
|
require 'mongo/error/auth_error'
|
171
|
+
require 'mongo/error/bad_load_balancer_target'
|
171
172
|
require 'mongo/error/sdam_error_detection'
|
172
173
|
require 'mongo/error/parser'
|
173
174
|
require 'mongo/error/write_retryable'
|
@@ -217,6 +218,7 @@ require 'mongo/error/mismatched_domain'
|
|
217
218
|
require 'mongo/error/mongocryptd_spawn_error'
|
218
219
|
require 'mongo/error/multi_index_drop'
|
219
220
|
require 'mongo/error/need_primary_server'
|
221
|
+
require 'mongo/error/no_service_connection_available'
|
220
222
|
require 'mongo/error/no_server_available'
|
221
223
|
require 'mongo/error/no_srv_records'
|
222
224
|
require 'mongo/error/session_ended'
|
@@ -235,6 +237,7 @@ require 'mongo/error/missing_file_chunk'
|
|
235
237
|
require 'mongo/error/missing_password'
|
236
238
|
require 'mongo/error/missing_resume_token'
|
237
239
|
require 'mongo/error/missing_scram_server_signature'
|
240
|
+
require 'mongo/error/missing_service_id'
|
238
241
|
require 'mongo/error/server_api_conflict'
|
239
242
|
require 'mongo/error/server_api_not_supported'
|
240
243
|
require 'mongo/error/unknown_payload_type'
|
data/lib/mongo/grid/fs_bucket.rb
CHANGED
@@ -508,8 +508,27 @@ module Mongo
|
|
508
508
|
|
509
509
|
def ensure_indexes!
|
510
510
|
if files_collection.find({}, limit: 1, projection: { _id: 1 }).first.nil?
|
511
|
-
|
512
|
-
|
511
|
+
create_index_if_missing!(files_collection, FSBucket::FILES_INDEX)
|
512
|
+
end
|
513
|
+
|
514
|
+
if chunks_collection.find({}, limit: 1, projection: { _id: 1 }).first.nil?
|
515
|
+
create_index_if_missing!(chunks_collection, FSBucket::CHUNKS_INDEX, :unique => true)
|
516
|
+
end
|
517
|
+
end
|
518
|
+
|
519
|
+
def create_index_if_missing!(collection, index_spec, options = {})
|
520
|
+
indexes_view = collection.indexes
|
521
|
+
begin
|
522
|
+
if indexes_view.get(index_spec).nil?
|
523
|
+
indexes_view.create_one(index_spec, options)
|
524
|
+
end
|
525
|
+
rescue Mongo::Error::OperationFailure => e
|
526
|
+
# proceed with index creation if a NamespaceNotFound error is thrown
|
527
|
+
if e.code == 26
|
528
|
+
indexes_view.create_one(index_spec, options)
|
529
|
+
else
|
530
|
+
raise
|
531
|
+
end
|
513
532
|
end
|
514
533
|
end
|
515
534
|
end
|
data/lib/mongo/id.rb
CHANGED
@@ -16,9 +16,10 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
module Mongo
|
19
|
-
# This module abstracts the functionality for generating sequential
|
20
|
-
# instances of the class. It defines the method
|
21
|
-
#
|
19
|
+
# This module abstracts the functionality for generating sequential
|
20
|
+
# unique integer IDs for instances of the class. It defines the method
|
21
|
+
# #next_id on the class that includes it. The implementation ensures that
|
22
|
+
# the IDs will be unique even when called from multiple threads.
|
22
23
|
#
|
23
24
|
# @example Include the Id module.
|
24
25
|
# class Foo
|
@@ -29,8 +30,9 @@ module Mongo
|
|
29
30
|
# foo.next_id # => 1
|
30
31
|
# foo.next_id # => 2
|
31
32
|
#
|
32
|
-
# Classes which include Id should _not_ access `@@id` or `@@id_lock`
|
33
|
-
# should call `#next_id` in `#initialize` and save
|
33
|
+
# Classes which include Id should _not_ access `@@id` or `@@id_lock`
|
34
|
+
# directly; instead, they should call `#next_id` in `#initialize` and save
|
35
|
+
# the result in the instance being created.
|
34
36
|
#
|
35
37
|
# @example Save the ID in the instance of the including class.
|
36
38
|
# class Bar
|
data/lib/mongo/index/view.rb
CHANGED
@@ -129,7 +129,10 @@ module Mongo
|
|
129
129
|
# @option options [ String | Integer ] :commit_quorum Specify how many
|
130
130
|
# data-bearing members of a replica set, including the primary, must
|
131
131
|
# complete the index builds successfully before the primary marks
|
132
|
-
# the indexes as ready.
|
132
|
+
# the indexes as ready. Potential values are:
|
133
|
+
# - an integer from 0 to the number of members of the replica set
|
134
|
+
# - "majority" indicating that a majority of data bearing nodes must vote
|
135
|
+
# - "votingMembers" which means that all voting data bearing nodes must vote
|
133
136
|
# @option options [ Session ] :session The session to use for the operation.
|
134
137
|
#
|
135
138
|
# @note Note that the options listed may be subset of those available.
|
@@ -177,7 +180,10 @@ module Mongo
|
|
177
180
|
# The following options are accepted:
|
178
181
|
# - commit_quorum: Specify how many data-bearing members of a replica set,
|
179
182
|
# including the primary, must complete the index builds successfully
|
180
|
-
# before the primary marks the indexes as ready.
|
183
|
+
# before the primary marks the indexes as ready. Potential values are:
|
184
|
+
# - an integer from 0 to the number of members of the replica set
|
185
|
+
# - "majority" indicating that a majority of data bearing nodes must vote
|
186
|
+
# - "votingMembers" which means that all voting data bearing nodes must vote
|
181
187
|
# - session: The session to use.
|
182
188
|
#
|
183
189
|
# @return [ Result ] The result of the command.
|
@@ -193,17 +199,6 @@ module Mongo
|
|
193
199
|
client.send(:with_session, @options.merge(options)) do |session|
|
194
200
|
server = next_primary(nil, session)
|
195
201
|
|
196
|
-
# While server versions 3.4 and newer generally perform option
|
197
|
-
# validation, there was a bug on server versions 4.2.0 - 4.2.5 where
|
198
|
-
# the server would accept the commitQuorum option and use it internally
|
199
|
-
# (see SERVER-47193). As a result, the drivers specifications require
|
200
|
-
# drivers to perform validation and raise an error when the commitQuorum
|
201
|
-
# option is passed to servers that don't support it.
|
202
|
-
description = server.with_connection { |connection| connection.description }
|
203
|
-
if description.max_wire_version < 9 && options[:commit_quorum]
|
204
|
-
raise Error::UnsupportedOption.commit_quorum_error
|
205
|
-
end
|
206
|
-
|
207
202
|
indexes = normalize_models(models, server)
|
208
203
|
indexes.each do |index|
|
209
204
|
if index[:bucketSize] || index['bucketSize']
|
@@ -216,10 +211,9 @@ module Mongo
|
|
216
211
|
db_name: database.name,
|
217
212
|
coll_name: collection.name,
|
218
213
|
session: session,
|
219
|
-
commit_quorum: options[:commit_quorum]
|
220
|
-
|
221
|
-
|
222
|
-
spec[:write_concern] = write_concern if description.features.collation_enabled?
|
214
|
+
commit_quorum: options[:commit_quorum],
|
215
|
+
write_concern: write_concern,
|
216
|
+
}
|
223
217
|
|
224
218
|
Operation::CreateIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
|
225
219
|
end
|
@@ -292,13 +286,13 @@ module Mongo
|
|
292
286
|
def drop_by_name(name)
|
293
287
|
client.send(:with_session, @options) do |session|
|
294
288
|
spec = {
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
289
|
+
db_name: database.name,
|
290
|
+
coll_name: collection.name,
|
291
|
+
index_name: name,
|
292
|
+
session: session,
|
293
|
+
write_concern: write_concern,
|
294
|
+
}
|
300
295
|
server = next_primary(nil, session)
|
301
|
-
spec[:write_concern] = write_concern if server.with_connection { |connection| connection.features }.collation_enabled?
|
302
296
|
Operation::DropIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
|
303
297
|
end
|
304
298
|
end
|
@@ -329,30 +323,17 @@ module Mongo
|
|
329
323
|
end
|
330
324
|
|
331
325
|
def normalize_models(models, server)
|
332
|
-
|
333
|
-
|
326
|
+
models.map do |model|
|
327
|
+
# Transform options first which gives us a mutable hash
|
328
|
+
Options::Mapper.transform(model, OPTIONS).tap do |model|
|
329
|
+
model[:name] ||= index_name(model.fetch(:key))
|
330
|
+
end
|
334
331
|
end
|
335
332
|
end
|
336
333
|
|
337
334
|
def send_initial_query(server, session)
|
338
335
|
initial_query_op(session).execute(server, context: Operation::Context.new(client: client, session: session))
|
339
336
|
end
|
340
|
-
|
341
|
-
def with_generated_names(models, server)
|
342
|
-
models.dup.each do |model|
|
343
|
-
validate_collation!(model, server)
|
344
|
-
unless model[:name]
|
345
|
-
model[:name] = index_name(model[:key])
|
346
|
-
end
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
def validate_collation!(model, server)
|
351
|
-
if (model[:collation] || model[Operation::COLLATION]) &&
|
352
|
-
!server.with_connection { |connection| connection.features }.collation_enabled?
|
353
|
-
raise Error::UnsupportedCollation.new
|
354
|
-
end
|
355
|
-
end
|
356
337
|
end
|
357
338
|
end
|
358
339
|
end
|
@@ -31,15 +31,18 @@ module Mongo
|
|
31
31
|
# @since 2.9.0
|
32
32
|
attr_reader :address
|
33
33
|
|
34
|
+
# @return [ nil | Object ] The service id, if any.
|
35
|
+
attr_reader :service_id
|
36
|
+
|
34
37
|
# Create the event.
|
35
38
|
#
|
36
|
-
# @
|
37
|
-
#
|
39
|
+
# @param [ Address ] address
|
40
|
+
# @param [ Object ] service_id The service id, if any.
|
38
41
|
#
|
39
|
-
# @since 2.9.0
|
40
42
|
# @api private
|
41
|
-
def initialize(address)
|
43
|
+
def initialize(address, service_id: nil)
|
42
44
|
@address = address
|
45
|
+
@service_id = service_id
|
43
46
|
end
|
44
47
|
|
45
48
|
# Returns a concise yet useful summary of the event.
|
@@ -88,11 +88,11 @@ module Mongo
|
|
88
88
|
@address = address
|
89
89
|
@request_id = request_id
|
90
90
|
@operation_id = operation_id
|
91
|
+
@service_id = service_id
|
91
92
|
@message = message
|
92
93
|
@started_event = started_event
|
93
94
|
@failure = redacted(command_name, failure)
|
94
95
|
@duration = duration
|
95
|
-
@service_id = service_id
|
96
96
|
end
|
97
97
|
|
98
98
|
# Returns a concise yet useful summary of the event.
|
@@ -78,6 +78,7 @@ module Mongo
|
|
78
78
|
# @param [ Integer ] request_id The request id.
|
79
79
|
# @param [ Integer ] operation_id The operation id.
|
80
80
|
# @param [ BSON::Document ] command The command arguments.
|
81
|
+
# @param [ Object ] service_id The service id, if any.
|
81
82
|
#
|
82
83
|
# @since 2.1.0
|
83
84
|
# @api private
|
@@ -140,6 +141,7 @@ module Mongo
|
|
140
141
|
# @param [ Server::Address ] address The server address.
|
141
142
|
# @param [ Integer ] operation_id The operation id.
|
142
143
|
# @param [ Hash ] payload The message payload.
|
144
|
+
# @param [ Object ] service_id The service id, if any.
|
143
145
|
#
|
144
146
|
# @return [ CommandStarted ] The event.
|
145
147
|
#
|
@@ -35,7 +35,6 @@ module Mongo
|
|
35
35
|
def publish_sdam_event(topic, event)
|
36
36
|
return unless monitoring?
|
37
37
|
|
38
|
-
#log_debug("EVENT: #{event.summary}")
|
39
38
|
monitoring.succeeded(topic, event)
|
40
39
|
end
|
41
40
|
|
@@ -49,12 +48,13 @@ module Mongo
|
|
49
48
|
|
50
49
|
def command_started(address, operation_id, payload,
|
51
50
|
socket_object_id: nil, connection_id: nil, connection_generation: nil,
|
52
|
-
server_connection_id: nil
|
51
|
+
server_connection_id: nil, service_id: nil
|
53
52
|
)
|
54
53
|
event = Event::CommandStarted.generate(address, operation_id, payload,
|
55
54
|
socket_object_id: socket_object_id, connection_id: connection_id,
|
56
55
|
connection_generation: connection_generation,
|
57
56
|
server_connection_id: server_connection_id,
|
57
|
+
service_id: service_id,
|
58
58
|
)
|
59
59
|
monitoring.started(
|
60
60
|
Monitoring::COMMAND,
|
@@ -34,6 +34,14 @@ module Mongo
|
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
+
def selector(connection)
|
38
|
+
super.tap do |selector|
|
39
|
+
if selector[:collation] && !connection.features.collation_enabled?
|
40
|
+
raise Error::UnsupportedCollation
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
37
45
|
def write_concern_supported?(connection)
|
38
46
|
connection.features.collation_enabled?
|
39
47
|
end
|
@@ -24,9 +24,18 @@ module Mongo
|
|
24
24
|
# in a single container, and provides facade methods for the contained
|
25
25
|
# objects.
|
26
26
|
#
|
27
|
+
# The context contains parameters for operations, and as such while an
|
28
|
+
# operation is being prepared nothing in the context should change.
|
29
|
+
# When the result of the operation is being processed, the data
|
30
|
+
# returned by the context may change (for example, because a transaction
|
31
|
+
# is aborted), but at that point the operation should no longer read
|
32
|
+
# anything from the context. Because context data may change during
|
33
|
+
# operation execution, context objects should not be reused for multiple
|
34
|
+
# operations.
|
35
|
+
#
|
27
36
|
# @api private
|
28
37
|
class Context
|
29
|
-
def initialize(client: nil, session: nil, options: nil)
|
38
|
+
def initialize(client: nil, session: nil, service_id: nil, options: nil)
|
30
39
|
if options
|
31
40
|
if client
|
32
41
|
raise ArgumentError, 'Client and options cannot both be specified'
|
@@ -37,8 +46,13 @@ module Mongo
|
|
37
46
|
end
|
38
47
|
end
|
39
48
|
|
49
|
+
if service_id && session&.pinned_service_id
|
50
|
+
raise ArgumentError, 'Trying to pin context to a service when the session is already pinned to a service'
|
51
|
+
end
|
52
|
+
|
40
53
|
@client = client
|
41
54
|
@session = session
|
55
|
+
@service_id = service_id
|
42
56
|
@options = options
|
43
57
|
end
|
44
58
|
|
@@ -46,6 +60,10 @@ module Mongo
|
|
46
60
|
attr_reader :session
|
47
61
|
attr_reader :options
|
48
62
|
|
63
|
+
def service_id
|
64
|
+
@service_id || session&.pinned_service_id
|
65
|
+
end
|
66
|
+
|
49
67
|
def in_transaction?
|
50
68
|
session&.in_transaction? || false
|
51
69
|
end
|
@@ -32,6 +32,12 @@ module Mongo
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
+
def selector(connection)
|
36
|
+
selector = spec[:selector]
|
37
|
+
selector = apply_collation(selector, connection, spec[:collation])
|
38
|
+
selector
|
39
|
+
end
|
40
|
+
|
35
41
|
def message(connection)
|
36
42
|
Protocol::Query.new(db_name, Database::COMMAND, command(connection), options(connection))
|
37
43
|
end
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
module Operation
|
20
20
|
class Create
|
21
21
|
|
22
|
-
# A MongoDB
|
22
|
+
# A MongoDB create collection operation sent as a command message.
|
23
23
|
#
|
24
24
|
# @api private
|
25
25
|
#
|
@@ -32,6 +32,12 @@ module Mongo
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
+
def selector(connection)
|
36
|
+
selector = spec[:selector]
|
37
|
+
selector = apply_collation(selector, connection, spec[:collation])
|
38
|
+
selector
|
39
|
+
end
|
40
|
+
|
35
41
|
def message(connection)
|
36
42
|
Protocol::Query.new(db_name, Database::COMMAND, command(connection), options(connection))
|
37
43
|
end
|
@@ -26,6 +26,13 @@ module Mongo
|
|
26
26
|
# @since 2.5.2
|
27
27
|
class OpMsg < OpMsgBase
|
28
28
|
include ExecutableTransactionLabel
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def selector(connection)
|
33
|
+
# Collation is always supported on 3.6+ servers that would use OP_MSG.
|
34
|
+
spec[:selector].merge(collation: spec[:collation]).compact
|
35
|
+
end
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
@@ -33,7 +33,23 @@ module Mongo
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def selector(connection)
|
36
|
-
|
36
|
+
indexes.each do |index|
|
37
|
+
if index[:collation] && !connection.features.collation_enabled?
|
38
|
+
raise Error::UnsupportedCollation
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
{
|
43
|
+
createIndexes: coll_name,
|
44
|
+
indexes: indexes,
|
45
|
+
}.tap do |selector|
|
46
|
+
if commit_quorum = spec[:commit_quorum]
|
47
|
+
unless connection.features.commit_quorum_enabled?
|
48
|
+
raise Error::UnsupportedOption.commit_quorum_error
|
49
|
+
end
|
50
|
+
selector[:commitQuorum] = commit_quorum
|
51
|
+
end
|
52
|
+
end
|
37
53
|
end
|
38
54
|
|
39
55
|
def message(connection)
|
@@ -30,10 +30,23 @@ module Mongo
|
|
30
30
|
private
|
31
31
|
|
32
32
|
def selector(connection)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
selector
|
33
|
+
{
|
34
|
+
createIndexes: coll_name,
|
35
|
+
indexes: indexes,
|
36
|
+
}.tap do |selector|
|
37
|
+
if commit_quorum = spec[:commit_quorum]
|
38
|
+
# While server versions 3.4 and newer generally perform option
|
39
|
+
# validation, there was a bug on server versions 4.2.0 - 4.2.5 where
|
40
|
+
# the server would accept the commitQuorum option and use it internally
|
41
|
+
# (see SERVER-47193). As a result, the drivers specifications require
|
42
|
+
# drivers to perform validation and raise an error when the commitQuorum
|
43
|
+
# option is passed to servers that don't support it.
|
44
|
+
unless connection.features.commit_quorum_enabled?
|
45
|
+
raise Error::UnsupportedOption.commit_quorum_error
|
46
|
+
end
|
47
|
+
selector[:commitQuorum] = commit_quorum
|
48
|
+
end
|
49
|
+
end
|
37
50
|
end
|
38
51
|
end
|
39
52
|
end
|