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/index/view.rb
CHANGED
@@ -158,7 +158,7 @@ module Mongo
|
|
158
158
|
session: session
|
159
159
|
}
|
160
160
|
spec[:write_concern] = write_concern if server.features.collation_enabled?
|
161
|
-
Operation::CreateIndex.new(spec).execute(server)
|
161
|
+
Operation::CreateIndex.new(spec).execute(server, client: client)
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
@@ -236,7 +236,7 @@ module Mongo
|
|
236
236
|
}
|
237
237
|
server = next_primary(nil, session)
|
238
238
|
spec[:write_concern] = write_concern if server.features.collation_enabled?
|
239
|
-
Operation::DropIndex.new(spec).execute(server)
|
239
|
+
Operation::DropIndex.new(spec).execute(server, client: client)
|
240
240
|
end
|
241
241
|
end
|
242
242
|
|
@@ -272,7 +272,7 @@ module Mongo
|
|
272
272
|
end
|
273
273
|
|
274
274
|
def send_initial_query(server, session)
|
275
|
-
initial_query_op(session).execute(server)
|
275
|
+
initial_query_op(session).execute(server, client: client)
|
276
276
|
end
|
277
277
|
|
278
278
|
def with_generated_names(models, server)
|
@@ -99,7 +99,12 @@ module Mongo
|
|
99
99
|
address,
|
100
100
|
payload[:request_id],
|
101
101
|
operation_id,
|
102
|
-
|
102
|
+
# All op_msg payloads have a $db field. Legacy payloads do not
|
103
|
+
# have a $db field. To emulate op_msg when publishing command
|
104
|
+
# monitoring events for legacy servers, add $db to the payload,
|
105
|
+
# copying the database name. Note that the database name is also
|
106
|
+
# available as a top-level attribute on the command started event.
|
107
|
+
payload[:command].merge('$db' => payload[:database_name]),
|
103
108
|
socket_object_id: socket_object_id,
|
104
109
|
connection_id: connection_id,
|
105
110
|
)
|
@@ -31,17 +31,20 @@ module Mongo
|
|
31
31
|
# Execute the operation.
|
32
32
|
#
|
33
33
|
# @example
|
34
|
-
# operation.execute(server)
|
34
|
+
# operation.execute(server, client: nil)
|
35
35
|
#
|
36
36
|
# @param [ Mongo::Server ] server The server to send the operation to.
|
37
|
+
# @param [ Mongo::Client ] client The client that will be used to
|
38
|
+
# perform auto-encryption if it is necessary to encrypt the command
|
39
|
+
# being executed (optional).
|
37
40
|
#
|
38
41
|
# @return [ Mongo::Operation::CollectionsInfo::Result,
|
39
42
|
# Mongo::Operation::ListCollections::Result ] The operation result.
|
40
43
|
#
|
41
44
|
# @since 2.0.0
|
42
|
-
def execute(server)
|
45
|
+
def execute(server, client:)
|
43
46
|
if server.features.list_collections_enabled?
|
44
|
-
return Operation::ListCollections.new(spec).execute(server)
|
47
|
+
return Operation::ListCollections.new(spec).execute(server, client: client)
|
45
48
|
end
|
46
49
|
|
47
50
|
super
|
@@ -36,7 +36,7 @@ module Mongo
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def message(server)
|
39
|
-
section =
|
39
|
+
section = Protocol::Msg::Section1.new(IDENTIFIER, send(IDENTIFIER))
|
40
40
|
Protocol::Msg.new(flags, {}, command(server), section)
|
41
41
|
end
|
42
42
|
end
|
@@ -19,9 +19,12 @@ module Mongo
|
|
19
19
|
# Execute the operation.
|
20
20
|
#
|
21
21
|
# @example
|
22
|
-
# operation.execute(server)
|
22
|
+
# operation.execute(server, client: nil)
|
23
23
|
#
|
24
24
|
# @param [ Mongo::Server ] server The server to send the operation to.
|
25
|
+
# @param [ Mongo::Client ] client The client that will be used to
|
26
|
+
# perform auto-encryption if it is necessary to encrypt the command
|
27
|
+
# being executed (optional).
|
25
28
|
#
|
26
29
|
# @return [ Mongo::Operation::Find::Result ] The operation result.
|
27
30
|
#
|
@@ -19,9 +19,12 @@ module Mongo
|
|
19
19
|
# Execute the operation.
|
20
20
|
#
|
21
21
|
# @example
|
22
|
-
# operation.execute(server)
|
22
|
+
# operation.execute(server, client: nil)
|
23
23
|
#
|
24
24
|
# @param [ Mongo::Server ] server The server to send the operation to.
|
25
|
+
# @param [ Mongo::Client ] client The client that will be used to
|
26
|
+
# perform auto-encryption if it is necessary to encrypt the command
|
27
|
+
# being executed (optional).
|
25
28
|
#
|
26
29
|
# @return [ Mongo::Operation::GetMore::Result ] The operation result.
|
27
30
|
#
|
@@ -30,9 +30,9 @@ module Mongo
|
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
def get_result(server)
|
33
|
+
def get_result(server, client)
|
34
34
|
# This is a Mongo::Operation::Insert::Result
|
35
|
-
Result.new(dispatch_message(server), @ids)
|
35
|
+
Result.new(dispatch_message(server, client), @ids)
|
36
36
|
end
|
37
37
|
|
38
38
|
def selector(server)
|
@@ -42,7 +42,7 @@ module Mongo
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def message(server)
|
45
|
-
section =
|
45
|
+
section = Protocol::Msg::Section1.new(IDENTIFIER, send(IDENTIFIER))
|
46
46
|
Protocol::Msg.new(flags, { validating_keys: true }, command(server), section)
|
47
47
|
end
|
48
48
|
end
|
@@ -18,7 +18,13 @@ require 'mongo/operation/shared/result/use_legacy_error_parser'
|
|
18
18
|
module Mongo
|
19
19
|
module Operation
|
20
20
|
|
21
|
-
# Result wrapper for
|
21
|
+
# Result wrapper for wire protocol replies.
|
22
|
+
#
|
23
|
+
# An operation has zero or one replies. The only operations producing zero
|
24
|
+
# replies are unacknowledged writes; all other operations produce one reply.
|
25
|
+
# This class provides an object that can be operated on (for example, to
|
26
|
+
# check whether an operation succeeded) even when the operation did not
|
27
|
+
# produce a reply (in which case it is assumed to have succeeded).
|
22
28
|
#
|
23
29
|
# @since 2.0.0
|
24
30
|
class Result
|
@@ -67,17 +73,33 @@ module Mongo
|
|
67
73
|
|
68
74
|
# Initialize a new result.
|
69
75
|
#
|
70
|
-
#
|
71
|
-
# Result.new(replies)
|
76
|
+
# For an unkacknowledged write, pass nil in replies.
|
72
77
|
#
|
73
|
-
#
|
78
|
+
# For all other operations, replies must be a Protocol::Message instance
|
79
|
+
# or an array containing a single Protocol::Message instance.
|
74
80
|
#
|
75
|
-
# @
|
81
|
+
# @param [ Protocol::Message | Array<Protocol::Message> | nil ] replies
|
82
|
+
# The wire protocol replies.
|
83
|
+
#
|
84
|
+
# @api private
|
76
85
|
def initialize(replies)
|
77
|
-
|
86
|
+
if replies
|
87
|
+
if replies.is_a?(Array)
|
88
|
+
if replies.length != 1
|
89
|
+
raise ArgumentError, "Only one (or zero) reply is supported, given #{replies.length}"
|
90
|
+
end
|
91
|
+
reply = replies.first
|
92
|
+
else
|
93
|
+
reply = replies
|
94
|
+
end
|
95
|
+
unless reply.is_a?(Protocol::Message)
|
96
|
+
raise ArgumentError, "Argument must be a Message instance, but is a #{reply.class}: #{reply.inspect}"
|
97
|
+
end
|
98
|
+
@replies = [ reply ]
|
99
|
+
end
|
78
100
|
end
|
79
101
|
|
80
|
-
# @return [ Array<Protocol::
|
102
|
+
# @return [ Array<Protocol::Message> ] replies The wrapped wire protocol replies.
|
81
103
|
attr_reader :replies
|
82
104
|
|
83
105
|
# @api private
|
@@ -99,19 +121,6 @@ module Mongo
|
|
99
121
|
!!@replies
|
100
122
|
end
|
101
123
|
|
102
|
-
# Determine if this result is a collection of multiple replies from the
|
103
|
-
# server.
|
104
|
-
#
|
105
|
-
# @example Is the result for multiple replies?
|
106
|
-
# result.multiple?
|
107
|
-
#
|
108
|
-
# @return [ true, false ] If the result is for multiple replies.
|
109
|
-
#
|
110
|
-
# @since 2.0.0
|
111
|
-
def multiple?
|
112
|
-
replies.size > 1
|
113
|
-
end
|
114
|
-
|
115
124
|
# Get the cursor id if the response is acknowledged.
|
116
125
|
#
|
117
126
|
# @note Cursor ids of 0 indicate there is no cursor on the server.
|
@@ -146,7 +155,7 @@ module Mongo
|
|
146
155
|
# @since 2.0.0
|
147
156
|
def documents
|
148
157
|
if acknowledged?
|
149
|
-
replies.flat_map
|
158
|
+
replies.flat_map(&:documents)
|
150
159
|
else
|
151
160
|
[]
|
152
161
|
end
|
@@ -180,12 +189,12 @@ module Mongo
|
|
180
189
|
"#<#{self.class.name}:0x#{object_id} documents=#{documents}>"
|
181
190
|
end
|
182
191
|
|
183
|
-
# Get the
|
192
|
+
# Get the reply from the result.
|
184
193
|
#
|
185
|
-
#
|
186
|
-
#
|
194
|
+
# Returns nil if there is no reply (i.e. the operation was an
|
195
|
+
# unacknowledged write).
|
187
196
|
#
|
188
|
-
# @return [ Protocol::
|
197
|
+
# @return [ Protocol::Message ] The first reply.
|
189
198
|
#
|
190
199
|
# @since 2.0.0
|
191
200
|
def reply
|
@@ -206,7 +215,7 @@ module Mongo
|
|
206
215
|
# @since 2.0.0
|
207
216
|
def returned_count
|
208
217
|
if acknowledged?
|
209
|
-
|
218
|
+
reply.number_returned
|
210
219
|
else
|
211
220
|
0
|
212
221
|
end
|
@@ -308,7 +317,7 @@ module Mongo
|
|
308
317
|
# @since 2.0.0
|
309
318
|
def written_count
|
310
319
|
if acknowledged?
|
311
|
-
|
320
|
+
first_document[N] || 0
|
312
321
|
else
|
313
322
|
0
|
314
323
|
end
|
@@ -22,11 +22,11 @@ module Mongo
|
|
22
22
|
|
23
23
|
include ResponseHandling
|
24
24
|
|
25
|
-
def do_execute(server)
|
25
|
+
def do_execute(server, client)
|
26
26
|
unpin_maybe(session) do
|
27
27
|
add_error_labels do
|
28
28
|
add_server_diagnostics(server) do
|
29
|
-
get_result(server).tap do |result|
|
29
|
+
get_result(server, client).tap do |result|
|
30
30
|
process_result(result, server)
|
31
31
|
end
|
32
32
|
end
|
@@ -34,8 +34,8 @@ module Mongo
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def execute(server)
|
38
|
-
do_execute(server).tap do |result|
|
37
|
+
def execute(server, client:)
|
38
|
+
do_execute(server, client).tap do |result|
|
39
39
|
validate_result(result, server)
|
40
40
|
end
|
41
41
|
end
|
@@ -46,14 +46,16 @@ module Mongo
|
|
46
46
|
Result
|
47
47
|
end
|
48
48
|
|
49
|
-
def get_result(server)
|
50
|
-
result_class.new(dispatch_message(server))
|
49
|
+
def get_result(server, client)
|
50
|
+
result_class.new(dispatch_message(server, client))
|
51
51
|
end
|
52
52
|
|
53
53
|
# Returns a Protocol::Message or nil
|
54
|
-
def dispatch_message(server)
|
54
|
+
def dispatch_message(server, client)
|
55
55
|
server.with_connection do |connection|
|
56
|
-
|
56
|
+
message = build_message(server)
|
57
|
+
message = message.maybe_encrypt(server, client)
|
58
|
+
connection.dispatch([ message ], operation_id, client)
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
@@ -22,9 +22,9 @@ module Mongo
|
|
22
22
|
module OpMsgOrCommand
|
23
23
|
include PolymorphicLookup
|
24
24
|
|
25
|
-
def execute(server)
|
25
|
+
def execute(server, client:)
|
26
26
|
operation = final_operation(server)
|
27
|
-
operation.execute(server)
|
27
|
+
operation.execute(server, client: client)
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
@@ -23,9 +23,9 @@ module Mongo
|
|
23
23
|
module OpMsgOrFindCommand
|
24
24
|
include PolymorphicLookup
|
25
25
|
|
26
|
-
def execute(server)
|
26
|
+
def execute(server, client:)
|
27
27
|
operation = final_operation(server)
|
28
|
-
operation.execute(server)
|
28
|
+
operation.execute(server, client: client)
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -23,9 +23,9 @@ module Mongo
|
|
23
23
|
module OpMsgOrListIndexesCommand
|
24
24
|
include PolymorphicLookup
|
25
25
|
|
26
|
-
def execute(server)
|
26
|
+
def execute(server, client:)
|
27
27
|
operation = final_operation(server)
|
28
|
-
operation.execute(server)
|
28
|
+
operation.execute(server, client: client)
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -25,42 +25,49 @@ module Mongo
|
|
25
25
|
# Execute the operation.
|
26
26
|
#
|
27
27
|
# @example
|
28
|
-
# operation.execute(server)
|
28
|
+
# operation.execute(server, client: nil)
|
29
29
|
#
|
30
30
|
# @param [ Mongo::Server ] server The server to send the operation to.
|
31
|
+
# @param [ Mongo::Client ] client The client that will be used to
|
32
|
+
# perform auto-encryption if it is necessary to encrypt the command
|
33
|
+
# being executed (optional).
|
31
34
|
#
|
32
35
|
# @return [ Mongo::Operation::Result ] The operation result.
|
33
36
|
#
|
34
37
|
# @since 2.5.2
|
35
|
-
def execute(server)
|
38
|
+
def execute(server, client:)
|
36
39
|
validate!
|
37
|
-
|
38
|
-
self.class::OpMsg.new(spec)
|
40
|
+
op = if server.features.op_msg_enabled?
|
41
|
+
self.class::OpMsg.new(spec)
|
39
42
|
elsif !acknowledged_write?
|
40
|
-
self.class::Legacy.new(spec)
|
43
|
+
self.class::Legacy.new(spec)
|
41
44
|
else
|
42
|
-
self.class::Command.new(spec)
|
45
|
+
self.class::Command.new(spec)
|
43
46
|
end
|
47
|
+
result = op.execute(server, client: client)
|
44
48
|
validate_result(result, server)
|
45
49
|
end
|
46
50
|
|
47
51
|
# Execute the bulk write operation.
|
48
52
|
#
|
49
53
|
# @example
|
50
|
-
# operation.bulk_execute(server)
|
54
|
+
# operation.bulk_execute(server, client: nil)
|
51
55
|
#
|
52
56
|
# @param [ Mongo::Server ] server The server to send the operation to.
|
57
|
+
# @param [ Mongo::Client ] client The client that will be used to
|
58
|
+
# perform auto-encryption if it is necessary to encrypt the command
|
59
|
+
# being executed (optional).
|
53
60
|
#
|
54
61
|
# @return [ Mongo::Operation::Delete::BulkResult,
|
55
62
|
# Mongo::Operation::Insert::BulkResult,
|
56
63
|
# Mongo::Operation::Update::BulkResult ] The bulk result.
|
57
64
|
#
|
58
65
|
# @since 2.5.2
|
59
|
-
def bulk_execute(server)
|
66
|
+
def bulk_execute(server, client:)
|
60
67
|
if server.features.op_msg_enabled?
|
61
|
-
self.class::OpMsg.new(spec).execute(server).bulk_result
|
68
|
+
self.class::OpMsg.new(spec).execute(server, client: client).bulk_result
|
62
69
|
else
|
63
|
-
self.class::Command.new(spec).execute(server).bulk_result
|
70
|
+
self.class::Command.new(spec).execute(server, client: client).bulk_result
|
64
71
|
end
|
65
72
|
end
|
66
73
|
|
@@ -36,7 +36,7 @@ module Mongo
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def message(server)
|
39
|
-
section =
|
39
|
+
section = Protocol::Msg::Section1.new(IDENTIFIER, send(IDENTIFIER))
|
40
40
|
Protocol::Msg.new(flags, {}, command(server), section)
|
41
41
|
end
|
42
42
|
end
|
@@ -60,15 +60,13 @@ module Mongo
|
|
60
60
|
@request_id = message.request_id
|
61
61
|
end
|
62
62
|
|
63
|
-
#
|
64
|
-
#
|
65
|
-
# @example Inflate a compressed message.
|
66
|
-
# message.inflate!
|
63
|
+
# Inflates an OP_COMRESSED message and returns the original message.
|
67
64
|
#
|
68
65
|
# @return [ Protocol::Message ] The inflated message.
|
69
66
|
#
|
70
67
|
# @since 2.5.0
|
71
|
-
|
68
|
+
# @api private
|
69
|
+
def maybe_inflate
|
72
70
|
message = Registry.get(@original_op_code).allocate
|
73
71
|
uncompressed_message = Zlib::Inflate.inflate(@compressed_message)
|
74
72
|
|
@@ -81,6 +79,9 @@ module Mongo
|
|
81
79
|
Message.deserialize_field(message, buf, field)
|
82
80
|
end
|
83
81
|
end
|
82
|
+
if message.is_a?(Msg)
|
83
|
+
message.fix_after_deserialization
|
84
|
+
end
|
84
85
|
message
|
85
86
|
end
|
86
87
|
|