mongo 2.15.0 → 2.16.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|