mongo 2.17.2 → 2.18.1
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/README.md +21 -37
- data/lib/mongo/auth/base.rb +8 -1
- data/lib/mongo/auth.rb +12 -1
- data/lib/mongo/bulk_write/result.rb +10 -1
- data/lib/mongo/bulk_write/result_combiner.rb +2 -4
- data/lib/mongo/bulk_write.rb +115 -29
- data/lib/mongo/client.rb +133 -17
- data/lib/mongo/client_encryption.rb +113 -10
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
- data/lib/mongo/cluster.rb +26 -28
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +22 -16
- data/lib/mongo/collection/view/change_stream.rb +65 -23
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +2 -2
- data/lib/mongo/collection/view/map_reduce.rb +18 -9
- data/lib/mongo/collection/view/readable.rb +29 -25
- data/lib/mongo/collection/view/writable.rb +133 -40
- data/lib/mongo/collection.rb +117 -49
- data/lib/mongo/config/options.rb +62 -0
- data/lib/mongo/config/validators/option.rb +26 -0
- data/lib/mongo/config.rb +42 -0
- data/lib/mongo/crypt/auto_encrypter.rb +136 -14
- data/lib/mongo/crypt/binding.rb +513 -144
- data/lib/mongo/crypt/context.rb +5 -2
- data/lib/mongo/crypt/data_key_context.rb +12 -104
- data/lib/mongo/crypt/encryption_io.rb +94 -60
- data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
- data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
- data/lib/mongo/crypt/handle.rb +160 -86
- data/lib/mongo/crypt/hooks.rb +25 -2
- data/lib/mongo/crypt/kms/aws.rb +136 -0
- data/lib/mongo/crypt/kms/azure.rb +144 -0
- data/lib/mongo/crypt/kms/credentials.rb +81 -0
- data/lib/mongo/crypt/kms/gcp.rb +189 -0
- data/lib/mongo/crypt/kms/kmip.rb +116 -0
- data/lib/mongo/crypt/kms/local.rb +82 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +117 -0
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
- data/lib/mongo/crypt/status.rb +8 -2
- data/lib/mongo/crypt.rb +3 -0
- data/lib/mongo/cursor/kill_spec.rb +27 -6
- data/lib/mongo/cursor.rb +26 -11
- data/lib/mongo/database/view.rb +6 -3
- data/lib/mongo/database.rb +57 -13
- data/lib/mongo/dbref.rb +1 -105
- data/lib/mongo/error/bulk_write_error.rb +31 -4
- data/lib/mongo/error/invalid_config_option.rb +20 -0
- data/lib/mongo/error/invalid_replacement_document.rb +27 -9
- data/lib/mongo/error/invalid_update_document.rb +27 -7
- data/lib/mongo/error/labelable.rb +72 -0
- data/lib/mongo/error/missing_connection.rb +25 -0
- data/lib/mongo/error/missing_file_chunk.rb +8 -2
- data/lib/mongo/error/notable.rb +7 -0
- data/lib/mongo/error/operation_failure.rb +34 -86
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
- data/lib/mongo/error.rb +5 -37
- data/lib/mongo/grid/stream/read.rb +6 -0
- data/lib/mongo/index/view.rb +23 -7
- data/lib/mongo/monitoring/event/command_failed.rb +8 -2
- data/lib/mongo/monitoring/event/command_started.rb +1 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
- data/lib/mongo/monitoring/publishable.rb +9 -5
- data/lib/mongo/operation/collections_info/result.rb +5 -2
- data/lib/mongo/operation/command/op_msg.rb +6 -0
- data/lib/mongo/operation/context.rb +24 -6
- data/lib/mongo/operation/count/op_msg.rb +4 -1
- data/lib/mongo/operation/create/op_msg.rb +4 -1
- data/lib/mongo/operation/create_index/op_msg.rb +2 -1
- data/lib/mongo/operation/delete/op_msg.rb +1 -0
- data/lib/mongo/operation/delete.rb +0 -1
- data/lib/mongo/operation/distinct/op_msg.rb +4 -1
- data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
- data/lib/mongo/operation/get_more/command_builder.rb +5 -1
- data/lib/mongo/operation/insert/bulk_result.rb +5 -1
- data/lib/mongo/operation/insert/command.rb +0 -4
- data/lib/mongo/operation/insert/op_msg.rb +6 -3
- data/lib/mongo/operation/insert/result.rb +6 -3
- data/lib/mongo/operation/insert.rb +0 -1
- data/lib/mongo/operation/kill_cursors.rb +0 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
- data/lib/mongo/operation/map_reduce/result.rb +16 -0
- data/lib/mongo/operation/result.rb +21 -5
- data/lib/mongo/operation/shared/executable.rb +21 -6
- data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
- data/lib/mongo/operation/shared/response_handling.rb +6 -5
- data/lib/mongo/operation/shared/sessions_supported.rb +7 -3
- data/lib/mongo/operation/shared/write.rb +18 -12
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update.rb +0 -1
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/msg.rb +21 -1
- data/lib/mongo/protocol.rb +1 -0
- data/lib/mongo/query_cache.rb +15 -0
- data/lib/mongo/retryable.rb +78 -30
- data/lib/mongo/server/connection.rb +33 -0
- data/lib/mongo/server/connection_base.rb +2 -0
- data/lib/mongo/server/connection_common.rb +4 -1
- data/lib/mongo/server/connection_pool.rb +74 -46
- data/lib/mongo/server/description/features.rb +3 -1
- data/lib/mongo/server/description.rb +7 -2
- data/lib/mongo/server/monitor/connection.rb +1 -0
- data/lib/mongo/server/monitor.rb +25 -13
- data/lib/mongo/server/push_monitor.rb +13 -3
- data/lib/mongo/server.rb +9 -5
- data/lib/mongo/session/session_pool.rb +8 -0
- data/lib/mongo/session.rb +111 -35
- data/lib/mongo/socket/ocsp_verifier.rb +4 -5
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/srv/resolver.rb +24 -3
- data/lib/mongo/uri/options_mapper.rb +2 -0
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/uri.rb +20 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +22 -0
- data/mongo.gemspec +10 -4
- data/spec/README.md +23 -5
- data/spec/integration/aws_lambda_examples_spec.rb +68 -0
- data/spec/integration/bulk_write_error_message_spec.rb +32 -0
- data/spec/integration/bulk_write_spec.rb +16 -0
- data/spec/integration/change_stream_spec.rb +6 -5
- data/spec/integration/client_construction_spec.rb +74 -8
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +168 -168
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
- data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
- data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
- data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
- data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
- data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
- data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
- data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
- data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +85 -0
- data/spec/integration/client_side_encryption/views_spec.rb +1 -1
- data/spec/integration/client_update_spec.rb +2 -2
- data/spec/integration/crud_spec.rb +12 -0
- data/spec/integration/cursor_pinning_spec.rb +3 -3
- data/spec/integration/fork_reconnect_spec.rb +15 -8
- data/spec/integration/grid_fs_bucket_spec.rb +3 -3
- data/spec/integration/ocsp_verifier_spec.rb +3 -0
- data/spec/integration/query_cache_spec.rb +34 -30
- data/spec/integration/reconnect_spec.rb +2 -0
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +2 -1
- data/spec/integration/size_limit_spec.rb +4 -1
- data/spec/integration/snapshot_query_examples_spec.rb +127 -0
- data/spec/integration/srv_monitoring_spec.rb +38 -0
- data/spec/integration/srv_spec.rb +1 -0
- data/spec/integration/step_down_spec.rb +20 -4
- data/spec/integration/transaction_pinning_spec.rb +2 -2
- data/spec/integration/versioned_api_examples_spec.rb +37 -31
- data/spec/lite_spec_helper.rb +19 -9
- data/spec/mongo/address/ipv6_spec.rb +7 -0
- data/spec/mongo/address_spec.rb +7 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
- data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
- data/spec/mongo/bulk_write/result_spec.rb +15 -1
- data/spec/mongo/bulk_write_spec.rb +141 -20
- data/spec/mongo/client_construction_spec.rb +186 -9
- data/spec/mongo/client_encryption_spec.rb +10 -22
- data/spec/mongo/client_spec.rb +297 -1
- data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
- data/spec/mongo/cluster_spec.rb +0 -44
- data/spec/mongo/collection/view/aggregation_spec.rb +121 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/readable_spec.rb +605 -1
- data/spec/mongo/collection/view/writable_spec.rb +144 -32
- data/spec/mongo/collection_crud_spec.rb +63 -13
- data/spec/mongo/collection_spec.rb +32 -0
- data/spec/mongo/config/options_spec.rb +75 -0
- data/spec/mongo/config_spec.rb +73 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/auto_encrypter_spec.rb +256 -5
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/binding/context_spec.rb +67 -17
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
- data/spec/mongo/crypt/binding/version_spec.rb +33 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
- data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +94 -1
- data/spec/mongo/crypt/handle_spec.rb +172 -156
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
- data/spec/mongo/crypt/kms_spec.rb +59 -0
- data/spec/mongo/cursor_spec.rb +87 -1
- data/spec/mongo/database_spec.rb +66 -1
- data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
- data/spec/mongo/index/view_spec.rb +125 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/delete_spec.rb +0 -30
- data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
- data/spec/mongo/operation/insert_spec.rb +0 -32
- data/spec/mongo/operation/result_spec.rb +20 -0
- data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/update_spec.rb +0 -29
- data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
- data/spec/mongo/protocol/msg_spec.rb +41 -0
- data/spec/mongo/query_cache_spec.rb +1 -0
- data/spec/mongo/retryable_spec.rb +32 -3
- data/spec/mongo/server/connection_auth_spec.rb +3 -1
- data/spec/mongo/server/connection_common_spec.rb +13 -1
- data/spec/mongo/server/connection_pool_spec.rb +120 -53
- data/spec/mongo/server/connection_spec.rb +50 -159
- data/spec/mongo/server/description/features_spec.rb +24 -0
- data/spec/mongo/server/push_monitor_spec.rb +2 -8
- data/spec/mongo/session_spec.rb +26 -6
- data/spec/mongo/session_transaction_spec.rb +2 -1
- data/spec/mongo/socket/ssl_spec.rb +18 -7
- data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
- data/spec/mongo/uri_spec.rb +25 -0
- data/spec/runners/connection_string.rb +8 -0
- data/spec/runners/crud/operation.rb +12 -3
- data/spec/runners/crud/requirement.rb +9 -4
- data/spec/runners/crud/spec.rb +5 -0
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/verifier.rb +6 -0
- data/spec/runners/transactions/spec.rb +2 -2
- data/spec/runners/transactions/test.rb +19 -16
- data/spec/runners/transactions.rb +11 -8
- data/spec/runners/unified/assertions.rb +90 -11
- data/spec/runners/unified/change_stream_operations.rb +12 -0
- data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
- data/spec/runners/unified/crud_operations.rb +67 -4
- data/spec/runners/unified/ddl_operations.rb +45 -0
- data/spec/runners/unified/error.rb +2 -1
- data/spec/runners/unified/grid_fs_operations.rb +21 -0
- data/spec/runners/unified/support_operations.rb +5 -2
- data/spec/runners/unified/test.rb +78 -5
- data/spec/runners/unified.rb +9 -2
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/share/Dockerfile.erb +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/solo/clean_exit_spec.rb +5 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
- data/spec/spec_tests/crud_spec.rb +0 -10
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1071 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
- data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
- data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
- data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
- data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
- data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
- data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
- data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
- data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
- data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
- data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
- data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
- data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
- data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
- data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
- data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
- data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
- data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
- data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
- data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
- data/spec/spec_tests/data/crud_unified/find.yml +68 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
- data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
- data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
- data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
- data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
- data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
- data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
- data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
- data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
- data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
- data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
- data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
- data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
- data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
- data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +6 -14
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +4 -14
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +8 -14
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
- data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
- data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
- data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
- data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
- data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
- data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
- data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
- data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
- data/spec/spec_tests/retryable_reads_spec.rb +4 -1
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +4 -1
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
- data/spec/spec_tests/unified_spec.rb +6 -1
- data/spec/stress/connection_pool_timing_spec.rb +3 -2
- data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
- data/spec/support/authorization.rb +1 -1
- data/spec/support/background_thread_registry.rb +3 -13
- data/spec/support/certificates/retrieve-atlas-cert +38 -0
- data/spec/support/cluster_tools.rb +1 -1
- data/spec/support/common_shortcuts.rb +22 -0
- data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
- data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
- data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
- data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
- data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
- data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
- data/spec/support/crypt/corpus/corpus.json +4999 -37
- data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
- data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
- data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
- data/spec/support/crypt/encryptedFields.json +33 -0
- data/spec/support/crypt/keys/key1-document.json +30 -0
- data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/crypt.rb +258 -13
- data/spec/support/macros.rb +28 -0
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/shared/scram_conversation.rb +2 -1
- data/spec/support/shared/session.rb +13 -7
- data/spec/support/spec_config.rb +90 -1
- data/spec/support/utils.rb +25 -4
- data.tar.gz.sig +0 -0
- metadata +604 -290
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/delete/legacy.rb +0 -64
- data/lib/mongo/operation/insert/legacy.rb +0 -68
- data/lib/mongo/operation/update/legacy/result.rb +0 -112
- data/lib/mongo/operation/update/legacy.rb +0 -76
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
- data/spec/spec_tests/change_streams_spec.rb +0 -93
- data/spec/spec_tests/command_monitoring_spec.rb +0 -71
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
- data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
- data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
- data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
- data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
- data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
- data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
- data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
- data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
- data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
- data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
- data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
- data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
- data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
- data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
- data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
- data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/session_registry.rb +0 -55
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
# Copyright (C) 2019-2022 MongoDB Inc.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
|
|
18
|
+
module Mongo
|
|
19
|
+
module Crypt
|
|
20
|
+
# Represent result of the rewrap many data ke operation.
|
|
21
|
+
#
|
|
22
|
+
# @api semiprivate
|
|
23
|
+
class RewrapManyDataKeyResult
|
|
24
|
+
|
|
25
|
+
# @returns [ BulkWrite::Result ] the result of the bulk write operation
|
|
26
|
+
# used to update the key vault collection with rewrapped data keys.
|
|
27
|
+
attr_reader :bulk_write_result
|
|
28
|
+
|
|
29
|
+
# @param [ BulkWrite::Result | nil ] bulk_write_result The result of the
|
|
30
|
+
# bulk write operation used to update the key vault collection
|
|
31
|
+
# with rewrapped data keys.
|
|
32
|
+
def initialize(bulk_write_result)
|
|
33
|
+
@bulk_write_result = bulk_write_result
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/mongo/crypt/status.rb
CHANGED
|
@@ -118,10 +118,16 @@ module Mongo
|
|
|
118
118
|
# information stored in this status
|
|
119
119
|
#
|
|
120
120
|
# Does nothing if self.ok? is true
|
|
121
|
-
|
|
121
|
+
#
|
|
122
|
+
# @param kms [ true | false ] Whether the operation was against the KMS.
|
|
123
|
+
#
|
|
124
|
+
# @note If kms parameter is false, the error may still have come from a
|
|
125
|
+
# KMS. The kms parameter simply forces all errors to be treated as
|
|
126
|
+
# KMS errors.
|
|
127
|
+
def raise_crypt_error(kms: false)
|
|
122
128
|
return if ok?
|
|
123
129
|
|
|
124
|
-
if label == :error_kms
|
|
130
|
+
if kms || label == :error_kms
|
|
125
131
|
error = Error::KmsError.new(message, code: code)
|
|
126
132
|
else
|
|
127
133
|
error = Error::CryptError.new(message, code: code)
|
data/lib/mongo/crypt.rb
CHANGED
|
@@ -29,8 +29,11 @@ module Mongo
|
|
|
29
29
|
autoload(:AutoEncryptionContext, 'mongo/crypt/auto_encryption_context')
|
|
30
30
|
autoload(:ExplicitDecryptionContext, 'mongo/crypt/explicit_decryption_context')
|
|
31
31
|
autoload(:AutoDecryptionContext, 'mongo/crypt/auto_decryption_context')
|
|
32
|
+
autoload(:RewrapManyDataKeyContext, 'mongo/crypt/rewrap_many_data_key_context')
|
|
33
|
+
autoload(:RewrapManyDataKeyResult, 'mongo/crypt/rewrap_many_data_key_result')
|
|
32
34
|
autoload(:EncryptionIO, 'mongo/crypt/encryption_io')
|
|
33
35
|
autoload(:ExplicitEncrypter, 'mongo/crypt/explicit_encrypter')
|
|
34
36
|
autoload(:AutoEncrypter, 'mongo/crypt/auto_encrypter')
|
|
37
|
+
autoload(:KMS, 'mongo/crypt/kms')
|
|
35
38
|
end
|
|
36
39
|
end
|
|
@@ -25,22 +25,36 @@ module Mongo
|
|
|
25
25
|
# @api private
|
|
26
26
|
class KillSpec
|
|
27
27
|
|
|
28
|
-
def initialize(
|
|
28
|
+
def initialize(
|
|
29
|
+
cursor_id:,
|
|
30
|
+
coll_name:,
|
|
31
|
+
db_name:,
|
|
32
|
+
connection_global_id:,
|
|
33
|
+
server_address:,
|
|
34
|
+
session:
|
|
35
|
+
)
|
|
29
36
|
@cursor_id = cursor_id
|
|
30
37
|
@coll_name = coll_name
|
|
31
38
|
@db_name = db_name
|
|
32
|
-
@
|
|
39
|
+
@connection_global_id = connection_global_id
|
|
33
40
|
@server_address = server_address
|
|
41
|
+
@session = session
|
|
34
42
|
end
|
|
35
43
|
|
|
36
|
-
attr_reader :cursor_id,
|
|
44
|
+
attr_reader :cursor_id,
|
|
45
|
+
:coll_name,
|
|
46
|
+
:db_name,
|
|
47
|
+
:connection_global_id,
|
|
48
|
+
:server_address,
|
|
49
|
+
:session
|
|
37
50
|
|
|
38
51
|
def ==(other)
|
|
39
52
|
cursor_id == other.cursor_id &&
|
|
40
53
|
coll_name == other.coll_name &&
|
|
41
54
|
db_name == other.db_name &&
|
|
42
|
-
|
|
43
|
-
server_address == other.server_address
|
|
55
|
+
connection_global_id == other.connection_global_id &&
|
|
56
|
+
server_address == other.server_address &&
|
|
57
|
+
session == other.session
|
|
44
58
|
end
|
|
45
59
|
|
|
46
60
|
def eql?(other)
|
|
@@ -48,7 +62,14 @@ module Mongo
|
|
|
48
62
|
end
|
|
49
63
|
|
|
50
64
|
def hash
|
|
51
|
-
[
|
|
65
|
+
[
|
|
66
|
+
cursor_id,
|
|
67
|
+
coll_name,
|
|
68
|
+
db_name,
|
|
69
|
+
connection_global_id,
|
|
70
|
+
server_address,
|
|
71
|
+
session,
|
|
72
|
+
].compact.hash
|
|
52
73
|
end
|
|
53
74
|
end
|
|
54
75
|
end
|
data/lib/mongo/cursor.rb
CHANGED
|
@@ -80,13 +80,13 @@ module Mongo
|
|
|
80
80
|
if @cursor_id.nil?
|
|
81
81
|
raise ArgumentError, 'Cursor id must be present in the result'
|
|
82
82
|
end
|
|
83
|
+
@connection_global_id = result.connection_global_id
|
|
83
84
|
@options = options
|
|
84
85
|
@session = @options[:session]
|
|
85
86
|
unless closed?
|
|
86
87
|
register
|
|
87
|
-
ObjectSpace.define_finalizer(self, self.class.finalize(kill_spec(
|
|
88
|
-
cluster
|
|
89
|
-
@session))
|
|
88
|
+
ObjectSpace.define_finalizer(self, self.class.finalize(kill_spec(@connection_global_id),
|
|
89
|
+
cluster))
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
@@ -101,18 +101,16 @@ module Mongo
|
|
|
101
101
|
#
|
|
102
102
|
# @param [ Cursor::KillSpec ] kill_spec The KillCursor operation specification.
|
|
103
103
|
# @param [ Mongo::Cluster ] cluster The cluster associated with this cursor and its server.
|
|
104
|
-
# @param [ Mongo::Server ] server The server to send the killCursors operation to.
|
|
105
104
|
#
|
|
106
105
|
# @return [ Proc ] The Finalizer.
|
|
107
106
|
#
|
|
108
107
|
# @api private
|
|
109
|
-
def self.finalize(kill_spec, cluster
|
|
108
|
+
def self.finalize(kill_spec, cluster)
|
|
110
109
|
unless KillSpec === kill_spec
|
|
111
110
|
raise ArgumentError, "First argument must be a KillSpec: #{kill_spec.inspect}"
|
|
112
111
|
end
|
|
113
112
|
proc do
|
|
114
113
|
cluster.schedule_kill_cursor(kill_spec)
|
|
115
|
-
session.end_session if session && session.implicit?
|
|
116
114
|
end
|
|
117
115
|
end
|
|
118
116
|
|
|
@@ -253,7 +251,12 @@ module Mongo
|
|
|
253
251
|
#
|
|
254
252
|
# @since 2.2.0
|
|
255
253
|
def batch_size
|
|
256
|
-
@view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit
|
|
254
|
+
value = @view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit
|
|
255
|
+
if value == 0
|
|
256
|
+
nil
|
|
257
|
+
else
|
|
258
|
+
value
|
|
259
|
+
end
|
|
257
260
|
end
|
|
258
261
|
|
|
259
262
|
# Is the cursor closed?
|
|
@@ -366,13 +369,14 @@ module Mongo
|
|
|
366
369
|
end
|
|
367
370
|
|
|
368
371
|
# @api private
|
|
369
|
-
def kill_spec(
|
|
372
|
+
def kill_spec(connection_global_id)
|
|
370
373
|
KillSpec.new(
|
|
371
374
|
cursor_id: id,
|
|
372
375
|
coll_name: collection_name,
|
|
373
376
|
db_name: database.name,
|
|
374
|
-
|
|
377
|
+
connection_global_id: connection_global_id,
|
|
375
378
|
server_address: server.address,
|
|
379
|
+
session: @session,
|
|
376
380
|
)
|
|
377
381
|
end
|
|
378
382
|
|
|
@@ -383,6 +387,14 @@ module Mongo
|
|
|
383
387
|
|
|
384
388
|
private
|
|
385
389
|
|
|
390
|
+
def batch_size_for_get_more
|
|
391
|
+
if batch_size && use_limit?
|
|
392
|
+
[batch_size, @remaining].min
|
|
393
|
+
else
|
|
394
|
+
batch_size
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
386
398
|
def exhausted?
|
|
387
399
|
limited? ? @remaining <= 0 : false
|
|
388
400
|
end
|
|
@@ -405,7 +417,7 @@ module Mongo
|
|
|
405
417
|
cursor_id: id,
|
|
406
418
|
# 3.2+ servers use batch_size, 3.0- servers use to_return.
|
|
407
419
|
# TODO should to_return be calculated in the operation layer?
|
|
408
|
-
batch_size:
|
|
420
|
+
batch_size: batch_size_for_get_more,
|
|
409
421
|
to_return: to_return,
|
|
410
422
|
max_time_ms: if view.respond_to?(:max_await_time_ms) &&
|
|
411
423
|
view.max_await_time_ms &&
|
|
@@ -416,6 +428,9 @@ module Mongo
|
|
|
416
428
|
nil
|
|
417
429
|
end,
|
|
418
430
|
}
|
|
431
|
+
if view.respond_to?(:options) && view.options.is_a?(Hash)
|
|
432
|
+
spec[:comment] = view.options[:comment] unless view.options[:comment].nil?
|
|
433
|
+
end
|
|
419
434
|
Operation::GetMore.new(spec)
|
|
420
435
|
end
|
|
421
436
|
|
|
@@ -468,7 +483,7 @@ module Mongo
|
|
|
468
483
|
context = Operation::Context.new(
|
|
469
484
|
client: client,
|
|
470
485
|
session: @session,
|
|
471
|
-
|
|
486
|
+
connection_global_id: @connection_global_id,
|
|
472
487
|
)
|
|
473
488
|
op.execute(@server, context: context)
|
|
474
489
|
end
|
data/lib/mongo/database/view.rb
CHANGED
|
@@ -53,9 +53,11 @@ module Mongo
|
|
|
53
53
|
# @option options [ Hash ] :filter A filter on the collections returned.
|
|
54
54
|
# @option options [ true, false ] :authorized_collections A flag, when
|
|
55
55
|
# set to true, that allows a user without the required privilege
|
|
56
|
-
# to run the command when access control is enforced
|
|
56
|
+
# to run the command when access control is enforced.
|
|
57
|
+
# @option options [ Object ] :comment A user-provided
|
|
58
|
+
# comment to attach to this command.
|
|
57
59
|
#
|
|
58
|
-
# See https://
|
|
60
|
+
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
|
59
61
|
# for more information and usage.
|
|
60
62
|
# @option options [ Session ] :session The session to use.
|
|
61
63
|
#
|
|
@@ -99,7 +101,7 @@ module Mongo
|
|
|
99
101
|
# set to true and used with nameOnly: true, that allows a user without the
|
|
100
102
|
# required privilege to run the command when access control is enforced
|
|
101
103
|
#
|
|
102
|
-
# See https://
|
|
104
|
+
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
|
103
105
|
# for more information and usage.
|
|
104
106
|
# @option options [ Session ] :session The session to use.
|
|
105
107
|
#
|
|
@@ -186,6 +188,7 @@ module Mongo
|
|
|
186
188
|
spec[:selector][:nameOnly] = true if options[:name_only]
|
|
187
189
|
spec[:selector][:filter] = options[:filter] if options[:filter]
|
|
188
190
|
spec[:selector][:authorizedCollections] = true if options[:authorized_collections]
|
|
191
|
+
spec[:comment] = options[:comment] if options[:comment]
|
|
189
192
|
end
|
|
190
193
|
end
|
|
191
194
|
|
data/lib/mongo/database.rb
CHANGED
|
@@ -73,7 +73,8 @@ module Mongo
|
|
|
73
73
|
:read_preference,
|
|
74
74
|
:server_selector,
|
|
75
75
|
:read_concern,
|
|
76
|
-
:write_concern
|
|
76
|
+
:write_concern,
|
|
77
|
+
:encrypted_fields_map
|
|
77
78
|
|
|
78
79
|
# @return [ Mongo::Server ] Get the primary server from the cluster.
|
|
79
80
|
def_delegators :cluster,
|
|
@@ -125,8 +126,10 @@ module Mongo
|
|
|
125
126
|
# @option options [ true, false ] :authorized_collections A flag, when
|
|
126
127
|
# set to true and used with nameOnly: true, that allows a user without the
|
|
127
128
|
# required privilege to run the command when access control is enforced
|
|
129
|
+
# @option options [ Object ] :comment A user-provided
|
|
130
|
+
# comment to attach to this command.
|
|
128
131
|
#
|
|
129
|
-
# See https://
|
|
132
|
+
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
|
130
133
|
# for more information and usage.
|
|
131
134
|
#
|
|
132
135
|
# @return [ Array<String> ] Names of the collections.
|
|
@@ -150,9 +153,11 @@ module Mongo
|
|
|
150
153
|
# name and other information
|
|
151
154
|
# @option options [ true, false ] :authorized_collections A flag, when
|
|
152
155
|
# set to true and used with nameOnly: true, that allows a user without the
|
|
153
|
-
# required privilege to run the command when access control is enforced
|
|
156
|
+
# required privilege to run the command when access control is enforced.
|
|
157
|
+
# @option options [ Object ] :comment A user-provided
|
|
158
|
+
# comment to attach to this command.
|
|
154
159
|
#
|
|
155
|
-
# See https://
|
|
160
|
+
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
|
156
161
|
# for more information and usage.
|
|
157
162
|
#
|
|
158
163
|
# @return [ Array<Hash> ] Array of information hashes, one for each
|
|
@@ -173,9 +178,11 @@ module Mongo
|
|
|
173
178
|
# @option options [ Hash ] :filter A filter on the collections returned.
|
|
174
179
|
# @option options [ true, false ] :authorized_collections A flag, when
|
|
175
180
|
# set to true and used with name_only: true, that allows a user without the
|
|
176
|
-
# required privilege to run the command when access control is enforced
|
|
181
|
+
# required privilege to run the command when access control is enforced.
|
|
182
|
+
# @option options [ Object ] :comment A user-provided
|
|
183
|
+
# comment to attach to this command.
|
|
177
184
|
#
|
|
178
|
-
# See https://
|
|
185
|
+
# See https://mongodb.com/docs/manual/reference/command/listCollections/
|
|
179
186
|
# for more information and usage.
|
|
180
187
|
#
|
|
181
188
|
# @return [ Array<Mongo::Collection> ] The collections.
|
|
@@ -219,7 +226,7 @@ module Mongo
|
|
|
219
226
|
client.send(:with_session, opts) do |session|
|
|
220
227
|
server = selector.select_server(cluster, nil, session)
|
|
221
228
|
op = Operation::Command.new(
|
|
222
|
-
:selector => operation
|
|
229
|
+
:selector => operation,
|
|
223
230
|
:db_name => name,
|
|
224
231
|
:read => selector,
|
|
225
232
|
:session => session
|
|
@@ -258,6 +265,7 @@ module Mongo
|
|
|
258
265
|
db_name: name,
|
|
259
266
|
read: preference,
|
|
260
267
|
session: session,
|
|
268
|
+
comment: opts[:comment],
|
|
261
269
|
).execute(server, context: Operation::Context.new(client: client, session: session))
|
|
262
270
|
end
|
|
263
271
|
end
|
|
@@ -378,7 +386,8 @@ module Mongo
|
|
|
378
386
|
# @option options [ true, false ] :bypass_document_validation Whether or
|
|
379
387
|
# not to skip document level validation.
|
|
380
388
|
# @option options [ Hash ] :collation The collation to use.
|
|
381
|
-
# @option options [
|
|
389
|
+
# @option options [ Object ] :comment A user-provided
|
|
390
|
+
# comment to attach to this command.
|
|
382
391
|
# @option options [ String ] :hint The index to use for the aggregation.
|
|
383
392
|
# @option options [ Integer ] :max_time_ms The maximum amount of time in
|
|
384
393
|
# milliseconds to allow the aggregation to run.
|
|
@@ -405,10 +414,35 @@ module Mongo
|
|
|
405
414
|
# @param [ Array<Hash> ] pipeline Optional additional filter operators.
|
|
406
415
|
# @param [ Hash ] options The change stream options.
|
|
407
416
|
#
|
|
408
|
-
# @option options [ String ] :full_document Allowed values: 'default',
|
|
409
|
-
#
|
|
410
|
-
#
|
|
411
|
-
#
|
|
417
|
+
# @option options [ String ] :full_document Allowed values: nil, 'default',
|
|
418
|
+
# 'updateLookup', 'whenAvailable', 'required'.
|
|
419
|
+
#
|
|
420
|
+
# The default is to not send a value (i.e. nil), which is equivalent to
|
|
421
|
+
# 'default'. By default, the change notification for partial updates will
|
|
422
|
+
# include a delta describing the changes to the document.
|
|
423
|
+
#
|
|
424
|
+
# When set to 'updateLookup', the change notification for partial updates
|
|
425
|
+
# will include both a delta describing the changes to the document as well
|
|
426
|
+
# as a copy of the entire document that was changed from some time after
|
|
427
|
+
# the change occurred.
|
|
428
|
+
#
|
|
429
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
|
430
|
+
# post-image of the modified document for replace and update change events
|
|
431
|
+
# if the post-image for this event is available.
|
|
432
|
+
#
|
|
433
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
|
434
|
+
# an error is raised if the post-image is not available.
|
|
435
|
+
# @option options [ String ] :full_document_before_change Allowed values: nil,
|
|
436
|
+
# 'whenAvailable', 'required', 'off'.
|
|
437
|
+
#
|
|
438
|
+
# The default is to not send a value (i.e. nil), which is equivalent to 'off'.
|
|
439
|
+
#
|
|
440
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
|
441
|
+
# pre-image of the modified document for replace, update, and delete change
|
|
442
|
+
# events if it is available.
|
|
443
|
+
#
|
|
444
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
|
445
|
+
# an error is raised if the pre-image is not available.
|
|
412
446
|
# @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
|
|
413
447
|
# for the new change stream.
|
|
414
448
|
# @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
|
|
@@ -420,6 +454,13 @@ module Mongo
|
|
|
420
454
|
# changes that occurred after the specified timestamp. Any command run
|
|
421
455
|
# against the server will return a cluster time that can be used here.
|
|
422
456
|
# Only recognized by server versions 4.0+.
|
|
457
|
+
# @option options [ Object ] :comment A user-provided
|
|
458
|
+
# comment to attach to this command.
|
|
459
|
+
# @option options [ Boolean ] :show_expanded_events Enables the server to
|
|
460
|
+
# send the 'expanded' list of change stream events. The list of additional
|
|
461
|
+
# events included with this flag set are: createIndexes, dropIndexes,
|
|
462
|
+
# modify, create, shardCollection, reshardCollection,
|
|
463
|
+
# refineCollectionShardKey.
|
|
423
464
|
#
|
|
424
465
|
# @note A change stream only allows 'majority' read concern.
|
|
425
466
|
# @note This helper method is preferable to running a raw aggregation with a $changeStream
|
|
@@ -429,8 +470,11 @@ module Mongo
|
|
|
429
470
|
#
|
|
430
471
|
# @since 2.6.0
|
|
431
472
|
def watch(pipeline = [], options = {})
|
|
473
|
+
view_options = options.dup
|
|
474
|
+
view_options[:await_data] = true if options[:max_await_time_ms]
|
|
475
|
+
|
|
432
476
|
Mongo::Collection::View::ChangeStream.new(
|
|
433
|
-
Mongo::Collection::View.new(collection("#{COMMAND}.aggregate")),
|
|
477
|
+
Mongo::Collection::View.new(collection("#{COMMAND}.aggregate"), {}, view_options),
|
|
434
478
|
pipeline,
|
|
435
479
|
Mongo::Collection::View::ChangeStream::DATABASE,
|
|
436
480
|
options)
|
data/lib/mongo/dbref.rb
CHANGED
|
@@ -16,109 +16,5 @@
|
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
|
|
18
18
|
module Mongo
|
|
19
|
-
|
|
20
|
-
# Represents a DBRef document in the database.
|
|
21
|
-
#
|
|
22
|
-
# @since 2.1.0
|
|
23
|
-
class DBRef
|
|
24
|
-
include BSON::JSON
|
|
25
|
-
|
|
26
|
-
# The constant for the collection reference field.
|
|
27
|
-
#
|
|
28
|
-
# @since 2.1.0
|
|
29
|
-
COLLECTION = '$ref'.freeze
|
|
30
|
-
|
|
31
|
-
# The constant for the id field.
|
|
32
|
-
#
|
|
33
|
-
# @since 2.1.0
|
|
34
|
-
ID = '$id'.freeze
|
|
35
|
-
|
|
36
|
-
# The constant for the database field.
|
|
37
|
-
#
|
|
38
|
-
# @since 2.1.0
|
|
39
|
-
DATABASE = '$db'.freeze
|
|
40
|
-
|
|
41
|
-
# @return [ String ] collection The collection name.
|
|
42
|
-
attr_reader :collection
|
|
43
|
-
|
|
44
|
-
# @return [ BSON::ObjectId ] id The referenced document id.
|
|
45
|
-
attr_reader :id
|
|
46
|
-
|
|
47
|
-
# @return [ String ] database The database name.
|
|
48
|
-
attr_reader :database
|
|
49
|
-
|
|
50
|
-
# Get the DBRef as a JSON document
|
|
51
|
-
#
|
|
52
|
-
# @example Get the DBRef as a JSON hash.
|
|
53
|
-
# dbref.as_json
|
|
54
|
-
#
|
|
55
|
-
# @return [ Hash ] The max key as a JSON hash.
|
|
56
|
-
#
|
|
57
|
-
# @since 2.1.0
|
|
58
|
-
def as_json(*args)
|
|
59
|
-
document = { COLLECTION => collection, ID => id }
|
|
60
|
-
document.merge!(DATABASE => database) if database
|
|
61
|
-
document
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Instantiate a new DBRef.
|
|
65
|
-
#
|
|
66
|
-
# @example Create the DBRef.
|
|
67
|
-
# Mongo::DBRef.new('users', id, 'database')
|
|
68
|
-
#
|
|
69
|
-
# @param [ String ] collection The collection name.
|
|
70
|
-
# @param [ BSON::ObjectId ] id The object id.
|
|
71
|
-
# @param [ String ] database The database name.
|
|
72
|
-
#
|
|
73
|
-
# @since 2.1.0
|
|
74
|
-
def initialize(collection, id, database = nil)
|
|
75
|
-
@collection = collection
|
|
76
|
-
@id = id
|
|
77
|
-
@database = database
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Converts the DBRef to raw BSON.
|
|
81
|
-
#
|
|
82
|
-
# @example Convert the DBRef to raw BSON.
|
|
83
|
-
# dbref.to_bson
|
|
84
|
-
#
|
|
85
|
-
# @param [ BSON::ByteBuffer ] buffer The encoded BSON buffer to append to.
|
|
86
|
-
# @param [ true, false ] validating_keys Whether keys should be validated when serializing.
|
|
87
|
-
#
|
|
88
|
-
# @return [ String ] The raw BSON.
|
|
89
|
-
#
|
|
90
|
-
# @since 2.1.0
|
|
91
|
-
def to_bson(buffer = BSON::ByteBuffer.new, validating_keys = BSON::Config.validating_keys?)
|
|
92
|
-
as_json.to_bson(buffer)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
module ClassMethods
|
|
96
|
-
|
|
97
|
-
# Deserialize the hash from BSON, converting to a DBRef if appropriate.
|
|
98
|
-
#
|
|
99
|
-
# @param [ String ] buffer The bson representing a hash.
|
|
100
|
-
#
|
|
101
|
-
# @return [ Hash, DBRef ] The decoded hash or DBRef.
|
|
102
|
-
#
|
|
103
|
-
# @see http://bsonspec.org/#/specification
|
|
104
|
-
#
|
|
105
|
-
# @since 2.0.0
|
|
106
|
-
def from_bson(buffer, **options)
|
|
107
|
-
# bson-ruby 4.8.0 changes #from_bson API to take **options.
|
|
108
|
-
# However older bsons fail if invoked with a plain super here,
|
|
109
|
-
# even if options are empty.
|
|
110
|
-
decoded = if options.empty?
|
|
111
|
-
super(buffer)
|
|
112
|
-
else
|
|
113
|
-
super
|
|
114
|
-
end
|
|
115
|
-
if ref = decoded[COLLECTION]
|
|
116
|
-
decoded = DBRef.new(ref, decoded[ID], decoded[DATABASE])
|
|
117
|
-
end
|
|
118
|
-
decoded
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
::Hash.send(:extend, DBRef::ClassMethods)
|
|
19
|
+
DBRef = BSON::DBRef
|
|
124
20
|
end
|
|
@@ -55,15 +55,42 @@ module Mongo
|
|
|
55
55
|
|
|
56
56
|
private
|
|
57
57
|
|
|
58
|
+
# Generates an error message when there are multiple write errors.
|
|
59
|
+
#
|
|
60
|
+
# @example Multiple documents fail validation
|
|
61
|
+
#
|
|
62
|
+
# col has validation { 'validator' => { 'x' => { '$type' => 'string' } } }
|
|
63
|
+
# col.insert_many([{_id: 1}, {_id: 2}], ordered: false)
|
|
64
|
+
#
|
|
65
|
+
# Multiple errors:
|
|
66
|
+
# [121]: Document failed validation --
|
|
67
|
+
# {"failingDocumentId":1,"details":{"operatorName":"$type",
|
|
68
|
+
# "specifiedAs":{"x":{"$type":"string"}},"reason":"field was
|
|
69
|
+
# missing"}};
|
|
70
|
+
# [121]: Document failed validation --
|
|
71
|
+
# {"failingDocumentId":2, "details":{"operatorName":"$type",
|
|
72
|
+
# "specifiedAs":{"x":{"$type":"string"}}, "reason":"field was
|
|
73
|
+
# missing"}}
|
|
74
|
+
#
|
|
75
|
+
# @return [ String ] The error message
|
|
58
76
|
def build_message
|
|
59
77
|
errors = @result['writeErrors']
|
|
60
78
|
return nil unless errors
|
|
61
79
|
|
|
62
|
-
fragment =
|
|
63
|
-
|
|
64
|
-
|
|
80
|
+
fragment = ""
|
|
81
|
+
cut_short = false
|
|
82
|
+
errors.first(10).each_with_index do |error, i|
|
|
83
|
+
fragment += "; " if fragment.length > 0
|
|
84
|
+
fragment += "[#{error['code']}]: #{error['errmsg']}"
|
|
85
|
+
fragment += " -- #{error['errInfo'].to_json}" if error['errInfo']
|
|
86
|
+
|
|
87
|
+
if fragment.length > 3000
|
|
88
|
+
cut_short = i < [9, errors.length].min
|
|
89
|
+
break
|
|
90
|
+
end
|
|
91
|
+
end
|
|
65
92
|
|
|
66
|
-
fragment += '...' if errors.length > 10
|
|
93
|
+
fragment += '...' if errors.length > 10 || cut_short
|
|
67
94
|
|
|
68
95
|
if errors.length > 1
|
|
69
96
|
fragment = "Multiple errors: #{fragment}"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongo
|
|
4
|
+
class Error
|
|
5
|
+
|
|
6
|
+
# This error is raised when a bad configuration option is attempted to be
|
|
7
|
+
# set.
|
|
8
|
+
class InvalidConfigOption < Error
|
|
9
|
+
|
|
10
|
+
# Create the new error.
|
|
11
|
+
#
|
|
12
|
+
# @param [ Symbol, String ] name The attempted config option name.
|
|
13
|
+
#
|
|
14
|
+
# @api private
|
|
15
|
+
def initialize(name)
|
|
16
|
+
super("Invalid config option #{name}.")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -19,23 +19,41 @@ module Mongo
|
|
|
19
19
|
class Error
|
|
20
20
|
|
|
21
21
|
# Exception raised if the object is not a valid replacement document.
|
|
22
|
-
#
|
|
23
|
-
# @since 2.0.0
|
|
24
22
|
class InvalidReplacementDocument < Error
|
|
25
23
|
|
|
26
24
|
# The error message.
|
|
27
25
|
#
|
|
28
|
-
# @
|
|
26
|
+
# @deprecated
|
|
29
27
|
MESSAGE = 'Invalid replacement document provided'.freeze
|
|
30
28
|
|
|
31
|
-
#
|
|
29
|
+
# Construct the error message.
|
|
30
|
+
#
|
|
31
|
+
# @param [ String ] key The invalid key.
|
|
32
|
+
#
|
|
33
|
+
# @return [ String ] The error message.
|
|
32
34
|
#
|
|
33
|
-
# @
|
|
34
|
-
|
|
35
|
+
# @api private
|
|
36
|
+
def self.message(key)
|
|
37
|
+
message = "Invalid replacement document provided. Replacement documents "
|
|
38
|
+
message += "must not contain atomic modifiers. The \"#{key}\" key is invalid."
|
|
39
|
+
message
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Send and cache the warning.
|
|
43
|
+
#
|
|
44
|
+
# @api private
|
|
45
|
+
def self.warn(logger, key)
|
|
46
|
+
@warned ||= begin
|
|
47
|
+
logger.warn(message(key))
|
|
48
|
+
true
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Instantiate the new exception.
|
|
35
53
|
#
|
|
36
|
-
# @
|
|
37
|
-
def initialize
|
|
38
|
-
super(
|
|
54
|
+
# @param [ String ] :key The invalid key.
|
|
55
|
+
def initialize(key: nil)
|
|
56
|
+
super(self.class.message(key))
|
|
39
57
|
end
|
|
40
58
|
end
|
|
41
59
|
end
|