mongo 2.19.1 → 2.21.0
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
- data/README.md +40 -1
- data/Rakefile +83 -174
- data/lib/mongo/address.rb +22 -3
- data/lib/mongo/auth/aws/credentials_retriever.rb +70 -17
- data/lib/mongo/auth/base.rb +1 -1
- data/lib/mongo/bulk_write.rb +35 -2
- data/lib/mongo/client.rb +38 -6
- data/lib/mongo/client_encryption.rb +6 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -1
- data/lib/mongo/cluster/sdam_flow.rb +20 -7
- data/lib/mongo/cluster/topology/base.rb +16 -0
- data/lib/mongo/cluster.rb +41 -5
- data/lib/mongo/collection/helpers.rb +1 -1
- data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
- data/lib/mongo/collection/view/aggregation.rb +33 -99
- data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
- data/lib/mongo/collection/view/change_stream.rb +80 -27
- data/lib/mongo/collection/view/iterable.rb +92 -60
- data/lib/mongo/collection/view/map_reduce.rb +25 -8
- data/lib/mongo/collection/view/readable.rb +79 -30
- data/lib/mongo/collection/view/writable.rb +109 -48
- data/lib/mongo/collection/view.rb +44 -3
- data/lib/mongo/collection.rb +185 -26
- data/lib/mongo/config.rb +2 -2
- data/lib/mongo/crypt/auto_encrypter.rb +4 -6
- data/lib/mongo/crypt/binding.rb +4 -4
- data/lib/mongo/crypt/context.rb +20 -14
- data/lib/mongo/crypt/encryption_io.rb +56 -26
- data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
- data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
- data/lib/mongo/csot_timeout_holder.rb +119 -0
- data/lib/mongo/cursor/kill_spec.rb +5 -2
- data/lib/mongo/cursor/nontailable.rb +27 -0
- data/lib/mongo/cursor.rb +86 -24
- data/lib/mongo/cursor_host.rb +82 -0
- data/lib/mongo/database/view.rb +81 -14
- data/lib/mongo/database.rb +88 -18
- data/lib/mongo/error/operation_failure.rb +209 -204
- data/lib/mongo/error/server_timeout_error.rb +12 -0
- data/lib/mongo/error/socket_timeout_error.rb +3 -1
- data/lib/mongo/error/timeout_error.rb +23 -0
- data/lib/mongo/error/transactions_not_supported.rb +34 -0
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/grid/fs_bucket.rb +48 -9
- data/lib/mongo/grid/stream/read.rb +15 -1
- data/lib/mongo/grid/stream/write.rb +21 -4
- data/lib/mongo/index/view.rb +77 -16
- data/lib/mongo/monitoring/event/secure.rb +1 -1
- data/lib/mongo/operation/context.rb +40 -2
- data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
- data/lib/mongo/operation/create_search_indexes.rb +15 -0
- data/lib/mongo/operation/delete/op_msg.rb +2 -1
- data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
- data/lib/mongo/operation/drop_search_index.rb +15 -0
- data/lib/mongo/operation/find/op_msg.rb +45 -0
- data/lib/mongo/operation/get_more/op_msg.rb +33 -0
- data/lib/mongo/operation/insert/op_msg.rb +3 -2
- data/lib/mongo/operation/insert/result.rb +4 -2
- data/lib/mongo/operation/list_collections/result.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/op_msg_base.rb +3 -1
- data/lib/mongo/operation/result.rb +26 -5
- data/lib/mongo/operation/shared/executable.rb +55 -28
- data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
- data/lib/mongo/operation/shared/response_handling.rb +25 -27
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/operation/shared/specifiable.rb +7 -0
- data/lib/mongo/operation/shared/timed.rb +52 -0
- data/lib/mongo/operation/shared/write.rb +4 -1
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
- data/lib/mongo/operation/update_search_index.rb +15 -0
- data/lib/mongo/operation.rb +4 -0
- data/lib/mongo/protocol/message.rb +1 -4
- data/lib/mongo/protocol/msg.rb +2 -2
- data/lib/mongo/retryable/base_worker.rb +28 -3
- data/lib/mongo/retryable/read_worker.rb +78 -36
- data/lib/mongo/retryable/write_worker.rb +59 -25
- data/lib/mongo/retryable.rb +8 -2
- data/lib/mongo/search_index/view.rb +232 -0
- data/lib/mongo/server/app_metadata/environment.rb +64 -9
- data/lib/mongo/server/app_metadata.rb +5 -4
- data/lib/mongo/server/connection.rb +11 -5
- data/lib/mongo/server/connection_base.rb +22 -2
- data/lib/mongo/server/connection_pool.rb +32 -14
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/description.rb +18 -5
- data/lib/mongo/server/monitor.rb +7 -4
- data/lib/mongo/server/pending_connection.rb +25 -8
- data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
- data/lib/mongo/server.rb +11 -6
- data/lib/mongo/server_selector/base.rb +54 -12
- data/lib/mongo/session/server_session/dirtyable.rb +52 -0
- data/lib/mongo/session/server_session.rb +3 -0
- data/lib/mongo/session/session_pool.rb +12 -18
- data/lib/mongo/session.rb +110 -9
- data/lib/mongo/socket/ssl.rb +131 -18
- data/lib/mongo/socket/tcp.rb +40 -6
- data/lib/mongo/socket.rb +154 -25
- data/lib/mongo/uri/options_mapper.rb +1 -0
- data/lib/mongo/uri.rb +0 -4
- data/lib/mongo/version.rb +1 -5
- data/lib/mongo.rb +2 -0
- data/mongo.gemspec +9 -18
- data/spec/atlas/atlas_connectivity_spec.rb +9 -9
- data/spec/atlas/operations_spec.rb +5 -5
- data/spec/faas/ruby-sam-app/Gemfile +9 -0
- data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
- data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
- data/spec/faas/ruby-sam-app/template.yaml +48 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
- data/spec/integration/client_side_encryption/corpus_spec.rb +10 -2
- data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
- data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +67 -20
- data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
- data/spec/integration/connection_pool_populator_spec.rb +2 -0
- data/spec/integration/cursor_pinning_spec.rb +15 -60
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/find_options_spec.rb +227 -0
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +3 -3
- data/spec/integration/retryable_errors_spec.rb +2 -2
- data/spec/integration/retryable_reads_errors_spec.rb +196 -31
- data/spec/integration/retryable_writes_errors_spec.rb +156 -0
- data/spec/integration/sdam_error_handling_spec.rb +4 -1
- data/spec/integration/search_indexes_prose_spec.rb +172 -0
- data/spec/integration/server_spec.rb +4 -3
- data/spec/integration/transactions_api_examples_spec.rb +2 -0
- data/spec/kerberos/kerberos_spec.rb +4 -0
- data/spec/lite_spec_helper.rb +34 -20
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/caching_cursor_spec.rb +1 -1
- data/spec/mongo/client_encryption_spec.rb +1 -0
- data/spec/mongo/client_spec.rb +158 -4
- data/spec/mongo/cluster_spec.rb +36 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +20 -40
- data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
- data/spec/mongo/collection/view/explainable_spec.rb +2 -0
- data/spec/mongo/collection_crud_spec.rb +2 -1
- data/spec/mongo/collection_spec.rb +5 -6
- data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
- data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
- data/spec/mongo/crypt/handle_spec.rb +1 -1
- data/spec/mongo/cursor_spec.rb +26 -9
- data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
- data/spec/mongo/operation/context_spec.rb +79 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
- data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
- data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
- data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
- data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
- data/spec/mongo/operation/insert_spec.rb +1 -1
- data/spec/mongo/operation/shared/csot/examples.rb +113 -0
- data/spec/mongo/query_cache_spec.rb +243 -225
- data/spec/mongo/retryable/write_worker_spec.rb +39 -0
- data/spec/mongo/retryable_spec.rb +1 -0
- data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
- data/spec/mongo/server/app_metadata_spec.rb +12 -2
- data/spec/mongo/server/connection_spec.rb +26 -0
- data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
- data/spec/mongo/session/session_pool_spec.rb +1 -16
- data/spec/mongo/session_transaction_spec.rb +15 -0
- data/spec/mongo/socket/ssl_spec.rb +0 -10
- data/spec/mongo/uri_spec.rb +0 -9
- data/spec/runners/change_streams/test.rb +2 -2
- data/spec/runners/crud/operation.rb +1 -1
- data/spec/runners/crud/test.rb +0 -8
- data/spec/runners/crud/verifier.rb +3 -1
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/transactions/operation.rb +4 -6
- data/spec/runners/transactions/test.rb +12 -3
- data/spec/runners/unified/ambiguous_operations.rb +13 -0
- data/spec/runners/unified/assertions.rb +20 -3
- data/spec/runners/unified/change_stream_operations.rb +14 -24
- data/spec/runners/unified/crud_operations.rb +82 -47
- data/spec/runners/unified/ddl_operations.rb +38 -7
- data/spec/runners/unified/grid_fs_operations.rb +37 -2
- data/spec/runners/unified/search_index_operations.rb +63 -0
- data/spec/runners/unified/support_operations.rb +46 -9
- data/spec/runners/unified/test.rb +33 -12
- data/spec/runners/unified.rb +1 -1
- data/spec/solo/clean_exit_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
- data/spec/spec_tests/data/client_side_encryption/explain.yml +2 -2
- data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
- data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
- data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
- data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
- data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
- data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
- data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
- data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
- data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
- data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
- data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
- data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
- data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
- data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
- data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
- data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
- data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
- data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
- data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
- data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
- data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
- data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
- data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
- data/spec/spec_tests/index_management_unified_spec.rb +13 -0
- data/spec/spec_tests/run_command_unified_spec.rb +13 -0
- data/spec/spec_tests/sdam_unified_spec.rb +2 -0
- data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
- data/spec/spec_tests/transactions_unified_spec.rb +2 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
- data/spec/support/certificates/atlas-ocsp.crt +117 -122
- data/spec/support/certificates/retrieve-atlas-cert +1 -1
- data/spec/support/cluster_tools.rb +3 -3
- data/spec/support/common_shortcuts.rb +2 -2
- data/spec/support/constraints.rb +6 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
- data/spec/support/ocsp +1 -1
- data/spec/support/recording_logger.rb +27 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +5 -0
- data/spec/support/spec_setup.rb +2 -2
- data/spec/support/utils.rb +3 -1
- metadata +1329 -1368
- checksums.yaml.gz.sig +0 -0
- data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -295
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -37
- data/spec/shared/share/Dockerfile.erb +0 -330
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -416
- data/spec/shared/shlib/set_env.sh +0 -169
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
- data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -2
|
@@ -100,9 +100,13 @@ module Mongo
|
|
|
100
100
|
# @param [ Integer ] connection_global_id
|
|
101
101
|
# Global id of the connection on which the operation that
|
|
102
102
|
# this result is for was performed.
|
|
103
|
+
# @param [ Operation::Context | nil ] context the context that was active
|
|
104
|
+
# when this result was produced.
|
|
103
105
|
#
|
|
104
106
|
# @api private
|
|
105
|
-
def initialize(replies, connection_description = nil, connection_global_id = nil)
|
|
107
|
+
def initialize(replies, connection_description = nil, connection_global_id = nil, context: nil, connection: nil)
|
|
108
|
+
@context = context
|
|
109
|
+
|
|
106
110
|
if replies
|
|
107
111
|
if replies.is_a?(Array)
|
|
108
112
|
if replies.length != 1
|
|
@@ -118,6 +122,7 @@ module Mongo
|
|
|
118
122
|
@replies = [ reply ]
|
|
119
123
|
@connection_description = connection_description
|
|
120
124
|
@connection_global_id = connection_global_id
|
|
125
|
+
@connection = connection
|
|
121
126
|
end
|
|
122
127
|
end
|
|
123
128
|
|
|
@@ -138,6 +143,14 @@ module Mongo
|
|
|
138
143
|
# @api private
|
|
139
144
|
attr_reader :connection_global_id
|
|
140
145
|
|
|
146
|
+
# @return [ Operation::Context | nil ] the operation context (if any)
|
|
147
|
+
# that was active when this result was produced.
|
|
148
|
+
#
|
|
149
|
+
# @api private
|
|
150
|
+
attr_reader :context
|
|
151
|
+
|
|
152
|
+
attr_reader :connection
|
|
153
|
+
|
|
141
154
|
# @api private
|
|
142
155
|
def_delegators :parser,
|
|
143
156
|
:not_master?, :node_recovering?, :node_shutting_down?
|
|
@@ -320,7 +333,7 @@ module Mongo
|
|
|
320
333
|
# @example Validate the result.
|
|
321
334
|
# result.validate!
|
|
322
335
|
#
|
|
323
|
-
# @raise [ Error::OperationFailure ] If an error is in the result.
|
|
336
|
+
# @raise [ Error::OperationFailure::Family ] If an error is in the result.
|
|
324
337
|
#
|
|
325
338
|
# @return [ Result ] The result if verification passed.
|
|
326
339
|
#
|
|
@@ -330,16 +343,16 @@ module Mongo
|
|
|
330
343
|
!successful? ? raise_operation_failure : self
|
|
331
344
|
end
|
|
332
345
|
|
|
333
|
-
# The exception instance (of
|
|
346
|
+
# The exception instance (of Error::OperationFailure::Family)
|
|
334
347
|
# that would be raised during processing of this result.
|
|
335
348
|
#
|
|
336
349
|
# This method should only be called when result is not successful.
|
|
337
350
|
#
|
|
338
|
-
# @return [ Error::OperationFailure ] The exception.
|
|
351
|
+
# @return [ Error::OperationFailure::Family ] The exception.
|
|
339
352
|
#
|
|
340
353
|
# @api private
|
|
341
354
|
def error
|
|
342
|
-
@error ||=
|
|
355
|
+
@error ||= operation_failure_class.new(
|
|
343
356
|
parser.message,
|
|
344
357
|
self,
|
|
345
358
|
code: parser.code,
|
|
@@ -453,6 +466,14 @@ module Mongo
|
|
|
453
466
|
|
|
454
467
|
private
|
|
455
468
|
|
|
469
|
+
def operation_failure_class
|
|
470
|
+
if context&.csot? && parser.code == 50
|
|
471
|
+
Error::ServerTimeoutError
|
|
472
|
+
else
|
|
473
|
+
Error::OperationFailure
|
|
474
|
+
end
|
|
475
|
+
end
|
|
476
|
+
|
|
456
477
|
def aggregate_returned_count
|
|
457
478
|
replies.reduce(0) do |n, reply|
|
|
458
479
|
n += reply.number_returned
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
# See the License for the specific language governing permissions and
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
|
|
18
|
+
require 'mongo/error'
|
|
19
|
+
|
|
18
20
|
module Mongo
|
|
19
21
|
module Operation
|
|
20
22
|
|
|
@@ -26,44 +28,57 @@ module Mongo
|
|
|
26
28
|
|
|
27
29
|
include ResponseHandling
|
|
28
30
|
|
|
31
|
+
# @return [ Operation::Context | nil ] the operation context used to
|
|
32
|
+
# execute this operation.
|
|
33
|
+
attr_accessor :context
|
|
34
|
+
|
|
29
35
|
def do_execute(connection, context, options = {})
|
|
36
|
+
# Save the context on the instance, to avoid having to pass it as a
|
|
37
|
+
# parameter to every single method. There are many legacy methods that
|
|
38
|
+
# still accept it as a parameter, which are left as-is for now to
|
|
39
|
+
# minimize the impact of this change. Moving forward, it may be
|
|
40
|
+
# reasonable to refactor things so this saved reference is used instead.
|
|
41
|
+
@context = context
|
|
42
|
+
|
|
30
43
|
session&.materialize_if_needed
|
|
31
44
|
unpin_maybe(session, connection) do
|
|
32
45
|
add_error_labels(connection, context) do
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if session
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
check_for_network_error do
|
|
47
|
+
add_server_diagnostics(connection) do
|
|
48
|
+
get_result(connection, context, options).tap do |result|
|
|
49
|
+
if session
|
|
50
|
+
if session.in_transaction? &&
|
|
51
|
+
connection.description.load_balancer?
|
|
52
|
+
then
|
|
53
|
+
if session.pinned_connection_global_id
|
|
54
|
+
unless session.pinned_connection_global_id == connection.global_id
|
|
55
|
+
raise(
|
|
56
|
+
Error::InternalDriverError,
|
|
57
|
+
"Expected operation to use connection #{session.pinned_connection_global_id} but it used #{connection.global_id}"
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
session.pin_to_connection(connection.global_id)
|
|
62
|
+
connection.pin
|
|
45
63
|
end
|
|
46
|
-
else
|
|
47
|
-
session.pin_to_connection(connection.global_id)
|
|
48
|
-
connection.pin
|
|
49
64
|
end
|
|
50
|
-
end
|
|
51
65
|
|
|
52
|
-
|
|
53
|
-
|
|
66
|
+
if session.snapshot? && !session.snapshot_timestamp
|
|
67
|
+
session.snapshot_timestamp = result.snapshot_timestamp
|
|
68
|
+
end
|
|
54
69
|
end
|
|
55
|
-
end
|
|
56
70
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
if result.has_cursor_id? &&
|
|
72
|
+
connection.description.load_balancer?
|
|
73
|
+
then
|
|
74
|
+
if result.cursor_id == 0
|
|
75
|
+
connection.unpin
|
|
76
|
+
else
|
|
77
|
+
connection.pin
|
|
78
|
+
end
|
|
64
79
|
end
|
|
80
|
+
process_result(result, connection)
|
|
65
81
|
end
|
|
66
|
-
process_result(result, connection)
|
|
67
82
|
end
|
|
68
83
|
end
|
|
69
84
|
end
|
|
@@ -89,7 +104,7 @@ module Mongo
|
|
|
89
104
|
end
|
|
90
105
|
|
|
91
106
|
def get_result(connection, context, options = {})
|
|
92
|
-
result_class.new(*dispatch_message(connection, context, options))
|
|
107
|
+
result_class.new(*dispatch_message(connection, context, options), context: context, connection: connection)
|
|
93
108
|
end
|
|
94
109
|
|
|
95
110
|
# Returns a Protocol::Message or nil as reply.
|
|
@@ -144,6 +159,18 @@ module Mongo
|
|
|
144
159
|
connection.server.scan_semaphore.signal
|
|
145
160
|
end
|
|
146
161
|
end
|
|
162
|
+
|
|
163
|
+
NETWORK_ERRORS = [
|
|
164
|
+
Error::SocketError,
|
|
165
|
+
Error::SocketTimeoutError
|
|
166
|
+
].freeze
|
|
167
|
+
|
|
168
|
+
def check_for_network_error
|
|
169
|
+
yield
|
|
170
|
+
rescue *NETWORK_ERRORS
|
|
171
|
+
session&.dirty!
|
|
172
|
+
raise
|
|
173
|
+
end
|
|
147
174
|
end
|
|
148
175
|
end
|
|
149
176
|
end
|
|
@@ -32,7 +32,10 @@ module Mongo
|
|
|
32
32
|
#
|
|
33
33
|
# @return [ Mongo::Operation::Result ] The operation result.
|
|
34
34
|
def execute(server, context:, options: {})
|
|
35
|
-
server.with_connection(
|
|
35
|
+
server.with_connection(
|
|
36
|
+
connection_global_id: context.connection_global_id,
|
|
37
|
+
context: context
|
|
38
|
+
) do |connection|
|
|
36
39
|
execute_with_connection(connection, context: context, options: options)
|
|
37
40
|
end
|
|
38
41
|
end
|
|
@@ -42,7 +42,7 @@ module Mongo
|
|
|
42
42
|
# Adds error labels to exceptions raised in the yielded to block,
|
|
43
43
|
# which should perform MongoDB operations and raise Mongo::Errors on
|
|
44
44
|
# failure. This method handles network errors (Error::SocketError)
|
|
45
|
-
# and server-side errors (Error::OperationFailure); it does not
|
|
45
|
+
# and server-side errors (Error::OperationFailure::Family); it does not
|
|
46
46
|
# handle server selection errors (Error::NoServerAvailable), for which
|
|
47
47
|
# labels are added in the server selection code.
|
|
48
48
|
#
|
|
@@ -50,35 +50,33 @@ module Mongo
|
|
|
50
50
|
# the operation is performed.
|
|
51
51
|
# @param [ Mongo::Operation::Context ] context The operation context.
|
|
52
52
|
def add_error_labels(connection, context)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
end
|
|
53
|
+
yield
|
|
54
|
+
rescue Mongo::Error::SocketError => e
|
|
55
|
+
if context.in_transaction? && !context.committing_transaction?
|
|
56
|
+
e.add_label('TransientTransactionError')
|
|
57
|
+
end
|
|
58
|
+
if context.committing_transaction?
|
|
59
|
+
e.add_label('UnknownTransactionCommitResult')
|
|
60
|
+
end
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
end
|
|
62
|
+
maybe_add_retryable_write_error_label!(e, connection, context)
|
|
63
|
+
|
|
64
|
+
raise e
|
|
65
|
+
rescue Mongo::Error::SocketTimeoutError => e
|
|
66
|
+
maybe_add_retryable_write_error_label!(e, connection, context)
|
|
67
|
+
raise e
|
|
68
|
+
rescue Mongo::Error::OperationFailure::Family => e
|
|
69
|
+
if context.committing_transaction?
|
|
70
|
+
if e.write_retryable? || e.wtimeout? || (e.write_concern_error? &&
|
|
71
|
+
!Session::UNLABELED_WRITE_CONCERN_CODES.include?(e.write_concern_error_code)
|
|
72
|
+
) || e.max_time_ms_expired?
|
|
73
|
+
e.add_label('UnknownTransactionCommitResult')
|
|
76
74
|
end
|
|
75
|
+
end
|
|
77
76
|
|
|
78
|
-
|
|
77
|
+
maybe_add_retryable_write_error_label!(e, connection, context)
|
|
79
78
|
|
|
80
|
-
|
|
81
|
-
end
|
|
79
|
+
raise e
|
|
82
80
|
end
|
|
83
81
|
|
|
84
82
|
# Unpins the session and/or the connection if the yielded to block
|
|
@@ -106,7 +104,7 @@ module Mongo
|
|
|
106
104
|
# raised during execution of operations on servers.
|
|
107
105
|
def add_server_diagnostics(connection)
|
|
108
106
|
yield
|
|
109
|
-
rescue Error::SocketError, Error::SocketTimeoutError
|
|
107
|
+
rescue Error::SocketError, Error::SocketTimeoutError, Error::TimeoutError
|
|
110
108
|
# Diagnostics should have already been added by the connection code,
|
|
111
109
|
# do not add them again.
|
|
112
110
|
raise
|
|
@@ -260,6 +260,13 @@ module Mongo
|
|
|
260
260
|
spec[INDEX]
|
|
261
261
|
end
|
|
262
262
|
|
|
263
|
+
# Get the index id from the spec.
|
|
264
|
+
#
|
|
265
|
+
# @return [ String ] The index id.
|
|
266
|
+
def index_id
|
|
267
|
+
spec[:index_id]
|
|
268
|
+
end
|
|
269
|
+
|
|
263
270
|
# Get the index name from the spec.
|
|
264
271
|
#
|
|
265
272
|
# @example Get the index name.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongo
|
|
4
|
+
module Operation
|
|
5
|
+
# Defines the behavior of operations that have the default timeout
|
|
6
|
+
# behavior described by the client-side operation timeouts (CSOT)
|
|
7
|
+
# spec.
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module Timed
|
|
11
|
+
# If a timeout is active (as defined by the current context), and it has
|
|
12
|
+
# not yet expired, add :maxTimeMS to the spec.
|
|
13
|
+
#
|
|
14
|
+
# @param [ Hash ] spec The spec to modify
|
|
15
|
+
# @param [ Connection ] connection The connection that will be used to
|
|
16
|
+
# execute the operation
|
|
17
|
+
#
|
|
18
|
+
# @return [ Hash ] the spec
|
|
19
|
+
#
|
|
20
|
+
# @raises [ Mongo::Error::TimeoutError ] if the current timeout has
|
|
21
|
+
# expired.
|
|
22
|
+
def apply_relevant_timeouts_to(spec, connection)
|
|
23
|
+
with_max_time(connection) do |max_time_sec|
|
|
24
|
+
return spec if max_time_sec.nil?
|
|
25
|
+
return spec if connection.description.mongocryptd?
|
|
26
|
+
|
|
27
|
+
spec.tap { spec[:maxTimeMS] = (max_time_sec * 1_000).to_i }
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# A helper method that computes the remaining timeout (in seconds) and
|
|
32
|
+
# yields it to the associated block. If no timeout is present, yields
|
|
33
|
+
# nil. If the timeout has expired, raises Mongo::Error::TimeoutError.
|
|
34
|
+
#
|
|
35
|
+
# @param [ Connection ] connection The connection that will be used to
|
|
36
|
+
# execute the operation
|
|
37
|
+
#
|
|
38
|
+
# @return [ Hash ] the result of yielding to the block (which must be
|
|
39
|
+
# a Hash)
|
|
40
|
+
def with_max_time(connection)
|
|
41
|
+
if context&.timeout?
|
|
42
|
+
max_time_sec = context.remaining_timeout_sec - connection.server.minimum_round_trip_time
|
|
43
|
+
raise Mongo::Error::TimeoutError if max_time_sec <= 0
|
|
44
|
+
|
|
45
|
+
yield max_time_sec
|
|
46
|
+
else
|
|
47
|
+
yield nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -35,7 +35,10 @@ module Mongo
|
|
|
35
35
|
#
|
|
36
36
|
# @since 2.5.2
|
|
37
37
|
def execute(server, context:)
|
|
38
|
-
server.with_connection(
|
|
38
|
+
server.with_connection(
|
|
39
|
+
connection_global_id: context.connection_global_id,
|
|
40
|
+
context: context
|
|
41
|
+
) do |connection|
|
|
39
42
|
execute_with_connection(connection, context: context)
|
|
40
43
|
end
|
|
41
44
|
end
|
|
@@ -45,7 +45,8 @@ module Mongo
|
|
|
45
45
|
def message(connection)
|
|
46
46
|
updates = validate_updates(connection, send(IDENTIFIER))
|
|
47
47
|
section = Protocol::Msg::Section1.new(IDENTIFIER, updates)
|
|
48
|
-
|
|
48
|
+
cmd = apply_relevant_timeouts_to(command(connection), connection)
|
|
49
|
+
Protocol::Msg.new(flags, {}, cmd, section)
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongo
|
|
4
|
+
module Operation
|
|
5
|
+
class UpdateSearchIndex
|
|
6
|
+
# A MongoDB updateSearchIndex operation sent as an op message.
|
|
7
|
+
#
|
|
8
|
+
# @api private
|
|
9
|
+
class OpMsg < OpMsgBase
|
|
10
|
+
include ExecutableTransactionLabel
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
# Returns the command to send to the database, describing the
|
|
15
|
+
# desired updateSearchIndex operation.
|
|
16
|
+
#
|
|
17
|
+
# @param [ Connection ] _connection the connection that will receive the
|
|
18
|
+
# command
|
|
19
|
+
#
|
|
20
|
+
# @return [ Hash ] the selector
|
|
21
|
+
def selector(_connection)
|
|
22
|
+
{
|
|
23
|
+
updateSearchIndex: coll_name,
|
|
24
|
+
:$db => db_name,
|
|
25
|
+
definition: index,
|
|
26
|
+
}.tap do |sel|
|
|
27
|
+
sel[:id] = index_id if index_id
|
|
28
|
+
sel[:name] = index_name if index_name
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'mongo/operation/update_search_index/op_msg'
|
|
4
|
+
|
|
5
|
+
module Mongo
|
|
6
|
+
module Operation
|
|
7
|
+
# A MongoDB updateSearchIndex command operation.
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
class UpdateSearchIndex
|
|
11
|
+
include Specifiable
|
|
12
|
+
include OpMsgExecutable
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/mongo/operation.rb
CHANGED
|
@@ -22,6 +22,7 @@ require 'mongo/operation/shared/specifiable'
|
|
|
22
22
|
require 'mongo/operation/shared/validatable'
|
|
23
23
|
require 'mongo/operation/shared/object_id_generator'
|
|
24
24
|
require 'mongo/operation/shared/op_msg_executable'
|
|
25
|
+
require 'mongo/operation/shared/timed'
|
|
25
26
|
|
|
26
27
|
require 'mongo/operation/op_msg_base'
|
|
27
28
|
require 'mongo/operation/command'
|
|
@@ -51,6 +52,9 @@ require 'mongo/operation/update_user'
|
|
|
51
52
|
require 'mongo/operation/remove_user'
|
|
52
53
|
require 'mongo/operation/create_index'
|
|
53
54
|
require 'mongo/operation/drop_index'
|
|
55
|
+
require 'mongo/operation/create_search_indexes'
|
|
56
|
+
require 'mongo/operation/drop_search_index'
|
|
57
|
+
require 'mongo/operation/update_search_index'
|
|
54
58
|
|
|
55
59
|
module Mongo
|
|
56
60
|
|
|
@@ -244,10 +244,7 @@ module Mongo
|
|
|
244
244
|
# timeout option. For compatibility with whoever might call this
|
|
245
245
|
# method with some other IO-like object, pass options only when they
|
|
246
246
|
# are not empty.
|
|
247
|
-
read_options =
|
|
248
|
-
if timeout = options[:socket_timeout]
|
|
249
|
-
read_options[:timeout] = timeout
|
|
250
|
-
end
|
|
247
|
+
read_options = options.slice(:timeout, :socket_timeout)
|
|
251
248
|
|
|
252
249
|
if read_options.empty?
|
|
253
250
|
chunk = io.read(16)
|
data/lib/mongo/protocol/msg.rb
CHANGED
|
@@ -226,7 +226,7 @@ module Mongo
|
|
|
226
226
|
|
|
227
227
|
db_name = @main_document[DATABASE_IDENTIFIER]
|
|
228
228
|
cmd = merge_sections
|
|
229
|
-
enc_cmd = context.
|
|
229
|
+
enc_cmd = context.encrypt(db_name, cmd)
|
|
230
230
|
if cmd.key?('$db') && !enc_cmd.key?('$db')
|
|
231
231
|
enc_cmd['$db'] = cmd['$db']
|
|
232
232
|
end
|
|
@@ -251,7 +251,7 @@ module Mongo
|
|
|
251
251
|
def maybe_decrypt(context)
|
|
252
252
|
if context.decrypt?
|
|
253
253
|
cmd = merge_sections
|
|
254
|
-
enc_cmd = context.
|
|
254
|
+
enc_cmd = context.decrypt(cmd)
|
|
255
255
|
Msg.new(@flags, @options, enc_cmd)
|
|
256
256
|
else
|
|
257
257
|
self
|
|
@@ -49,7 +49,8 @@ module Mongo
|
|
|
49
49
|
|
|
50
50
|
private
|
|
51
51
|
|
|
52
|
-
# Indicate which exception classes that are generally retryable
|
|
52
|
+
# Indicate which exception classes that are generally retryable
|
|
53
|
+
# when using modern retries mechanism.
|
|
53
54
|
#
|
|
54
55
|
# @return [ Array<Mongo:Error> ] Array of exception classes that are
|
|
55
56
|
# considered retryable.
|
|
@@ -58,18 +59,42 @@ module Mongo
|
|
|
58
59
|
Error::ConnectionPerished,
|
|
59
60
|
Error::ServerNotUsable,
|
|
60
61
|
Error::SocketError,
|
|
61
|
-
Error::SocketTimeoutError
|
|
62
|
+
Error::SocketTimeoutError,
|
|
62
63
|
].freeze
|
|
63
64
|
end
|
|
64
65
|
|
|
66
|
+
# Indicate which exception classes that are generally retryable
|
|
67
|
+
# when using legacy retries mechanism.
|
|
68
|
+
#
|
|
69
|
+
# @return [ Array<Mongo:Error> ] Array of exception classes that are
|
|
70
|
+
# considered retryable.
|
|
71
|
+
def legacy_retryable_exceptions
|
|
72
|
+
[
|
|
73
|
+
Error::ConnectionPerished,
|
|
74
|
+
Error::ServerNotUsable,
|
|
75
|
+
Error::SocketError,
|
|
76
|
+
Error::SocketTimeoutError,
|
|
77
|
+
Error::PoolClearedError,
|
|
78
|
+
Error::PoolPausedError,
|
|
79
|
+
].freeze
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
65
83
|
# Tests to see if the given exception instance is of a type that can
|
|
66
|
-
# be retried.
|
|
84
|
+
# be retried with modern retry mechanism.
|
|
67
85
|
#
|
|
68
86
|
# @return [ true | false ] true if the exception is retryable.
|
|
69
87
|
def is_retryable_exception?(e)
|
|
70
88
|
retryable_exceptions.any? { |klass| klass === e }
|
|
71
89
|
end
|
|
72
90
|
|
|
91
|
+
# Tests to see if the given exception instance is of a type that can
|
|
92
|
+
# be retried with legacy retry mechanism.
|
|
93
|
+
#
|
|
94
|
+
# @return [ true | false ] true if the exception is retryable.
|
|
95
|
+
def is_legacy_retryable_exception?(e)
|
|
96
|
+
legacy_retryable_exceptions.any? { |klass| klass === e }
|
|
97
|
+
end
|
|
73
98
|
# Logs the given deprecation warning the first time it is called for a
|
|
74
99
|
# given key; after that, it does nothing when given the same key.
|
|
75
100
|
def deprecation_warning(key, warning)
|