mongo 2.13.0 → 2.15.0.alpha
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 +1 -4
- data.tar.gz.sig +0 -0
- data/README.md +4 -1
- data/Rakefile +46 -18
- data/lib/mongo.rb +32 -0
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +1 -1
- data/lib/mongo/auth/aws/conversation.rb +1 -4
- data/lib/mongo/auth/base.rb +13 -7
- data/lib/mongo/auth/conversation_base.rb +32 -0
- data/lib/mongo/auth/cr/conversation.rb +6 -29
- data/lib/mongo/auth/gssapi/conversation.rb +4 -15
- data/lib/mongo/auth/ldap/conversation.rb +3 -14
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
- data/lib/mongo/auth/scram_conversation_base.rb +7 -34
- data/lib/mongo/auth/user/view.rb +16 -9
- data/lib/mongo/auth/x509/conversation.rb +4 -25
- data/lib/mongo/background_thread.rb +11 -0
- data/lib/mongo/bulk_write.rb +38 -18
- data/lib/mongo/caching_cursor.rb +74 -0
- data/lib/mongo/client.rb +142 -16
- data/lib/mongo/cluster.rb +22 -31
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
- data/lib/mongo/cluster/sdam_flow.rb +14 -0
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/collection.rb +58 -18
- data/lib/mongo/collection/view.rb +24 -20
- data/lib/mongo/collection/view/aggregation.rb +26 -5
- data/lib/mongo/collection/view/builder/find_command.rb +38 -18
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/explainable.rb +27 -8
- data/lib/mongo/collection/view/iterable.rb +73 -13
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +57 -21
- data/lib/mongo/collection/view/writable.rb +29 -15
- data/lib/mongo/crypt/encryption_io.rb +6 -6
- data/lib/mongo/cursor.rb +18 -5
- data/lib/mongo/database.rb +28 -5
- data/lib/mongo/database/view.rb +2 -2
- data/lib/mongo/error.rb +11 -1
- data/lib/mongo/error/bulk_write_error.rb +17 -3
- data/lib/mongo/error/internal_driver_error.rb +22 -0
- data/lib/mongo/error/invalid_read_concern.rb +28 -0
- data/lib/mongo/error/operation_failure.rb +26 -7
- data/lib/mongo/error/parser.rb +65 -12
- data/lib/mongo/error/server_api_conflict.rb +23 -0
- data/lib/mongo/error/server_api_not_supported.rb +24 -0
- data/lib/mongo/error/server_certificate_revoked.rb +22 -0
- data/lib/mongo/error/unmet_dependency.rb +21 -0
- data/lib/mongo/error/unsupported_option.rb +14 -12
- data/lib/mongo/grid/fs_bucket.rb +37 -37
- data/lib/mongo/index/view.rb +21 -11
- data/lib/mongo/lint.rb +2 -1
- data/lib/mongo/logger.rb +3 -3
- data/lib/mongo/monitoring.rb +13 -4
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
- data/lib/mongo/operation.rb +4 -2
- data/lib/mongo/operation/aggregate/result.rb +9 -8
- data/lib/mongo/operation/collections_info.rb +18 -1
- data/lib/mongo/operation/collections_info/command.rb +5 -0
- data/lib/mongo/operation/collections_info/result.rb +18 -1
- data/lib/mongo/operation/context.rb +99 -0
- data/lib/mongo/operation/delete/bulk_result.rb +2 -0
- data/lib/mongo/operation/delete/result.rb +3 -0
- data/lib/mongo/operation/explain/command.rb +4 -0
- data/lib/mongo/operation/explain/legacy.rb +4 -0
- data/lib/mongo/operation/explain/op_msg.rb +6 -0
- data/lib/mongo/operation/explain/result.rb +3 -0
- data/lib/mongo/operation/find/legacy/result.rb +2 -0
- data/lib/mongo/operation/find/result.rb +13 -0
- data/lib/mongo/operation/get_more/result.rb +3 -0
- data/lib/mongo/operation/indexes.rb +15 -1
- data/lib/mongo/operation/indexes/result.rb +5 -0
- data/lib/mongo/operation/insert/bulk_result.rb +5 -0
- 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 +2 -2
- data/lib/mongo/operation/insert/result.rb +5 -0
- data/lib/mongo/operation/list_collections/result.rb +9 -1
- data/lib/mongo/operation/map_reduce/result.rb +10 -0
- data/lib/mongo/operation/parallel_scan/result.rb +4 -0
- data/lib/mongo/operation/result.rb +37 -6
- data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
- data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
- data/lib/mongo/operation/shared/executable.rb +25 -14
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/idable.rb +2 -1
- data/lib/mongo/operation/shared/limited.rb +1 -0
- data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
- data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
- data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
- data/lib/mongo/operation/shared/response_handling.rb +23 -23
- data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +14 -2
- data/lib/mongo/operation/shared/specifiable.rb +1 -0
- data/lib/mongo/operation/shared/write.rb +9 -18
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
- data/lib/mongo/operation/update/legacy/result.rb +7 -0
- data/lib/mongo/operation/update/result.rb +8 -0
- data/lib/mongo/operation/users_info/result.rb +3 -0
- data/lib/mongo/protocol/compressed.rb +51 -5
- data/lib/mongo/protocol/message.rb +31 -4
- data/lib/mongo/protocol/msg.rb +37 -12
- data/lib/mongo/protocol/query.rb +36 -0
- data/lib/mongo/query_cache.rb +272 -0
- data/lib/mongo/retryable.rb +9 -2
- data/lib/mongo/server.rb +12 -16
- data/lib/mongo/server/app_metadata.rb +52 -18
- data/lib/mongo/server/connection.rb +5 -0
- data/lib/mongo/server/connection_base.rb +16 -15
- data/lib/mongo/server/connection_common.rb +2 -2
- data/lib/mongo/server/connection_pool.rb +9 -4
- data/lib/mongo/server/description.rb +12 -1
- data/lib/mongo/server/description/features.rb +9 -8
- data/lib/mongo/server/monitor.rb +21 -2
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +12 -13
- data/lib/mongo/server/pending_connection.rb +26 -8
- data/lib/mongo/server/push_monitor.rb +12 -2
- data/lib/mongo/server_selector/base.rb +5 -1
- data/lib/mongo/session.rb +7 -3
- data/lib/mongo/session/session_pool.rb +4 -2
- data/lib/mongo/socket.rb +35 -8
- data/lib/mongo/socket/ocsp_cache.rb +97 -0
- data/lib/mongo/socket/ocsp_verifier.rb +368 -0
- data/lib/mongo/socket/ssl.rb +53 -24
- data/lib/mongo/srv/monitor.rb +7 -24
- data/lib/mongo/srv/resolver.rb +14 -10
- data/lib/mongo/timeout.rb +2 -0
- data/lib/mongo/uri.rb +21 -390
- data/lib/mongo/uri/options_mapper.rb +620 -0
- data/lib/mongo/uri/srv_protocol.rb +3 -2
- data/lib/mongo/utils.rb +27 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/NOTES.aws-auth.md +12 -7
- data/spec/README.md +87 -2
- data/spec/integration/auth_spec.rb +25 -15
- data/spec/integration/bson_symbol_spec.rb +4 -2
- data/spec/integration/bulk_write_error_message_spec.rb +41 -0
- data/spec/integration/bulk_write_spec.rb +48 -0
- data/spec/integration/change_stream_spec.rb +5 -5
- data/spec/integration/client_authentication_options_spec.rb +92 -28
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +6 -2
- data/spec/integration/command_monitoring_spec.rb +2 -2
- data/spec/integration/connection_pool_populator_spec.rb +4 -2
- data/spec/integration/connection_spec.rb +2 -0
- data/spec/integration/cursor_reaping_spec.rb +54 -18
- data/spec/integration/docs_examples_spec.rb +8 -1
- data/spec/integration/fork_reconnect_spec.rb +60 -2
- data/spec/integration/ocsp_connectivity_spec.rb +26 -0
- data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
- data/spec/integration/ocsp_verifier_spec.rb +340 -0
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +90 -0
- data/spec/integration/query_cache_spec.rb +1045 -0
- data/spec/integration/query_cache_transactions_spec.rb +190 -0
- data/spec/integration/reconnect_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
- data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
- data/spec/integration/sdam_error_handling_spec.rb +86 -1
- data/spec/integration/sdam_events_spec.rb +8 -7
- data/spec/integration/server_selection_spec.rb +36 -0
- data/spec/integration/size_limit_spec.rb +20 -19
- data/spec/integration/snappy_compression_spec.rb +25 -0
- data/spec/integration/srv_monitoring_spec.rb +39 -4
- data/spec/integration/srv_spec.rb +56 -0
- data/spec/integration/transactions_examples_spec.rb +23 -7
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +26 -0
- data/spec/lite_spec_helper.rb +15 -5
- data/spec/mongo/address_spec.rb +16 -12
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
- data/spec/mongo/bulk_write_spec.rb +2 -2
- data/spec/mongo/caching_cursor_spec.rb +70 -0
- data/spec/mongo/client_construction_spec.rb +273 -35
- data/spec/mongo/client_encryption_spec.rb +16 -10
- data/spec/mongo/client_spec.rb +64 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
- data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
- data/spec/mongo/cluster/topology/single_spec.rb +15 -6
- data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -1
- data/spec/mongo/cluster_spec.rb +6 -18
- data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
- data/spec/mongo/collection/view/explainable_spec.rb +87 -4
- data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
- data/spec/mongo/collection/view/readable_spec.rb +50 -0
- data/spec/mongo/collection_crud_spec.rb +4357 -0
- data/spec/mongo/collection_ddl_spec.rb +534 -0
- data/spec/mongo/collection_spec.rb +5 -4787
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
- data/spec/mongo/crypt/binding/context_spec.rb +2 -7
- data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
- data/spec/mongo/crypt/binding/status_spec.rb +1 -6
- data/spec/mongo/crypt/binding/version_spec.rb +1 -6
- data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
- data/spec/mongo/crypt/status_spec.rb +1 -6
- data/spec/mongo/database_spec.rb +174 -4
- data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +37 -6
- data/spec/mongo/index/view_spec.rb +8 -2
- data/spec/mongo/logger_spec.rb +13 -11
- data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +2 -1
- data/spec/mongo/operation/collections_info_spec.rb +4 -1
- data/spec/mongo/operation/command_spec.rb +6 -3
- data/spec/mongo/operation/create_index_spec.rb +6 -3
- data/spec/mongo/operation/create_user_spec.rb +6 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
- data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/delete_spec.rb +11 -7
- data/spec/mongo/operation/drop_index_spec.rb +6 -2
- data/spec/mongo/operation/find/legacy_spec.rb +3 -1
- data/spec/mongo/operation/get_more_spec.rb +3 -1
- data/spec/mongo/operation/indexes_spec.rb +5 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
- data/spec/mongo/operation/insert/command_spec.rb +2 -2
- data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/insert_spec.rb +15 -12
- data/spec/mongo/operation/map_reduce_spec.rb +5 -2
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
- data/spec/mongo/operation/remove_user_spec.rb +6 -3
- data/spec/mongo/operation/result_spec.rb +1 -1
- data/spec/mongo/operation/update/bulk_spec.rb +9 -6
- data/spec/mongo/operation/update/command_spec.rb +2 -2
- data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
- data/spec/mongo/operation/update_spec.rb +10 -7
- data/spec/mongo/operation/update_user_spec.rb +4 -1
- data/spec/mongo/protocol/compressed_spec.rb +26 -12
- data/spec/mongo/query_cache_middleware_spec.rb +55 -0
- data/spec/mongo/query_cache_spec.rb +280 -0
- data/spec/mongo/retryable_spec.rb +3 -2
- data/spec/mongo/server/app_metadata_shared.rb +2 -2
- data/spec/mongo/server/app_metadata_spec.rb +2 -0
- data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
- data/spec/mongo/server/connection_pool_spec.rb +8 -4
- data/spec/mongo/server/connection_spec.rb +39 -25
- data/spec/mongo/server/description_spec.rb +18 -0
- data/spec/mongo/server/monitor/connection_spec.rb +17 -7
- data/spec/mongo/server/monitor_spec.rb +9 -1
- data/spec/mongo/server_selector_spec.rb +2 -2
- data/spec/mongo/server_spec.rb +15 -2
- data/spec/mongo/socket/ssl_spec.rb +44 -4
- data/spec/mongo/socket_spec.rb +2 -2
- data/spec/mongo/tls_context_hooks_spec.rb +37 -0
- data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
- data/spec/mongo/uri_option_parsing_spec.rb +11 -11
- data/spec/mongo/uri_spec.rb +68 -41
- data/spec/mongo/utils_spec.rb +39 -0
- data/spec/runners/auth.rb +3 -0
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/connection_string.rb +31 -124
- data/spec/runners/crud/requirement.rb +40 -3
- data/spec/runners/crud/test_base.rb +0 -19
- data/spec/runners/crud/verifier.rb +8 -0
- data/spec/runners/server_selection.rb +1 -1
- data/spec/runners/transactions/operation.rb +13 -2
- data/spec/runners/transactions/test.rb +3 -2
- data/spec/runners/unified.rb +96 -0
- data/spec/runners/unified/assertions.rb +249 -0
- data/spec/runners/unified/change_stream_operations.rb +26 -0
- data/spec/runners/unified/crud_operations.rb +199 -0
- data/spec/runners/unified/ddl_operations.rb +96 -0
- data/spec/runners/unified/entity_map.rb +39 -0
- data/spec/runners/unified/error.rb +25 -0
- data/spec/runners/unified/event_subscriber.rb +91 -0
- data/spec/runners/unified/exceptions.rb +21 -0
- data/spec/runners/unified/grid_fs_operations.rb +55 -0
- data/spec/runners/unified/support_operations.rb +250 -0
- data/spec/runners/unified/test.rb +393 -0
- data/spec/runners/unified/test_group.rb +28 -0
- data/spec/runners/unified/using_hash.rb +31 -0
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +218 -0
- data/spec/shared/lib/mrss/constraints.rb +346 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +112 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +231 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +290 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/solo/clean_exit_spec.rb +21 -0
- data/spec/spec_helper.rb +7 -2
- data/spec/spec_tests/cmap_spec.rb +7 -3
- data/spec/spec_tests/crud_unified_spec.rb +10 -0
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -2
- data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
- data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
- data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
- data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
- data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
- data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
- data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
- data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +7 -4
- data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
- data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
- data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
- data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
- data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
- data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
- data/spec/spec_tests/unified_spec.rb +15 -0
- data/spec/spec_tests/uri_options_spec.rb +47 -33
- data/spec/spec_tests/versioned_api_spec.rb +10 -0
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
- data/spec/support/certificates/atlas-ocsp.crt +41 -0
- data/spec/support/client_registry_macros.rb +11 -2
- data/spec/support/common_shortcuts.rb +59 -0
- data/spec/support/constraints.rb +6 -253
- data/spec/support/matchers.rb +16 -0
- data/spec/support/ocsp +1 -0
- data/spec/support/session_registry.rb +52 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +68 -3
- data/spec/support/spec_setup.rb +48 -38
- data/spec/support/utils.rb +102 -4
- metadata +1087 -936
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -56
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
- data/spec/support/child_process_helper.rb +0 -78
- data/spec/support/cluster_config.rb +0 -207
- data/spec/support/lite_constraints.rb +0 -141
- data/spec/support/spec_organizer.rb +0 -129
@@ -52,21 +52,6 @@ module Mongo
|
|
52
52
|
collation: 'collation'
|
53
53
|
).freeze
|
54
54
|
|
55
|
-
def_delegators :@view, :collection, :database, :filter, :options, :read
|
56
|
-
|
57
|
-
# Get the specification for an explain command that wraps the find
|
58
|
-
# command.
|
59
|
-
#
|
60
|
-
# @example Get the explain spec.
|
61
|
-
# builder.explain_specification
|
62
|
-
#
|
63
|
-
# @return [ Hash ] The specification.
|
64
|
-
#
|
65
|
-
# @since 2.2.0
|
66
|
-
def explain_specification
|
67
|
-
{ selector: { explain: find_command }, db_name: database.name, read: read, session: @session }
|
68
|
-
end
|
69
|
-
|
70
55
|
# Create the find command builder.
|
71
56
|
#
|
72
57
|
# @example Create the find command builder.
|
@@ -81,6 +66,8 @@ module Mongo
|
|
81
66
|
@session = session
|
82
67
|
end
|
83
68
|
|
69
|
+
def_delegators :@view, :collection, :database, :filter, :options, :read
|
70
|
+
|
84
71
|
# Get the specification to pass to the find command operation.
|
85
72
|
#
|
86
73
|
# @example Get the specification.
|
@@ -90,18 +77,51 @@ module Mongo
|
|
90
77
|
#
|
91
78
|
# @since 2.2.0
|
92
79
|
def specification
|
93
|
-
{
|
80
|
+
{
|
81
|
+
selector: find_command,
|
82
|
+
db_name: database.name,
|
83
|
+
read: read,
|
84
|
+
session: @session,
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
# Get the specification for an explain command that wraps the find
|
89
|
+
# command.
|
90
|
+
#
|
91
|
+
# @example Get the explain spec.
|
92
|
+
# builder.explain_specification
|
93
|
+
#
|
94
|
+
# @return [ Hash ] The specification.
|
95
|
+
#
|
96
|
+
# @since 2.2.0
|
97
|
+
def explain_specification
|
98
|
+
{
|
99
|
+
selector: {
|
100
|
+
explain: find_command,
|
101
|
+
},
|
102
|
+
db_name: database.name,
|
103
|
+
read: read,
|
104
|
+
session: @session,
|
105
|
+
# We should always have options{:explain] set if we are explaining.
|
106
|
+
# The explain field is not sent to the server, it will be
|
107
|
+
# processed in the operation layer.
|
108
|
+
explain: options[:explain],
|
109
|
+
}
|
94
110
|
end
|
95
111
|
|
96
112
|
private
|
97
113
|
|
98
114
|
def find_command
|
99
|
-
document = BSON::Document.new(
|
115
|
+
document = BSON::Document.new(
|
116
|
+
find: collection.name,
|
117
|
+
filter: filter,
|
118
|
+
)
|
100
119
|
if collection.read_concern
|
101
120
|
document[:readConcern] = Options::Mapper.transform_values_to_strings(
|
102
121
|
collection.read_concern)
|
103
122
|
end
|
104
|
-
command = Options::Mapper.transform_documents(
|
123
|
+
command = Options::Mapper.transform_documents(
|
124
|
+
convert_flags(options), MAPPINGS, document)
|
105
125
|
if command['oplogReplay']
|
106
126
|
log_warn("oplogReplay is deprecated and ignored by MongoDB 4.4 and later")
|
107
127
|
end
|
@@ -346,7 +346,7 @@ module Mongo
|
|
346
346
|
end
|
347
347
|
|
348
348
|
def send_initial_query(server, session)
|
349
|
-
initial_query_op(session).execute(server, client: client)
|
349
|
+
initial_query_op(session).execute(server, context: Operation::Context.new(client: client, session: session))
|
350
350
|
end
|
351
351
|
|
352
352
|
def time_to_bson_timestamp(time)
|
@@ -36,16 +36,25 @@ module Mongo
|
|
36
36
|
# @since 2.2.0
|
37
37
|
ALL_PLANS_EXECUTION = 'allPlansExecution'.freeze
|
38
38
|
|
39
|
-
# Get the
|
39
|
+
# Get the query plan for the query.
|
40
40
|
#
|
41
|
-
# @example Get the
|
42
|
-
# view.explain
|
41
|
+
# @example Get the query plan for the query with execution statistics.
|
42
|
+
# view.explain(verbosity: :execution_stats)
|
43
43
|
#
|
44
|
-
# @
|
44
|
+
# @option opts [ true | false ] :verbose The level of detail
|
45
|
+
# to return for MongoDB 2.6 servers.
|
46
|
+
# @option opts [ String | Symbol ] :verbosity The type of information
|
47
|
+
# to return for MongoDB 3.0 and newer servers. If the value is a
|
48
|
+
# symbol, it will be stringified and converted from underscore
|
49
|
+
# style to camel case style (e.g. :query_planner => "queryPlanner").
|
50
|
+
#
|
51
|
+
# @return [ Hash ] A single document with the query plan.
|
52
|
+
#
|
53
|
+
# @see https://docs.mongodb.com/manual/reference/method/db.collection.explain/#db.collection.explain
|
45
54
|
#
|
46
55
|
# @since 2.0.0
|
47
|
-
def explain
|
48
|
-
self.class.new(collection, selector, options.merge(explain_options)).first
|
56
|
+
def explain(**opts)
|
57
|
+
self.class.new(collection, selector, options.merge(explain_options(**opts))).first
|
49
58
|
end
|
50
59
|
|
51
60
|
private
|
@@ -54,9 +63,19 @@ module Mongo
|
|
54
63
|
!!options[:explain]
|
55
64
|
end
|
56
65
|
|
57
|
-
|
66
|
+
# @option opts [ true | false ] :verbose The level of detail
|
67
|
+
# to return for MongoDB 2.6 servers.
|
68
|
+
# @option opts [ String | Symbol ] :verbosity The type of information
|
69
|
+
# to return for MongoDB 3.0 and newer servers. If the value is a
|
70
|
+
# symbol, it will be stringified and converted from underscore
|
71
|
+
# style to camel case style (e.g. :query_planner => "queryPlanner").
|
72
|
+
def explain_options(**opts)
|
58
73
|
explain_limit = limit || 0
|
59
|
-
|
74
|
+
# Note: opts will never be nil here.
|
75
|
+
if Symbol === opts[:verbosity]
|
76
|
+
opts[:verbosity] = Utils.camelize(opts[:verbosity])
|
77
|
+
end
|
78
|
+
{ limit: -explain_limit.abs, explain: opts }
|
60
79
|
end
|
61
80
|
end
|
62
81
|
end
|
@@ -35,19 +35,34 @@ module Mongo
|
|
35
35
|
#
|
36
36
|
# @yieldparam [ Hash ] Each matching document.
|
37
37
|
def each
|
38
|
-
@cursor =
|
39
|
-
|
40
|
-
@cursor = if respond_to?(:write?, true) && write?
|
41
|
-
server = server_selector.select_server(cluster, nil, session)
|
42
|
-
result = send_initial_query(server, session)
|
43
|
-
Cursor.new(view, result, server, session: session)
|
38
|
+
@cursor = if use_query_cache? && cached_cursor
|
39
|
+
cached_cursor
|
44
40
|
else
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
session = client.send(:get_session, @options)
|
42
|
+
select_cursor(session)
|
43
|
+
end
|
44
|
+
|
45
|
+
if use_query_cache?
|
46
|
+
# No need to store the cursor in the query cache if there is
|
47
|
+
# already a cached cursor stored at this key.
|
48
|
+
QueryCache.set(@cursor, **cache_options) unless cached_cursor
|
49
|
+
|
50
|
+
# If a query with a limit is performed, the query cache will
|
51
|
+
# re-use results from an earlier query with the same or larger
|
52
|
+
# limit, and then impose the lower limit during iteration.
|
53
|
+
limit_for_cached_query = respond_to?(:limit) ? limit : nil
|
48
54
|
end
|
55
|
+
|
49
56
|
if block_given?
|
50
|
-
|
57
|
+
# Ruby versions 2.5 and older do not support arr[0..nil] syntax, so
|
58
|
+
# this must be a separate conditional.
|
59
|
+
cursor_to_iterate = if limit_for_cached_query
|
60
|
+
@cursor.to_a[0...limit_for_cached_query]
|
61
|
+
else
|
62
|
+
@cursor
|
63
|
+
end
|
64
|
+
|
65
|
+
cursor_to_iterate.each do |doc|
|
51
66
|
yield doc
|
52
67
|
end
|
53
68
|
else
|
@@ -77,6 +92,46 @@ module Mongo
|
|
77
92
|
|
78
93
|
private
|
79
94
|
|
95
|
+
def select_cursor(session)
|
96
|
+
if respond_to?(:write?, true) && write?
|
97
|
+
server = server_selector.select_server(cluster, nil, session)
|
98
|
+
result = send_initial_query(server, session)
|
99
|
+
|
100
|
+
# RUBY-2367: This will be updated to allow the query cache to
|
101
|
+
# cache cursors with multi-batch results.
|
102
|
+
if use_query_cache?
|
103
|
+
CachingCursor.new(view, result, server, session: session)
|
104
|
+
else
|
105
|
+
Cursor.new(view, result, server, session: session)
|
106
|
+
end
|
107
|
+
else
|
108
|
+
read_with_retry_cursor(session, server_selector, view) do |server|
|
109
|
+
send_initial_query(server, session)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def cached_cursor
|
115
|
+
QueryCache.get(**cache_options)
|
116
|
+
end
|
117
|
+
|
118
|
+
def cache_options
|
119
|
+
# NB: this hash is passed as keyword argument and must have symbol
|
120
|
+
# keys.
|
121
|
+
{
|
122
|
+
namespace: collection.namespace,
|
123
|
+
selector: selector,
|
124
|
+
skip: skip,
|
125
|
+
sort: sort,
|
126
|
+
limit: limit,
|
127
|
+
projection: projection,
|
128
|
+
collation: collation,
|
129
|
+
read_concern: read_concern,
|
130
|
+
read_preference: read_preference
|
131
|
+
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
80
135
|
def initial_query_op(server, session)
|
81
136
|
if server.with_connection { |connection| connection.features }.find_command_enabled?
|
82
137
|
initial_command_op(session)
|
@@ -92,16 +147,21 @@ module Mongo
|
|
92
147
|
end
|
93
148
|
|
94
149
|
def initial_command_op(session)
|
150
|
+
builder = Builder::FindCommand.new(self, session)
|
95
151
|
if explained?
|
96
|
-
Operation::Explain.new(
|
152
|
+
Operation::Explain.new(builder.explain_specification)
|
97
153
|
else
|
98
|
-
Operation::Find.new(
|
154
|
+
Operation::Find.new(builder.specification)
|
99
155
|
end
|
100
156
|
end
|
101
157
|
|
102
158
|
def send_initial_query(server, session = nil)
|
103
159
|
validate_collation!(server, collation)
|
104
|
-
initial_query_op(server, session).execute(server, client: client)
|
160
|
+
initial_query_op(server, session).execute(server, context: Operation::Context.new(client: client, session: session))
|
161
|
+
end
|
162
|
+
|
163
|
+
def use_query_cache?
|
164
|
+
QueryCache.enabled? && !collection.system_collection?
|
105
165
|
end
|
106
166
|
end
|
107
167
|
end
|
@@ -242,7 +242,7 @@ module Mongo
|
|
242
242
|
server = cluster.next_primary(nil, session)
|
243
243
|
end
|
244
244
|
validate_collation!(server)
|
245
|
-
initial_query_op(session).execute(server, client: client)
|
245
|
+
initial_query_op(session).execute(server, context: Operation::Context.new(client: client, session: session))
|
246
246
|
end
|
247
247
|
|
248
248
|
def fetch_query_spec
|
@@ -262,7 +262,7 @@ module Mongo
|
|
262
262
|
end
|
263
263
|
|
264
264
|
def send_fetch_query(server, session)
|
265
|
-
fetch_query_op(server, session).execute(server, client: client)
|
265
|
+
fetch_query_op(server, session).execute(server, context: Operation::Context.new(client: client, session: session))
|
266
266
|
end
|
267
267
|
|
268
268
|
def validate_collation!(server)
|
@@ -45,7 +45,17 @@ module Mongo
|
|
45
45
|
#
|
46
46
|
# @since 2.0.0
|
47
47
|
def aggregate(pipeline, options = {})
|
48
|
-
Aggregation.new(self, pipeline, options)
|
48
|
+
aggregation = Aggregation.new(self, pipeline, options)
|
49
|
+
|
50
|
+
# Because the $merge and $out pipeline stages write documents to the
|
51
|
+
# collection, it is necessary to clear the cache when they are performed.
|
52
|
+
#
|
53
|
+
# Opt to clear the entire cache rather than one namespace because
|
54
|
+
# the $out and $merge stages do not have to write to the same namespace
|
55
|
+
# on which the aggregation is performed.
|
56
|
+
QueryCache.clear if aggregation.write?
|
57
|
+
|
58
|
+
aggregation
|
49
59
|
end
|
50
60
|
|
51
61
|
# Allows the server to write temporary data to disk while executing
|
@@ -90,7 +100,7 @@ module Mongo
|
|
90
100
|
# @param [ Integer ] batch_size The size of each batch of results.
|
91
101
|
#
|
92
102
|
# @return [ Integer, View ] Either the batch_size value or a
|
93
|
-
#
|
103
|
+
# new +View+.
|
94
104
|
#
|
95
105
|
# @since 2.0.0
|
96
106
|
def batch_size(batch_size = nil)
|
@@ -162,8 +172,8 @@ module Mongo
|
|
162
172
|
:db_name => database.name,
|
163
173
|
:options => {:limit => -1},
|
164
174
|
:read => read_pref,
|
165
|
-
:session => session
|
166
|
-
).execute(server, client: client)
|
175
|
+
:session => session,
|
176
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
167
177
|
end.n.to_i
|
168
178
|
end
|
169
179
|
end
|
@@ -216,24 +226,50 @@ module Mongo
|
|
216
226
|
#
|
217
227
|
# @since 2.6.0
|
218
228
|
def estimated_document_count(opts = {})
|
219
|
-
|
220
|
-
|
221
|
-
if read_concern
|
222
|
-
cmd[:readConcern] = Options::Mapper.transform_values_to_strings(
|
223
|
-
read_concern)
|
229
|
+
unless view.filter.empty?
|
230
|
+
raise ArgumentError, "Cannot call estimated_document_count when querying with a filter"
|
224
231
|
end
|
232
|
+
|
225
233
|
Mongo::Lint.validate_underscore_read_preference(opts[:read])
|
226
234
|
read_pref = opts[:read] || read_preference
|
227
235
|
selector = ServerSelector.get(read_pref || server_selector)
|
228
236
|
with_session(opts) do |session|
|
237
|
+
context = Operation::Context.new(client: client, session: session)
|
229
238
|
read_with_retry(session, selector) do |server|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
239
|
+
if server.description.server_version_gte?('5.0')
|
240
|
+
pipeline = [
|
241
|
+
{'$collStats' => {'count' => {}}},
|
242
|
+
{'$group' => {'_id' => 1, 'n' => {'$sum' => '$count'}}},
|
243
|
+
]
|
244
|
+
spec = Builder::Aggregation.new(pipeline, self, options.merge(session: session)).specification
|
245
|
+
result = Operation::Aggregate.new(spec).execute(server, context: context)
|
246
|
+
result.documents.first.fetch('n')
|
247
|
+
else
|
248
|
+
cmd = { count: collection.name }
|
249
|
+
cmd[:maxTimeMS] = opts[:max_time_ms] if opts[:max_time_ms]
|
250
|
+
if read_concern
|
251
|
+
cmd[:readConcern] = Options::Mapper.transform_values_to_strings(
|
252
|
+
read_concern)
|
253
|
+
end
|
254
|
+
result = Operation::Count.new(
|
255
|
+
selector: cmd,
|
256
|
+
db_name: database.name,
|
257
|
+
read: read_pref,
|
258
|
+
session: session,
|
259
|
+
).execute(server, context: context)
|
260
|
+
result.n.to_i
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
rescue Error::OperationFailure => exc
|
265
|
+
if exc.code == 26
|
266
|
+
# NamespaceNotFound
|
267
|
+
# This should only happen with the aggregation pipeline path
|
268
|
+
# (server 4.9+). Previous servers should return 0 for nonexistent
|
269
|
+
# collections.
|
270
|
+
0
|
271
|
+
else
|
272
|
+
raise
|
237
273
|
end
|
238
274
|
end
|
239
275
|
|
@@ -276,8 +312,8 @@ module Mongo
|
|
276
312
|
:db_name => database.name,
|
277
313
|
:options => {:limit => -1},
|
278
314
|
:read => read_pref,
|
279
|
-
:session => session
|
280
|
-
}).execute(server, client: client)
|
315
|
+
:session => session,
|
316
|
+
}).execute(server, context: Operation::Context.new(client: client, session: session))
|
281
317
|
end.first['values']
|
282
318
|
end
|
283
319
|
end
|
@@ -612,21 +648,21 @@ module Mongo
|
|
612
648
|
:read_concern => read_concern,
|
613
649
|
:session => session,
|
614
650
|
}.merge!(options))
|
615
|
-
cmd.execute(server, client: client).cursor_ids.map do |cursor_id|
|
651
|
+
cmd.execute(server, context: Operation::Context.new(client: client, session: session)).cursor_ids.map do |cursor_id|
|
616
652
|
result = if server.with_connection { |connection| connection.features }.find_command_enabled?
|
617
653
|
Operation::GetMore.new({
|
618
654
|
:selector => {:getMore => BSON::Int64.new(cursor_id),
|
619
655
|
:collection => collection.name},
|
620
656
|
:db_name => database.name,
|
621
657
|
:session => session,
|
622
|
-
}).execute(server, client: client)
|
658
|
+
}).execute(server, context: Operation::Context.new(client: client, session: session))
|
623
659
|
else
|
624
660
|
Operation::GetMore.new({
|
625
661
|
:to_return => 0,
|
626
662
|
:cursor_id => BSON::Int64.new(cursor_id),
|
627
663
|
:db_name => database.name,
|
628
664
|
:coll_name => collection.name
|
629
|
-
}).execute(server, client: client)
|
665
|
+
}).execute(server, context: Operation::Context.new(client: client, session: session))
|
630
666
|
end
|
631
667
|
Cursor.new(self, result, server, session: session)
|
632
668
|
end
|
@@ -48,6 +48,8 @@ module Mongo
|
|
48
48
|
#
|
49
49
|
# @since 2.0.0
|
50
50
|
def find_one_and_delete(opts = {})
|
51
|
+
QueryCache.clear_namespace(collection.namespace)
|
52
|
+
|
51
53
|
cmd = { :findAndModify => collection.name, :query => filter, :remove => true }
|
52
54
|
cmd[:fields] = projection if projection
|
53
55
|
cmd[:sort] = sort if sort
|
@@ -67,8 +69,8 @@ module Mongo
|
|
67
69
|
:selector => cmd,
|
68
70
|
:db_name => database.name,
|
69
71
|
:session => session,
|
70
|
-
:txn_num => txn_num
|
71
|
-
).execute(server, client: client)
|
72
|
+
:txn_num => txn_num,
|
73
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
72
74
|
end
|
73
75
|
end.first['value']
|
74
76
|
end
|
@@ -127,6 +129,8 @@ module Mongo
|
|
127
129
|
#
|
128
130
|
# @since 2.0.0
|
129
131
|
def find_one_and_update(document, opts = {})
|
132
|
+
QueryCache.clear_namespace(collection.namespace)
|
133
|
+
|
130
134
|
cmd = { :findAndModify => collection.name, :query => filter }
|
131
135
|
cmd[:update] = document
|
132
136
|
cmd[:fields] = projection if projection
|
@@ -150,8 +154,8 @@ module Mongo
|
|
150
154
|
:selector => cmd,
|
151
155
|
:db_name => database.name,
|
152
156
|
:session => session,
|
153
|
-
:txn_num => txn_num
|
154
|
-
).execute(server, client: client)
|
157
|
+
:txn_num => txn_num,
|
158
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
155
159
|
end
|
156
160
|
end.first['value']
|
157
161
|
value unless value.nil? || value.empty?
|
@@ -175,6 +179,8 @@ module Mongo
|
|
175
179
|
#
|
176
180
|
# @since 2.0.0
|
177
181
|
def delete_many(opts = {})
|
182
|
+
QueryCache.clear_namespace(collection.namespace)
|
183
|
+
|
178
184
|
delete_doc = { Operation::Q => filter, Operation::LIMIT => 0 }
|
179
185
|
with_session(opts) do |session|
|
180
186
|
write_concern = if opts[:write_concern]
|
@@ -191,9 +197,9 @@ module Mongo
|
|
191
197
|
:db_name => collection.database.name,
|
192
198
|
:coll_name => collection.name,
|
193
199
|
:write_concern => write_concern,
|
194
|
-
:bypass_document_validation => !!opts[:bypass_document_validation],
|
195
|
-
:session => session
|
196
|
-
).execute(server, client: client)
|
200
|
+
:bypass_document_validation => !!opts[:bypass_document_validation],
|
201
|
+
:session => session,
|
202
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
197
203
|
end
|
198
204
|
end
|
199
205
|
end
|
@@ -216,6 +222,8 @@ module Mongo
|
|
216
222
|
#
|
217
223
|
# @since 2.0.0
|
218
224
|
def delete_one(opts = {})
|
225
|
+
QueryCache.clear_namespace(collection.namespace)
|
226
|
+
|
219
227
|
delete_doc = { Operation::Q => filter, Operation::LIMIT => 1 }
|
220
228
|
with_session(opts) do |session|
|
221
229
|
write_concern = if opts[:write_concern]
|
@@ -234,8 +242,8 @@ module Mongo
|
|
234
242
|
:write_concern => write_concern,
|
235
243
|
:bypass_document_validation => !!opts[:bypass_document_validation],
|
236
244
|
:session => session,
|
237
|
-
:txn_num => txn_num
|
238
|
-
).execute(server, client: client)
|
245
|
+
:txn_num => txn_num,
|
246
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
239
247
|
end
|
240
248
|
end
|
241
249
|
end
|
@@ -263,6 +271,8 @@ module Mongo
|
|
263
271
|
#
|
264
272
|
# @since 2.0.0
|
265
273
|
def replace_one(replacement, opts = {})
|
274
|
+
QueryCache.clear_namespace(collection.namespace)
|
275
|
+
|
266
276
|
update_doc = { Operation::Q => filter,
|
267
277
|
Operation::U => replacement,
|
268
278
|
}
|
@@ -288,8 +298,8 @@ module Mongo
|
|
288
298
|
:write_concern => write_concern,
|
289
299
|
:bypass_document_validation => !!opts[:bypass_document_validation],
|
290
300
|
:session => session,
|
291
|
-
:txn_num => txn_num
|
292
|
-
).execute(server, client: client)
|
301
|
+
:txn_num => txn_num,
|
302
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
293
303
|
end
|
294
304
|
end
|
295
305
|
end
|
@@ -319,6 +329,8 @@ module Mongo
|
|
319
329
|
#
|
320
330
|
# @since 2.0.0
|
321
331
|
def update_many(spec, opts = {})
|
332
|
+
QueryCache.clear_namespace(collection.namespace)
|
333
|
+
|
322
334
|
update_doc = { Operation::Q => filter,
|
323
335
|
Operation::U => spec,
|
324
336
|
Operation::MULTI => true,
|
@@ -343,8 +355,8 @@ module Mongo
|
|
343
355
|
:coll_name => collection.name,
|
344
356
|
:write_concern => write_concern,
|
345
357
|
:bypass_document_validation => !!opts[:bypass_document_validation],
|
346
|
-
:session => session
|
347
|
-
).execute(server, client: client)
|
358
|
+
:session => session,
|
359
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
348
360
|
end
|
349
361
|
end
|
350
362
|
end
|
@@ -374,6 +386,8 @@ module Mongo
|
|
374
386
|
#
|
375
387
|
# @since 2.0.0
|
376
388
|
def update_one(spec, opts = {})
|
389
|
+
QueryCache.clear_namespace(collection.namespace)
|
390
|
+
|
377
391
|
update_doc = { Operation::Q => filter,
|
378
392
|
Operation::U => spec,
|
379
393
|
}
|
@@ -398,8 +412,8 @@ module Mongo
|
|
398
412
|
:write_concern => write_concern,
|
399
413
|
:bypass_document_validation => !!opts[:bypass_document_validation],
|
400
414
|
:session => session,
|
401
|
-
:txn_num => txn_num
|
402
|
-
).execute(server, client: client)
|
415
|
+
:txn_num => txn_num,
|
416
|
+
).execute(server, context: Operation::Context.new(client: client, session: session))
|
403
417
|
end
|
404
418
|
end
|
405
419
|
end
|