mongo 2.11.4 → 2.12.3
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 +0 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +2 -1
- data/lib/mongo.rb +3 -0
- data/lib/mongo/address.rb +44 -19
- data/lib/mongo/auth.rb +1 -0
- data/lib/mongo/auth/credential_cache.rb +51 -0
- data/lib/mongo/auth/scram/conversation.rb +20 -16
- data/lib/mongo/auth/user.rb +0 -8
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/background_thread.rb +1 -1
- data/lib/mongo/bulk_write.rb +5 -5
- data/lib/mongo/client.rb +143 -14
- data/lib/mongo/client_encryption.rb +103 -0
- data/lib/mongo/cluster.rb +8 -4
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
- data/lib/mongo/cluster/sdam_flow.rb +54 -58
- data/lib/mongo/collection.rb +3 -3
- data/lib/mongo/collection/view.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +12 -3
- data/lib/mongo/collection/view/iterable.rb +14 -5
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +9 -7
- data/lib/mongo/collection/view/writable.rb +7 -7
- data/lib/mongo/crypt.rb +33 -0
- data/lib/mongo/crypt/auto_decryption_context.rb +40 -0
- data/lib/mongo/crypt/auto_encrypter.rb +179 -0
- data/lib/mongo/crypt/auto_encryption_context.rb +44 -0
- data/lib/mongo/crypt/binary.rb +155 -0
- data/lib/mongo/crypt/binding.rb +1229 -0
- data/lib/mongo/crypt/context.rb +135 -0
- data/lib/mongo/crypt/data_key_context.rb +162 -0
- data/lib/mongo/crypt/encryption_io.rb +289 -0
- data/lib/mongo/crypt/explicit_decryption_context.rb +40 -0
- data/lib/mongo/crypt/explicit_encrypter.rb +117 -0
- data/lib/mongo/crypt/explicit_encryption_context.rb +89 -0
- data/lib/mongo/crypt/handle.rb +315 -0
- data/lib/mongo/crypt/hooks.rb +90 -0
- data/lib/mongo/crypt/kms_context.rb +67 -0
- data/lib/mongo/crypt/status.rb +131 -0
- data/lib/mongo/cursor.rb +64 -32
- data/lib/mongo/database.rb +23 -6
- data/lib/mongo/database/view.rb +13 -4
- data/lib/mongo/dbref.rb +9 -2
- data/lib/mongo/error.rb +5 -1
- data/lib/mongo/error/bulk_write_error.rb +16 -14
- data/lib/mongo/error/crypt_error.rb +31 -0
- data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
- data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
- data/lib/mongo/error/kms_error.rb +22 -0
- data/lib/mongo/error/max_bson_size.rb +14 -3
- data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
- data/lib/mongo/error/no_server_available.rb +8 -3
- data/lib/mongo/error/notable.rb +0 -15
- data/lib/mongo/error/operation_failure.rb +1 -0
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/grid/file.rb +5 -0
- data/lib/mongo/grid/file/chunk.rb +2 -0
- data/lib/mongo/grid/file/info.rb +3 -2
- 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 -3
- data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +6 -1
- data/lib/mongo/operation/collections_info.rb +6 -3
- data/lib/mongo/operation/delete/op_msg.rb +1 -1
- data/lib/mongo/operation/find/op_msg.rb +4 -1
- data/lib/mongo/operation/get_more/op_msg.rb +4 -1
- data/lib/mongo/operation/insert/command.rb +3 -2
- data/lib/mongo/operation/insert/legacy.rb +3 -2
- data/lib/mongo/operation/insert/op_msg.rb +3 -3
- data/lib/mongo/operation/result.rb +36 -27
- data/lib/mongo/operation/shared/executable.rb +11 -9
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_command.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +2 -2
- data/lib/mongo/operation/shared/read_preference_supported.rb +68 -19
- data/lib/mongo/operation/shared/response_handling.rb +1 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +44 -3
- data/lib/mongo/operation/shared/write.rb +17 -10
- data/lib/mongo/operation/update/op_msg.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +2 -1
- data/lib/mongo/protocol/compressed.rb +6 -5
- data/lib/mongo/protocol/insert.rb +3 -1
- data/lib/mongo/protocol/message.rb +94 -15
- data/lib/mongo/protocol/msg.rb +207 -37
- data/lib/mongo/protocol/query.rb +7 -9
- data/lib/mongo/protocol/serializers.rb +43 -15
- data/lib/mongo/retryable.rb +1 -1
- data/lib/mongo/server.rb +10 -4
- data/lib/mongo/server/connection.rb +20 -9
- data/lib/mongo/server/connection_base.rb +118 -18
- data/lib/mongo/server/connection_common.rb +61 -0
- data/lib/mongo/server/connection_pool.rb +37 -1
- data/lib/mongo/server/connection_pool/populator.rb +1 -1
- data/lib/mongo/server/description.rb +9 -11
- data/lib/mongo/server/monitor.rb +2 -0
- data/lib/mongo/server/monitor/connection.rb +3 -18
- data/lib/mongo/server/pending_connection.rb +2 -1
- data/lib/mongo/session.rb +3 -3
- data/lib/mongo/session/session_pool.rb +8 -3
- data/lib/mongo/socket.rb +29 -16
- data/lib/mongo/socket/ssl.rb +23 -8
- data/lib/mongo/socket/tcp.rb +12 -3
- data/lib/mongo/srv/monitor.rb +73 -42
- data/lib/mongo/srv/result.rb +0 -1
- data/lib/mongo/timeout.rb +49 -0
- data/lib/mongo/uri.rb +30 -1
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -3
- data/spec/README.md +228 -7
- data/spec/integration/auth_spec.rb +53 -0
- data/spec/integration/bulk_write_spec.rb +19 -0
- data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
- data/spec/integration/client_construction_spec.rb +100 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +353 -0
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +303 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +72 -0
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +79 -0
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +221 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +601 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +187 -0
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +78 -0
- data/spec/integration/client_side_encryption/client_close_spec.rb +63 -0
- data/spec/integration/client_side_encryption/corpus_spec.rb +233 -0
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
- data/spec/integration/client_side_encryption/data_key_spec.rb +165 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +141 -0
- data/spec/integration/client_side_encryption/views_spec.rb +44 -0
- data/spec/integration/client_update_spec.rb +154 -0
- data/spec/integration/command_monitoring_spec.rb +3 -1
- data/spec/integration/command_spec.rb +44 -10
- data/spec/integration/connection_spec.rb +57 -0
- data/spec/integration/crud_spec.rb +89 -0
- data/spec/integration/grid_fs_bucket_spec.rb +48 -0
- data/spec/integration/read_preference_spec.rb +26 -0
- data/spec/integration/reconnect_spec.rb +7 -6
- data/spec/integration/size_limit_spec.rb +111 -0
- data/spec/integration/srv_monitoring_spec.rb +16 -8
- data/spec/integration/zlib_compression_spec.rb +25 -0
- data/spec/kerberos/kerberos_spec.rb +87 -0
- data/spec/lite_spec_helper.rb +34 -29
- data/spec/mongo/auth/cr_spec.rb +8 -0
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram/conversation_spec.rb +5 -6
- data/spec/mongo/auth/scram/negotiation_spec.rb +74 -75
- data/spec/mongo/auth/scram_spec.rb +45 -35
- data/spec/mongo/auth/user/view_spec.rb +3 -6
- data/spec/mongo/auth/x509_spec.rb +5 -1
- data/spec/mongo/bulk_write/result_spec.rb +11 -7
- data/spec/mongo/client_construction_spec.rb +206 -2
- data/spec/mongo/client_encryption_spec.rb +405 -0
- data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
- data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
- data/spec/mongo/collection/view/aggregation_spec.rb +0 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +7 -7
- data/spec/mongo/collection/view/map_reduce_spec.rb +3 -3
- data/spec/mongo/collection/view_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +28 -9
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
- data/spec/mongo/crypt/auto_encrypter_spec.rb +187 -0
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
- data/spec/mongo/crypt/binary_spec.rb +115 -0
- data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
- data/spec/mongo/crypt/binding/context_spec.rb +257 -0
- data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
- data/spec/mongo/crypt/binding/status_spec.rb +99 -0
- data/spec/mongo/crypt/binding/version_spec.rb +22 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
- data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
- data/spec/mongo/crypt/handle_spec.rb +232 -0
- data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
- data/spec/mongo/crypt/status_spec.rb +152 -0
- data/spec/mongo/cursor_spec.rb +24 -4
- data/spec/mongo/database_spec.rb +20 -0
- data/spec/mongo/error/bulk_write_error_spec.rb +49 -0
- data/spec/mongo/error/crypt_error_spec.rb +26 -0
- data/spec/mongo/error/max_bson_size_spec.rb +35 -0
- data/spec/mongo/error/no_server_available_spec.rb +11 -1
- data/spec/mongo/error/notable_spec.rb +59 -0
- data/spec/mongo/error/operation_failure_spec.rb +6 -6
- data/spec/mongo/operation/aggregate_spec.rb +1 -1
- data/spec/mongo/operation/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/command_spec.rb +3 -3
- data/spec/mongo/operation/create_index_spec.rb +3 -3
- data/spec/mongo/operation/create_user_spec.rb +3 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +6 -6
- data/spec/mongo/operation/delete/op_msg_spec.rb +1 -6
- data/spec/mongo/operation/delete_spec.rb +7 -7
- data/spec/mongo/operation/drop_index_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +2 -1
- data/spec/mongo/operation/get_more_spec.rb +1 -1
- data/spec/mongo/operation/indexes_spec.rb +1 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +7 -7
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -6
- data/spec/mongo/operation/insert_spec.rb +12 -12
- data/spec/mongo/operation/map_reduce_spec.rb +2 -2
- data/spec/mongo/operation/read_preference_legacy_spec.rb +351 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +194 -0
- data/spec/mongo/operation/remove_user_spec.rb +3 -3
- data/spec/mongo/operation/update/bulk_spec.rb +6 -6
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -6
- data/spec/mongo/operation/update_spec.rb +7 -7
- data/spec/mongo/operation/update_user_spec.rb +1 -1
- data/spec/mongo/protocol/compressed_spec.rb +2 -3
- data/spec/mongo/protocol/delete_spec.rb +9 -8
- data/spec/mongo/protocol/get_more_spec.rb +9 -8
- data/spec/mongo/protocol/insert_spec.rb +9 -8
- data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
- data/spec/mongo/protocol/msg_spec.rb +57 -53
- data/spec/mongo/protocol/query_spec.rb +12 -12
- data/spec/mongo/protocol/registry_spec.rb +1 -1
- data/spec/mongo/protocol/reply_spec.rb +1 -1
- data/spec/mongo/protocol/update_spec.rb +10 -9
- data/spec/mongo/server/connection_pool_spec.rb +1 -1
- data/spec/mongo/server/connection_spec.rb +28 -7
- data/spec/mongo/socket_spec.rb +1 -1
- data/spec/mongo/srv/monitor_spec.rb +88 -69
- data/spec/mongo/timeout_spec.rb +85 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
- data/spec/mongo/uri_spec.rb +52 -5
- data/spec/mongo/write_concern_spec.rb +13 -1
- data/spec/{support → runners}/auth.rb +14 -1
- data/spec/{support → runners}/change_streams.rb +1 -1
- data/spec/{support → runners}/change_streams/operation.rb +0 -0
- data/spec/{support → runners}/cmap.rb +1 -1
- data/spec/{support → runners}/cmap/verifier.rb +0 -0
- data/spec/{support → runners}/command_monitoring.rb +0 -0
- data/spec/runners/connection_string.rb +358 -4
- data/spec/{support → runners}/crud.rb +9 -9
- data/spec/{support → runners}/crud/context.rb +0 -0
- data/spec/{support → runners}/crud/operation.rb +7 -3
- data/spec/{support → runners}/crud/outcome.rb +0 -0
- data/spec/{support → runners}/crud/requirement.rb +1 -1
- data/spec/{support → runners}/crud/spec.rb +12 -1
- data/spec/{support → runners}/crud/test.rb +0 -0
- data/spec/{support → runners}/crud/test_base.rb +0 -0
- data/spec/{support → runners}/crud/verifier.rb +10 -12
- data/spec/{support → runners}/gridfs.rb +0 -0
- data/spec/{support → runners}/sdam_monitoring.rb +0 -0
- data/spec/{support → runners}/server_discovery_and_monitoring.rb +0 -0
- data/spec/{support → runners}/server_selection.rb +0 -0
- data/spec/{support → runners}/server_selection_rtt.rb +0 -0
- data/spec/{support → runners}/transactions.rb +9 -11
- data/spec/{support → runners}/transactions/context.rb +0 -0
- data/spec/{support → runners}/transactions/operation.rb +0 -0
- data/spec/{support → runners}/transactions/spec.rb +0 -0
- data/spec/{support → runners}/transactions/test.rb +37 -5
- data/spec/spec_helper.rb +0 -5
- data/spec/spec_tests/auth_spec.rb +3 -3
- data/spec/spec_tests/client_side_encryption_spec.rb +8 -0
- data/spec/spec_tests/connection_string_spec.rb +1 -1
- data/spec/spec_tests/data/auth/connection-string.yml +13 -0
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
- data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
- data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +88 -0
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
- data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
- data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
- data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
- data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
- data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
- data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +171 -0
- data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
- data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +21 -0
- data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -4
- data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +1 -1
- data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
- data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +1 -2
- data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
- data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
- data/spec/spec_tests/data/sdam/rs/{secondary_wrong_set_name_with_primary_second.yml → ruby_secondary_wrong_set_name_with_primary_second.yml} +0 -0
- data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +27 -0
- data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
- data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
- data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
- data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
- data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
- data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
- data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
- data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
- data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
- data/spec/spec_tests/uri_options_spec.rb +6 -8
- data/spec/stress/connection_pool_timing_spec.rb +6 -3
- data/spec/support/certificates/README.md +4 -0
- data/spec/support/certificates/server-second-level-bundle.pem +77 -77
- data/spec/support/certificates/server-second-level.crt +52 -52
- data/spec/support/certificates/server-second-level.key +25 -25
- data/spec/support/certificates/server-second-level.pem +77 -77
- data/spec/support/client_registry.rb +19 -3
- data/spec/support/cluster_config.rb +9 -1
- data/spec/support/cluster_tools.rb +6 -1
- data/spec/support/common_shortcuts.rb +12 -0
- data/spec/support/constraints.rb +16 -0
- data/spec/support/crypt.rb +154 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
- data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
- data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
- data/spec/support/crypt/corpus/corpus.json +3657 -0
- data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
- data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
- data/spec/support/crypt/data_keys/key_document_local.json +31 -0
- data/spec/support/crypt/external/external-key.json +31 -0
- data/spec/support/crypt/external/external-schema.json +19 -0
- data/spec/support/crypt/limits/limits-doc.json +102 -0
- data/spec/support/crypt/limits/limits-key.json +31 -0
- data/spec/support/crypt/limits/limits-schema.json +1405 -0
- data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
- data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/lite_constraints.rb +19 -1
- data/spec/support/matchers.rb +19 -0
- data/spec/support/shared/protocol.rb +2 -0
- data/spec/support/spec_config.rb +53 -13
- data/spec/support/utils.rb +140 -10
- metadata +894 -687
- metadata.gz.sig +0 -0
- data/lib/mongo/cluster/srv_monitor.rb +0 -127
- data/lib/mongo/srv/warning_result.rb +0 -35
- data/spec/enterprise_auth/kerberos_spec.rb +0 -58
- data/spec/mongo/cluster/srv_monitor_spec.rb +0 -214
- data/spec/mongo/operation/read_preference_spec.rb +0 -245
- data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
- data/spec/support/connection_string.rb +0 -354
data/lib/mongo/database.rb
CHANGED
@@ -126,12 +126,18 @@ module Mongo
|
|
126
126
|
# information hash per collection, depends on the MongoDB server
|
127
127
|
# version that fulfills the request.
|
128
128
|
#
|
129
|
+
# @param [ Hash ] options
|
130
|
+
#
|
131
|
+
# @option options [ Hash ] :filter A filter on the collections returned.
|
132
|
+
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
133
|
+
# for more information and usage.
|
134
|
+
#
|
129
135
|
# @return [ Array<Hash> ] Array of information hashes, one for each
|
130
136
|
# collection in the database.
|
131
137
|
#
|
132
138
|
# @since 2.0.5
|
133
|
-
def list_collections
|
134
|
-
View.new(self).list_collections
|
139
|
+
def list_collections(**options)
|
140
|
+
View.new(self).list_collections(**options)
|
135
141
|
end
|
136
142
|
|
137
143
|
# Get all the non-system collections that belong to this database.
|
@@ -156,9 +162,18 @@ module Mongo
|
|
156
162
|
#
|
157
163
|
# @option opts :read [ Hash ] The read preference for this command.
|
158
164
|
# @option opts :session [ Session ] The session to use for this command.
|
165
|
+
# @option opts :execution_options [ Hash ] Options to pass to the code that
|
166
|
+
# executes this command. This is an internal option and is subject to
|
167
|
+
# change.
|
168
|
+
# - :deserialize_as_bson [ Boolean ] Whether to deserialize the response
|
169
|
+
# to this command using BSON types intead of native Ruby types wherever
|
170
|
+
# possible.
|
159
171
|
#
|
160
172
|
# @return [ Mongo::Operation::Result ] The result of the command execution.
|
161
173
|
def command(operation, opts = {})
|
174
|
+
opts = opts.dup
|
175
|
+
execution_opts = opts.delete(:execution_options) || {}
|
176
|
+
|
162
177
|
txn_read_pref = if opts[:session] && opts[:session].in_transaction?
|
163
178
|
opts[:session].txn_read_preference
|
164
179
|
else
|
@@ -170,12 +185,14 @@ module Mongo
|
|
170
185
|
|
171
186
|
client.send(:with_session, opts) do |session|
|
172
187
|
server = selector.select_server(cluster, nil, session)
|
173
|
-
Operation::Command.new(
|
188
|
+
op = Operation::Command.new(
|
174
189
|
:selector => operation.dup,
|
175
190
|
:db_name => name,
|
176
191
|
:read => selector,
|
177
192
|
:session => session
|
178
|
-
|
193
|
+
)
|
194
|
+
|
195
|
+
op.execute(server, client: client, options: execution_opts)
|
179
196
|
end
|
180
197
|
end
|
181
198
|
|
@@ -206,7 +223,7 @@ module Mongo
|
|
206
223
|
:db_name => name,
|
207
224
|
:read => preference,
|
208
225
|
:session => session
|
209
|
-
}).execute(server)
|
226
|
+
}).execute(server, client: client)
|
210
227
|
end
|
211
228
|
end
|
212
229
|
end
|
@@ -231,7 +248,7 @@ module Mongo
|
|
231
248
|
db_name: name,
|
232
249
|
write_concern: write_concern,
|
233
250
|
session: session
|
234
|
-
}).execute(next_primary(nil, session))
|
251
|
+
}).execute(next_primary(nil, session), client: client)
|
235
252
|
end
|
236
253
|
end
|
237
254
|
|
data/lib/mongo/database/view.rb
CHANGED
@@ -78,12 +78,18 @@ module Mongo
|
|
78
78
|
# @example Get info on each collection.
|
79
79
|
# database.list_collections
|
80
80
|
#
|
81
|
+
# @param [ Hash ] options
|
82
|
+
#
|
83
|
+
# @option options [ Hash ] :filter A filter on the collections returned.
|
84
|
+
# See https://docs.mongodb.com/manual/reference/command/listCollections/
|
85
|
+
# for more information and usage.
|
86
|
+
#
|
81
87
|
# @return [ Array<Hash> ] Info for each collection in the database.
|
82
88
|
#
|
83
89
|
# @since 2.0.5
|
84
|
-
def list_collections
|
90
|
+
def list_collections(**options)
|
85
91
|
session = client.send(:get_session)
|
86
|
-
collections_info(session, ServerSelector.primary)
|
92
|
+
collections_info(session, ServerSelector.primary, **options)
|
87
93
|
end
|
88
94
|
|
89
95
|
# Create the new database view.
|
@@ -157,7 +163,10 @@ module Mongo
|
|
157
163
|
cursor: batch_size ? { batchSize: batch_size } : {} },
|
158
164
|
db_name: @database.name,
|
159
165
|
session: session
|
160
|
-
}.tap
|
166
|
+
}.tap do |spec|
|
167
|
+
spec[:selector][:nameOnly] = true if options[:name_only]
|
168
|
+
spec[:selector][:filter] = options[:filter] if options[:filter]
|
169
|
+
end
|
161
170
|
end
|
162
171
|
|
163
172
|
def initial_query_op(session, options = {})
|
@@ -165,7 +174,7 @@ module Mongo
|
|
165
174
|
end
|
166
175
|
|
167
176
|
def send_initial_query(server, session, options = {})
|
168
|
-
initial_query_op(session, options).execute(server)
|
177
|
+
initial_query_op(session, options).execute(server, client: client)
|
169
178
|
end
|
170
179
|
end
|
171
180
|
end
|
data/lib/mongo/dbref.rb
CHANGED
@@ -100,8 +100,15 @@ module Mongo
|
|
100
100
|
# @see http://bsonspec.org/#/specification
|
101
101
|
#
|
102
102
|
# @since 2.0.0
|
103
|
-
def from_bson(buffer)
|
104
|
-
|
103
|
+
def from_bson(buffer, **options)
|
104
|
+
# bson-ruby 4.8.0 changes #from_bson API to take **options.
|
105
|
+
# However older bsons fail if invoked with a plain super here,
|
106
|
+
# even if options are empty.
|
107
|
+
decoded = if options.empty?
|
108
|
+
super(buffer)
|
109
|
+
else
|
110
|
+
super
|
111
|
+
end
|
105
112
|
if ref = decoded[COLLECTION]
|
106
113
|
decoded = DBRef.new(ref, decoded[ID], decoded[DATABASE])
|
107
114
|
end
|
data/lib/mongo/error.rb
CHANGED
@@ -152,6 +152,7 @@ require 'mongo/error/change_stream_resumable'
|
|
152
152
|
require 'mongo/error/bulk_write_error'
|
153
153
|
require 'mongo/error/closed_stream'
|
154
154
|
require 'mongo/error/connection_check_out_timeout'
|
155
|
+
require 'mongo/error/crypt_error'
|
155
156
|
require 'mongo/error/extra_file_chunk'
|
156
157
|
require 'mongo/error/file_not_found'
|
157
158
|
require 'mongo/error/operation_failure'
|
@@ -159,6 +160,7 @@ require 'mongo/error/invalid_address'
|
|
159
160
|
require 'mongo/error/invalid_bulk_operation'
|
160
161
|
require 'mongo/error/invalid_bulk_operation_type'
|
161
162
|
require 'mongo/error/invalid_collection_name'
|
163
|
+
require 'mongo/error/invalid_cursor_operation'
|
162
164
|
require 'mongo/error/invalid_database_name'
|
163
165
|
require 'mongo/error/invalid_document'
|
164
166
|
require 'mongo/error/invalid_file'
|
@@ -177,10 +179,12 @@ require 'mongo/error/invalid_update_document'
|
|
177
179
|
require 'mongo/error/invalid_uri'
|
178
180
|
require 'mongo/error/invalid_write_concern'
|
179
181
|
require 'mongo/error/insufficient_iteration_count'
|
182
|
+
require 'mongo/error/kms_error'
|
180
183
|
require 'mongo/error/lint_error'
|
181
184
|
require 'mongo/error/max_bson_size'
|
182
185
|
require 'mongo/error/max_message_size'
|
183
186
|
require 'mongo/error/mismatched_domain'
|
187
|
+
require 'mongo/error/mongocryptd_spawn_error'
|
184
188
|
require 'mongo/error/multi_index_drop'
|
185
189
|
require 'mongo/error/need_primary_server'
|
186
190
|
require 'mongo/error/no_server_available'
|
@@ -189,7 +193,7 @@ require 'mongo/error/session_ended'
|
|
189
193
|
require 'mongo/error/pool_closed_error'
|
190
194
|
require 'mongo/error/socket_error'
|
191
195
|
require 'mongo/error/socket_timeout_error'
|
192
|
-
require 'mongo/error/
|
196
|
+
require 'mongo/error/failed_string_prep_validation'
|
193
197
|
require 'mongo/error/unchangeable_collection_option'
|
194
198
|
require 'mongo/error/unexpected_chunk_length'
|
195
199
|
require 'mongo/error/unexpected_response'
|
@@ -35,22 +35,24 @@ module Mongo
|
|
35
35
|
# @since 2.0.0
|
36
36
|
def initialize(result)
|
37
37
|
@result = result
|
38
|
+
# Exception constructor behaves differently for a nil argument and
|
39
|
+
# for no argument. Avoid passing nil explicitly.
|
40
|
+
super(*[build_message])
|
38
41
|
end
|
39
42
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
"#{self.class}: #{messages}" + notes_tail
|
43
|
+
private
|
44
|
+
|
45
|
+
def build_message
|
46
|
+
errors = @result['writeErrors']
|
47
|
+
return nil unless errors
|
48
|
+
|
49
|
+
fragment = errors.first(10).map do |error|
|
50
|
+
"#{error['errmsg']} (#{error['code']})"
|
51
|
+
end.join(', ')
|
52
|
+
|
53
|
+
fragment += '...' if errors.length > 10
|
54
|
+
|
55
|
+
fragment
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end
|
@@ -0,0 +1,31 @@
|
|
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
|
+
# An error related to client-side encryption.
|
19
|
+
class CryptError < Mongo::Error
|
20
|
+
# Create a new CryptError
|
21
|
+
#
|
22
|
+
# @param [ Integer | nil ] code The optional libmongocrypt error code
|
23
|
+
# @param [ String ] message The error message
|
24
|
+
def initialize(message, code: nil)
|
25
|
+
msg = message
|
26
|
+
msg += " (libmongocrypt error code #{code})" if code
|
27
|
+
super(msg)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Copyright (C) 2019 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
|
+
# Exception raised when an unsupported operation is attempted on a cursor.
|
19
|
+
#
|
20
|
+
# Examples:
|
21
|
+
# - Attempting to iterate a regular cursor more than once.
|
22
|
+
# - Attempting to call try_next on a caching cursor after it had been
|
23
|
+
# iterated completely the first time.
|
24
|
+
class InvalidCursorOperation < Error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
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
|
+
# A KMS-related error during client-side encryption.
|
19
|
+
class KmsError < CryptError
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -24,16 +24,27 @@ module Mongo
|
|
24
24
|
# The message is constant.
|
25
25
|
#
|
26
26
|
# @since 2.0.0
|
27
|
-
MESSAGE = "
|
27
|
+
MESSAGE = "The document exceeds maximum allowed BSON size".freeze
|
28
28
|
|
29
29
|
# Instantiate the new exception.
|
30
30
|
#
|
31
31
|
# @example Instantiate the exception.
|
32
32
|
# Mongo::Error::MaxBSONSize.new(max)
|
33
33
|
#
|
34
|
+
# @param [ String | Numeric ] max_size_or_msg The message to use or
|
35
|
+
# the maximum size to insert into the predefined message. The
|
36
|
+
# Numeric argument type is deprecated.
|
37
|
+
#
|
34
38
|
# @since 2.0.0
|
35
|
-
def initialize(
|
36
|
-
|
39
|
+
def initialize(max_size_or_msg = nil)
|
40
|
+
if max_size_or_msg.is_a?(Numeric)
|
41
|
+
msg = "#{MESSAGE}. The maximum allowed size is #{max_size_or_msg}"
|
42
|
+
elsif max_size_or_msg
|
43
|
+
msg = max_size_or_msg
|
44
|
+
else
|
45
|
+
msg = MESSAGE
|
46
|
+
end
|
47
|
+
super(msg)
|
37
48
|
end
|
38
49
|
end
|
39
50
|
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
|
+
# An error related to spawning mongocryptd for client-side encryption.
|
19
|
+
class MongocryptdSpawnError < CryptError
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -32,9 +32,14 @@ module Mongo
|
|
32
32
|
#
|
33
33
|
# @since 2.0.0
|
34
34
|
def initialize(server_selector, cluster=nil, msg=nil)
|
35
|
-
msg
|
36
|
-
|
37
|
-
|
35
|
+
unless msg
|
36
|
+
msg = "No #{server_selector.name} server is available"
|
37
|
+
if cluster
|
38
|
+
msg += " in cluster: #{cluster.summary}"
|
39
|
+
end
|
40
|
+
msg += " with timeout=#{server_selector.server_selection_timeout}, " +
|
41
|
+
"LT=#{server_selector.local_threshold}"
|
42
|
+
end
|
38
43
|
|
39
44
|
super(msg)
|
40
45
|
end
|
data/lib/mongo/error/notable.rb
CHANGED
@@ -45,26 +45,11 @@ module Mongo
|
|
45
45
|
@notes << note
|
46
46
|
end
|
47
47
|
|
48
|
-
# @api public
|
49
|
-
def message
|
50
|
-
super + notes_tail
|
51
|
-
end
|
52
|
-
|
53
48
|
# @api public
|
54
49
|
def to_s
|
55
50
|
super + notes_tail
|
56
51
|
end
|
57
52
|
|
58
|
-
# @api public
|
59
|
-
def inspect
|
60
|
-
msg = super
|
61
|
-
if msg.end_with?('>')
|
62
|
-
msg[0...msg.length-1] + notes_tail + '>'
|
63
|
-
else
|
64
|
-
msg + notes_tail
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
53
|
private
|
69
54
|
|
70
55
|
# @api private
|
@@ -39,6 +39,7 @@ module Mongo
|
|
39
39
|
{:code_name => 'HostUnreachable', :code => 6},
|
40
40
|
{:code_name => 'NetworkTimeout', :code => 89},
|
41
41
|
{:code_name => 'SocketException', :code => 9001},
|
42
|
+
{:code_name => 'ExceededTimeLimit', :code => 262}
|
42
43
|
].freeze
|
43
44
|
|
44
45
|
# These are magic error messages that could indicate a master change.
|
data/lib/mongo/error/parser.rb
CHANGED
@@ -76,7 +76,7 @@ module Mongo
|
|
76
76
|
# examined because the status (ok: 1) is not part of the document and
|
77
77
|
# there is no way to distinguish successful from failed responses using
|
78
78
|
# the document itself, and a successful response may legitimately have
|
79
|
-
# {code: 123, codeName: 'foo'} as the contents of a user-inserted
|
79
|
+
# { code: 123, codeName: 'foo' } as the contents of a user-inserted
|
80
80
|
# document. The legacy server versions do not fill out code nor codeName
|
81
81
|
# thus not reading them does not lose information.
|
82
82
|
#
|
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/file/info.rb
CHANGED
@@ -204,7 +204,7 @@ module Mongo
|
|
204
204
|
# @note This method is transitional and is provided for backwards compatibility.
|
205
205
|
# It will be removed when md5 support is deprecated entirely.
|
206
206
|
#
|
207
|
-
# @param [ String ] The bytes to use to update the digest.
|
207
|
+
# @param [ String ] bytes The bytes to use to update the digest.
|
208
208
|
#
|
209
209
|
# @return [ Digest::MD5 ] The md5 hash object.
|
210
210
|
#
|
@@ -254,7 +254,8 @@ module Mongo
|
|
254
254
|
BSON::Document.new(
|
255
255
|
:_id => BSON::ObjectId.new,
|
256
256
|
:chunkSize => Chunk::DEFAULT_SIZE,
|
257
|
-
|
257
|
+
# MongoDB stores times with millisecond precision
|
258
|
+
:uploadDate => Time.now.utc.round(3),
|
258
259
|
:contentType => DEFAULT_CONTENT_TYPE
|
259
260
|
)
|
260
261
|
end
|