mongo 2.11.6 → 2.12.0.rc0
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 +2 -2
- data.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +1 -1
- data/lib/mongo.rb +3 -0
- data/lib/mongo/address.rb +13 -2
- 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 +126 -11
- data/lib/mongo/client_encryption.rb +103 -0
- data/lib/mongo/cluster.rb +2 -2
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
- data/lib/mongo/cluster/sdam_flow.rb +54 -58
- data/lib/mongo/cluster/srv_monitor.rb +1 -1
- 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 +7 -9
- data/lib/mongo/collection/view/writable.rb +7 -7
- data/lib/mongo/crypt.rb +33 -0
- data/lib/mongo/crypt/auto_decryption_context.rb +42 -0
- data/lib/mongo/crypt/auto_encrypter.rb +169 -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 +1162 -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 +283 -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 +293 -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 +13 -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/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/operation_failure.rb +1 -0
- data/lib/mongo/grid/file.rb +0 -5
- data/lib/mongo/grid/file/chunk.rb +0 -2
- data/lib/mongo/grid/file/info.rb +2 -1
- data/lib/mongo/grid/fs_bucket.rb +13 -15
- data/lib/mongo/grid/stream/write.rb +3 -9
- data/lib/mongo/index/view.rb +3 -3
- 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 +2 -2
- data/lib/mongo/operation/insert/legacy.rb +2 -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 +10 -8
- 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/write.rb +17 -10
- data/lib/mongo/operation/update/op_msg.rb +1 -1
- data/lib/mongo/protocol/compressed.rb +6 -5
- data/lib/mongo/protocol/insert.rb +3 -1
- data/lib/mongo/protocol/message.rb +72 -8
- data/lib/mongo/protocol/msg.rb +191 -37
- data/lib/mongo/protocol/query.rb +7 -9
- data/lib/mongo/protocol/serializers.rb +6 -2
- data/lib/mongo/server.rb +10 -4
- data/lib/mongo/server/connection.rb +20 -9
- data/lib/mongo/server/connection_base.rb +81 -12
- data/lib/mongo/server/connection_common.rb +61 -0
- data/lib/mongo/server/connection_pool.rb +37 -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 +2 -2
- 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/timeout.rb +49 -0
- data/lib/mongo/uri.rb +30 -1
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/README.md +134 -7
- data/spec/integration/auth_spec.rb +53 -0
- data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
- data/spec/integration/client_construction_spec.rb +76 -1
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +351 -0
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +301 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +71 -0
- data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +76 -0
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +216 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +600 -0
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +183 -0
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +74 -0
- data/spec/integration/client_side_encryption/client_close_spec.rb +59 -0
- data/spec/integration/client_side_encryption/corpus_spec.rb +228 -0
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
- data/spec/integration/client_side_encryption/data_key_spec.rb +163 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +137 -0
- data/spec/integration/client_side_encryption/views_spec.rb +42 -0
- data/spec/integration/client_update_spec.rb +120 -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/reconnect_spec.rb +7 -6
- data/spec/integration/size_limit_spec.rb +94 -0
- data/spec/integration/srv_monitoring_spec.rb +14 -6
- data/spec/lite_spec_helper.rb +31 -22
- 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/x509_spec.rb +5 -1
- data/spec/mongo/client_construction_spec.rb +206 -3
- data/spec/mongo/client_encryption_spec.rb +408 -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 +4 -33
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
- data/spec/mongo/crypt/auto_encrypter_spec.rb +182 -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 +198 -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/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/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 +1 -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/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/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 +4 -4
- 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 +13 -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 +85 -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 +61 -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 +168 -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/common_shortcuts.rb +12 -0
- data/spec/support/constraints.rb +16 -0
- data/spec/support/crypt.rb +140 -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 +17 -1
- data/spec/support/matchers.rb +19 -0
- data/spec/support/shared/protocol.rb +2 -0
- data/spec/support/spec_config.rb +43 -13
- data/spec/support/utils.rb +132 -10
- metadata +277 -81
- metadata.gz.sig +0 -0
- data/spec/integration/grid_fs_bucket_spec.rb +0 -48
- data/spec/integration/zlib_compression_spec.rb +0 -25
- 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.
|
@@ -170,12 +176,13 @@ module Mongo
|
|
170
176
|
|
171
177
|
client.send(:with_session, opts) do |session|
|
172
178
|
server = selector.select_server(cluster, nil, session)
|
173
|
-
Operation::Command.new(
|
179
|
+
op = Operation::Command.new(
|
174
180
|
:selector => operation.dup,
|
175
181
|
:db_name => name,
|
176
182
|
:read => selector,
|
177
183
|
:session => session
|
178
|
-
|
184
|
+
)
|
185
|
+
op.execute(server, client: client)
|
179
186
|
end
|
180
187
|
end
|
181
188
|
|
@@ -206,7 +213,7 @@ module Mongo
|
|
206
213
|
:db_name => name,
|
207
214
|
:read => preference,
|
208
215
|
:session => session
|
209
|
-
}).execute(server)
|
216
|
+
}).execute(server, client: client)
|
210
217
|
end
|
211
218
|
end
|
212
219
|
end
|
@@ -231,7 +238,7 @@ module Mongo
|
|
231
238
|
db_name: name,
|
232
239
|
write_concern: write_concern,
|
233
240
|
session: session
|
234
|
-
}).execute(next_primary(nil, session))
|
241
|
+
}).execute(next_primary(nil, session), client: client)
|
235
242
|
end
|
236
243
|
end
|
237
244
|
|
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'
|
@@ -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
|
@@ -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/grid/file.rb
CHANGED
@@ -104,11 +104,6 @@ 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.
|
112
107
|
def initialize_chunks!(value)
|
113
108
|
if value.is_a?(Array)
|
114
109
|
@chunks = value.map{ |doc| Chunk.new(doc) }
|
@@ -151,7 +151,6 @@ module Mongo
|
|
151
151
|
# @return [ String ] The assembled data.
|
152
152
|
#
|
153
153
|
# @since 2.0.0
|
154
|
-
# @api private
|
155
154
|
def assemble(chunks)
|
156
155
|
chunks.reduce(''){ |data, chunk| data << chunk.data.data }
|
157
156
|
end
|
@@ -168,7 +167,6 @@ module Mongo
|
|
168
167
|
# @return [ Array<Chunk> ] The chunks of the data.
|
169
168
|
#
|
170
169
|
# @since 2.0.0
|
171
|
-
# @api private
|
172
170
|
def split(io, file_info, offset = 0)
|
173
171
|
io = StringIO.new(io) if io.is_a?(String)
|
174
172
|
parts = Enumerator.new { |y| y << io.read(file_info.chunk_size) until io.eof? }
|
data/lib/mongo/grid/file/info.rb
CHANGED
@@ -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
|
data/lib/mongo/grid/fs_bucket.rb
CHANGED
@@ -177,7 +177,7 @@ module Mongo
|
|
177
177
|
#
|
178
178
|
# @since 2.0.0
|
179
179
|
def prefix
|
180
|
-
@options[:fs_name] || @options[:bucket_name]
|
180
|
+
@options[:fs_name] || @options[:bucket_name]|| DEFAULT_ROOT
|
181
181
|
end
|
182
182
|
|
183
183
|
# Remove a single file from the GridFS.
|
@@ -230,8 +230,7 @@ module Mongo
|
|
230
230
|
#
|
231
231
|
# @since 2.1.0
|
232
232
|
def open_download_stream(id, options = nil)
|
233
|
-
|
234
|
-
read_stream(id, **options).tap do |stream|
|
233
|
+
read_stream(id, options).tap do |stream|
|
235
234
|
if block_given?
|
236
235
|
begin
|
237
236
|
yield stream
|
@@ -349,15 +348,15 @@ module Mongo
|
|
349
348
|
download_to_stream(open_download_stream_by_name(filename, opts).file_id, io)
|
350
349
|
end
|
351
350
|
|
352
|
-
# Opens an upload stream to GridFS to which the contents of a file
|
353
|
-
# blob can be written.
|
351
|
+
# Opens an upload stream to GridFS to which the contents of a user file came be written.
|
354
352
|
#
|
355
|
-
# @
|
353
|
+
# @example Open a stream to which the contents of a file came be written.
|
354
|
+
# fs.open_upload_stream('a-file.txt')
|
355
|
+
#
|
356
|
+
# @param [ String ] filename The filename of the file to upload.
|
356
357
|
# @param [ Hash ] opts The options for the write stream.
|
357
358
|
#
|
358
|
-
# @option opts [ Object ] :file_id An optional unique file id.
|
359
|
-
# A BSON::ObjectId is automatically generated if a file id is not
|
360
|
-
# provided.
|
359
|
+
# @option opts [ Object ] :file_id An optional unique file id. An ObjectId is generated otherwise.
|
361
360
|
# @option opts [ Integer ] :chunk_size Override the default chunk size.
|
362
361
|
# @option opts [ Hash ] :metadata User data for the 'metadata' field of the files
|
363
362
|
# collection document.
|
@@ -376,8 +375,7 @@ module Mongo
|
|
376
375
|
#
|
377
376
|
# @since 2.1.0
|
378
377
|
def open_upload_stream(filename, opts = {})
|
379
|
-
|
380
|
-
write_stream(filename, **opts).tap do |stream|
|
378
|
+
write_stream(filename, opts).tap do |stream|
|
381
379
|
if block_given?
|
382
380
|
begin
|
383
381
|
yield stream
|
@@ -464,12 +462,12 @@ module Mongo
|
|
464
462
|
#
|
465
463
|
# @option opts [ BSON::Document ] :file_info_doc For internal
|
466
464
|
# driver use only. A BSON document to use as file information.
|
467
|
-
def read_stream(id,
|
468
|
-
Stream.get(self, Stream::READ_MODE, { file_id: id }.update(options).update(opts))
|
465
|
+
def read_stream(id, opts = nil)
|
466
|
+
Stream.get(self, Stream::READ_MODE, { file_id: id }.update(options).update(opts || {}))
|
469
467
|
end
|
470
468
|
|
471
|
-
def write_stream(filename,
|
472
|
-
Stream.get(self, Stream::WRITE_MODE, { filename: filename }.
|
469
|
+
def write_stream(filename, opts)
|
470
|
+
Stream.get(self, Stream::WRITE_MODE, { filename: filename }.merge!(options).merge!(opts))
|
473
471
|
end
|
474
472
|
|
475
473
|
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.
|
86
86
|
#
|
87
87
|
# @example Write to GridFS.
|
88
88
|
# stream.write(io)
|
89
89
|
#
|
90
|
-
# @param [
|
90
|
+
# @param [ IO ] io The source io stream to upload from.
|
91
91
|
#
|
92
92
|
# @return [ Stream::Write ] self The write stream itself.
|
93
93
|
#
|
@@ -95,13 +95,7 @@ module Mongo
|
|
95
95
|
def write(io)
|
96
96
|
ensure_open!
|
97
97
|
@indexes ||= ensure_indexes!
|
98
|
-
@length +=
|
99
|
-
# String objects
|
100
|
-
io.bytesize
|
101
|
-
else
|
102
|
-
# IO objects
|
103
|
-
io.size
|
104
|
-
end
|
98
|
+
@length += io.size
|
105
99
|
chunks = File::Chunk.split(io, file_info, @n)
|
106
100
|
@n += chunks.size
|
107
101
|
chunks_collection.insert_many(chunks) unless chunks.empty?
|