mongo 2.5.3 → 2.6.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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/LICENSE +1 -1
- data/README.md +3 -2
- data/lib/mongo.rb +2 -2
- data/lib/mongo/address.rb +10 -2
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +26 -5
- data/lib/mongo/address/unix.rb +1 -1
- data/lib/mongo/auth.rb +10 -3
- data/lib/mongo/auth/cr.rb +4 -1
- data/lib/mongo/auth/cr/conversation.rb +4 -1
- data/lib/mongo/auth/ldap.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/roles.rb +1 -1
- data/lib/mongo/auth/scram.rb +24 -7
- data/lib/mongo/auth/scram/conversation.rb +52 -19
- data/lib/mongo/auth/stringprep.rb +114 -0
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +73 -0
- data/lib/mongo/auth/stringprep/tables.rb +3232 -0
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +174 -0
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1170 -0
- data/lib/mongo/auth/user.rb +14 -3
- data/lib/mongo/auth/user/view.rb +1 -1
- data/lib/mongo/auth/x509.rb +1 -1
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bson.rb +1 -1
- data/lib/mongo/bulk_write.rb +8 -8
- data/lib/mongo/bulk_write/combineable.rb +1 -1
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/result.rb +1 -1
- data/lib/mongo/bulk_write/result_combiner.rb +4 -4
- data/lib/mongo/bulk_write/transformable.rb +1 -1
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/validatable.rb +1 -1
- data/lib/mongo/client.rb +115 -24
- data/lib/mongo/cluster.rb +17 -10
- data/lib/mongo/cluster/app_metadata.rb +7 -1
- data/lib/mongo/cluster/periodic_executor.rb +1 -1
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
- data/lib/mongo/cluster/topology.rb +12 -2
- data/lib/mongo/cluster/topology/replica_set.rb +9 -1
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +1 -1
- data/lib/mongo/collection.rb +75 -19
- data/lib/mongo/collection/view.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/builder.rb +1 -1
- data/lib/mongo/collection/view/builder/aggregation.rb +3 -3
- data/lib/mongo/collection/view/builder/find_command.rb +1 -1
- data/lib/mongo/collection/view/builder/flags.rb +1 -1
- data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
- data/lib/mongo/collection/view/builder/op_query.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +193 -17
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -20
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/immutable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +2 -2
- data/lib/mongo/collection/view/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +108 -29
- data/lib/mongo/collection/view/writable.rb +3 -3
- data/lib/mongo/cursor.rb +44 -4
- data/lib/mongo/cursor/builder.rb +1 -1
- data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
- data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
- data/lib/mongo/database.rb +46 -3
- data/lib/mongo/database/view.rb +11 -11
- data/lib/mongo/dbref.rb +1 -1
- data/lib/mongo/error.rb +57 -1
- data/lib/mongo/error/bulk_write_error.rb +2 -2
- data/lib/mongo/error/change_stream_resumable.rb +37 -0
- data/lib/mongo/error/closed_stream.rb +1 -1
- data/lib/mongo/error/extra_file_chunk.rb +1 -1
- data/lib/mongo/error/failed_stringprep_validation.rb +38 -0
- data/lib/mongo/error/file_not_found.rb +1 -1
- data/lib/mongo/error/insufficient_iteration_count.rb +38 -0
- data/lib/mongo/error/invalid_application_name.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
- data/lib/mongo/error/invalid_collection_name.rb +1 -1
- data/lib/mongo/error/invalid_database_name.rb +1 -1
- data/lib/mongo/error/invalid_document.rb +1 -1
- data/lib/mongo/error/invalid_file.rb +1 -1
- data/lib/mongo/error/invalid_file_revision.rb +1 -1
- data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
- data/lib/mongo/error/invalid_nonce.rb +1 -1
- data/lib/mongo/error/invalid_read_option.rb +35 -0
- data/lib/mongo/error/invalid_replacement_document.rb +1 -1
- data/lib/mongo/error/invalid_server_preference.rb +1 -1
- data/lib/mongo/error/invalid_session.rb +1 -1
- data/lib/mongo/error/invalid_signature.rb +1 -1
- data/lib/mongo/error/invalid_transaction_operation.rb +82 -0
- data/lib/mongo/error/invalid_txt_record.rb +1 -1
- data/lib/mongo/error/invalid_update_document.rb +1 -1
- data/lib/mongo/error/invalid_uri.rb +1 -1
- data/lib/mongo/error/invalid_write_concern.rb +1 -1
- data/lib/mongo/error/max_bson_size.rb +1 -1
- data/lib/mongo/error/max_message_size.rb +1 -1
- data/lib/mongo/error/mismatched_domain.rb +1 -1
- data/lib/mongo/error/missing_file_chunk.rb +1 -1
- data/lib/mongo/error/missing_resume_token.rb +1 -1
- data/lib/mongo/error/multi_index_drop.rb +1 -1
- data/lib/mongo/error/need_primary_server.rb +1 -1
- data/lib/mongo/error/no_server_available.rb +1 -1
- data/lib/mongo/error/no_srv_records.rb +1 -1
- data/lib/mongo/error/operation_failure.rb +108 -14
- data/lib/mongo/error/parser.rb +50 -1
- data/lib/mongo/error/socket_error.rb +5 -2
- data/lib/mongo/error/socket_timeout_error.rb +5 -2
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
- data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
- data/lib/mongo/error/unexpected_response.rb +1 -1
- data/lib/mongo/error/unknown_payload_type.rb +1 -1
- data/lib/mongo/error/unsupported_array_filters.rb +1 -1
- data/lib/mongo/error/unsupported_collation.rb +1 -1
- data/lib/mongo/error/unsupported_features.rb +1 -1
- data/lib/mongo/error/unsupported_message_type.rb +1 -1
- data/lib/mongo/error/write_retryable.rb +27 -0
- data/lib/mongo/event.rb +10 -9
- data/lib/mongo/event/base.rb +33 -0
- data/lib/mongo/event/description_changed.rb +2 -2
- data/lib/mongo/event/listeners.rb +1 -1
- data/lib/mongo/event/member_discovered.rb +4 -2
- data/lib/mongo/event/primary_elected.rb +2 -2
- data/lib/mongo/event/publisher.rb +1 -1
- data/lib/mongo/event/standalone_discovered.rb +2 -2
- data/lib/mongo/event/subscriber.rb +1 -1
- data/lib/mongo/grid.rb +1 -1
- data/lib/mongo/grid/file.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +3 -3
- data/lib/mongo/grid/file/info.rb +26 -3
- data/lib/mongo/grid/fs_bucket.rb +1 -1
- data/lib/mongo/grid/stream.rb +1 -1
- data/lib/mongo/grid/stream/read.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +1 -1
- data/lib/mongo/index.rb +1 -1
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/loggable.rb +1 -1
- data/lib/mongo/logger.rb +1 -1
- data/lib/mongo/monitoring.rb +99 -62
- data/lib/mongo/monitoring/command_log_subscriber.rb +2 -2
- data/lib/mongo/monitoring/event.rb +2 -1
- data/lib/mongo/monitoring/event/command_failed.rb +19 -6
- data/lib/mongo/monitoring/event/command_started.rb +14 -3
- data/lib/mongo/monitoring/event/command_succeeded.rb +5 -3
- data/lib/mongo/monitoring/event/secure.rb +1 -1
- data/lib/mongo/monitoring/event/server_closed.rb +2 -2
- data/lib/mongo/monitoring/event/server_description_changed.rb +2 -2
- data/lib/mongo/monitoring/event/server_opening.rb +11 -2
- data/lib/mongo/monitoring/event/topology_changed.rb +13 -2
- data/lib/mongo/monitoring/event/topology_closed.rb +2 -2
- data/lib/mongo/monitoring/event/topology_opening.rb +11 -2
- data/lib/mongo/monitoring/publishable.rb +10 -6
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
- data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
- data/lib/mongo/operation/create/op_msg.rb +9 -0
- data/lib/mongo/operation/create_index/op_msg.rb +9 -0
- data/lib/mongo/operation/create_user/command.rb +1 -1
- data/lib/mongo/operation/create_user/op_msg.rb +10 -1
- data/lib/mongo/operation/delete/op_msg.rb +3 -0
- data/lib/mongo/operation/distinct/op_msg.rb +9 -0
- data/lib/mongo/operation/drop/op_msg.rb +9 -0
- data/lib/mongo/operation/drop_database/op_msg.rb +9 -0
- data/lib/mongo/operation/drop_index/op_msg.rb +9 -0
- data/lib/mongo/operation/explain/op_msg.rb +3 -0
- data/lib/mongo/operation/find/op_msg.rb +3 -0
- data/lib/mongo/operation/get_more.rb +1 -1
- data/lib/mongo/operation/get_more/command.rb +1 -1
- data/lib/mongo/operation/get_more/legacy.rb +1 -1
- data/lib/mongo/operation/get_more/op_msg.rb +3 -0
- data/lib/mongo/operation/indexes/op_msg.rb +3 -0
- data/lib/mongo/operation/indexes/result.rb +1 -1
- data/lib/mongo/operation/insert/bulk_result.rb +32 -2
- data/lib/mongo/operation/insert/op_msg.rb +3 -0
- data/lib/mongo/operation/insert/result.rb +1 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +9 -0
- data/lib/mongo/operation/list_collections/op_msg.rb +3 -0
- data/lib/mongo/operation/list_collections/result.rb +5 -1
- data/lib/mongo/operation/map_reduce/op_msg.rb +3 -0
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
- data/lib/mongo/operation/remove_user/op_msg.rb +9 -0
- data/lib/mongo/operation/result.rb +27 -14
- data/lib/mongo/operation/shared/executable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +78 -7
- data/lib/mongo/operation/shared/specifiable.rb +18 -2
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
- data/lib/mongo/operation/update/op_msg.rb +3 -0
- data/lib/mongo/operation/update_user/command.rb +1 -1
- data/lib/mongo/operation/update_user/op_msg.rb +10 -1
- data/lib/mongo/operation/users_info/op_msg.rb +3 -0
- data/lib/mongo/options.rb +1 -1
- data/lib/mongo/options/mapper.rb +1 -1
- data/lib/mongo/options/redacted.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +1 -1
- data/lib/mongo/protocol/compressed.rb +1 -1
- data/lib/mongo/protocol/delete.rb +1 -1
- data/lib/mongo/protocol/get_more.rb +7 -7
- data/lib/mongo/protocol/insert.rb +1 -1
- data/lib/mongo/protocol/kill_cursors.rb +1 -1
- data/lib/mongo/protocol/message.rb +5 -5
- data/lib/mongo/protocol/msg.rb +9 -7
- data/lib/mongo/protocol/query.rb +1 -1
- data/lib/mongo/protocol/registry.rb +1 -1
- data/lib/mongo/protocol/reply.rb +10 -10
- data/lib/mongo/protocol/serializers.rb +1 -1
- data/lib/mongo/protocol/update.rb +1 -1
- data/lib/mongo/retryable.rb +22 -14
- data/lib/mongo/server.rb +1 -1
- data/lib/mongo/server/connectable.rb +1 -1
- data/lib/mongo/server/connection.rb +16 -4
- data/lib/mongo/server/connection_pool.rb +1 -1
- data/lib/mongo/server/connection_pool/queue.rb +1 -1
- data/lib/mongo/server/context.rb +1 -1
- data/lib/mongo/server/description.rb +14 -2
- data/lib/mongo/server/description/features.rb +10 -9
- data/lib/mongo/server/description/inspector.rb +1 -1
- data/lib/mongo/server/description/inspector/description_changed.rb +1 -1
- data/lib/mongo/server/description/inspector/member_discovered.rb +1 -1
- data/lib/mongo/server/description/inspector/primary_elected.rb +1 -1
- data/lib/mongo/server/description/inspector/standalone_discovered.rb +1 -1
- data/lib/mongo/server/monitor.rb +15 -3
- data/lib/mongo/server/monitor/connection.rb +1 -1
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/server_selector/nearest.rb +1 -1
- data/lib/mongo/server_selector/primary.rb +1 -1
- data/lib/mongo/server_selector/primary_preferred.rb +1 -1
- data/lib/mongo/server_selector/secondary.rb +1 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
- data/lib/mongo/server_selector/selectable.rb +7 -2
- data/lib/mongo/session.rb +389 -12
- data/lib/mongo/session/server_session.rb +7 -2
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/socket.rb +1 -1
- data/lib/mongo/socket/ssl.rb +1 -1
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/socket/unix.rb +1 -1
- data/lib/mongo/uri.rb +6 -4
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/version.rb +2 -2
- data/lib/mongo/write_concern.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +1 -1
- data/lib/mongo/write_concern/normalizable.rb +1 -1
- data/lib/mongo/write_concern/unacknowledged.rb +1 -1
- data/mongo.gemspec +4 -1
- data/spec/atlas/atlas_connectivity_spec.rb +54 -0
- data/spec/integration/bulk_insert_spec.rb +78 -0
- data/spec/integration/change_stream_spec.rb +365 -0
- data/spec/integration/command_monitoring_spec.rb +92 -0
- data/spec/lite_spec_helper.rb +63 -0
- data/spec/mongo/address/ipv6_spec.rb +29 -1
- data/spec/mongo/address_spec.rb +34 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +326 -120
- data/spec/mongo/auth/scram/negotiation_spec.rb +574 -0
- data/spec/mongo/auth/scram_spec.rb +107 -38
- data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +113 -0
- data/spec/mongo/auth/stringprep_spec.rb +188 -0
- data/spec/mongo/auth/user/view_spec.rb +5 -2
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/bulk_write/result_spec.rb +120 -0
- data/spec/mongo/bulk_write_spec.rb +42 -2
- data/spec/mongo/client_spec.rb +121 -9
- data/spec/mongo/cluster/app_metadata_spec.rb +14 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -23
- data/spec/mongo/collection/view/change_stream_spec.rb +62 -180
- data/spec/mongo/collection_spec.rb +45 -12
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +7 -7
- data/spec/mongo/cursor_spec.rb +2 -2
- data/spec/mongo/database_spec.rb +3 -3
- data/spec/mongo/docs_examples_spec.rb +194 -0
- data/spec/mongo/error/operation_failure_spec.rb +152 -0
- data/spec/mongo/error/parser_spec.rb +127 -0
- data/spec/mongo/grid/fs_bucket_spec.rb +32 -0
- data/spec/mongo/grid/stream/write_spec.rb +40 -1
- data/spec/mongo/monitoring/event/command_failed_spec.rb +30 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -4
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +29 -7
- data/spec/mongo/monitoring_spec.rb +28 -3
- data/spec/mongo/protocol/get_more_spec.rb +2 -2
- data/spec/mongo/retryable_spec.rb +252 -34
- data/spec/mongo/retryable_writes_spec.rb +468 -544
- data/spec/mongo/server/connection_spec.rb +5 -5
- data/spec/mongo/server/description_spec.rb +23 -6
- data/spec/mongo/session/server_session_spec.rb +2 -2
- data/spec/mongo/session/session_pool_spec.rb +2 -2
- data/spec/mongo/transactions_examples_spec.rb +227 -0
- data/spec/mongo/transactions_spec.rb +44 -0
- data/spec/spec_helper.rb +135 -49
- data/spec/spec_tests/change_streams_spec.rb +42 -0
- data/spec/{mongo → spec_tests}/command_monitoring_spec.rb +8 -2
- data/spec/{mongo → spec_tests}/connection_string_spec.rb +1 -1
- data/spec/{mongo → spec_tests}/crud_spec.rb +5 -7
- data/spec/{mongo → spec_tests}/dns_seedlist_discovery_spec.rb +1 -1
- data/spec/{mongo → spec_tests}/gridfs_spec.rb +0 -0
- data/spec/{mongo → spec_tests}/max_staleness_spec.rb +0 -0
- data/spec/spec_tests/retryable_writes_spec.rb +78 -0
- data/spec/{mongo → spec_tests}/sdam_monitoring_spec.rb +4 -3
- data/spec/{mongo → spec_tests}/sdam_spec.rb +7 -7
- data/spec/{mongo → spec_tests}/server_selection_rtt_spec.rb +0 -0
- data/spec/{mongo → spec_tests}/server_selection_spec.rb +0 -0
- data/spec/support/authorization.rb +18 -6
- data/spec/support/change_streams.rb +265 -0
- data/spec/support/change_streams/operation.rb +62 -0
- data/spec/support/change_streams_tests/change-streams-errors.yml +53 -0
- data/spec/support/change_streams_tests/change-streams.yml +299 -0
- data/spec/support/command_monitoring.rb +1 -1
- data/spec/support/command_monitoring/bulkWrite.yml +4 -28
- data/spec/support/command_monitoring/command.yml +19 -0
- data/spec/support/command_monitoring/find.yml +17 -19
- data/spec/support/command_monitoring/insertMany.yml +2 -8
- data/spec/support/command_monitoring/unacknowledgedBulkWrite.yml +34 -0
- data/spec/support/connection_string.rb +1 -1
- data/spec/support/constraints.rb +56 -0
- data/spec/support/crud.rb +9 -4
- data/spec/support/crud/read.rb +24 -3
- data/spec/support/crud/write.rb +7 -2
- data/spec/support/crud_tests/read/count-collation.yml +12 -2
- data/spec/support/crud_tests/read/count.yml +43 -5
- data/spec/support/gridfs.rb +1 -1
- data/spec/support/primary_socket.rb +21 -0
- data/spec/support/retryable_writes_tests/bulkWrite-serverErrors.yml +90 -0
- data/spec/support/retryable_writes_tests/bulkWrite.yml +99 -1
- data/spec/support/retryable_writes_tests/deleteOne-serverErrors.yml +50 -0
- data/spec/support/retryable_writes_tests/deleteOne.yml +10 -1
- data/spec/support/retryable_writes_tests/findOneAndDelete-serverErrors.yml +50 -0
- data/spec/support/retryable_writes_tests/findOneAndDelete.yml +39 -30
- data/spec/support/retryable_writes_tests/findOneAndReplace-serverErrors.yml +54 -0
- data/spec/support/retryable_writes_tests/findOneAndReplace.yml +9 -0
- data/spec/support/retryable_writes_tests/findOneAndUpdate-serverErrors.yml +54 -0
- data/spec/support/retryable_writes_tests/findOneAndUpdate.yml +9 -0
- data/spec/support/retryable_writes_tests/insertMany-serverErrors.yml +59 -0
- data/spec/support/retryable_writes_tests/insertMany.yml +11 -6
- data/spec/support/retryable_writes_tests/insertOne-serverErrors.yml +471 -0
- data/spec/support/retryable_writes_tests/insertOne.yml +9 -0
- data/spec/support/retryable_writes_tests/replaceOne-serverErrors.yml +58 -0
- data/spec/support/retryable_writes_tests/replaceOne.yml +9 -0
- data/spec/support/retryable_writes_tests/updateOne-serverErrors.yml +58 -0
- data/spec/support/retryable_writes_tests/updateOne.yml +71 -53
- data/spec/support/sdam/rs/normalize_case_me.yml +100 -0
- data/spec/support/sdam/sharded/compatible.yml +38 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +9 -3
- data/spec/support/sdam/sharded/multiple_mongoses.yml +6 -2
- data/spec/support/sdam/sharded/non_mongos_removed.yml +6 -2
- data/spec/support/sdam/sharded/too_new.yml +36 -0
- data/spec/support/sdam/sharded/too_old.yml +36 -0
- data/spec/support/sdam/single/compatible.yml +26 -0
- data/spec/support/sdam/single/direct_connection_external_ip.yml +3 -1
- data/spec/support/sdam/single/direct_connection_mongos.yml +3 -1
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +3 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +3 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +3 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +3 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +3 -1
- data/spec/support/sdam/single/not_ok_response.yml +6 -2
- data/spec/support/sdam/single/standalone_removed.yml +3 -1
- data/spec/support/sdam/single/too_new.yml +26 -0
- data/spec/support/sdam/single/too_old.yml +24 -0
- data/spec/support/shared/session.rb +107 -0
- data/spec/support/transactions.rb +391 -0
- data/spec/support/transactions/operation.rb +373 -0
- data/spec/support/transactions_tests/abort.yml +403 -0
- data/spec/support/transactions_tests/bulk.yml +267 -0
- data/spec/support/transactions_tests/causal-consistency.yml +173 -0
- data/spec/support/transactions_tests/commit.yml +593 -0
- data/spec/support/transactions_tests/delete.yml +184 -0
- data/spec/support/transactions_tests/error-labels.yml +948 -0
- data/spec/support/transactions_tests/errors.yml +125 -0
- data/spec/support/transactions_tests/findOneAndDelete.yml +126 -0
- data/spec/support/transactions_tests/findOneAndReplace.yml +140 -0
- data/spec/support/transactions_tests/findOneAndUpdate.yml +228 -0
- data/spec/support/transactions_tests/insert.yml +264 -0
- data/spec/support/transactions_tests/isolation.yml +125 -0
- data/spec/support/transactions_tests/read-pref.yml +340 -0
- data/spec/support/transactions_tests/reads.yml +298 -0
- data/spec/support/transactions_tests/retryable-abort.yml +1292 -0
- data/spec/support/transactions_tests/retryable-commit.yml +1332 -0
- data/spec/support/transactions_tests/retryable-writes.yml +208 -0
- data/spec/support/transactions_tests/run-command.yml +189 -0
- data/spec/support/transactions_tests/transaction-options.yml +877 -0
- data/spec/support/transactions_tests/update.yml +246 -0
- data/spec/support/transactions_tests/write-concern.yml +236 -0
- metadata +494 -359
- metadata.gz.sig +0 -0
- data/lib/csasl/csasl.bundle +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015-
|
1
|
+
# Copyright (C) 2015-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -26,7 +26,28 @@ module Mongo
|
|
26
26
|
|
27
27
|
READ_PREFERENCE = '$readPreference'.freeze
|
28
28
|
|
29
|
-
|
29
|
+
READ_COMMANDS = [
|
30
|
+
:aggregate,
|
31
|
+
:collStats,
|
32
|
+
:count,
|
33
|
+
:dbStats,
|
34
|
+
:distinct,
|
35
|
+
:find,
|
36
|
+
:geoNear,
|
37
|
+
:geoSearch,
|
38
|
+
:group,
|
39
|
+
:mapReduce,
|
40
|
+
:parallelCollectionScan
|
41
|
+
].freeze
|
42
|
+
|
43
|
+
def apply_causal_consistency!(selector, server)
|
44
|
+
return unless selector[:startTransaction]
|
45
|
+
|
46
|
+
if !server.standalone?
|
47
|
+
full_read_concern_doc = session.send(:causal_consistency_doc, selector[:readConcern] || read_concern)
|
48
|
+
selector[:readConcern] = full_read_concern_doc if full_read_concern_doc
|
49
|
+
end
|
50
|
+
end
|
30
51
|
|
31
52
|
def flags
|
32
53
|
acknowledged_write? ? [:none] : [:more_to_come]
|
@@ -44,34 +65,84 @@ module Mongo
|
|
44
65
|
end
|
45
66
|
end
|
46
67
|
|
68
|
+
def read_command?(sel)
|
69
|
+
READ_COMMANDS.any? { |c| sel[c] }
|
70
|
+
end
|
71
|
+
|
47
72
|
def add_write_concern!(sel)
|
48
|
-
if write_concern
|
49
|
-
|
50
|
-
|
73
|
+
sel[:writeConcern] = write_concern.options if write_concern
|
74
|
+
end
|
75
|
+
|
76
|
+
def apply_autocommit!(selector)
|
77
|
+
session.add_autocommit!(selector)
|
51
78
|
end
|
52
79
|
|
53
80
|
def apply_session_id!(selector)
|
54
81
|
session.add_id!(selector)
|
55
82
|
end
|
56
83
|
|
84
|
+
def apply_start_transaction!(selector)
|
85
|
+
session.add_start_transaction!(selector)
|
86
|
+
end
|
87
|
+
|
88
|
+
def apply_txn_num!(selector)
|
89
|
+
session.add_txn_num!(selector)
|
90
|
+
end
|
91
|
+
|
92
|
+
def apply_read_pref!(selector)
|
93
|
+
session.apply_read_pref!(selector) if read_command?(selector)
|
94
|
+
end
|
95
|
+
|
96
|
+
def apply_txn_opts!(selector)
|
97
|
+
session.add_txn_opts!(selector, read_command?(selector))
|
98
|
+
end
|
99
|
+
|
100
|
+
def suppress_read_write_concern!(selector)
|
101
|
+
session.suppress_read_write_concern!(selector)
|
102
|
+
end
|
103
|
+
|
104
|
+
def validate_read_pref!(selector)
|
105
|
+
session.validate_read_pref!(selector) if read_command?(selector)
|
106
|
+
end
|
107
|
+
|
108
|
+
def update_session_state!
|
109
|
+
session.update_state!
|
110
|
+
end
|
111
|
+
|
57
112
|
def command(server)
|
58
113
|
sel = selector(server)
|
59
|
-
sel
|
114
|
+
add_write_concern!(sel)
|
60
115
|
sel[Protocol::Msg::DATABASE_IDENTIFIER] = db_name
|
61
116
|
sel[READ_PREFERENCE] = read.to_doc if read
|
117
|
+
|
62
118
|
if server.features.sessions_enabled?
|
63
119
|
apply_cluster_time!(sel, server)
|
64
|
-
if acknowledged_write?
|
120
|
+
if session && (acknowledged_write? || session.in_transaction?)
|
65
121
|
sel[:txnNumber] = BSON::Int64.new(txn_num) if txn_num
|
66
122
|
apply_session_id!(sel)
|
123
|
+
apply_start_transaction!(sel)
|
67
124
|
apply_causal_consistency!(sel, server)
|
125
|
+
apply_autocommit!(sel)
|
126
|
+
apply_txn_opts!(sel)
|
127
|
+
suppress_read_write_concern!(sel)
|
128
|
+
validate_read_pref!(sel)
|
129
|
+
update_session_state!
|
130
|
+
apply_txn_num!(sel)
|
68
131
|
end
|
69
132
|
elsif session && session.explicit?
|
70
133
|
apply_cluster_time!(sel, server)
|
71
134
|
sel[:txnNumber] = BSON::Int64.new(txn_num) if txn_num
|
72
135
|
apply_session_id!(sel)
|
136
|
+
apply_start_transaction!(sel)
|
73
137
|
apply_causal_consistency!(sel, server)
|
138
|
+
apply_autocommit!(sel)
|
139
|
+
apply_txn_opts!(sel)
|
140
|
+
suppress_read_write_concern!(sel)
|
141
|
+
validate_read_pref!(sel)
|
142
|
+
update_session_state!
|
143
|
+
apply_txn_num!(sel)
|
74
144
|
end
|
145
|
+
|
75
146
|
sel
|
76
147
|
end
|
77
148
|
end
|
@@ -101,6 +101,11 @@ module Mongo
|
|
101
101
|
# @since 2.0.0
|
102
102
|
SELECTOR = :selector.freeze
|
103
103
|
|
104
|
+
# The startTransaction option
|
105
|
+
#
|
106
|
+
# @since 2.6.0
|
107
|
+
START_TRANSACTION = :start_transaction.freeze
|
108
|
+
|
104
109
|
# The field for number to return.
|
105
110
|
#
|
106
111
|
# @since 2.0.0
|
@@ -551,12 +556,23 @@ module Mongo
|
|
551
556
|
selector[Operation::ARRAY_FILTERS] if selector
|
552
557
|
end
|
553
558
|
|
559
|
+
# The startTransaction option.
|
560
|
+
#
|
561
|
+
# @example Get the startTransaction option.
|
562
|
+
# specifiable.start_transaction
|
563
|
+
#
|
564
|
+
# @return [ Boolean ] The startTransaction option.
|
565
|
+
#
|
566
|
+
def start_transaction
|
567
|
+
@spec[START_TRANSACTION]
|
568
|
+
end
|
569
|
+
|
554
570
|
# Does the operation have an acknowledged write concern.
|
555
571
|
#
|
556
|
-
# @example Determine whether the operation has an
|
572
|
+
# @example Determine whether the operation has an acknowledged write.
|
557
573
|
# specifiable.array_filters
|
558
574
|
#
|
559
|
-
# @return [
|
575
|
+
# @return [ Boolean ] Whether or not the operation has an acknowledged write concern.
|
560
576
|
#
|
561
577
|
# @since 2.5.2
|
562
578
|
def acknowledged_write?
|
@@ -40,6 +40,9 @@ module Mongo
|
|
40
40
|
def execute(server)
|
41
41
|
result = Result.new(dispatch_message(server))
|
42
42
|
process_result(result, server)
|
43
|
+
rescue Mongo::Error::SocketError => e
|
44
|
+
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
|
45
|
+
raise e
|
43
46
|
end
|
44
47
|
|
45
48
|
private
|
@@ -26,10 +26,19 @@ module Mongo
|
|
26
26
|
include Executable
|
27
27
|
include SessionsSupported
|
28
28
|
|
29
|
+
def execute(server)
|
30
|
+
result = Result.new(dispatch_message(server))
|
31
|
+
process_result(result, server)
|
32
|
+
result.validate!
|
33
|
+
rescue Mongo::Error::SocketError => e
|
34
|
+
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
|
35
|
+
raise e
|
36
|
+
end
|
37
|
+
|
29
38
|
private
|
30
39
|
|
31
40
|
def selector(server)
|
32
|
-
{ :updateUser => user.name
|
41
|
+
{ :updateUser => user.name }.merge(user.spec)
|
33
42
|
end
|
34
43
|
|
35
44
|
def message(server)
|
@@ -40,6 +40,9 @@ module Mongo
|
|
40
40
|
result = Result.new(dispatch_message(server))
|
41
41
|
process_result(result, server)
|
42
42
|
result.validate!
|
43
|
+
rescue Mongo::Error::SocketError => e
|
44
|
+
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
|
45
|
+
raise e
|
43
46
|
end
|
44
47
|
|
45
48
|
private
|
data/lib/mongo/options.rb
CHANGED
data/lib/mongo/options/mapper.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -15,7 +15,7 @@
|
|
15
15
|
module Mongo
|
16
16
|
module Protocol
|
17
17
|
|
18
|
-
# MongoDB Wire protocol
|
18
|
+
# MongoDB Wire protocol getMore message.
|
19
19
|
#
|
20
20
|
# This is a client request message that is sent to the server in order
|
21
21
|
# to retrieve additional documents from a cursor that has already been
|
@@ -27,7 +27,7 @@ module Mongo
|
|
27
27
|
# @api semipublic
|
28
28
|
class GetMore < Message
|
29
29
|
|
30
|
-
# Creates a new
|
30
|
+
# Creates a new getMore message
|
31
31
|
#
|
32
32
|
# @example Get 15 additional documents from cursor 123 in 'xgen.users'.
|
33
33
|
# GetMore.new('xgen', 'users', 15, 123)
|
@@ -80,7 +80,7 @@ module Mongo
|
|
80
80
|
|
81
81
|
private
|
82
82
|
|
83
|
-
# The operation code required to specify a
|
83
|
+
# The operation code required to specify a getMore message.
|
84
84
|
# @return [Fixnum] the operation code.
|
85
85
|
#
|
86
86
|
# @since 2.5.0
|
@@ -90,18 +90,18 @@ module Mongo
|
|
90
90
|
field :zero, Zero
|
91
91
|
|
92
92
|
# @!attribute
|
93
|
-
# @return [String] The namespace for this
|
93
|
+
# @return [String] The namespace for this getMore message.
|
94
94
|
field :namespace, CString
|
95
95
|
|
96
96
|
# @!attribute
|
97
|
-
# @return [Fixnum] The number to return for this
|
97
|
+
# @return [Fixnum] The number to return for this getMore message.
|
98
98
|
field :number_to_return, Int32
|
99
99
|
|
100
100
|
# @!attribute
|
101
101
|
# @return [Fixnum] The cursor id to get more documents from.
|
102
102
|
field :cursor_id, Int64
|
103
103
|
|
104
|
-
# Converts legacy
|
104
|
+
# Converts legacy getMore messages to the appropriare OP_COMMAND style
|
105
105
|
# message.
|
106
106
|
#
|
107
107
|
# @since 2.1.0
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -72,15 +72,15 @@ module Mongo
|
|
72
72
|
# @since 2.2.1
|
73
73
|
MAX_MESSAGE_SIZE = 50331648.freeze
|
74
74
|
|
75
|
+
def initialize(*args) # :nodoc:
|
76
|
+
@request_id = nil
|
77
|
+
end
|
78
|
+
|
75
79
|
# Returns the request id for the message
|
76
80
|
#
|
77
81
|
# @return [Fixnum] The request id for this message
|
78
82
|
attr_reader :request_id
|
79
83
|
|
80
|
-
def initialize(*args) # :nodoc:
|
81
|
-
@request_id = nil
|
82
|
-
end
|
83
|
-
|
84
84
|
# The default for messages is not to require a reply after sending a
|
85
85
|
# message to the server.
|
86
86
|
#
|
data/lib/mongo/protocol/msg.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2017 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2017-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -15,7 +15,8 @@
|
|
15
15
|
module Mongo
|
16
16
|
module Protocol
|
17
17
|
|
18
|
-
# MongoDB Wire protocol Msg message (OP_MSG), a bi-directional wire
|
18
|
+
# MongoDB Wire protocol Msg message (OP_MSG), a bi-directional wire
|
19
|
+
# protocol opcode.
|
19
20
|
#
|
20
21
|
# OP_MSG is only available in MongoDB 3.6 (maxWireVersion >= 6) and later.
|
21
22
|
#
|
@@ -36,11 +37,12 @@ module Mongo
|
|
36
37
|
# Msg.new([:more_to_come], {}, { ismaster: 1 },
|
37
38
|
# { type: 1, payload: { identifier: 'documents', sequence: [..] } })
|
38
39
|
#
|
39
|
-
# @param [ Array<Symbol> ] flags The flag bits. Current supported values
|
40
|
-
#
|
41
|
-
# @param [ Hash ] options The options. There are currently no supported
|
42
|
-
#
|
43
|
-
# @param [ BSON::Document, Hash ] global_args The global arguments,
|
40
|
+
# @param [ Array<Symbol> ] flags The flag bits. Current supported values
|
41
|
+
# are :more_to_come and :checksum_present.
|
42
|
+
# @param [ Hash ] options The options. There are currently no supported
|
43
|
+
# options, this is a placeholder for the future.
|
44
|
+
# @param [ BSON::Document, Hash ] global_args The global arguments,
|
45
|
+
# becomes a section of payload type 0.
|
44
46
|
# @param [ BSON::Document, Hash ] sections Zero or more sections, in the format
|
45
47
|
# { type: 1, payload: { identifier: <String>, sequence: <Array<BSON::Document, Hash>> } } or
|
46
48
|
# { type: 0, payload: <BSON::Document, Hash> }
|
data/lib/mongo/protocol/query.rb
CHANGED
data/lib/mongo/protocol/reply.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -136,15 +136,6 @@ module Mongo
|
|
136
136
|
# @since 2.1.0
|
137
137
|
ID = 'id'.freeze
|
138
138
|
|
139
|
-
# @return [ Array<BSON::Document> ] documents The documents.
|
140
|
-
attr_reader :documents
|
141
|
-
|
142
|
-
# @return [ Integer ] cursor_id The cursor id.
|
143
|
-
attr_reader :cursor_id
|
144
|
-
|
145
|
-
# @return [ Integer ] starting_from The starting point in the cursor.
|
146
|
-
attr_reader :starting_from
|
147
|
-
|
148
139
|
# Initialize the new upconverter.
|
149
140
|
#
|
150
141
|
# @example Create the upconverter.
|
@@ -161,6 +152,15 @@ module Mongo
|
|
161
152
|
@starting_from = starting_from
|
162
153
|
end
|
163
154
|
|
155
|
+
# @return [ Array<BSON::Document> ] documents The documents.
|
156
|
+
attr_reader :documents
|
157
|
+
|
158
|
+
# @return [ Integer ] cursor_id The cursor id.
|
159
|
+
attr_reader :cursor_id
|
160
|
+
|
161
|
+
# @return [ Integer ] starting_from The starting point in the cursor.
|
162
|
+
attr_reader :starting_from
|
163
|
+
|
164
164
|
# Get the upconverted command.
|
165
165
|
#
|
166
166
|
# @example Get the command.
|