mongo 1.12.5 → 2.0.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
- checksums.yaml.gz.sig +0 -0
- data/CONTRIBUTING.md +64 -0
- data/LICENSE +1 -1
- data/README.md +21 -126
- data/Rakefile +39 -21
- data/bin/mongo_console +6 -38
- data/lib/mongo/address/ipv4.rb +85 -0
- data/lib/mongo/address/ipv6.rb +85 -0
- data/lib/mongo/address/unix.rb +76 -0
- data/lib/mongo/address.rb +111 -0
- data/lib/mongo/auth/cr/conversation.rb +119 -0
- data/lib/mongo/auth/cr.rb +44 -0
- data/lib/mongo/auth/executable.rb +52 -0
- data/lib/mongo/auth/ldap/conversation.rb +92 -0
- data/lib/mongo/auth/ldap.rb +48 -0
- data/lib/mongo/auth/roles.rb +104 -0
- data/lib/mongo/auth/scram/conversation.rb +450 -0
- data/lib/mongo/auth/scram.rb +53 -0
- data/lib/mongo/auth/user/view.rb +102 -0
- data/lib/mongo/auth/user.rb +159 -0
- data/lib/mongo/auth/x509/conversation.rb +92 -0
- data/lib/mongo/auth/x509.rb +48 -0
- data/lib/mongo/auth.rb +108 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
- data/lib/mongo/bulk_write/deletable.rb +60 -0
- data/lib/mongo/bulk_write/insertable.rb +52 -0
- data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
- data/lib/mongo/bulk_write/replacable.rb +57 -0
- data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
- data/lib/mongo/bulk_write/updatable.rb +68 -0
- data/lib/mongo/bulk_write.rb +52 -0
- data/lib/mongo/client.rb +246 -0
- data/lib/mongo/cluster/topology/replica_set.rb +160 -0
- data/lib/mongo/cluster/topology/sharded.rb +132 -0
- data/lib/mongo/cluster/topology/standalone.rb +132 -0
- data/lib/mongo/cluster/topology/unknown.rb +155 -0
- data/lib/mongo/cluster/topology.rb +60 -0
- data/lib/mongo/cluster.rb +203 -0
- data/lib/mongo/collection/view/aggregation.rb +108 -0
- data/lib/mongo/collection/view/explainable.rb +49 -0
- data/lib/mongo/collection/view/immutable.rb +43 -0
- data/lib/mongo/collection/view/iterable.rb +48 -0
- data/lib/mongo/collection/view/map_reduce.rb +191 -0
- data/lib/mongo/collection/view/readable.rb +363 -0
- data/lib/mongo/collection/view/writable.rb +185 -0
- data/lib/mongo/collection/view.rb +169 -0
- data/lib/mongo/collection.rb +130 -1101
- data/lib/mongo/cursor.rb +78 -681
- data/lib/mongo/database/view.rb +101 -0
- data/lib/mongo/database.rb +224 -0
- data/lib/mongo/error/bulk_write_error.rb +41 -0
- data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
- data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
- data/lib/mongo/error/invalid_collection_name.rb +39 -0
- data/lib/mongo/error/invalid_database_name.rb +39 -0
- data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
- data/lib/mongo/error/invalid_file.rb +38 -0
- data/lib/mongo/error/invalid_nonce.rb +46 -0
- data/lib/mongo/error/invalid_replacement_document.rb +39 -0
- data/lib/mongo/error/invalid_signature.rb +47 -0
- data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
- data/lib/mongo/error/max_bson_size.rb +40 -0
- data/lib/mongo/error/max_message_size.rb +42 -0
- data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
- data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
- data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
- data/lib/mongo/error/parser.rb +77 -0
- data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
- data/lib/mongo/error/socket_timeout_error.rb +23 -0
- data/lib/mongo/error/unsupported_features.rb +43 -0
- data/lib/mongo/error.rb +82 -0
- data/lib/mongo/event/listeners.rb +63 -0
- data/lib/mongo/event/primary_elected.rb +53 -0
- data/lib/mongo/event/publisher.rb +42 -0
- data/lib/mongo/event/server_added.rb +53 -0
- data/lib/mongo/event/server_removed.rb +53 -0
- data/lib/mongo/event/subscriber.rb +41 -0
- data/lib/mongo/event.rb +40 -0
- data/lib/mongo/grid/file/chunk.rb +184 -0
- data/lib/mongo/grid/file/metadata.rb +229 -0
- data/lib/mongo/grid/file.rb +106 -0
- data/lib/mongo/grid/fs.rb +149 -0
- data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
- data/lib/mongo/index/view.rb +261 -0
- data/lib/mongo/index.rb +64 -0
- data/lib/mongo/loggable.rb +126 -0
- data/lib/mongo/logger.rb +132 -0
- data/lib/mongo/operation/aggregate/result.rb +88 -0
- data/lib/mongo/operation/aggregate.rb +100 -0
- data/lib/mongo/operation/command.rb +62 -0
- data/lib/mongo/operation/executable.rb +105 -0
- data/lib/mongo/operation/kill_cursors.rb +39 -0
- data/lib/mongo/operation/limited.rb +37 -0
- data/lib/mongo/operation/list_collections/result.rb +114 -0
- data/lib/mongo/operation/list_indexes/result.rb +118 -0
- data/lib/mongo/operation/map_reduce/result.rb +122 -0
- data/lib/mongo/operation/map_reduce.rb +96 -0
- data/lib/mongo/operation/read/collections_info.rb +67 -0
- data/lib/mongo/operation/read/get_more.rb +71 -0
- data/lib/mongo/operation/read/indexes.rb +68 -0
- data/lib/mongo/operation/read/list_collections.rb +75 -0
- data/lib/mongo/operation/read/list_indexes.rb +77 -0
- data/lib/mongo/operation/read/query.rb +71 -0
- data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
- data/lib/mongo/operation/read_preferrable.rb +34 -0
- data/lib/mongo/operation/result.rb +259 -0
- data/lib/mongo/operation/specifiable.rb +397 -0
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
- data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
- data/lib/mongo/operation/write/bulk.rb +17 -0
- data/lib/mongo/operation/write/command/create_index.rb +50 -0
- data/lib/mongo/operation/write/command/create_user.rb +43 -0
- data/lib/mongo/operation/write/command/delete.rb +56 -0
- data/lib/mongo/operation/write/command/drop_index.rb +51 -0
- data/lib/mongo/operation/write/command/insert.rb +55 -0
- data/lib/mongo/operation/write/command/remove_user.rb +42 -0
- data/lib/mongo/operation/write/command/update.rb +60 -0
- data/lib/mongo/operation/write/command/writable.rb +61 -0
- data/lib/mongo/operation/write/command.rb +22 -0
- data/lib/mongo/operation/write/create_index.rb +89 -0
- data/lib/mongo/operation/write/create_user.rb +75 -0
- data/lib/mongo/operation/write/delete/result.rb +40 -0
- data/lib/mongo/operation/write/delete.rb +93 -0
- data/lib/mongo/operation/write/drop_index.rb +62 -0
- data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
- data/lib/mongo/operation/write/insert.rb +90 -0
- data/lib/mongo/operation/write/remove_user.rb +70 -0
- data/lib/mongo/operation/write/update/result.rb +160 -0
- data/lib/mongo/operation/write/update.rb +103 -0
- data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
- data/lib/mongo/operation.rb +25 -0
- data/lib/mongo/options/mapper.rb +78 -0
- data/lib/mongo/options.rb +15 -0
- data/lib/mongo/protocol/bit_vector.rb +61 -0
- data/lib/mongo/protocol/delete.rb +94 -0
- data/lib/mongo/protocol/get_more.rb +99 -0
- data/lib/mongo/protocol/insert.rb +99 -0
- data/lib/mongo/protocol/kill_cursors.rb +74 -0
- data/lib/mongo/protocol/message.rb +252 -0
- data/lib/mongo/protocol/query.rb +147 -0
- data/lib/mongo/protocol/reply.rb +72 -0
- data/lib/mongo/protocol/serializers.rb +180 -0
- data/lib/mongo/protocol/update.rb +111 -0
- data/lib/mongo/protocol.rb +15 -0
- data/lib/mongo/server/connectable.rb +110 -0
- data/lib/mongo/server/connection.rb +134 -0
- data/lib/mongo/server/connection_pool/queue.rb +182 -0
- data/lib/mongo/server/connection_pool.rb +141 -0
- data/lib/mongo/server/context.rb +66 -0
- data/lib/mongo/server/description/features.rb +85 -0
- data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
- data/lib/mongo/server/description/inspector/server_added.rb +59 -0
- data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
- data/lib/mongo/server/description/inspector.rb +79 -0
- data/lib/mongo/server/description.rb +450 -0
- data/lib/mongo/server/monitor/connection.rb +89 -0
- data/lib/mongo/server/monitor.rb +176 -0
- data/lib/mongo/server.rb +163 -0
- data/lib/mongo/server_selector/nearest.rb +94 -0
- data/lib/mongo/server_selector/primary.rb +88 -0
- data/lib/mongo/server_selector/primary_preferred.rb +94 -0
- data/lib/mongo/server_selector/secondary.rb +91 -0
- data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
- data/lib/mongo/server_selector/selectable.rb +209 -0
- data/lib/mongo/server_selector.rb +81 -0
- data/lib/mongo/socket/ssl.rb +130 -0
- data/lib/mongo/socket/tcp.rb +69 -0
- data/lib/mongo/socket/unix.rb +64 -0
- data/lib/mongo/socket.rb +179 -0
- data/lib/mongo/uri.rb +504 -0
- data/lib/mongo/version.rb +21 -0
- data/lib/mongo/write_concern/acknowledged.rb +52 -0
- data/lib/mongo/write_concern/normalizable.rb +51 -0
- data/lib/mongo/write_concern/unacknowledged.rb +55 -0
- data/lib/mongo/write_concern.rb +99 -0
- data/lib/mongo.rb +24 -82
- data/mongo.gemspec +17 -14
- data/spec/certificates/ca.pem +17 -0
- data/spec/certificates/client.pem +101 -0
- data/spec/certificates/crl.pem +10 -0
- data/spec/certificates/crl_client_revoked.pem +12 -0
- data/spec/certificates/password_protected.pem +51 -0
- data/spec/certificates/server.pem +34 -0
- data/spec/mongo/address/ipv4_spec.rb +74 -0
- data/spec/mongo/address/ipv6_spec.rb +74 -0
- data/spec/mongo/address/unix_spec.rb +30 -0
- data/spec/mongo/address_spec.rb +206 -0
- data/spec/mongo/auth/cr_spec.rb +59 -0
- data/spec/mongo/auth/ldap_spec.rb +40 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
- data/spec/mongo/auth/scram_spec.rb +55 -0
- data/spec/mongo/auth/user/view_spec.rb +76 -0
- data/spec/mongo/auth/user_spec.rb +190 -0
- data/spec/mongo/auth/x509_spec.rb +40 -0
- data/spec/mongo/auth_spec.rb +65 -0
- data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
- data/spec/mongo/client_spec.rb +564 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
- data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
- data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
- data/spec/mongo/cluster/topology_spec.rb +65 -0
- data/spec/mongo/cluster_spec.rb +129 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
- data/spec/mongo/collection/view/explainable_spec.rb +32 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
- data/spec/mongo/collection/view/readable_spec.rb +603 -0
- data/spec/mongo/collection/view/writable_spec.rb +679 -0
- data/spec/mongo/collection/view_spec.rb +530 -0
- data/spec/mongo/collection_spec.rb +362 -0
- data/spec/mongo/crud_spec.rb +42 -0
- data/spec/mongo/cursor_spec.rb +295 -0
- data/spec/mongo/database_spec.rb +302 -0
- data/spec/mongo/error/parser_spec.rb +119 -0
- data/spec/mongo/event/publisher_spec.rb +50 -0
- data/spec/mongo/event/subscriber_spec.rb +34 -0
- data/spec/mongo/grid/file/chunk_spec.rb +226 -0
- data/spec/mongo/grid/file/metadata_spec.rb +92 -0
- data/spec/mongo/grid/file_spec.rb +172 -0
- data/spec/mongo/grid/fs_spec.rb +129 -0
- data/spec/mongo/index/view_spec.rb +330 -0
- data/spec/mongo/loggable_spec.rb +62 -0
- data/spec/mongo/logger_spec.rb +97 -0
- data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
- data/spec/mongo/operation/aggregate_spec.rb +127 -0
- data/spec/mongo/operation/command_spec.rb +98 -0
- data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
- data/spec/mongo/operation/limited_spec.rb +50 -0
- data/spec/mongo/operation/map_reduce_spec.rb +143 -0
- data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
- data/spec/mongo/operation/read/get_more_spec.rb +81 -0
- data/spec/mongo/operation/read/indexes_spec.rb +31 -0
- data/spec/mongo/operation/read/query_spec.rb +84 -0
- data/spec/mongo/operation/result_spec.rb +275 -0
- data/spec/mongo/operation/specifiable_spec.rb +53 -0
- data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
- data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
- data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
- data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
- data/spec/mongo/operation/write/command/update_spec.rb +109 -0
- data/spec/mongo/operation/write/create_index_spec.rb +63 -0
- data/spec/mongo/operation/write/create_user_spec.rb +44 -0
- data/spec/mongo/operation/write/delete_spec.rb +186 -0
- data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
- data/spec/mongo/operation/write/insert_spec.rb +244 -0
- data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
- data/spec/mongo/operation/write/response_spec.rb +85 -0
- data/spec/mongo/operation/write/update_spec.rb +228 -0
- data/spec/mongo/protocol/delete_spec.rb +167 -0
- data/spec/mongo/protocol/get_more_spec.rb +146 -0
- data/spec/mongo/protocol/insert_spec.rb +161 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
- data/spec/mongo/protocol/query_spec.rb +285 -0
- data/spec/mongo/protocol/reply_spec.rb +157 -0
- data/spec/mongo/protocol/update_spec.rb +186 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
- data/spec/mongo/server/connection_pool_spec.rb +120 -0
- data/spec/mongo/server/connection_spec.rb +312 -0
- data/spec/mongo/server/description/features_spec.rb +138 -0
- data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
- data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
- data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
- data/spec/mongo/server/description_spec.rb +510 -0
- data/spec/mongo/server/monitor_spec.rb +144 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
- data/spec/mongo/server_selection_rtt_spec.rb +104 -0
- data/spec/mongo/server_selection_spec.rb +89 -0
- data/spec/mongo/server_selector/nearest_spec.rb +250 -0
- data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
- data/spec/mongo/server_selector/primary_spec.rb +114 -0
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
- data/spec/mongo/server_selector/secondary_spec.rb +196 -0
- data/spec/mongo/server_selector_spec.rb +101 -0
- data/spec/mongo/server_spec.rb +131 -0
- data/spec/mongo/uri_spec.rb +517 -0
- data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
- data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
- data/spec/spec_helper.rb +133 -0
- data/spec/support/authorization.rb +247 -0
- data/spec/support/crud/read.rb +144 -0
- data/spec/support/crud/write.rb +214 -0
- data/spec/support/crud.rb +203 -0
- data/spec/support/crud_tests/read/aggregate.yml +43 -0
- data/spec/support/crud_tests/read/count.yml +37 -0
- data/spec/support/crud_tests/read/distinct.yml +33 -0
- data/spec/support/crud_tests/read/find.yml +50 -0
- data/spec/support/crud_tests/write/deleteMany.yml +36 -0
- data/spec/support/crud_tests/write/deleteOne.yml +49 -0
- data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
- data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
- data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
- data/spec/support/crud_tests/write/insertMany.yml +24 -0
- data/spec/support/crud_tests/write/insertOne.yml +19 -0
- data/spec/support/crud_tests/write/replaceOne.yml +96 -0
- data/spec/support/crud_tests/write/updateMany.yml +83 -0
- data/spec/support/crud_tests/write/updateOne.yml +80 -0
- data/spec/support/helpers.rb +140 -0
- data/spec/support/matchers.rb +37 -0
- data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
- data/spec/support/sdam/rs/discover_passives.yml +41 -0
- data/spec/support/sdam/rs/discover_primary.yml +40 -0
- data/spec/support/sdam/rs/discover_secondary.yml +41 -0
- data/spec/support/sdam/rs/discovery.yml +195 -0
- data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
- data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
- data/spec/support/sdam/rs/member_reconfig.yml +68 -0
- data/spec/support/sdam/rs/member_standalone.yml +60 -0
- data/spec/support/sdam/rs/new_primary.yml +74 -0
- data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
- data/spec/support/sdam/rs/non_rs_member.yml +31 -0
- data/spec/support/sdam/rs/normalize_case.yml +49 -0
- data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
- data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
- data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
- data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
- data/spec/support/sdam/rs/response_from_removed.yml +63 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
- data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
- data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
- data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
- data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
- data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
- data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
- data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
- data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
- data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
- data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
- data/spec/support/sdam/single/not_ok_response.yml +39 -0
- data/spec/support/sdam/single/standalone_removed.yml +32 -0
- data/spec/support/sdam/single/unavailable_seed.yml +28 -0
- data/spec/support/server_discovery_and_monitoring.rb +167 -0
- data/spec/support/server_selection/rtt/first_value.yml +4 -0
- data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
- data/spec/support/server_selection.rb +157 -0
- data/spec/support/server_selection_rtt.rb +41 -0
- data/spec/support/shared/bulk_write.rb +535 -0
- data/spec/support/shared/cursor.rb +38 -0
- data/spec/support/shared/operation.rb +77 -0
- data/spec/support/shared/protocol.rb +31 -0
- data/spec/support/shared/server_selector.rb +111 -0
- data/spec/support/shared/socket.rb +82 -0
- data/spec/support/travis.rb +14 -0
- data.tar.gz.sig +2 -3
- metadata +583 -186
- metadata.gz.sig +0 -0
- data/VERSION +0 -1
- data/lib/mongo/bulk_write_collection_view.rb +0 -387
- data/lib/mongo/collection_writer.rb +0 -364
- data/lib/mongo/connection/node.rb +0 -249
- data/lib/mongo/connection/pool.rb +0 -340
- data/lib/mongo/connection/pool_manager.rb +0 -320
- data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
- data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
- data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
- data/lib/mongo/connection/socket/unix_socket.rb +0 -39
- data/lib/mongo/db.rb +0 -808
- data/lib/mongo/exception.rb +0 -145
- data/lib/mongo/functional/authentication.rb +0 -455
- data/lib/mongo/functional/logging.rb +0 -85
- data/lib/mongo/functional/read_preference.rb +0 -183
- data/lib/mongo/functional/scram.rb +0 -556
- data/lib/mongo/functional/uri_parser.rb +0 -409
- data/lib/mongo/functional/write_concern.rb +0 -66
- data/lib/mongo/gridfs/grid.rb +0 -112
- data/lib/mongo/gridfs/grid_ext.rb +0 -53
- data/lib/mongo/gridfs/grid_file_system.rb +0 -163
- data/lib/mongo/gridfs/grid_io.rb +0 -484
- data/lib/mongo/legacy.rb +0 -140
- data/lib/mongo/mongo_client.rb +0 -697
- data/lib/mongo/mongo_replica_set_client.rb +0 -535
- data/lib/mongo/mongo_sharded_client.rb +0 -159
- data/lib/mongo/networking.rb +0 -372
- data/lib/mongo/utils/conversions.rb +0 -110
- data/lib/mongo/utils/core_ext.rb +0 -70
- data/lib/mongo/utils/server_version.rb +0 -69
- data/lib/mongo/utils/support.rb +0 -80
- data/test/functional/authentication_test.rb +0 -39
- data/test/functional/bulk_api_stress_test.rb +0 -133
- data/test/functional/bulk_write_collection_view_test.rb +0 -1198
- data/test/functional/client_test.rb +0 -627
- data/test/functional/collection_test.rb +0 -2175
- data/test/functional/collection_writer_test.rb +0 -83
- data/test/functional/conversions_test.rb +0 -163
- data/test/functional/cursor_fail_test.rb +0 -57
- data/test/functional/cursor_message_test.rb +0 -56
- data/test/functional/cursor_test.rb +0 -683
- data/test/functional/db_api_test.rb +0 -835
- data/test/functional/db_test.rb +0 -348
- data/test/functional/grid_file_system_test.rb +0 -285
- data/test/functional/grid_io_test.rb +0 -252
- data/test/functional/grid_test.rb +0 -273
- data/test/functional/pool_test.rb +0 -136
- data/test/functional/safe_test.rb +0 -98
- data/test/functional/support_test.rb +0 -62
- data/test/functional/timeout_test.rb +0 -60
- data/test/functional/uri_test.rb +0 -446
- data/test/functional/write_concern_test.rb +0 -118
- data/test/helpers/general.rb +0 -50
- data/test/helpers/test_unit.rb +0 -476
- data/test/replica_set/authentication_test.rb +0 -37
- data/test/replica_set/basic_test.rb +0 -189
- data/test/replica_set/client_test.rb +0 -393
- data/test/replica_set/connection_test.rb +0 -138
- data/test/replica_set/count_test.rb +0 -66
- data/test/replica_set/cursor_test.rb +0 -220
- data/test/replica_set/insert_test.rb +0 -157
- data/test/replica_set/max_values_test.rb +0 -151
- data/test/replica_set/pinning_test.rb +0 -105
- data/test/replica_set/query_test.rb +0 -73
- data/test/replica_set/read_preference_test.rb +0 -219
- data/test/replica_set/refresh_test.rb +0 -211
- data/test/replica_set/replication_ack_test.rb +0 -95
- data/test/sharded_cluster/basic_test.rb +0 -203
- data/test/shared/authentication/basic_auth_shared.rb +0 -260
- data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
- data/test/shared/authentication/gssapi_shared.rb +0 -176
- data/test/shared/authentication/sasl_plain_shared.rb +0 -96
- data/test/shared/authentication/scram_shared.rb +0 -92
- data/test/shared/ssl_shared.rb +0 -235
- data/test/test_helper.rb +0 -61
- data/test/threading/basic_test.rb +0 -120
- data/test/tools/mongo_config.rb +0 -708
- data/test/tools/mongo_config_test.rb +0 -160
- data/test/unit/client_test.rb +0 -381
- data/test/unit/collection_test.rb +0 -166
- data/test/unit/connection_test.rb +0 -335
- data/test/unit/cursor_test.rb +0 -307
- data/test/unit/db_test.rb +0 -136
- data/test/unit/grid_test.rb +0 -76
- data/test/unit/mongo_sharded_client_test.rb +0 -48
- data/test/unit/node_test.rb +0 -93
- data/test/unit/pool_manager_test.rb +0 -111
- data/test/unit/read_pref_test.rb +0 -406
- data/test/unit/read_test.rb +0 -159
- data/test/unit/safe_test.rb +0 -158
- data/test/unit/sharding_pool_manager_test.rb +0 -84
- data/test/unit/write_concern_test.rb +0 -175
@@ -1,151 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
class MaxValuesTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
include Mongo
|
20
|
-
|
21
|
-
def setup
|
22
|
-
ensure_cluster(:rs)
|
23
|
-
@client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
|
24
|
-
@db = new_mock_db
|
25
|
-
@client.stubs(:[]).returns(@db)
|
26
|
-
@ismaster = {
|
27
|
-
'hosts' => @client.local_manager.hosts.to_a,
|
28
|
-
'arbiters' => @client.local_manager.arbiters
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_initial_max_and_min_values
|
33
|
-
assert @client.max_bson_size
|
34
|
-
assert @client.max_message_size
|
35
|
-
assert @client.max_wire_version
|
36
|
-
assert @client.min_wire_version
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_updated_max_and_min_sizes_after_node_config_change
|
40
|
-
@db.stubs(:command).returns(
|
41
|
-
@ismaster.merge({'ismaster' => true}),
|
42
|
-
@ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * MESSAGE_SIZE_FACTOR}),
|
43
|
-
@ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 1024}),
|
44
|
-
@ismaster.merge({'secondary' => true, 'maxWireVersion' => 0}),
|
45
|
-
@ismaster.merge({'secondary' => true, 'minWireVersion' => 0})
|
46
|
-
)
|
47
|
-
@client.local_manager.stubs(:refresh_required?).returns(true)
|
48
|
-
@client.refresh
|
49
|
-
|
50
|
-
assert_equal 1024, @client.max_bson_size
|
51
|
-
assert_equal 1024 * MESSAGE_SIZE_FACTOR, @client.max_message_size
|
52
|
-
assert_equal 0, @client.max_wire_version
|
53
|
-
assert_equal 0, @client.min_wire_version
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_no_values_in_config
|
57
|
-
@db.stubs(:command).returns(
|
58
|
-
@ismaster.merge({'ismaster' => true}),
|
59
|
-
@ismaster.merge({'secondary' => true}),
|
60
|
-
@ismaster.merge({'secondary' => true})
|
61
|
-
)
|
62
|
-
@client.local_manager.stubs(:refresh_required?).returns(true)
|
63
|
-
@client.refresh
|
64
|
-
|
65
|
-
assert_equal DEFAULT_MAX_BSON_SIZE, @client.max_bson_size
|
66
|
-
assert_equal DEFAULT_MAX_BSON_SIZE * MESSAGE_SIZE_FACTOR, @client.max_message_size
|
67
|
-
assert_equal 0, @client.max_wire_version
|
68
|
-
assert_equal 0, @client.min_wire_version
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_only_bson_size_in_config
|
72
|
-
@db.stubs(:command).returns(
|
73
|
-
@ismaster.merge({'ismaster' => true}),
|
74
|
-
@ismaster.merge({'secondary' => true}),
|
75
|
-
@ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 1024})
|
76
|
-
)
|
77
|
-
@client.local_manager.stubs(:refresh_required?).returns(true)
|
78
|
-
@client.refresh
|
79
|
-
|
80
|
-
assert_equal 1024, @client.max_bson_size
|
81
|
-
assert_equal 1024 * MESSAGE_SIZE_FACTOR, @client.max_message_size
|
82
|
-
assert_equal 0, @client.max_wire_version
|
83
|
-
assert_equal 0, @client.min_wire_version
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_values_in_config
|
87
|
-
#ismaster is called three times on the first node
|
88
|
-
@db.stubs(:command).returns(
|
89
|
-
@ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
|
90
|
-
'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
|
91
|
-
@ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
|
92
|
-
'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
|
93
|
-
@ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
|
94
|
-
'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
|
95
|
-
@ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
|
96
|
-
'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 0}),
|
97
|
-
@ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
|
98
|
-
'maxBsonObjectSize' => 1024, 'maxWireVersion' => 1, 'minWireVersion' => 0})
|
99
|
-
)
|
100
|
-
@client.local_manager.stubs(:refresh_required?).returns(true)
|
101
|
-
@client.refresh
|
102
|
-
|
103
|
-
assert_equal 1024, @client.max_bson_size
|
104
|
-
assert_equal 1024 * 2 * MESSAGE_SIZE_FACTOR, @client.max_message_size
|
105
|
-
assert_equal 1, @client.max_wire_version # minimum of all max_wire_version
|
106
|
-
assert_equal 1, @client.min_wire_version # maximum of all min_wire_version
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_wire_version_not_in_range
|
110
|
-
min_wire_version, max_wire_version = [Mongo::MongoClient::MIN_WIRE_VERSION-1, Mongo::MongoClient::MIN_WIRE_VERSION-1]
|
111
|
-
#ismaster is called three times on the first node
|
112
|
-
@db.stubs(:command).returns(
|
113
|
-
@ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
|
114
|
-
@ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
|
115
|
-
@ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
|
116
|
-
@ismaster.merge({'secondary' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
|
117
|
-
@ismaster.merge({'secondary' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version})
|
118
|
-
)
|
119
|
-
@client.local_manager.stubs(:refresh_required?).returns(true)
|
120
|
-
assert_raises Mongo::ConnectionFailure do
|
121
|
-
@client.refresh
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_use_write_command
|
126
|
-
with_write_commands(@client) do
|
127
|
-
assert_true @client.use_write_command?({:w => 1})
|
128
|
-
assert_false @client.use_write_command?({:w => 0})
|
129
|
-
end
|
130
|
-
with_write_operations(@client) do
|
131
|
-
assert_false @client.use_write_command?({:w => 1})
|
132
|
-
assert_false @client.use_write_command?({:w => 0})
|
133
|
-
end
|
134
|
-
@client.local_manager.primary_pool.node.expects(:wire_version_feature?).at_least_once.returns(true)
|
135
|
-
assert_true @client.use_write_command?({:w => 1})
|
136
|
-
assert_false @client.use_write_command?({:w => 0})
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_max_write_batch_size
|
140
|
-
assert_equal Mongo::MongoClient::DEFAULT_MAX_WRITE_BATCH_SIZE, @client.max_write_batch_size
|
141
|
-
@client.local_manager.primary_pool.node.stubs(:max_write_batch_size).returns(999)
|
142
|
-
assert_equal 999, @client.max_write_batch_size
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_max_write_batch_size_no_manager
|
146
|
-
# Simulate no local manager being set yet - RUBY-759
|
147
|
-
@client.stubs(:local_manager).returns(nil)
|
148
|
-
assert_equal Mongo::MongoClient::DEFAULT_MAX_WRITE_BATCH_SIZE, @client.max_write_batch_size
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
@@ -1,105 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
class ReplicaSetPinningTest < Test::Unit::TestCase
|
18
|
-
def setup
|
19
|
-
ensure_cluster(:rs)
|
20
|
-
@client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
|
21
|
-
@db = @client.db(TEST_DB)
|
22
|
-
@coll = @db.collection("test-sets")
|
23
|
-
@coll.insert({:a => 1})
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_unpinning
|
27
|
-
# pin primary
|
28
|
-
@coll.find_one
|
29
|
-
assert_equal @client.pinned_pool[:pool], @client.primary_pool
|
30
|
-
|
31
|
-
# pin secondary
|
32
|
-
@coll.find_one({}, :read => :secondary_preferred)
|
33
|
-
assert @client.secondary_pools.include? @client.pinned_pool[:pool]
|
34
|
-
|
35
|
-
# repin primary
|
36
|
-
@coll.find_one({}, :read => :primary_preferred)
|
37
|
-
assert_equal @client.pinned_pool[:pool], @client.primary_pool
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_pinned_pool_is_local_to_thread
|
41
|
-
threads = []
|
42
|
-
30.times do |i|
|
43
|
-
threads << Thread.new do
|
44
|
-
if i % 2 == 0
|
45
|
-
@coll.find_one({}, :read => :secondary_preferred)
|
46
|
-
assert @client.secondary_pools.include? @client.pinned_pool[:pool]
|
47
|
-
else
|
48
|
-
@coll.find_one({}, :read => :primary_preferred)
|
49
|
-
assert_equal @client.pinned_pool[:pool], @client.primary_pool
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
threads.each(&:join)
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_aggregation_cursor_pinning
|
57
|
-
return unless @client.server_version >= '2.5.1'
|
58
|
-
@coll.drop
|
59
|
-
|
60
|
-
[10, 1000].each do |size|
|
61
|
-
@coll.drop
|
62
|
-
size.times {|i| @coll.insert({ :_id => i }) }
|
63
|
-
expected_sum = size.times.reduce(:+)
|
64
|
-
|
65
|
-
cursor = @coll.aggregate(
|
66
|
-
[{ :$project => {:_id => '$_id'}} ],
|
67
|
-
:cursor => { :batchSize => 1 }
|
68
|
-
)
|
69
|
-
|
70
|
-
assert_equal Mongo::Cursor, cursor.class
|
71
|
-
|
72
|
-
cursor_sum = cursor.reduce(0) do |sum, doc|
|
73
|
-
sum += doc['_id']
|
74
|
-
end
|
75
|
-
|
76
|
-
assert_equal expected_sum, cursor_sum
|
77
|
-
end
|
78
|
-
@coll.drop
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_parallel_scan_pinning
|
82
|
-
return unless @client.server_version >= '2.5.5'
|
83
|
-
@coll.drop
|
84
|
-
|
85
|
-
8000.times { |i| @coll.insert({ :_id => i }) }
|
86
|
-
|
87
|
-
lock = Mutex.new
|
88
|
-
doc_ids = Set.new
|
89
|
-
threads = []
|
90
|
-
cursors = @coll.parallel_scan(3)
|
91
|
-
cursors.each_with_index do |cursor, i|
|
92
|
-
threads << Thread.new do
|
93
|
-
docs = cursor.to_a
|
94
|
-
lock.synchronize do
|
95
|
-
docs.each do |doc|
|
96
|
-
doc_ids << doc['_id']
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
threads.each(&:join)
|
102
|
-
assert_equal 8000, doc_ids.count
|
103
|
-
@coll.drop
|
104
|
-
end
|
105
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
class ReplicaSetQueryTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
def setup
|
20
|
-
ensure_cluster(:rs)
|
21
|
-
@client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
|
22
|
-
@db = @client.db(TEST_DB)
|
23
|
-
@db.drop_collection("test-sets")
|
24
|
-
@coll = @db.collection("test-sets")
|
25
|
-
end
|
26
|
-
|
27
|
-
def teardown
|
28
|
-
@client.close if @client
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_query
|
32
|
-
@coll.save({:a => 20}, :w => 3)
|
33
|
-
@coll.save({:a => 30}, :w => 3)
|
34
|
-
@coll.save({:a => 40}, :w => 3)
|
35
|
-
results = []
|
36
|
-
@coll.find.each {|r| results << r}
|
37
|
-
[20, 30, 40].each do |a|
|
38
|
-
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
39
|
-
end
|
40
|
-
|
41
|
-
@rs.primary.stop
|
42
|
-
|
43
|
-
results = []
|
44
|
-
rescue_connection_failure do
|
45
|
-
@coll.find.each {|r| results << r}
|
46
|
-
[20, 30, 40].each do |a|
|
47
|
-
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Create a large collection and do a secondary query that returns
|
53
|
-
# enough records to require sending a GETMORE. In between opening
|
54
|
-
# the cursor and sending the GETMORE, do a :primary query. Confirm
|
55
|
-
# that the cursor reading from the secondary continues to talk to
|
56
|
-
# the secondary, rather than trying to read the cursor from the
|
57
|
-
# primary, where it does not exist.
|
58
|
-
# def test_secondary_getmore
|
59
|
-
# 200.times do |i|
|
60
|
-
# @coll.save({:a => i}, :w => 3)
|
61
|
-
# end
|
62
|
-
# as = []
|
63
|
-
# # Set an explicit batch size, in case the default ever changes.
|
64
|
-
# @coll.find({}, { :batch_size => 100, :read => :secondary }) do |c|
|
65
|
-
# c.each do |result|
|
66
|
-
# as << result['a']
|
67
|
-
# @coll.find({:a => result['a']}, :read => :primary).map
|
68
|
-
# end
|
69
|
-
# end
|
70
|
-
# assert_equal(as.sort, 0.upto(199).to_a)
|
71
|
-
# end
|
72
|
-
|
73
|
-
end
|
@@ -1,219 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
class ReadPreferenceTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
def setup
|
20
|
-
ensure_cluster(:rs)
|
21
|
-
client = make_connection
|
22
|
-
db = client.db(TEST_DB)
|
23
|
-
coll = db.collection('test-sets')
|
24
|
-
coll.save({:a => 20}, {:w => 2})
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_read_primary
|
28
|
-
client = make_connection
|
29
|
-
rescue_connection_failure do
|
30
|
-
assert client.read_primary?
|
31
|
-
assert client.primary?
|
32
|
-
end
|
33
|
-
|
34
|
-
client = make_connection(:primary_preferred)
|
35
|
-
rescue_connection_failure do
|
36
|
-
assert client.read_primary?
|
37
|
-
assert client.primary?
|
38
|
-
end
|
39
|
-
|
40
|
-
client = make_connection(:secondary)
|
41
|
-
rescue_connection_failure do
|
42
|
-
assert !client.read_primary?
|
43
|
-
assert !client.primary?
|
44
|
-
end
|
45
|
-
|
46
|
-
client = make_connection(:secondary_preferred)
|
47
|
-
rescue_connection_failure do
|
48
|
-
assert !client.read_primary?
|
49
|
-
assert !client.primary?
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_connection_pools
|
54
|
-
client = make_connection
|
55
|
-
assert client.primary_pool, "No primary pool!"
|
56
|
-
assert client.read_pool, "No read pool!"
|
57
|
-
assert client.primary_pool.port == client.read_pool.port,
|
58
|
-
"Primary port and read port are not the same!"
|
59
|
-
|
60
|
-
|
61
|
-
client = make_connection(:primary_preferred)
|
62
|
-
assert client.primary_pool, "No primary pool!"
|
63
|
-
assert client.read_pool, "No read pool!"
|
64
|
-
assert client.primary_pool.port == client.read_pool.port,
|
65
|
-
"Primary port and read port are not the same!"
|
66
|
-
|
67
|
-
client = make_connection(:secondary)
|
68
|
-
assert client.primary_pool, "No primary pool!"
|
69
|
-
assert client.read_pool, "No read pool!"
|
70
|
-
assert client.primary_pool.port != client.read_pool.port,
|
71
|
-
"Primary port and read port are the same!"
|
72
|
-
|
73
|
-
client = make_connection(:secondary_preferred)
|
74
|
-
assert client.primary_pool, "No primary pool!"
|
75
|
-
assert client.read_pool, "No read pool!"
|
76
|
-
assert client.primary_pool.port != client.read_pool.port,
|
77
|
-
"Primary port and read port are the same!"
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_read_routing
|
81
|
-
prepare_routing_test
|
82
|
-
|
83
|
-
# Test that reads are going to the right members
|
84
|
-
assert_query_route(@primary, :primary)
|
85
|
-
assert_query_route(@primary_preferred, :primary)
|
86
|
-
assert_query_route(@secondary, :secondary)
|
87
|
-
assert_query_route(@secondary_preferred, :secondary)
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_read_routing_with_primary_down
|
91
|
-
prepare_routing_test
|
92
|
-
|
93
|
-
# Test that reads are going to the right members
|
94
|
-
assert_query_route(@primary, :primary)
|
95
|
-
assert_query_route(@primary_preferred, :primary)
|
96
|
-
assert_query_route(@secondary, :secondary)
|
97
|
-
assert_query_route(@secondary_preferred, :secondary)
|
98
|
-
|
99
|
-
# Kill the primary so the remaining two members are secondaries
|
100
|
-
@rs.primary.kill
|
101
|
-
sleep(2)
|
102
|
-
# Test that reads are going to the right members
|
103
|
-
assert_raise_error ConnectionFailure do
|
104
|
-
@primary[TEST_DB]['test-sets'].find_one
|
105
|
-
end
|
106
|
-
assert_query_route(@primary_preferred, :secondary)
|
107
|
-
assert_query_route(@secondary, :secondary)
|
108
|
-
assert_query_route(@secondary_preferred, :secondary)
|
109
|
-
|
110
|
-
# Restore set
|
111
|
-
@rs.restart
|
112
|
-
sleep(1)
|
113
|
-
@repl_cons.each { |con| con.refresh }
|
114
|
-
sleep(1)
|
115
|
-
|
116
|
-
# Test that reads are going to the right members
|
117
|
-
assert_query_route(@primary, :primary)
|
118
|
-
assert_query_route(@primary_preferred, :primary)
|
119
|
-
assert_query_route(@secondary, :secondary)
|
120
|
-
assert_query_route(@secondary_preferred, :secondary)
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_read_routing_with_secondary_down
|
124
|
-
prepare_routing_test
|
125
|
-
|
126
|
-
# Test that reads are going to the right members
|
127
|
-
assert_query_route(@primary, :primary)
|
128
|
-
assert_query_route(@primary_preferred, :primary)
|
129
|
-
assert_query_route(@secondary, :secondary)
|
130
|
-
assert_query_route(@secondary_preferred, :secondary)
|
131
|
-
|
132
|
-
secondaries = @rs.secondaries
|
133
|
-
secondaries[0].kill
|
134
|
-
assert_query_route(@secondary_preferred, :secondary)
|
135
|
-
|
136
|
-
secondaries[1].kill
|
137
|
-
sleep(2)
|
138
|
-
|
139
|
-
recovered = false
|
140
|
-
until recovered
|
141
|
-
begin
|
142
|
-
@secondary[TEST_DB]['test-sets'].find_one
|
143
|
-
recovered = true
|
144
|
-
rescue ConnectionFailure
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
assert_query_route(@secondary_preferred, :secondary)
|
149
|
-
assert_query_route(@secondary, :secondary)
|
150
|
-
assert_query_route(@primary_preferred, :secondary)
|
151
|
-
|
152
|
-
# Restore set
|
153
|
-
@rs.restart
|
154
|
-
sleep(1)
|
155
|
-
@repl_cons.each { |con| con.refresh }
|
156
|
-
sleep(1)
|
157
|
-
|
158
|
-
# Test that reads are going to the right members
|
159
|
-
assert_query_route(@primary, :primary)
|
160
|
-
assert_query_route(@primary_preferred, :primary)
|
161
|
-
assert_query_route(@secondary, :secondary)
|
162
|
-
assert_query_route(@secondary_preferred, :secondary)
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_write_lots_of_data
|
166
|
-
client = make_connection(:secondary_preferred)
|
167
|
-
db = client[TEST_DB]
|
168
|
-
coll = db.collection("test-sets", {:w => 2})
|
169
|
-
|
170
|
-
6000.times do |n|
|
171
|
-
coll.save({:a => n})
|
172
|
-
end
|
173
|
-
|
174
|
-
cursor = coll.find()
|
175
|
-
cursor.next
|
176
|
-
cursor.close
|
177
|
-
end
|
178
|
-
|
179
|
-
private
|
180
|
-
|
181
|
-
def prepare_routing_test
|
182
|
-
# Setup replica set connections
|
183
|
-
@primary = make_connection(:primary)
|
184
|
-
@primary_preferred = make_connection(:primary_preferred)
|
185
|
-
@secondary = make_connection(:secondary)
|
186
|
-
@secondary_preferred = make_connection(:secondary_preferred)
|
187
|
-
@repl_cons = [@primary, @primary_preferred, @secondary, @secondary_preferred]
|
188
|
-
|
189
|
-
@repl_cons.each do |client|
|
190
|
-
client.stubs(:pinned_pool).returns(nil)
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def make_connection(mode = :primary, opts = {})
|
195
|
-
opts.merge!(:read => mode)
|
196
|
-
opts.merge!(:op_timeout => nil)
|
197
|
-
client = MongoReplicaSetClient.new(@rs.repl_set_seeds, opts)
|
198
|
-
authenticate_client(client)
|
199
|
-
end
|
200
|
-
|
201
|
-
def query_count(connection)
|
202
|
-
connection['admin'].command({:serverStatus => 1})['opcounters']['query']
|
203
|
-
end
|
204
|
-
|
205
|
-
def assert_query_route(test_connection, type)
|
206
|
-
secondary = type == :secondary
|
207
|
-
authenticate_client(test_connection)
|
208
|
-
cursor = test_connection[TEST_DB]['test-sets'].find
|
209
|
-
assert_nothing_raised do
|
210
|
-
cursor.next
|
211
|
-
end
|
212
|
-
pool = cursor.instance_variable_get("@pool")
|
213
|
-
assert_equal secondary, secondary?(MongoClient.new(pool.host, pool.port))
|
214
|
-
end
|
215
|
-
|
216
|
-
def secondary?(client)
|
217
|
-
client['admin'].command(:isMaster => 1)['secondary']
|
218
|
-
end
|
219
|
-
end
|