mongo 2.13.0.beta1 → 2.14.0
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.tar.gz.sig +1 -5
- data/Rakefile +50 -9
- data/lib/mongo.rb +13 -2
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/auth/aws/request.rb +31 -5
- data/lib/mongo/bulk_write.rb +18 -0
- data/lib/mongo/caching_cursor.rb +74 -0
- data/lib/mongo/client.rb +238 -31
- data/lib/mongo/cluster.rb +56 -20
- data/lib/mongo/cluster/sdam_flow.rb +13 -10
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -2
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +2 -2
- data/lib/mongo/collection.rb +66 -24
- data/lib/mongo/collection/view.rb +24 -20
- data/lib/mongo/collection/view/aggregation.rb +25 -4
- data/lib/mongo/collection/view/builder/find_command.rb +38 -18
- data/lib/mongo/collection/view/explainable.rb +27 -8
- data/lib/mongo/collection/view/iterable.rb +72 -12
- data/lib/mongo/collection/view/readable.rb +19 -3
- data/lib/mongo/collection/view/writable.rb +55 -5
- data/lib/mongo/crypt/encryption_io.rb +6 -6
- data/lib/mongo/cursor.rb +16 -3
- data/lib/mongo/database.rb +37 -4
- data/lib/mongo/database/view.rb +18 -3
- data/lib/mongo/distinguishing_semaphore.rb +55 -0
- data/lib/mongo/error.rb +5 -0
- data/lib/mongo/error/invalid_read_concern.rb +28 -0
- data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
- data/lib/mongo/error/invalid_session.rb +2 -1
- data/lib/mongo/error/operation_failure.rb +11 -5
- data/lib/mongo/error/server_certificate_revoked.rb +22 -0
- data/lib/mongo/error/sessions_not_supported.rb +35 -0
- data/lib/mongo/error/unsupported_option.rb +14 -12
- data/lib/mongo/event/base.rb +6 -0
- data/lib/mongo/grid/file.rb +5 -0
- data/lib/mongo/grid/file/chunk.rb +2 -0
- data/lib/mongo/grid/fs_bucket.rb +15 -13
- data/lib/mongo/grid/stream/write.rb +9 -3
- data/lib/mongo/index/view.rb +3 -0
- data/lib/mongo/lint.rb +2 -1
- data/lib/mongo/logger.rb +3 -3
- data/lib/mongo/monitoring.rb +38 -0
- data/lib/mongo/monitoring/command_log_subscriber.rb +10 -2
- data/lib/mongo/monitoring/event/command_failed.rb +11 -0
- data/lib/mongo/monitoring/event/command_started.rb +37 -2
- data/lib/mongo/monitoring/event/command_succeeded.rb +11 -0
- data/lib/mongo/monitoring/event/server_closed.rb +1 -1
- data/lib/mongo/monitoring/event/server_description_changed.rb +27 -4
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +9 -2
- data/lib/mongo/monitoring/event/server_heartbeat_started.rb +9 -2
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +9 -2
- data/lib/mongo/monitoring/event/server_opening.rb +1 -1
- data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
- data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
- data/lib/mongo/monitoring/publishable.rb +6 -3
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +9 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/operation.rb +2 -0
- data/lib/mongo/operation/aggregate/result.rb +9 -8
- data/lib/mongo/operation/collections_info/command.rb +5 -0
- data/lib/mongo/operation/collections_info/result.rb +18 -1
- data/lib/mongo/operation/delete/bulk_result.rb +2 -0
- data/lib/mongo/operation/delete/result.rb +3 -0
- data/lib/mongo/operation/explain/command.rb +4 -0
- data/lib/mongo/operation/explain/legacy.rb +4 -0
- data/lib/mongo/operation/explain/op_msg.rb +6 -0
- data/lib/mongo/operation/explain/result.rb +3 -0
- data/lib/mongo/operation/find/legacy/result.rb +2 -0
- data/lib/mongo/operation/find/result.rb +13 -0
- data/lib/mongo/operation/get_more/result.rb +3 -0
- data/lib/mongo/operation/indexes/result.rb +5 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -0
- data/lib/mongo/operation/insert/result.rb +5 -0
- data/lib/mongo/operation/list_collections/result.rb +5 -0
- data/lib/mongo/operation/map_reduce/result.rb +10 -0
- data/lib/mongo/operation/parallel_scan/result.rb +4 -0
- data/lib/mongo/operation/result.rb +35 -6
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
- data/lib/mongo/operation/shared/executable.rb +1 -0
- data/lib/mongo/operation/shared/idable.rb +2 -1
- data/lib/mongo/operation/shared/limited.rb +1 -0
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
- data/lib/mongo/operation/shared/specifiable.rb +1 -0
- data/lib/mongo/operation/shared/write.rb +1 -0
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
- data/lib/mongo/operation/update/legacy/result.rb +7 -0
- data/lib/mongo/operation/update/result.rb +8 -0
- data/lib/mongo/operation/users_info/result.rb +3 -0
- data/lib/mongo/protocol/message.rb +47 -10
- data/lib/mongo/protocol/msg.rb +34 -1
- data/lib/mongo/protocol/query.rb +36 -0
- data/lib/mongo/protocol/serializers.rb +5 -2
- data/lib/mongo/query_cache.rb +242 -0
- data/lib/mongo/retryable.rb +8 -1
- data/lib/mongo/server.rb +15 -4
- data/lib/mongo/server/app_metadata.rb +27 -3
- data/lib/mongo/server/connection.rb +4 -4
- data/lib/mongo/server/connection_base.rb +38 -12
- data/lib/mongo/server/connection_common.rb +2 -2
- data/lib/mongo/server/connection_pool.rb +3 -0
- data/lib/mongo/server/description.rb +13 -1
- data/lib/mongo/server/monitor.rb +76 -44
- data/lib/mongo/server/monitor/connection.rb +57 -9
- data/lib/mongo/server/pending_connection.rb +14 -4
- data/lib/mongo/server/push_monitor.rb +173 -0
- data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
- data/lib/mongo/server_selector.rb +0 -1
- data/lib/mongo/server_selector/base.rb +583 -1
- data/lib/mongo/server_selector/nearest.rb +1 -6
- data/lib/mongo/server_selector/primary.rb +1 -6
- data/lib/mongo/server_selector/primary_preferred.rb +7 -10
- data/lib/mongo/server_selector/secondary.rb +1 -6
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -7
- data/lib/mongo/session.rb +7 -1
- data/lib/mongo/socket.rb +26 -12
- data/lib/mongo/socket/ocsp_cache.rb +97 -0
- data/lib/mongo/socket/ocsp_verifier.rb +368 -0
- data/lib/mongo/socket/ssl.rb +46 -25
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/srv/monitor.rb +7 -13
- data/lib/mongo/srv/resolver.rb +14 -10
- data/lib/mongo/timeout.rb +2 -0
- data/lib/mongo/topology_version.rb +9 -0
- data/lib/mongo/uri.rb +21 -390
- data/lib/mongo/uri/options_mapper.rb +582 -0
- data/lib/mongo/uri/srv_protocol.rb +3 -2
- data/lib/mongo/utils.rb +73 -0
- data/lib/mongo/version.rb +1 -1
- data/spec/NOTES.aws-auth.md +12 -7
- data/spec/README.aws-auth.md +2 -2
- data/spec/README.md +63 -1
- data/spec/integration/awaited_ismaster_spec.rb +28 -0
- data/spec/integration/bson_symbol_spec.rb +4 -2
- data/spec/integration/bulk_write_spec.rb +67 -0
- data/spec/integration/change_stream_examples_spec.rb +6 -2
- data/spec/integration/change_stream_spec.rb +1 -1
- data/spec/integration/check_clean_slate_spec.rb +16 -0
- data/spec/integration/client_authentication_options_spec.rb +92 -28
- data/spec/integration/client_construction_spec.rb +1 -0
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
- data/spec/integration/connect_single_rs_name_spec.rb +5 -2
- data/spec/integration/connection_pool_populator_spec.rb +4 -2
- data/spec/integration/connection_spec.rb +7 -4
- data/spec/integration/crud_spec.rb +4 -4
- data/spec/integration/cursor_reaping_spec.rb +54 -18
- data/spec/integration/docs_examples_spec.rb +6 -0
- data/spec/integration/fork_reconnect_spec.rb +56 -1
- data/spec/integration/grid_fs_bucket_spec.rb +48 -0
- data/spec/integration/heartbeat_events_spec.rb +4 -23
- data/spec/integration/ocsp_connectivity_spec.rb +26 -0
- data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
- data/spec/integration/ocsp_verifier_spec.rb +334 -0
- data/spec/integration/query_cache_spec.rb +1045 -0
- data/spec/integration/query_cache_transactions_spec.rb +190 -0
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +4 -2
- data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -3
- data/spec/integration/retryable_writes/shared/performs_no_retries.rb +2 -2
- data/spec/integration/sdam_error_handling_spec.rb +122 -15
- data/spec/integration/sdam_events_spec.rb +80 -6
- data/spec/integration/sdam_prose_spec.rb +64 -0
- data/spec/integration/server_monitor_spec.rb +25 -1
- data/spec/integration/server_selection_spec.rb +36 -0
- data/spec/integration/size_limit_spec.rb +23 -5
- data/spec/integration/srv_monitoring_spec.rb +38 -3
- data/spec/integration/srv_spec.rb +56 -0
- data/spec/integration/ssl_uri_options_spec.rb +2 -2
- data/spec/integration/transactions_examples_spec.rb +17 -7
- data/spec/integration/zlib_compression_spec.rb +25 -0
- data/spec/lite_spec_helper.rb +20 -9
- data/spec/mongo/address_spec.rb +1 -1
- data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
- data/spec/mongo/auth/aws/request_spec.rb +76 -0
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/caching_cursor_spec.rb +70 -0
- data/spec/mongo/client_construction_spec.rb +386 -3
- data/spec/mongo/client_encryption_spec.rb +16 -10
- data/spec/mongo/client_spec.rb +85 -3
- data/spec/mongo/cluster/topology/replica_set_spec.rb +53 -10
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +19 -8
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +37 -35
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -7
- data/spec/mongo/collection/view/explainable_spec.rb +87 -4
- data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
- data/spec/mongo/collection/view/readable_spec.rb +36 -0
- data/spec/mongo/collection_spec.rb +572 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/context_spec.rb +2 -7
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
- data/spec/mongo/crypt/binding/status_spec.rb +1 -6
- data/spec/mongo/crypt/binding/version_spec.rb +1 -6
- data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/status_spec.rb +1 -6
- data/spec/mongo/database_spec.rb +353 -8
- data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_spec.rb +40 -0
- data/spec/mongo/index/view_spec.rb +148 -2
- data/spec/mongo/logger_spec.rb +13 -11
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -4
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/insert/command_spec.rb +2 -2
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/update/command_spec.rb +2 -2
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
- data/spec/mongo/protocol/msg_spec.rb +10 -0
- data/spec/mongo/query_cache_spec.rb +280 -0
- data/spec/mongo/semaphore_spec.rb +51 -0
- data/spec/mongo/server/app_metadata_shared.rb +82 -2
- data/spec/mongo/server/connection_auth_spec.rb +2 -2
- data/spec/mongo/server/connection_pool_spec.rb +7 -3
- data/spec/mongo/server/connection_spec.rb +15 -8
- data/spec/mongo/server/description_spec.rb +18 -0
- data/spec/mongo/server_selector/nearest_spec.rb +23 -23
- data/spec/mongo/server_selector/primary_preferred_spec.rb +26 -26
- data/spec/mongo/server_selector/primary_spec.rb +9 -9
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +22 -22
- data/spec/mongo/server_selector/secondary_spec.rb +18 -18
- data/spec/mongo/server_selector_spec.rb +6 -6
- data/spec/mongo/session_spec.rb +35 -0
- data/spec/mongo/socket/ssl_spec.rb +4 -4
- data/spec/mongo/socket_spec.rb +1 -1
- data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
- data/spec/mongo/uri_option_parsing_spec.rb +11 -11
- data/spec/mongo/uri_spec.rb +68 -41
- data/spec/mongo/utils_spec.rb +39 -0
- data/spec/runners/auth.rb +3 -0
- data/spec/runners/change_streams/test.rb +3 -3
- data/spec/runners/cmap.rb +1 -1
- data/spec/runners/command_monitoring.rb +3 -34
- data/spec/runners/connection_string.rb +35 -124
- data/spec/runners/crud/context.rb +9 -5
- data/spec/runners/crud/operation.rb +59 -27
- data/spec/runners/crud/spec.rb +0 -8
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/test_base.rb +0 -19
- data/spec/runners/sdam.rb +2 -2
- data/spec/runners/server_selection.rb +242 -28
- data/spec/runners/transactions.rb +12 -12
- data/spec/runners/transactions/operation.rb +151 -25
- data/spec/runners/transactions/test.rb +62 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/constraints.rb +303 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/spec_tests/cmap_spec.rb +7 -3
- data/spec/spec_tests/command_monitoring_spec.rb +22 -12
- data/spec/spec_tests/crud_spec.rb +1 -1
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +4 -9
- data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +66 -0
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
- data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
- data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
- data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
- data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
- data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
- data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
- data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
- data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
- data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
- data/spec/spec_tests/max_staleness_spec.rb +4 -142
- data/spec/spec_tests/retryable_reads_spec.rb +2 -2
- data/spec/spec_tests/sdam_integration_spec.rb +13 -0
- data/spec/spec_tests/sdam_monitoring_spec.rb +1 -2
- data/spec/spec_tests/server_selection_spec.rb +4 -116
- data/spec/spec_tests/uri_options_spec.rb +31 -33
- data/spec/stress/cleanup_spec.rb +17 -2
- data/spec/stress/connection_pool_stress_spec.rb +10 -8
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
- data/spec/support/certificates/atlas-ocsp.crt +41 -0
- data/spec/support/client_registry.rb +1 -0
- data/spec/support/client_registry_macros.rb +11 -2
- data/spec/support/cluster_config.rb +4 -0
- data/spec/support/common_shortcuts.rb +45 -0
- data/spec/support/constraints.rb +6 -253
- data/spec/support/event_subscriber.rb +123 -33
- data/spec/support/keyword_struct.rb +26 -0
- data/spec/support/matchers.rb +16 -0
- data/spec/support/ocsp +1 -0
- data/spec/support/session_registry.rb +52 -0
- data/spec/support/shared/server_selector.rb +13 -1
- data/spec/support/spec_config.rb +60 -13
- data/spec/support/spec_setup.rb +1 -1
- data/spec/support/utils.rb +84 -1
- metadata +1027 -937
- metadata.gz.sig +0 -0
- data/lib/mongo/server_selector/selectable.rb +0 -560
- data/spec/runners/sdam_monitoring.rb +0 -89
- data/spec/support/lite_constraints.rb +0 -141
@@ -21,7 +21,7 @@ module Mongo
|
|
21
21
|
# @api private
|
22
22
|
class EncryptionIO
|
23
23
|
|
24
|
-
# Timeout used for
|
24
|
+
# Timeout used for TLS socket connection, reading, and writing.
|
25
25
|
# There is no specific timeout written in the spec. See SPEC-1394
|
26
26
|
# for a discussion and updates on what this timeout should be.
|
27
27
|
SOCKET_TIMEOUT = 10
|
@@ -236,10 +236,10 @@ module Mongo
|
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
239
|
-
# Provide
|
239
|
+
# Provide a TLS socket to be used for KMS calls in a block API
|
240
240
|
#
|
241
|
-
# @param [ String ] endpoint The URI at which to connect the
|
242
|
-
# @yieldparam [ OpenSSL::SSL::SSLSocket ] ssl_socket Yields
|
241
|
+
# @param [ String ] endpoint The URI at which to connect the TLS socket.
|
242
|
+
# @yieldparam [ OpenSSL::SSL::SSLSocket ] ssl_socket Yields a TLS socket
|
243
243
|
# connected to the specified endpoint.
|
244
244
|
#
|
245
245
|
# @raise [ Mongo::Error::KmsError ] If the socket times out or raises
|
@@ -277,7 +277,7 @@ module Mongo
|
|
277
277
|
Timeout.timeout(
|
278
278
|
SOCKET_TIMEOUT,
|
279
279
|
Error::SocketTimeoutError,
|
280
|
-
'KMS
|
280
|
+
'KMS TLS socket close timed out'
|
281
281
|
) do
|
282
282
|
ssl_socket.sysclose
|
283
283
|
end
|
@@ -285,7 +285,7 @@ module Mongo
|
|
285
285
|
end
|
286
286
|
end
|
287
287
|
ensure
|
288
|
-
# Still close tcp socket manually in case
|
288
|
+
# Still close tcp socket manually in case TLS socket creation
|
289
289
|
# fails.
|
290
290
|
begin
|
291
291
|
Timeout.timeout(
|
data/lib/mongo/cursor.rb
CHANGED
@@ -69,12 +69,12 @@ module Mongo
|
|
69
69
|
@view = view
|
70
70
|
@server = server
|
71
71
|
@initial_result = result
|
72
|
+
@namespace = result.namespace
|
72
73
|
@remaining = limit if limited?
|
73
74
|
@cursor_id = result.cursor_id
|
74
75
|
if @cursor_id.nil?
|
75
76
|
raise ArgumentError, 'Cursor id must be present in the result'
|
76
77
|
end
|
77
|
-
@coll_name = nil
|
78
78
|
@options = options
|
79
79
|
@session = @options[:session]
|
80
80
|
unless closed?
|
@@ -138,6 +138,7 @@ module Mongo
|
|
138
138
|
#
|
139
139
|
# @since 2.0.0
|
140
140
|
def each
|
141
|
+
|
141
142
|
# If we already iterated past the first batch (i.e., called get_more
|
142
143
|
# at least once), the cursor on the server side has advanced past
|
143
144
|
# the first batch and restarting iteration from the beginning by
|
@@ -287,7 +288,20 @@ module Mongo
|
|
287
288
|
#
|
288
289
|
# @since 2.2.0
|
289
290
|
def collection_name
|
290
|
-
|
291
|
+
# In most cases, this will be equivalent to the name of the collection
|
292
|
+
# object in the driver. However, in some cases (e.g. when connected
|
293
|
+
# to an Atlas Data Lake), the namespace returned by the find command
|
294
|
+
# may be different, which is why we want to use the collection name based
|
295
|
+
# on the namespace in the command result.
|
296
|
+
if @namespace
|
297
|
+
# Often, the namespace will be in the format "database.collection".
|
298
|
+
# However, sometimes the collection name will contain periods, which
|
299
|
+
# is why this method joins all the namespace components after the first.
|
300
|
+
ns_components = @namespace.split('.')
|
301
|
+
ns_components[1...ns_components.length].join('.')
|
302
|
+
else
|
303
|
+
collection.name
|
304
|
+
end
|
291
305
|
end
|
292
306
|
|
293
307
|
# Get the cursor id.
|
@@ -381,7 +395,6 @@ module Mongo
|
|
381
395
|
|
382
396
|
def process(result)
|
383
397
|
@remaining -= result.returned_count if limited?
|
384
|
-
@coll_name ||= result.namespace.sub("#{database.name}.", '') if result.namespace
|
385
398
|
# #process is called for the first batch of results. In this case
|
386
399
|
# the @cursor_id may be zero (all results fit in the first batch).
|
387
400
|
# Thus we need to check both @cursor_id and the cursor_id of the result
|
data/lib/mongo/database.rb
CHANGED
@@ -113,6 +113,16 @@ module Mongo
|
|
113
113
|
# @note The set of returned collection names depends on the version of
|
114
114
|
# MongoDB server that fulfills the request.
|
115
115
|
#
|
116
|
+
# @param [ Hash ] options
|
117
|
+
#
|
118
|
+
# @option options [ Hash ] :filter A filter on the collections returned.
|
119
|
+
# @option options [ true, false ] :authorized_collections A flag, when
|
120
|
+
# set to true and used with nameOnly: true, that allows a user without the
|
121
|
+
# required privilege to run the command when access control is enforced
|
122
|
+
#
|
123
|
+
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
124
|
+
# for more information and usage.
|
125
|
+
#
|
116
126
|
# @return [ Array<String> ] Names of the collections.
|
117
127
|
#
|
118
128
|
# @since 2.0.0
|
@@ -129,6 +139,13 @@ module Mongo
|
|
129
139
|
# @param [ Hash ] options
|
130
140
|
#
|
131
141
|
# @option options [ Hash ] :filter A filter on the collections returned.
|
142
|
+
# @option options [ true, false ] :name_only Indicates whether command
|
143
|
+
# should return just collection/view names and type or return both the
|
144
|
+
# name and other information
|
145
|
+
# @option options [ true, false ] :authorized_collections A flag, when
|
146
|
+
# set to true and used with nameOnly: true, that allows a user without the
|
147
|
+
# required privilege to run the command when access control is enforced
|
148
|
+
#
|
132
149
|
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
133
150
|
# for more information and usage.
|
134
151
|
#
|
@@ -136,8 +153,8 @@ module Mongo
|
|
136
153
|
# collection in the database.
|
137
154
|
#
|
138
155
|
# @since 2.0.5
|
139
|
-
def list_collections(
|
140
|
-
View.new(self).list_collections(
|
156
|
+
def list_collections(options = {})
|
157
|
+
View.new(self).list_collections(options)
|
141
158
|
end
|
142
159
|
|
143
160
|
# Get all the non-system collections that belong to this database.
|
@@ -145,11 +162,21 @@ module Mongo
|
|
145
162
|
# @note The set of returned collections depends on the version of
|
146
163
|
# MongoDB server that fulfills the request.
|
147
164
|
#
|
165
|
+
# @param [ Hash ] options
|
166
|
+
#
|
167
|
+
# @option options [ Hash ] :filter A filter on the collections returned.
|
168
|
+
# @option options [ true, false ] :authorized_collections A flag, when
|
169
|
+
# set to true and used with name_only: true, that allows a user without the
|
170
|
+
# required privilege to run the command when access control is enforced
|
171
|
+
#
|
172
|
+
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
173
|
+
# for more information and usage.
|
174
|
+
#
|
148
175
|
# @return [ Array<Mongo::Collection> ] The collections.
|
149
176
|
#
|
150
177
|
# @since 2.0.0
|
151
|
-
def collections
|
152
|
-
collection_names.map { |name| collection(name) }
|
178
|
+
def collections(options = {})
|
179
|
+
collection_names(options).map { |name| collection(name) }
|
153
180
|
end
|
154
181
|
|
155
182
|
# Execute a command on the database.
|
@@ -236,6 +263,7 @@ module Mongo
|
|
236
263
|
# @param [ Hash ] options The options for the operation.
|
237
264
|
#
|
238
265
|
# @option options [ Session ] :session The session to use for the operation.
|
266
|
+
# @option opts [ Hash ] :write_concern The write concern options.
|
239
267
|
#
|
240
268
|
# @return [ Result ] The result of the command.
|
241
269
|
#
|
@@ -243,6 +271,11 @@ module Mongo
|
|
243
271
|
def drop(options = {})
|
244
272
|
operation = { :dropDatabase => 1 }
|
245
273
|
client.send(:with_session, options) do |session|
|
274
|
+
write_concern = if options[:write_concern]
|
275
|
+
WriteConcern.get(options[:write_concern])
|
276
|
+
else
|
277
|
+
self.write_concern
|
278
|
+
end
|
246
279
|
Operation::DropDatabase.new({
|
247
280
|
selector: operation,
|
248
281
|
db_name: name,
|
data/lib/mongo/database/view.rb
CHANGED
@@ -47,6 +47,13 @@ module Mongo
|
|
47
47
|
#
|
48
48
|
# @option options [ Integer ] :batch_size The batch size for results
|
49
49
|
# returned from the listCollections command.
|
50
|
+
# @option options [ Hash ] :filter A filter on the collections returned.
|
51
|
+
# @option options [ true, false ] :authorized_collections A flag, when
|
52
|
+
# set to true, that allows a user without the required privilege
|
53
|
+
# to run the command when access control is enforced
|
54
|
+
#
|
55
|
+
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
56
|
+
# for more information and usage.
|
50
57
|
#
|
51
58
|
# @return [ Array<String> ] The names of all non-system collections.
|
52
59
|
#
|
@@ -55,7 +62,7 @@ module Mongo
|
|
55
62
|
@batch_size = options[:batch_size]
|
56
63
|
session = client.send(:get_session, options)
|
57
64
|
cursor = read_with_retry_cursor(session, ServerSelector.primary, self) do |server|
|
58
|
-
send_initial_query(server, session, name_only: true)
|
65
|
+
send_initial_query(server, session, options.merge(name_only: true))
|
59
66
|
end
|
60
67
|
cursor.map do |info|
|
61
68
|
if cursor.server.with_connection { |connection| connection.features }.list_collections_enabled?
|
@@ -81,15 +88,22 @@ module Mongo
|
|
81
88
|
# @param [ Hash ] options
|
82
89
|
#
|
83
90
|
# @option options [ Hash ] :filter A filter on the collections returned.
|
91
|
+
# @option options [ true, false ] :name_only Indicates whether command
|
92
|
+
# should return just collection/view names and type or return both the
|
93
|
+
# name and other information
|
94
|
+
# @option options [ true, false ] :authorized_collections A flag, when
|
95
|
+
# set to true and used with nameOnly: true, that allows a user without the
|
96
|
+
# required privilege to run the command when access control is enforced
|
97
|
+
#
|
84
98
|
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
85
99
|
# for more information and usage.
|
86
100
|
#
|
87
101
|
# @return [ Array<Hash> ] Info for each collection in the database.
|
88
102
|
#
|
89
103
|
# @since 2.0.5
|
90
|
-
def list_collections(
|
104
|
+
def list_collections(options = {})
|
91
105
|
session = client.send(:get_session)
|
92
|
-
collections_info(session, ServerSelector.primary,
|
106
|
+
collections_info(session, ServerSelector.primary, options)
|
93
107
|
end
|
94
108
|
|
95
109
|
# Create the new database view.
|
@@ -166,6 +180,7 @@ module Mongo
|
|
166
180
|
}.tap do |spec|
|
167
181
|
spec[:selector][:nameOnly] = true if options[:name_only]
|
168
182
|
spec[:selector][:filter] = options[:filter] if options[:filter]
|
183
|
+
spec[:selector][:authorizedCollections] = true if options[:authorized_collections]
|
169
184
|
end
|
170
185
|
end
|
171
186
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Copyright (C) 2020 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
# This is a semaphore that distinguishes waits ending due to the timeout
|
17
|
+
# being reached from waits ending due to the semaphore being signaled.
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
class DistinguishingSemaphore
|
21
|
+
def initialize
|
22
|
+
@lock = Mutex.new
|
23
|
+
@cv = ConditionVariable.new
|
24
|
+
@queue = []
|
25
|
+
end
|
26
|
+
|
27
|
+
# Waits for the semaphore to be signaled up to timeout seconds.
|
28
|
+
# If semaphore is not signaled, returns after timeout seconds.
|
29
|
+
#
|
30
|
+
# @return [ true | false ] true if semaphore was signaled, false if
|
31
|
+
# timeout was reached.
|
32
|
+
def wait(timeout = nil)
|
33
|
+
@lock.synchronize do
|
34
|
+
@cv.wait(@lock, timeout)
|
35
|
+
(!@queue.empty?).tap do
|
36
|
+
@queue.clear
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def broadcast
|
42
|
+
@lock.synchronize do
|
43
|
+
@queue.push(true)
|
44
|
+
@cv.broadcast
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def signal
|
49
|
+
@lock.synchronize do
|
50
|
+
@queue.push(true)
|
51
|
+
@cv.signal
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/mongo/error.rb
CHANGED
@@ -188,8 +188,11 @@ require 'mongo/error/invalid_min_pool_size'
|
|
188
188
|
require 'mongo/error/invalid_read_option'
|
189
189
|
require 'mongo/error/invalid_application_name'
|
190
190
|
require 'mongo/error/invalid_nonce'
|
191
|
+
require 'mongo/error/invalid_read_concern'
|
191
192
|
require 'mongo/error/invalid_replacement_document'
|
192
193
|
require 'mongo/error/invalid_server_auth_response'
|
194
|
+
# Subclass of InvalidServerAuthResponse
|
195
|
+
require 'mongo/error/invalid_server_auth_host'
|
193
196
|
require 'mongo/error/invalid_server_preference'
|
194
197
|
require 'mongo/error/invalid_session'
|
195
198
|
require 'mongo/error/invalid_signature'
|
@@ -210,8 +213,10 @@ require 'mongo/error/need_primary_server'
|
|
210
213
|
require 'mongo/error/no_server_available'
|
211
214
|
require 'mongo/error/no_srv_records'
|
212
215
|
require 'mongo/error/session_ended'
|
216
|
+
require 'mongo/error/sessions_not_supported'
|
213
217
|
require 'mongo/error/pool_closed_error'
|
214
218
|
require 'mongo/error/raise_original_error'
|
219
|
+
require 'mongo/error/server_certificate_revoked'
|
215
220
|
require 'mongo/error/socket_error'
|
216
221
|
require 'mongo/error/socket_timeout_error'
|
217
222
|
require 'mongo/error/failed_string_prep_validation'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Copyright (C) 2020 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# Raised when an invalid read concern is provided.
|
19
|
+
class InvalidReadConcern < Error
|
20
|
+
# Instantiate the new exception.
|
21
|
+
def initialize(msg = nil)
|
22
|
+
super(msg || 'Invalid read concern option provided.' \
|
23
|
+
'The only valid key is :level, for which accepted values are' \
|
24
|
+
':local, :majority, and :snapshot')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright (C) 2020 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# Raised when the server returned an invalid Host value in AWS auth.
|
19
|
+
class InvalidServerAuthHost < InvalidServerAuthResponse
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -15,7 +15,8 @@
|
|
15
15
|
module Mongo
|
16
16
|
class Error
|
17
17
|
|
18
|
-
# This exception is raised when a session is attempted to be used and it
|
18
|
+
# This exception is raised when a session is attempted to be used and it
|
19
|
+
# is invalid.
|
19
20
|
#
|
20
21
|
# @since 2.5.0
|
21
22
|
class InvalidSession < Error
|
@@ -97,7 +97,8 @@ module Mongo
|
|
97
97
|
# @since 2.1.1
|
98
98
|
# @deprecated
|
99
99
|
def retryable?
|
100
|
-
write_retryable? ||
|
100
|
+
write_retryable? ||
|
101
|
+
code.nil? && RETRY_MESSAGES.any?{ |m| message.include?(m) }
|
101
102
|
end
|
102
103
|
|
103
104
|
# Whether the error is a retryable error according to the modern retryable
|
@@ -110,11 +111,11 @@ module Mongo
|
|
110
111
|
#
|
111
112
|
# @since 2.4.2
|
112
113
|
def write_retryable?
|
113
|
-
|
114
|
-
|
114
|
+
write_retryable_code? ||
|
115
|
+
code.nil? && WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) }
|
115
116
|
end
|
116
117
|
|
117
|
-
def write_retryable_code?
|
118
|
+
private def write_retryable_code?
|
118
119
|
if code
|
119
120
|
WRITE_RETRY_ERRORS.any? { |e| e[:code] == code }
|
120
121
|
else
|
@@ -122,7 +123,6 @@ module Mongo
|
|
122
123
|
false
|
123
124
|
end
|
124
125
|
end
|
125
|
-
private :write_retryable_code?
|
126
126
|
|
127
127
|
# Error codes and code names that should result in a failing getMore
|
128
128
|
# command on a change stream NOT being resumed.
|
@@ -166,6 +166,12 @@ module Mongo
|
|
166
166
|
# @since 2.6.0
|
167
167
|
def change_stream_resumable?
|
168
168
|
if @result && @result.is_a?(Mongo::Operation::GetMore::Result)
|
169
|
+
# CursorNotFound exceptions are always resumable because the server
|
170
|
+
# is not aware of the cursor id, and thus cannot determine if
|
171
|
+
# the cursor is a change stream and cannot add the
|
172
|
+
# ResumableChangeStreamError label.
|
173
|
+
return true if code == 43
|
174
|
+
|
169
175
|
# Connection description is not populated for unacknowledged writes.
|
170
176
|
if connection_description.max_wire_version >= 9
|
171
177
|
label?('ResumableChangeStreamError')
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright (C) 2020 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# Server certificate has been revoked (determined via OCSP).
|
19
|
+
class ServerCertificateRevoked < Error
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Copyright (C) 2020 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# This exception is raised when a session is attempted to be used and the
|
19
|
+
# deployment does not support sessions.
|
20
|
+
#
|
21
|
+
# @note The subclassing of InvalidSession only exists for backwards
|
22
|
+
# compatibility and will be removed in driver version 3.0.
|
23
|
+
class SessionsNotSupported < InvalidSession
|
24
|
+
|
25
|
+
# Create the new exception.
|
26
|
+
#
|
27
|
+
# @param [ String ] message The error message.
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
def initialize(message)
|
31
|
+
super(message)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|