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
@@ -0,0 +1,59 @@
|
|
1
|
+
# Copyright (C) 2014-2015 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
|
+
module Mongo
|
16
|
+
class Server
|
17
|
+
class Description
|
18
|
+
class Inspector
|
19
|
+
|
20
|
+
# Handles inspecting the result of an ismaster command for servers
|
21
|
+
# added to the cluster.
|
22
|
+
#
|
23
|
+
# @since 2.0.0
|
24
|
+
class ServerAdded
|
25
|
+
include Event::Publisher
|
26
|
+
|
27
|
+
# Instantiate the server added inspection.
|
28
|
+
#
|
29
|
+
# @example Instantiate the inspection.
|
30
|
+
# ServerAdded.new(listeners)
|
31
|
+
#
|
32
|
+
# @param [ Event::Listeners ] event_listeners The event listeners.
|
33
|
+
#
|
34
|
+
# @since 2.0.0
|
35
|
+
def initialize(event_listeners)
|
36
|
+
@event_listeners = event_listeners
|
37
|
+
end
|
38
|
+
|
39
|
+
# Run the server added inspection.
|
40
|
+
#
|
41
|
+
# @example Run the inspection.
|
42
|
+
# ServerAdded.run(description, {})
|
43
|
+
#
|
44
|
+
# @param [ Description ] description The server description.
|
45
|
+
# @param [ Description ] updated The updated description.
|
46
|
+
#
|
47
|
+
# @since 2.0.0
|
48
|
+
def run(description, updated)
|
49
|
+
updated.servers.each do |host|
|
50
|
+
unless description.servers.include?(host)
|
51
|
+
publish(Event::SERVER_ADDED, host)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Copyright (C) 2014-2015 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
|
+
module Mongo
|
16
|
+
class Server
|
17
|
+
class Description
|
18
|
+
class Inspector
|
19
|
+
|
20
|
+
# Handles inspecting the result of an ismaster command for servers
|
21
|
+
# that were removed from the cluster.
|
22
|
+
#
|
23
|
+
# @since 2.0.0
|
24
|
+
class ServerRemoved
|
25
|
+
include Event::Publisher
|
26
|
+
|
27
|
+
# Instantiate the server removed inspection.
|
28
|
+
#
|
29
|
+
# @example Instantiate the inspection.
|
30
|
+
# ServerRemoved.new(listeners)
|
31
|
+
#
|
32
|
+
# @param [ Event::Listeners ] event_listeners The event listeners.
|
33
|
+
#
|
34
|
+
# @since 2.0.0
|
35
|
+
def initialize(event_listeners)
|
36
|
+
@event_listeners = event_listeners
|
37
|
+
end
|
38
|
+
|
39
|
+
# Run the server added inspection.
|
40
|
+
#
|
41
|
+
# @example Run the inspection.
|
42
|
+
# ServerAdded.run(description, {})
|
43
|
+
#
|
44
|
+
# @param [ Description ] description The server description.
|
45
|
+
# @param [ Description ] updated The updated description.
|
46
|
+
#
|
47
|
+
# @since 2.0.0
|
48
|
+
def run(description, updated)
|
49
|
+
description.hosts.each do |host|
|
50
|
+
if updated.primary? && !updated.hosts.include?(host)
|
51
|
+
publish(Event::SERVER_REMOVED, host)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Copyright (C) 2015 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 'mongo/server/description/inspector/primary_elected'
|
16
|
+
require 'mongo/server/description/inspector/server_added'
|
17
|
+
require 'mongo/server/description/inspector/server_removed'
|
18
|
+
|
19
|
+
module Mongo
|
20
|
+
class Server
|
21
|
+
class Description
|
22
|
+
|
23
|
+
# Handles inspection of an updated server description to determine if
|
24
|
+
# events should be fired.
|
25
|
+
#
|
26
|
+
# @since 2.0.0
|
27
|
+
class Inspector
|
28
|
+
|
29
|
+
# Static list of inspections that are performed on the result of an
|
30
|
+
# ismaster command in order to generate the appropriate events for the
|
31
|
+
# changes.
|
32
|
+
#
|
33
|
+
# @since 2.0.0
|
34
|
+
INSPECTORS = [
|
35
|
+
Inspector::PrimaryElected,
|
36
|
+
Inspector::ServerAdded,
|
37
|
+
Inspector::ServerRemoved
|
38
|
+
].freeze
|
39
|
+
|
40
|
+
# @return [ Array ] inspectors The description inspectors.
|
41
|
+
attr_reader :inspectors
|
42
|
+
|
43
|
+
# Create the new inspector.
|
44
|
+
#
|
45
|
+
# @example Create the new inspector.
|
46
|
+
# Inspector.new(listeners)
|
47
|
+
#
|
48
|
+
# @param [ Event::Listeners ] listeners The event listeners.
|
49
|
+
#
|
50
|
+
# @since 2.0.0
|
51
|
+
def initialize(listeners)
|
52
|
+
@inspectors = INSPECTORS.map do |inspector|
|
53
|
+
inspector.new(listeners)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Run the server description inspector.
|
58
|
+
#
|
59
|
+
# @example Run the inspector.
|
60
|
+
# inspector.run(description, { 'ismaster' => true })
|
61
|
+
#
|
62
|
+
# @param [ Description ] description The old description.
|
63
|
+
# @param [ Hash ] ismaster The updated ismaster.
|
64
|
+
# @param [ Float ] average_round_trip_time The moving average round trip time (ms).
|
65
|
+
#
|
66
|
+
# @return [ Description ] The new description.
|
67
|
+
#
|
68
|
+
# @since 2.0.0
|
69
|
+
def run(description, ismaster, average_round_trip_time)
|
70
|
+
new_description = Description.new(description.address, ismaster, average_round_trip_time)
|
71
|
+
inspectors.each do |inspector|
|
72
|
+
inspector.run(description, new_description)
|
73
|
+
end
|
74
|
+
new_description
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,450 @@
|
|
1
|
+
# Copyright (C) 2014-2015 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 'mongo/server/description/features'
|
16
|
+
require 'mongo/server/description/inspector'
|
17
|
+
|
18
|
+
module Mongo
|
19
|
+
class Server
|
20
|
+
|
21
|
+
# Represents a description of the server, populated by the result of the
|
22
|
+
# ismaster command.
|
23
|
+
#
|
24
|
+
# @since 2.0.0
|
25
|
+
class Description
|
26
|
+
|
27
|
+
# Constant for reading arbiter info from config.
|
28
|
+
#
|
29
|
+
# @since 2.0.0
|
30
|
+
ARBITER = 'arbiterOnly'.freeze
|
31
|
+
|
32
|
+
# Constant for reading arbiters info from config.
|
33
|
+
#
|
34
|
+
# @since 2.0.0
|
35
|
+
ARBITERS = 'arbiters'.freeze
|
36
|
+
|
37
|
+
# Constant for reading hidden info from config.
|
38
|
+
#
|
39
|
+
# @since 2.0.0
|
40
|
+
HIDDEN = 'hidden'.freeze
|
41
|
+
|
42
|
+
# Constant for reading hosts info from config.
|
43
|
+
#
|
44
|
+
# @since 2.0.0
|
45
|
+
HOSTS = 'hosts'.freeze
|
46
|
+
|
47
|
+
# Constant for the key for the message value.
|
48
|
+
#
|
49
|
+
# @since 2.0.0
|
50
|
+
MESSAGE = 'msg'.freeze
|
51
|
+
|
52
|
+
# Constant for the message that indicates a sharded cluster.
|
53
|
+
#
|
54
|
+
# @since 2.0.0
|
55
|
+
MONGOS_MESSAGE = 'isdbgrid'.freeze
|
56
|
+
|
57
|
+
# Constant for determining ghost servers.
|
58
|
+
#
|
59
|
+
# @since 2.0.0
|
60
|
+
REPLICA_SET = 'isreplicaset'.freeze
|
61
|
+
|
62
|
+
# Constant for reading max bson size info from config.
|
63
|
+
#
|
64
|
+
# @since 2.0.0
|
65
|
+
MAX_BSON_OBJECT_SIZE = 'maxBsonObjectSize'.freeze
|
66
|
+
|
67
|
+
# Constant for reading max message size info from config.
|
68
|
+
#
|
69
|
+
# @since 2.0.0
|
70
|
+
MAX_MESSAGE_BYTES = 'maxMessageSizeBytes'.freeze
|
71
|
+
|
72
|
+
# Constant for the max wire version.
|
73
|
+
#
|
74
|
+
# @since 2.0.0
|
75
|
+
MAX_WIRE_VERSION = 'maxWireVersion'.freeze
|
76
|
+
|
77
|
+
# Constant for min wire version.
|
78
|
+
#
|
79
|
+
# @since 2.0.0
|
80
|
+
MIN_WIRE_VERSION = 'minWireVersion'.freeze
|
81
|
+
|
82
|
+
# Constant for reading max write batch size.
|
83
|
+
#
|
84
|
+
# @since 2.0.0
|
85
|
+
MAX_WRITE_BATCH_SIZE = 'maxWriteBatchSize'.freeze
|
86
|
+
|
87
|
+
# Default max write batch size.
|
88
|
+
#
|
89
|
+
# @since 2.0.0
|
90
|
+
DEFAULT_MAX_WRITE_BATCH_SIZE = 1000.freeze
|
91
|
+
|
92
|
+
# The legacy wire protocol version.
|
93
|
+
#
|
94
|
+
# @since 2.0.0
|
95
|
+
LEGACY_WIRE_VERSION = 0.freeze
|
96
|
+
|
97
|
+
# Constant for reading passive info from config.
|
98
|
+
#
|
99
|
+
# @since 2.0.0
|
100
|
+
PASSIVE = 'passive'.freeze
|
101
|
+
|
102
|
+
# Constant for reading the passive server list.
|
103
|
+
#
|
104
|
+
# @since 2.0.0
|
105
|
+
PASSIVES = 'passives'.freeze
|
106
|
+
|
107
|
+
# Constant for reading primary info from config.
|
108
|
+
#
|
109
|
+
# @since 2.0.0
|
110
|
+
PRIMARY = 'ismaster'.freeze
|
111
|
+
|
112
|
+
# Constant for reading secondary info from config.
|
113
|
+
#
|
114
|
+
# @since 2.0.0
|
115
|
+
SECONDARY = 'secondary'.freeze
|
116
|
+
|
117
|
+
# Constant for reading replica set name info from config.
|
118
|
+
#
|
119
|
+
# @since 2.0.0
|
120
|
+
SET_NAME = 'setName'.freeze
|
121
|
+
|
122
|
+
# Constant for reading tags info from config.
|
123
|
+
#
|
124
|
+
# @since 2.0.0
|
125
|
+
TAGS = 'tags'.freeze
|
126
|
+
|
127
|
+
# @return [ Address ] address The server's address.
|
128
|
+
attr_reader :address
|
129
|
+
|
130
|
+
# @return [ Hash ] The actual result from the ismaster command.
|
131
|
+
attr_reader :config
|
132
|
+
|
133
|
+
# @return [ Features ] features The features for the server.
|
134
|
+
attr_reader :features
|
135
|
+
|
136
|
+
# @return [ Float ] The moving average time the ismaster call took to complete.
|
137
|
+
attr_reader :average_round_trip_time
|
138
|
+
|
139
|
+
# Will return true if the server is an arbiter.
|
140
|
+
#
|
141
|
+
# @example Is the server an arbiter?
|
142
|
+
# description.arbiter?
|
143
|
+
#
|
144
|
+
# @return [ true, false ] If the server is an arbiter.
|
145
|
+
#
|
146
|
+
# @since 2.0.0
|
147
|
+
def arbiter?
|
148
|
+
!!config[ARBITER] && !replica_set_name.nil?
|
149
|
+
end
|
150
|
+
|
151
|
+
# Get a list of all arbiters in the replica set.
|
152
|
+
#
|
153
|
+
# @example Get the arbiters in the replica set.
|
154
|
+
# description.arbiters
|
155
|
+
#
|
156
|
+
# @return [ Array<String> ] The arbiters in the set.
|
157
|
+
#
|
158
|
+
# @since 2.0.0
|
159
|
+
def arbiters
|
160
|
+
config[ARBITERS] || []
|
161
|
+
end
|
162
|
+
|
163
|
+
# Is the server a ghost in a replica set?
|
164
|
+
#
|
165
|
+
# @example Is the server a ghost?
|
166
|
+
# description.ghost?
|
167
|
+
#
|
168
|
+
# @return [ true, false ] If the server is a ghost.
|
169
|
+
#
|
170
|
+
# @since 2.0.0
|
171
|
+
def ghost?
|
172
|
+
!!config[REPLICA_SET]
|
173
|
+
end
|
174
|
+
|
175
|
+
# Will return true if the server is hidden.
|
176
|
+
#
|
177
|
+
# @example Is the server hidden?
|
178
|
+
# description.hidden?
|
179
|
+
#
|
180
|
+
# @return [ true, false ] If the server is hidden.
|
181
|
+
#
|
182
|
+
# @since 2.0.0
|
183
|
+
def hidden?
|
184
|
+
!!config[HIDDEN]
|
185
|
+
end
|
186
|
+
|
187
|
+
# Get a list of all servers in the replica set.
|
188
|
+
#
|
189
|
+
# @example Get the servers in the replica set.
|
190
|
+
# description.hosts
|
191
|
+
#
|
192
|
+
# @return [ Array<String> ] The servers in the set.
|
193
|
+
#
|
194
|
+
# @since 2.0.0
|
195
|
+
def hosts
|
196
|
+
config[HOSTS] || []
|
197
|
+
end
|
198
|
+
|
199
|
+
# Instantiate the new server description from the result of the ismaster
|
200
|
+
# command.
|
201
|
+
#
|
202
|
+
# @example Instantiate the new description.
|
203
|
+
# Description.new(address, { 'ismaster' => true }, 0.5)
|
204
|
+
#
|
205
|
+
# @param [ Address ] address The server address.
|
206
|
+
# @param [ Hash ] config The result of the ismaster command.
|
207
|
+
# @param [ Float ] average_round_trip_time The moving average time (ms) the ismaster
|
208
|
+
# call took to complete.
|
209
|
+
#
|
210
|
+
# @since 2.0.0
|
211
|
+
def initialize(address, config = {}, average_round_trip_time = 0)
|
212
|
+
@address = address
|
213
|
+
@config = config
|
214
|
+
@features = Features.new(wire_versions)
|
215
|
+
@average_round_trip_time = average_round_trip_time
|
216
|
+
end
|
217
|
+
|
218
|
+
# Inspect the server description.
|
219
|
+
#
|
220
|
+
# @example Inspect the server description
|
221
|
+
# description.inspect
|
222
|
+
#
|
223
|
+
# @return [ String ] The inspection.
|
224
|
+
#
|
225
|
+
# @since 2.0.0
|
226
|
+
def inspect
|
227
|
+
"#<Mongo::Server:Description:0x#{object_id} config=#{config} average_round_trip_time=#{average_round_trip_time}>"
|
228
|
+
end
|
229
|
+
|
230
|
+
# Get the max BSON object size for this server version.
|
231
|
+
#
|
232
|
+
# @example Get the max BSON object size.
|
233
|
+
# description.max_bson_object_size
|
234
|
+
#
|
235
|
+
# @return [ Integer ] The maximum object size in bytes.
|
236
|
+
#
|
237
|
+
# @since 2.0.0
|
238
|
+
def max_bson_object_size
|
239
|
+
config[MAX_BSON_OBJECT_SIZE]
|
240
|
+
end
|
241
|
+
|
242
|
+
# Get the max message size for this server version.
|
243
|
+
#
|
244
|
+
# @example Get the max message size.
|
245
|
+
# description.max_message_size
|
246
|
+
#
|
247
|
+
# @return [ Integer ] The maximum message size in bytes.
|
248
|
+
#
|
249
|
+
# @since 2.0.0
|
250
|
+
def max_message_size
|
251
|
+
config[MAX_MESSAGE_BYTES]
|
252
|
+
end
|
253
|
+
|
254
|
+
# Get the maximum batch size for writes.
|
255
|
+
#
|
256
|
+
# @example Get the max batch size.
|
257
|
+
# description.max_write_batch_size
|
258
|
+
#
|
259
|
+
# @return [ Integer ] The max batch size.
|
260
|
+
#
|
261
|
+
# @since 2.0.0
|
262
|
+
def max_write_batch_size
|
263
|
+
config[MAX_WRITE_BATCH_SIZE] || DEFAULT_MAX_WRITE_BATCH_SIZE
|
264
|
+
end
|
265
|
+
|
266
|
+
# Get the maximum wire version.
|
267
|
+
#
|
268
|
+
# @example Get the max wire version.
|
269
|
+
# description.max_wire_version
|
270
|
+
#
|
271
|
+
# @return [ Integer ] The max wire version supported.
|
272
|
+
#
|
273
|
+
# @since 2.0.0
|
274
|
+
def max_wire_version
|
275
|
+
config[MAX_WIRE_VERSION] || LEGACY_WIRE_VERSION
|
276
|
+
end
|
277
|
+
|
278
|
+
# Get the minimum wire version.
|
279
|
+
#
|
280
|
+
# @example Get the min wire version.
|
281
|
+
# description.min_wire_version
|
282
|
+
#
|
283
|
+
# @return [ Integer ] The min wire version supported.
|
284
|
+
#
|
285
|
+
# @since 2.0.0
|
286
|
+
def min_wire_version
|
287
|
+
config[MIN_WIRE_VERSION] || LEGACY_WIRE_VERSION
|
288
|
+
end
|
289
|
+
|
290
|
+
# Get the tags configured for the server.
|
291
|
+
#
|
292
|
+
# @example Get the tags.
|
293
|
+
# description.tags
|
294
|
+
#
|
295
|
+
# @return [ Hash ] The tags of the server.
|
296
|
+
#
|
297
|
+
# @since 2.0.0
|
298
|
+
def tags
|
299
|
+
config[TAGS] || {}
|
300
|
+
end
|
301
|
+
|
302
|
+
# Is the server a mongos?
|
303
|
+
#
|
304
|
+
# @example Is the server a mongos?
|
305
|
+
# description.mongos?
|
306
|
+
#
|
307
|
+
# @return [ true, false ] If the server is a mongos.
|
308
|
+
#
|
309
|
+
# @since 2.0.0
|
310
|
+
def mongos?
|
311
|
+
config[MESSAGE] == MONGOS_MESSAGE
|
312
|
+
end
|
313
|
+
|
314
|
+
# Is the description of type other.
|
315
|
+
#
|
316
|
+
# @example Is the description of type other.
|
317
|
+
# description.other?
|
318
|
+
#
|
319
|
+
# @return [ true, false ] If the description is other.
|
320
|
+
#
|
321
|
+
# @since 2.0.0
|
322
|
+
def other?
|
323
|
+
!primary? && !secondary? && !passive? && !arbiter?
|
324
|
+
end
|
325
|
+
|
326
|
+
# Will return true if the server is passive.
|
327
|
+
#
|
328
|
+
# @example Is the server passive?
|
329
|
+
# description.passive?
|
330
|
+
#
|
331
|
+
# @return [ true, false ] If the server is passive.
|
332
|
+
#
|
333
|
+
# @since 2.0.0
|
334
|
+
def passive?
|
335
|
+
!!config[PASSIVE]
|
336
|
+
end
|
337
|
+
|
338
|
+
# Get a list of the passive servers in the cluster.
|
339
|
+
#
|
340
|
+
# @example Get the passives.
|
341
|
+
# description.passives
|
342
|
+
#
|
343
|
+
# @return [ Array<String> ] The list of passives.
|
344
|
+
#
|
345
|
+
# @since 2.0.0
|
346
|
+
def passives
|
347
|
+
config[PASSIVES] || []
|
348
|
+
end
|
349
|
+
|
350
|
+
# Will return true if the server is a primary.
|
351
|
+
#
|
352
|
+
# @example Is the server a primary?
|
353
|
+
# description.primary?
|
354
|
+
#
|
355
|
+
# @return [ true, false ] If the server is a primary.
|
356
|
+
#
|
357
|
+
# @since 2.0.0
|
358
|
+
def primary?
|
359
|
+
!!config[PRIMARY] && !replica_set_name.nil?
|
360
|
+
end
|
361
|
+
|
362
|
+
# Get the name of the replica set the server belongs to, returns nil if
|
363
|
+
# none.
|
364
|
+
#
|
365
|
+
# @example Get the replica set name.
|
366
|
+
# description.replica_set_name
|
367
|
+
#
|
368
|
+
# @return [ String, nil ] The name of the replica set.
|
369
|
+
#
|
370
|
+
# @since 2.0.0
|
371
|
+
def replica_set_name
|
372
|
+
config[SET_NAME]
|
373
|
+
end
|
374
|
+
|
375
|
+
# Get a list of all servers known to the cluster.
|
376
|
+
#
|
377
|
+
# @example Get all servers.
|
378
|
+
# description.servers
|
379
|
+
#
|
380
|
+
# @return [ Array<String> ] The list of all servers.
|
381
|
+
#
|
382
|
+
# @since 2.0.0
|
383
|
+
def servers
|
384
|
+
hosts + arbiters + passives
|
385
|
+
end
|
386
|
+
|
387
|
+
# Will return true if the server is a secondary.
|
388
|
+
#
|
389
|
+
# @example Is the server a secondary?
|
390
|
+
# description.secondary?
|
391
|
+
#
|
392
|
+
# @return [ true, false ] If the server is a secondary.
|
393
|
+
#
|
394
|
+
# @since 2.0.0
|
395
|
+
def secondary?
|
396
|
+
!!config[SECONDARY] && !replica_set_name.nil?
|
397
|
+
end
|
398
|
+
|
399
|
+
# Is this server a standalone server?
|
400
|
+
#
|
401
|
+
# @example Is the server standalone?
|
402
|
+
# description.standalone?
|
403
|
+
#
|
404
|
+
# @return [ true, false ] If the server is standalone.
|
405
|
+
#
|
406
|
+
# @since 2.0.0
|
407
|
+
def standalone?
|
408
|
+
replica_set_name.nil? && !mongos? && !ghost? && !unknown?
|
409
|
+
end
|
410
|
+
|
411
|
+
# Is the server description currently unknown?
|
412
|
+
#
|
413
|
+
# @example Is the server description unknown?
|
414
|
+
# description.unknown?
|
415
|
+
#
|
416
|
+
# @return [ true, false ] If the server description is unknown.
|
417
|
+
#
|
418
|
+
# @since 2.0.0
|
419
|
+
def unknown?
|
420
|
+
config.empty? || config[Operation::Result::OK] != 1
|
421
|
+
end
|
422
|
+
|
423
|
+
# A result from another server's ismaster command before this server has
|
424
|
+
# refreshed causes the need for this description to become unknown before
|
425
|
+
# the next refresh.
|
426
|
+
#
|
427
|
+
# @example Force an unknown state.
|
428
|
+
# description.unknown!
|
429
|
+
#
|
430
|
+
# @return [ true ] Always true.
|
431
|
+
#
|
432
|
+
# @since 2.0.0
|
433
|
+
def unknown!
|
434
|
+
@config = {} and true
|
435
|
+
end
|
436
|
+
|
437
|
+
# Get the range of supported wire versions for the server.
|
438
|
+
#
|
439
|
+
# @example Get the wire version range.
|
440
|
+
# description.wire_versions
|
441
|
+
#
|
442
|
+
# @return [ Range ] The wire version range.
|
443
|
+
#
|
444
|
+
# @since 2.0.0
|
445
|
+
def wire_versions
|
446
|
+
min_wire_version..max_wire_version
|
447
|
+
end
|
448
|
+
end
|
449
|
+
end
|
450
|
+
end
|