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 MongoDB, Inc.
|
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.
|
@@ -68,7 +68,7 @@ module Mongo
|
|
68
68
|
# @since 2.1.0
|
69
69
|
def succeeded(event)
|
70
70
|
if logger.debug?
|
71
|
-
log_debug("#{prefix(event)} | SUCCEEDED | #{event.duration}s")
|
71
|
+
log_debug("#{prefix(event)} | SUCCEEDED | #{'%.3f' % event.duration}s")
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015 MongoDB, Inc.
|
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.
|
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'mongo/event'
|
15
16
|
require 'mongo/monitoring/event/secure'
|
16
17
|
require 'mongo/monitoring/event/command_started'
|
17
18
|
require 'mongo/monitoring/event/command_succeeded'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015 MongoDB, Inc.
|
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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event that is fired when a command operation fails.
|
20
20
|
#
|
21
21
|
# @since 2.1.0
|
22
|
-
class CommandFailed
|
22
|
+
class CommandFailed < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Server::Address ] address The server address.
|
25
25
|
attr_reader :address
|
@@ -33,7 +33,14 @@ module Mongo
|
|
33
33
|
# @return [ Float ] duration The duration of the command in seconds.
|
34
34
|
attr_reader :duration
|
35
35
|
|
36
|
-
# @return [
|
36
|
+
# @return [ BSON::Document ] failure The error document, if present.
|
37
|
+
# This will only be filled out for errors communicated by a
|
38
|
+
# MongoDB server. In other situations, for example in case of
|
39
|
+
# a network error, this attribute may be nil.
|
40
|
+
attr_reader :failure
|
41
|
+
|
42
|
+
# @return [ String ] message The error message. Unlike the error
|
43
|
+
# document, the error message should always be present.
|
37
44
|
attr_reader :message
|
38
45
|
|
39
46
|
# @return [ Integer ] operation_id The operation id.
|
@@ -52,16 +59,19 @@ module Mongo
|
|
52
59
|
# @param [ Integer ] request_id The request id.
|
53
60
|
# @param [ Integer ] operation_id The operation id.
|
54
61
|
# @param [ String ] message The error message.
|
62
|
+
# @param [ BSON::Document ] failure The error document, if any.
|
55
63
|
# @param [ Float ] duration The duration the command took in seconds.
|
56
64
|
#
|
57
65
|
# @since 2.1.0
|
58
|
-
|
59
|
-
|
66
|
+
# @api private
|
67
|
+
def initialize(command_name, database_name, address, request_id, operation_id, message, failure, duration)
|
68
|
+
@command_name = command_name.to_s
|
60
69
|
@database_name = database_name
|
61
70
|
@address = address
|
62
71
|
@request_id = request_id
|
63
72
|
@operation_id = operation_id
|
64
73
|
@message = message
|
74
|
+
@failure = failure
|
65
75
|
@duration = duration
|
66
76
|
end
|
67
77
|
|
@@ -74,12 +84,14 @@ module Mongo
|
|
74
84
|
# @param [ Integer ] operation_id The operation id.
|
75
85
|
# @param [ Hash ] payload The message payload.
|
76
86
|
# @param [ String ] message The error message.
|
87
|
+
# @param [ BSON::Document ] failure The error document, if any.
|
77
88
|
# @param [ Float ] duration The duration of the command in seconds.
|
78
89
|
#
|
79
90
|
# @return [ CommandFailed ] The event.
|
80
91
|
#
|
81
92
|
# @since 2.1.0
|
82
|
-
|
93
|
+
# @api private
|
94
|
+
def self.generate(address, operation_id, payload, message, failure, duration)
|
83
95
|
new(
|
84
96
|
payload[:command_name],
|
85
97
|
payload[:database_name],
|
@@ -87,6 +99,7 @@ module Mongo
|
|
87
99
|
payload[:request_id],
|
88
100
|
operation_id,
|
89
101
|
message,
|
102
|
+
failure,
|
90
103
|
duration
|
91
104
|
)
|
92
105
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015 MongoDB, Inc.
|
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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event that is fired when a command operation starts.
|
20
20
|
#
|
21
21
|
# @since 2.1.0
|
22
|
-
class CommandStarted
|
22
|
+
class CommandStarted < Mongo::Event::Base
|
23
23
|
include Secure
|
24
24
|
|
25
25
|
# @return [ Server::Address ] address The server address.
|
@@ -52,8 +52,9 @@ module Mongo
|
|
52
52
|
# @param [ BSON::Document ] command The command arguments.
|
53
53
|
#
|
54
54
|
# @since 2.1.0
|
55
|
+
# @api private
|
55
56
|
def initialize(command_name, database_name, address, request_id, operation_id, command)
|
56
|
-
@command_name = command_name
|
57
|
+
@command_name = command_name.to_s
|
57
58
|
@database_name = database_name
|
58
59
|
@address = address
|
59
60
|
@request_id = request_id
|
@@ -73,6 +74,7 @@ module Mongo
|
|
73
74
|
# @return [ CommandStarted ] The event.
|
74
75
|
#
|
75
76
|
# @since 2.1.0
|
77
|
+
# @api private
|
76
78
|
def self.generate(address, operation_id, payload)
|
77
79
|
new(
|
78
80
|
payload[:command_name],
|
@@ -83,6 +85,15 @@ module Mongo
|
|
83
85
|
payload[:command]
|
84
86
|
)
|
85
87
|
end
|
88
|
+
|
89
|
+
# Returns a concise yet useful summary of the event.
|
90
|
+
#
|
91
|
+
# @return [ String ] String summary of the event.
|
92
|
+
#
|
93
|
+
# @since 2.6.0
|
94
|
+
def inspect
|
95
|
+
"#<{#{self.class} command=#{command_name}>"
|
96
|
+
end
|
86
97
|
end
|
87
98
|
end
|
88
99
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015 MongoDB, Inc.
|
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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event that is fired when a command operation succeeds.
|
20
20
|
#
|
21
21
|
# @since 2.1.0
|
22
|
-
class CommandSucceeded
|
22
|
+
class CommandSucceeded < Mongo::Event::Base
|
23
23
|
include Secure
|
24
24
|
|
25
25
|
# @return [ Server::Address ] address The server address.
|
@@ -56,8 +56,9 @@ module Mongo
|
|
56
56
|
# @param [ Float ] duration The duration the command took in seconds.
|
57
57
|
#
|
58
58
|
# @since 2.1.0
|
59
|
+
# @api private
|
59
60
|
def initialize(command_name, database_name, address, request_id, operation_id, reply, duration)
|
60
|
-
@command_name = command_name
|
61
|
+
@command_name = command_name.to_s
|
61
62
|
@database_name = database_name
|
62
63
|
@address = address
|
63
64
|
@request_id = request_id
|
@@ -80,6 +81,7 @@ module Mongo
|
|
80
81
|
# @return [ CommandCompleted ] The event.
|
81
82
|
#
|
82
83
|
# @since 2.1.0
|
84
|
+
# @api private
|
83
85
|
def self.generate(address, operation_id, command_payload, reply_payload, duration)
|
84
86
|
new(
|
85
87
|
command_payload[:command_name],
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2016-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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event fired when the server is closed.
|
20
20
|
#
|
21
21
|
# @since 2.4.0
|
22
|
-
class ServerClosed
|
22
|
+
class ServerClosed < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Address ] address The server address.
|
25
25
|
attr_reader :address
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2016-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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event fired when a server's description changes.
|
20
20
|
#
|
21
21
|
# @since 2.4.0
|
22
|
-
class ServerDescriptionChanged
|
22
|
+
class ServerDescriptionChanged < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Address ] address The server address.
|
25
25
|
attr_reader :address
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2016-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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event fired when the server is opening.
|
20
20
|
#
|
21
21
|
# @since 2.4.0
|
22
|
-
class ServerOpening
|
22
|
+
class ServerOpening < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Address ] address The server address.
|
25
25
|
attr_reader :address
|
@@ -40,6 +40,15 @@ module Mongo
|
|
40
40
|
@address = address
|
41
41
|
@topology = topology
|
42
42
|
end
|
43
|
+
|
44
|
+
# Returns a concise yet useful summary of the event.
|
45
|
+
#
|
46
|
+
# @return [ String ] String summary of the event.
|
47
|
+
#
|
48
|
+
# @since 2.6.0
|
49
|
+
def inspect
|
50
|
+
"#<#{self.class} address=#{address} topology=#{topology.class.name.sub(/.*::/, '')}>"
|
51
|
+
end
|
43
52
|
end
|
44
53
|
end
|
45
54
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2016-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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event fired when the topology changes.
|
20
20
|
#
|
21
21
|
# @since 2.4.0
|
22
|
-
class TopologyChanged
|
22
|
+
class TopologyChanged < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Cluster::Topology ] previous_topology The previous topology.
|
25
25
|
attr_reader :previous_topology
|
@@ -40,6 +40,17 @@ module Mongo
|
|
40
40
|
@previous_topology = previous_topology
|
41
41
|
@new_topology = new_topology
|
42
42
|
end
|
43
|
+
|
44
|
+
# Returns a concise yet useful summary of the event.
|
45
|
+
#
|
46
|
+
# @return [ String ] String summary of the event.
|
47
|
+
#
|
48
|
+
# @since 2.6.0
|
49
|
+
def inspect
|
50
|
+
"#<Mongo::Monitoring::Event::TopologyChanged" +
|
51
|
+
" prev=#{previous_topology.class.name.sub(/.*::/, '')}" +
|
52
|
+
" new=#{new_topology.class.name.sub(/.*::/, '')}>"
|
53
|
+
end
|
43
54
|
end
|
44
55
|
end
|
45
56
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2016-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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event fired when the topology closes.
|
20
20
|
#
|
21
21
|
# @since 2.4.0
|
22
|
-
class TopologyClosed
|
22
|
+
class TopologyClosed < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Topology ] topology The topology.
|
25
25
|
attr_reader :topology
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2016-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.
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# Event fired when the topology is opening.
|
20
20
|
#
|
21
21
|
# @since 2.4.0
|
22
|
-
class TopologyOpening
|
22
|
+
class TopologyOpening < Mongo::Event::Base
|
23
23
|
|
24
24
|
# @return [ Topology ] topology The topology.
|
25
25
|
attr_reader :topology
|
@@ -35,6 +35,15 @@ module Mongo
|
|
35
35
|
def initialize(topology)
|
36
36
|
@topology = topology
|
37
37
|
end
|
38
|
+
|
39
|
+
# Returns a concise yet useful summary of the event.
|
40
|
+
#
|
41
|
+
# @return [ String ] String summary of the event.
|
42
|
+
#
|
43
|
+
# @since 2.6.0
|
44
|
+
def inspect
|
45
|
+
"#<#{self.class} topology=#{topology.class.name.sub(/.*::/, '')}>"
|
46
|
+
end
|
38
47
|
end
|
39
48
|
end
|
40
49
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015 MongoDB, Inc.
|
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.
|
@@ -19,6 +19,7 @@ module Mongo
|
|
19
19
|
#
|
20
20
|
# @since 2.1.0
|
21
21
|
module Publishable
|
22
|
+
include Loggable
|
22
23
|
|
23
24
|
# @return [ Monitoring ] monitoring The monitoring.
|
24
25
|
attr_reader :monitoring
|
@@ -50,7 +51,7 @@ module Mongo
|
|
50
51
|
result
|
51
52
|
rescue Exception => e
|
52
53
|
total_duration = duration(receive_start) + send_duration
|
53
|
-
command_failed(address, operation_id, payload, e.message, total_duration)
|
54
|
+
command_failed(nil, address, operation_id, payload, e.message, total_duration)
|
54
55
|
raise e
|
55
56
|
end
|
56
57
|
end
|
@@ -60,7 +61,10 @@ module Mongo
|
|
60
61
|
end
|
61
62
|
|
62
63
|
def publish_sdam_event(topic, event)
|
63
|
-
|
64
|
+
return unless monitoring?
|
65
|
+
|
66
|
+
log_debug("EVENT: #{event.inspect}")
|
67
|
+
monitoring.succeeded(topic, event)
|
64
68
|
end
|
65
69
|
|
66
70
|
private
|
@@ -76,7 +80,7 @@ module Mongo
|
|
76
80
|
document = result ? (result.documents || []).first : nil
|
77
81
|
if error?(document)
|
78
82
|
parser = Error::Parser.new(document)
|
79
|
-
command_failed(address, operation_id, payload, parser.message, duration)
|
83
|
+
command_failed(document, address, operation_id, payload, parser.message, duration)
|
80
84
|
else
|
81
85
|
command_succeeded(result, address, operation_id, payload, duration)
|
82
86
|
end
|
@@ -95,10 +99,10 @@ module Mongo
|
|
95
99
|
)
|
96
100
|
end
|
97
101
|
|
98
|
-
def command_failed(address, operation_id, payload, message, duration)
|
102
|
+
def command_failed(failure, address, operation_id, payload, message, duration)
|
99
103
|
monitoring.failed(
|
100
104
|
Monitoring::COMMAND,
|
101
|
-
Event::CommandFailed.generate(address, operation_id, payload, message, duration)
|
105
|
+
Event::CommandFailed.generate(address, operation_id, payload, message, failure, duration)
|
102
106
|
)
|
103
107
|
end
|
104
108
|
|
@@ -41,6 +41,9 @@ module Mongo
|
|
41
41
|
result = Result.new(dispatch_message(server))
|
42
42
|
process_result(result, server)
|
43
43
|
result.validate!
|
44
|
+
rescue Mongo::Error::SocketError => e
|
45
|
+
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
|
46
|
+
raise e
|
44
47
|
end
|
45
48
|
|
46
49
|
private
|
@@ -26,6 +26,15 @@ 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 message(server)
|