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
@@ -17,39 +17,39 @@ module Mongo
|
|
17
17
|
|
18
18
|
# Raised if an unsupported option is specified for an operation.
|
19
19
|
class UnsupportedOption < Error
|
20
|
-
# @api private
|
21
|
-
#
|
22
20
|
# The error message provided when the user passes the hint option to
|
23
21
|
# a write operation against a server that does not support the hint
|
24
22
|
# option and does not provide option validation.
|
23
|
+
#
|
24
|
+
# @api private
|
25
25
|
HINT_MESSAGE = "The MongoDB server handling this request does not support " \
|
26
26
|
"the hint option on this command. The hint option is supported on update " \
|
27
27
|
"commands on MongoDB server versions 4.2 and later and on findAndModify " \
|
28
28
|
"and delete commands on MongoDB server versions 4.4 and later"
|
29
29
|
|
30
|
-
# @api private
|
31
|
-
#
|
32
30
|
# The error message provided when the user passes the hint option to
|
33
31
|
# an unacknowledged write operation.
|
32
|
+
#
|
33
|
+
# @api private
|
34
34
|
UNACKNOWLEDGED_HINT_MESSAGE = "The hint option cannot be specified on " \
|
35
35
|
"an unacknowledged write operation. Remove the hint option or perform " \
|
36
36
|
"this operation with a write concern of at least { w: 1 }"
|
37
37
|
|
38
|
-
# @api private
|
39
|
-
#
|
40
38
|
# The error message provided when the user passes the allow_disk_use
|
41
39
|
# option to a find operation against a server that does not support the
|
42
40
|
# allow_disk_use operation and does not provide option validation.
|
41
|
+
#
|
42
|
+
# @api private
|
43
43
|
ALLOW_DISK_USE_MESSAGE = "The MongoDB server handling this request does " \
|
44
44
|
"not support the allow_disk_use option on this command. The " \
|
45
45
|
"allow_disk_use option is supported on find commands on MongoDB " \
|
46
46
|
"server versions 4.4 and later"
|
47
47
|
|
48
|
-
# @api private
|
49
|
-
#
|
50
48
|
# The error message provided when the user passes the commit_quorum option
|
51
49
|
# to a createIndexes operation against a server that does not support
|
52
50
|
# that option.
|
51
|
+
#
|
52
|
+
# @api private
|
53
53
|
COMMIT_QUORUM_MESSAGE = "The MongoDB server handling this request does " \
|
54
54
|
"not support the commit_quorum option on this command. The commit_quorum " \
|
55
55
|
"option is supported on createIndexes commands on MongoDB server versions " \
|
@@ -57,14 +57,14 @@ module Mongo
|
|
57
57
|
|
58
58
|
# Raise an error about an unsupported hint option.
|
59
59
|
#
|
60
|
-
# @param [ Hash ] options
|
61
|
-
#
|
62
60
|
# @option options [ Boolean ] unacknowledged_write Whether this error
|
63
61
|
# pertains to a hint option passed to an unacknowledged write. Defaults
|
64
62
|
# to false.
|
65
63
|
#
|
66
64
|
# @return [ Mongo::Error::UnsupportedOption ] An error with a default
|
67
65
|
# error message.
|
66
|
+
#
|
67
|
+
# @api private
|
68
68
|
def self.hint_error(**options)
|
69
69
|
unacknowledged_write = options[:unacknowledged_write] || false
|
70
70
|
|
@@ -79,10 +79,10 @@ module Mongo
|
|
79
79
|
|
80
80
|
# Raise an error about an unsupported allow_disk_use option.
|
81
81
|
#
|
82
|
-
# @param [ Hash ] options
|
83
|
-
#
|
84
82
|
# @return [ Mongo::Error::UnsupportedOption ] An error with a default
|
85
83
|
# error message.
|
84
|
+
#
|
85
|
+
# @api private
|
86
86
|
def self.allow_disk_use_error
|
87
87
|
new(ALLOW_DISK_USE_MESSAGE)
|
88
88
|
end
|
@@ -91,6 +91,8 @@ module Mongo
|
|
91
91
|
#
|
92
92
|
# @return [ Mongo::Error::UnsupportedOption ] An error with a default
|
93
93
|
# error message.
|
94
|
+
#
|
95
|
+
# @api private
|
94
96
|
def self.commit_quorum_error
|
95
97
|
new(COMMIT_QUORUM_MESSAGE)
|
96
98
|
end
|
data/lib/mongo/event/base.rb
CHANGED
data/lib/mongo/grid/file.rb
CHANGED
@@ -104,6 +104,11 @@ module Mongo
|
|
104
104
|
# chunk objects and assemble the data. If we have an IO object, then
|
105
105
|
# it's the original file data and we must split it into chunks and set
|
106
106
|
# the original data itself.
|
107
|
+
#
|
108
|
+
# @param [ IO, String, Array<BSON::Document> ] value The file object,
|
109
|
+
# file contents or chunk documents.
|
110
|
+
#
|
111
|
+
# @return [ Array<Grid::File::Chunk> ] Array of chunks.
|
107
112
|
def initialize_chunks!(value)
|
108
113
|
if value.is_a?(Array)
|
109
114
|
@chunks = value.map{ |doc| Chunk.new(doc) }
|
@@ -151,6 +151,7 @@ module Mongo
|
|
151
151
|
# @return [ String ] The assembled data.
|
152
152
|
#
|
153
153
|
# @since 2.0.0
|
154
|
+
# @api private
|
154
155
|
def assemble(chunks)
|
155
156
|
chunks.reduce(''){ |data, chunk| data << chunk.data.data }
|
156
157
|
end
|
@@ -167,6 +168,7 @@ module Mongo
|
|
167
168
|
# @return [ Array<Chunk> ] The chunks of the data.
|
168
169
|
#
|
169
170
|
# @since 2.0.0
|
171
|
+
# @api private
|
170
172
|
def split(io, file_info, offset = 0)
|
171
173
|
io = StringIO.new(io) if io.is_a?(String)
|
172
174
|
parts = Enumerator.new { |y| y << io.read(file_info.chunk_size) until io.eof? }
|
data/lib/mongo/grid/fs_bucket.rb
CHANGED
@@ -179,7 +179,7 @@ module Mongo
|
|
179
179
|
#
|
180
180
|
# @since 2.0.0
|
181
181
|
def prefix
|
182
|
-
@options[:fs_name] || @options[:bucket_name]|| DEFAULT_ROOT
|
182
|
+
@options[:fs_name] || @options[:bucket_name] || DEFAULT_ROOT
|
183
183
|
end
|
184
184
|
|
185
185
|
# Remove a single file from the GridFS.
|
@@ -232,7 +232,8 @@ module Mongo
|
|
232
232
|
#
|
233
233
|
# @since 2.1.0
|
234
234
|
def open_download_stream(id, options = nil)
|
235
|
-
|
235
|
+
options = Utils.shallow_symbolize_keys(options || {})
|
236
|
+
read_stream(id, **options).tap do |stream|
|
236
237
|
if block_given?
|
237
238
|
begin
|
238
239
|
yield stream
|
@@ -350,15 +351,15 @@ module Mongo
|
|
350
351
|
download_to_stream(open_download_stream_by_name(filename, opts).file_id, io)
|
351
352
|
end
|
352
353
|
|
353
|
-
# Opens an upload stream to GridFS to which the contents of a
|
354
|
+
# Opens an upload stream to GridFS to which the contents of a file or
|
355
|
+
# blob can be written.
|
354
356
|
#
|
355
|
-
# @
|
356
|
-
# fs.open_upload_stream('a-file.txt')
|
357
|
-
#
|
358
|
-
# @param [ String ] filename The filename of the file to upload.
|
357
|
+
# @param [ String ] filename The name of the file in GridFS.
|
359
358
|
# @param [ Hash ] opts The options for the write stream.
|
360
359
|
#
|
361
|
-
# @option opts [ Object ] :file_id An optional unique file id.
|
360
|
+
# @option opts [ Object ] :file_id An optional unique file id.
|
361
|
+
# A BSON::ObjectId is automatically generated if a file id is not
|
362
|
+
# provided.
|
362
363
|
# @option opts [ Integer ] :chunk_size Override the default chunk size.
|
363
364
|
# @option opts [ Hash ] :metadata User data for the 'metadata' field of the files
|
364
365
|
# collection document.
|
@@ -377,7 +378,8 @@ module Mongo
|
|
377
378
|
#
|
378
379
|
# @since 2.1.0
|
379
380
|
def open_upload_stream(filename, opts = {})
|
380
|
-
|
381
|
+
opts = Utils.shallow_symbolize_keys(opts)
|
382
|
+
write_stream(filename, **opts).tap do |stream|
|
381
383
|
if block_given?
|
382
384
|
begin
|
383
385
|
yield stream
|
@@ -467,12 +469,12 @@ module Mongo
|
|
467
469
|
#
|
468
470
|
# @option opts [ BSON::Document ] :file_info_doc For internal
|
469
471
|
# driver use only. A BSON document to use as file information.
|
470
|
-
def read_stream(id, opts
|
471
|
-
Stream.get(self, Stream::READ_MODE, { file_id: id }.update(options).update(opts
|
472
|
+
def read_stream(id, **opts)
|
473
|
+
Stream.get(self, Stream::READ_MODE, { file_id: id }.update(options).update(opts))
|
472
474
|
end
|
473
475
|
|
474
|
-
def write_stream(filename, opts)
|
475
|
-
Stream.get(self, Stream::WRITE_MODE, { filename: filename }.
|
476
|
+
def write_stream(filename, **opts)
|
477
|
+
Stream.get(self, Stream::WRITE_MODE, { filename: filename }.update(options).update(opts))
|
476
478
|
end
|
477
479
|
|
478
480
|
def chunks_name
|
@@ -82,12 +82,12 @@ module Mongo
|
|
82
82
|
@open = true
|
83
83
|
end
|
84
84
|
|
85
|
-
# Write to the GridFS bucket from the source stream.
|
85
|
+
# Write to the GridFS bucket from the source stream or a string.
|
86
86
|
#
|
87
87
|
# @example Write to GridFS.
|
88
88
|
# stream.write(io)
|
89
89
|
#
|
90
|
-
# @param [ IO ] io The
|
90
|
+
# @param [ String | IO ] io The string or IO object to upload from.
|
91
91
|
#
|
92
92
|
# @return [ Stream::Write ] self The write stream itself.
|
93
93
|
#
|
@@ -95,7 +95,13 @@ module Mongo
|
|
95
95
|
def write(io)
|
96
96
|
ensure_open!
|
97
97
|
@indexes ||= ensure_indexes!
|
98
|
-
@length += io.
|
98
|
+
@length += if io.respond_to?(:bytesize)
|
99
|
+
# String objects
|
100
|
+
io.bytesize
|
101
|
+
else
|
102
|
+
# IO objects
|
103
|
+
io.size
|
104
|
+
end
|
99
105
|
chunks = File::Chunk.split(io, file_info, @n)
|
100
106
|
@n += chunks.size
|
101
107
|
chunks_collection.insert_many(chunks) unless chunks.empty?
|
data/lib/mongo/index/view.rb
CHANGED
@@ -120,6 +120,9 @@ module Mongo
|
|
120
120
|
# a geo index.
|
121
121
|
# @option options [ Hash ] :partial_filter_expression Specify a filter for a partial
|
122
122
|
# index.
|
123
|
+
# @option options [ Boolean ] :hidden When :hidden is true, this index will
|
124
|
+
# exist on the collection but not be used by the query planner when
|
125
|
+
# executing operations.
|
123
126
|
# @option options [ String | Integer ] :commit_quorum Specify how many
|
124
127
|
# data-bearing members of a replica set, including the primary, must
|
125
128
|
# complete the index builds successfully before the primary marks
|
data/lib/mongo/lint.rb
CHANGED
@@ -4,12 +4,13 @@ module Mongo
|
|
4
4
|
module Lint
|
5
5
|
|
6
6
|
# Raises LintError if +obj+ is not of type +cls+.
|
7
|
-
|
7
|
+
def assert_type(obj, cls)
|
8
8
|
return unless enabled?
|
9
9
|
unless obj.is_a?(cls)
|
10
10
|
raise Error::LintError, "Expected #{obj} to be a #{cls}"
|
11
11
|
end
|
12
12
|
end
|
13
|
+
module_function :assert_type
|
13
14
|
|
14
15
|
def validate_underscore_read_preference(read_pref)
|
15
16
|
return unless enabled?
|
data/lib/mongo/logger.rb
CHANGED
@@ -21,7 +21,7 @@ module Mongo
|
|
21
21
|
|
22
22
|
class << self
|
23
23
|
|
24
|
-
# Get the wrapped logger. If none was set will return a default
|
24
|
+
# Get the wrapped logger. If none was set will return a default info
|
25
25
|
# level logger.
|
26
26
|
#
|
27
27
|
# @example Get the wrapped logger.
|
@@ -75,8 +75,8 @@ module Mongo
|
|
75
75
|
private
|
76
76
|
|
77
77
|
def default_logger
|
78
|
-
logger = ::Logger.new(
|
79
|
-
logger.level = ::Logger::
|
78
|
+
logger = ::Logger.new(STDOUT)
|
79
|
+
logger.level = ::Logger::INFO
|
80
80
|
logger
|
81
81
|
end
|
82
82
|
end
|
data/lib/mongo/monitoring.rb
CHANGED
@@ -304,6 +304,44 @@ module Mongo
|
|
304
304
|
subscribers_for(topic).each{ |subscriber| subscriber.failed(event) }
|
305
305
|
end
|
306
306
|
|
307
|
+
# @api private
|
308
|
+
def publish_heartbeat(server, awaited: false)
|
309
|
+
if monitoring?
|
310
|
+
event = Event::ServerHeartbeatStarted.new(
|
311
|
+
server.address, awaited: awaited)
|
312
|
+
started(SERVER_HEARTBEAT, event)
|
313
|
+
end
|
314
|
+
|
315
|
+
# The duration we publish in heartbeat succeeded/failed events is
|
316
|
+
# the time spent on the entire heartbeat. This could include time
|
317
|
+
# to connect the socket (including TLS handshake), not just time
|
318
|
+
# spent on ismaster call itself.
|
319
|
+
# The spec at https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring-monitoring.rst
|
320
|
+
# requires that the duration exposed here start from "sending the
|
321
|
+
# message" (ismaster). This requirement does not make sense if,
|
322
|
+
# for example, we were never able to connect to the server at all
|
323
|
+
# and thus ismaster was never sent.
|
324
|
+
start_time = Time.now
|
325
|
+
|
326
|
+
begin
|
327
|
+
result = yield
|
328
|
+
rescue => exc
|
329
|
+
if monitoring?
|
330
|
+
event = Event::ServerHeartbeatFailed.new(
|
331
|
+
server.address, Time.now-start_time, exc, awaited: awaited)
|
332
|
+
failed(SERVER_HEARTBEAT, event)
|
333
|
+
end
|
334
|
+
raise
|
335
|
+
else
|
336
|
+
if monitoring?
|
337
|
+
event = Event::ServerHeartbeatSucceeded.new(
|
338
|
+
server.address, Time.now-start_time, awaited: awaited)
|
339
|
+
succeeded(SERVER_HEARTBEAT, event)
|
340
|
+
end
|
341
|
+
result
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
307
345
|
private
|
308
346
|
|
309
347
|
def initialize_copy(original)
|
@@ -57,6 +57,7 @@ module Mongo
|
|
57
57
|
_prefix = prefix(event,
|
58
58
|
connection_generation: event.connection_generation,
|
59
59
|
connection_id: event.connection_id,
|
60
|
+
server_connection_id: event.server_connection_id,
|
60
61
|
)
|
61
62
|
log_debug("#{_prefix} | STARTED | #{format_command(event.command)}")
|
62
63
|
end
|
@@ -100,12 +101,19 @@ module Mongo
|
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
103
|
-
def prefix(event, connection_generation: nil, connection_id: nil
|
104
|
+
def prefix(event, connection_generation: nil, connection_id: nil,
|
105
|
+
server_connection_id: nil
|
106
|
+
)
|
104
107
|
extra = [connection_generation, connection_id].compact.join(':')
|
105
108
|
if extra == ''
|
106
109
|
extra = nil
|
110
|
+
else
|
111
|
+
extra = "conn:#{extra}"
|
107
112
|
end
|
108
|
-
|
113
|
+
if server_connection_id
|
114
|
+
extra += " sconn:#{server_connection_id}"
|
115
|
+
end
|
116
|
+
"#{event.address.to_s} req:#{event.request_id}#{extra && " #{extra}"} | " +
|
109
117
|
"#{event.database_name}.#{event.command_name}"
|
110
118
|
end
|
111
119
|
|
@@ -75,6 +75,17 @@ module Mongo
|
|
75
75
|
@duration = duration
|
76
76
|
end
|
77
77
|
|
78
|
+
# Returns a concise yet useful summary of the event.
|
79
|
+
#
|
80
|
+
# @return [ String ] String summary of the event.
|
81
|
+
#
|
82
|
+
# @note This method is experimental and subject to change.
|
83
|
+
#
|
84
|
+
# @api experimental
|
85
|
+
def summary
|
86
|
+
"#<#{short_class_name} address=#{address} #{database_name}.#{command_name}>"
|
87
|
+
end
|
88
|
+
|
78
89
|
# Create the event from a wire protocol message payload.
|
79
90
|
#
|
80
91
|
# @example Create the event.
|
@@ -54,6 +54,9 @@ module Mongo
|
|
54
54
|
# @api private
|
55
55
|
attr_reader :connection_id
|
56
56
|
|
57
|
+
# @api private
|
58
|
+
attr_reader :server_connection_id
|
59
|
+
|
57
60
|
# Create the new event.
|
58
61
|
#
|
59
62
|
# @example Create the event.
|
@@ -69,7 +72,7 @@ module Mongo
|
|
69
72
|
# @api private
|
70
73
|
def initialize(command_name, database_name, address, request_id,
|
71
74
|
operation_id, command, socket_object_id: nil, connection_id: nil,
|
72
|
-
connection_generation: nil
|
75
|
+
connection_generation: nil, server_connection_id: nil
|
73
76
|
)
|
74
77
|
@command_name = command_name.to_s
|
75
78
|
@database_name = database_name
|
@@ -80,6 +83,36 @@ module Mongo
|
|
80
83
|
@socket_object_id = socket_object_id
|
81
84
|
@connection_id = connection_id
|
82
85
|
@connection_generation = connection_generation
|
86
|
+
@server_connection_id = server_connection_id
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns a concise yet useful summary of the event.
|
90
|
+
#
|
91
|
+
# @return [ String ] String summary of the event.
|
92
|
+
#
|
93
|
+
# @note This method is experimental and subject to change.
|
94
|
+
#
|
95
|
+
# @api experimental
|
96
|
+
def summary
|
97
|
+
"#<#{short_class_name} address=#{address} #{database_name}.#{command_name} command=#{command_summary}>"
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns the command, formatted as a string, with automatically added
|
101
|
+
# keys elided ($clusterTime, lsid, signature).
|
102
|
+
#
|
103
|
+
# @return [ String ] The command summary.
|
104
|
+
private def command_summary
|
105
|
+
command = self.command
|
106
|
+
remove_keys = %w($clusterTime lsid signature)
|
107
|
+
if remove_keys.any? { |k| command.key?(k) }
|
108
|
+
command = Hash[command.reject { |k, v| remove_keys.include?(k) }]
|
109
|
+
suffix = ' ...'
|
110
|
+
else
|
111
|
+
suffix = ''
|
112
|
+
end
|
113
|
+
command.map do |k, v|
|
114
|
+
"#{k}=#{v.inspect}"
|
115
|
+
end.join(' ') + suffix
|
83
116
|
end
|
84
117
|
|
85
118
|
# Create the event from a wire protocol message payload.
|
@@ -96,7 +129,8 @@ module Mongo
|
|
96
129
|
# @since 2.1.0
|
97
130
|
# @api private
|
98
131
|
def self.generate(address, operation_id, payload,
|
99
|
-
socket_object_id: nil, connection_id: nil, connection_generation: nil
|
132
|
+
socket_object_id: nil, connection_id: nil, connection_generation: nil,
|
133
|
+
server_connection_id: nil
|
100
134
|
)
|
101
135
|
new(
|
102
136
|
payload[:command_name],
|
@@ -113,6 +147,7 @@ module Mongo
|
|
113
147
|
socket_object_id: socket_object_id,
|
114
148
|
connection_id: connection_id,
|
115
149
|
connection_generation: connection_generation,
|
150
|
+
server_connection_id: server_connection_id,
|
116
151
|
)
|
117
152
|
end
|
118
153
|
|
@@ -67,6 +67,17 @@ module Mongo
|
|
67
67
|
@duration = duration
|
68
68
|
end
|
69
69
|
|
70
|
+
# Returns a concise yet useful summary of the event.
|
71
|
+
#
|
72
|
+
# @return [ String ] String summary of the event.
|
73
|
+
#
|
74
|
+
# @note This method is experimental and subject to change.
|
75
|
+
#
|
76
|
+
# @api experimental
|
77
|
+
def summary
|
78
|
+
"#<#{short_class_name} address=#{address} #{database_name}.#{command_name}>"
|
79
|
+
end
|
80
|
+
|
70
81
|
# Create the event from a wire protocol message payload.
|
71
82
|
#
|
72
83
|
# @example Create the event.
|