mongo 1.12.5 → 2.0.0.beta
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.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +64 -0
- data/LICENSE +1 -1
- data/README.md +23 -125
- data/Rakefile +26 -21
- data/bin/mongo_console +6 -38
- data/lib/mongo.rb +23 -82
- data/lib/mongo/address.rb +111 -0
- 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/auth.rb +108 -0
- data/lib/mongo/auth/cr.rb +44 -0
- data/lib/mongo/auth/cr/conversation.rb +119 -0
- data/lib/mongo/auth/executable.rb +52 -0
- data/lib/mongo/auth/ldap.rb +48 -0
- data/lib/mongo/auth/ldap/conversation.rb +92 -0
- data/lib/mongo/auth/roles.rb +104 -0
- data/lib/mongo/auth/scram.rb +53 -0
- data/lib/mongo/auth/scram/conversation.rb +450 -0
- data/lib/mongo/auth/user.rb +159 -0
- data/lib/mongo/auth/user/view.rb +102 -0
- data/lib/mongo/auth/x509.rb +48 -0
- data/lib/mongo/auth/x509/conversation.rb +92 -0
- data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
- data/lib/mongo/bulk/bulk_write.rb +307 -0
- data/lib/mongo/client.rb +233 -0
- data/lib/mongo/cluster.rb +203 -0
- data/lib/mongo/cluster/topology.rb +60 -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/collection.rb +130 -1101
- data/lib/mongo/collection/view.rb +169 -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 +169 -0
- data/lib/mongo/cursor.rb +79 -680
- data/lib/mongo/database.rb +224 -0
- data/lib/mongo/database/view.rb +101 -0
- data/lib/mongo/error.rb +81 -0
- data/lib/mongo/error/bulk_write_failure.rb +41 -0
- data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
- data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
- 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/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/event.rb +40 -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/grid.rb +16 -0
- data/lib/mongo/grid/file.rb +94 -0
- data/lib/mongo/grid/file/chunk.rb +184 -0
- data/lib/mongo/grid/file/metadata.rb +223 -0
- data/lib/mongo/grid/fs.rb +149 -0
- data/lib/mongo/index.rb +64 -0
- data/lib/mongo/index/view.rb +205 -0
- data/lib/mongo/loggable.rb +126 -0
- data/lib/mongo/logger.rb +132 -0
- data/lib/mongo/operation.rb +26 -0
- data/lib/mongo/operation/aggregate.rb +100 -0
- data/lib/mongo/operation/aggregate/result.rb +84 -0
- data/lib/mongo/operation/batchable.rb +103 -0
- data/lib/mongo/operation/bulk_delete/result.rb +197 -0
- data/lib/mongo/operation/bulk_insert/result.rb +195 -0
- data/lib/mongo/operation/bulk_update/result.rb +295 -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 +116 -0
- data/lib/mongo/operation/list_indexes/result.rb +118 -0
- data/lib/mongo/operation/map_reduce.rb +96 -0
- data/lib/mongo/operation/map_reduce/result.rb +122 -0
- data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
- 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/operation/read_preferrable.rb +34 -0
- data/lib/mongo/operation/result.rb +259 -0
- data/lib/mongo/operation/specifiable.rb +380 -0
- data/lib/mongo/operation/write.rb +25 -0
- data/lib/mongo/operation/write/bulk_delete.rb +158 -0
- data/lib/mongo/operation/write/bulk_insert.rb +160 -0
- data/lib/mongo/operation/write/bulk_update.rb +167 -0
- data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
- 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/ensure_index.rb +55 -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/create_index.rb +84 -0
- data/lib/mongo/operation/write/create_user.rb +75 -0
- data/lib/mongo/operation/write/delete.rb +91 -0
- data/lib/mongo/operation/write/drop_index.rb +62 -0
- data/lib/mongo/operation/write/insert.rb +88 -0
- data/lib/mongo/operation/write/remove_user.rb +70 -0
- data/lib/mongo/operation/write/update.rb +98 -0
- data/lib/mongo/protocol.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/server.rb +163 -0
- data/lib/mongo/server/connectable.rb +99 -0
- data/lib/mongo/server/connection.rb +133 -0
- data/lib/mongo/server/connection_pool.rb +141 -0
- data/lib/mongo/server/connection_pool/queue.rb +182 -0
- data/lib/mongo/server/context.rb +66 -0
- data/lib/mongo/server/description.rb +450 -0
- data/lib/mongo/server/description/features.rb +85 -0
- data/lib/mongo/server/description/inspector.rb +79 -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/monitor.rb +160 -0
- data/lib/mongo/server/monitor/connection.rb +88 -0
- data/lib/mongo/server_selector.rb +81 -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/socket.rb +179 -0
- data/lib/mongo/socket/ssl.rb +108 -0
- data/lib/mongo/socket/tcp.rb +69 -0
- data/lib/mongo/socket/unix.rb +66 -0
- data/lib/mongo/uri.rb +504 -0
- data/lib/mongo/version.rb +21 -0
- data/lib/mongo/write_concern.rb +99 -0
- data/lib/mongo/write_concern/acknowledged.rb +38 -0
- data/lib/mongo/write_concern/normalizable.rb +73 -0
- data/lib/mongo/write_concern/unacknowledged.rb +43 -0
- data/mongo.gemspec +17 -14
- 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 +175 -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 +135 -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 +504 -0
- data/spec/mongo/collection/view_spec.rb +521 -0
- data/spec/mongo/collection_spec.rb +362 -0
- data/spec/mongo/cursor_spec.rb +295 -0
- data/spec/mongo/database_spec.rb +306 -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 +69 -0
- data/spec/mongo/grid/file_spec.rb +138 -0
- data/spec/mongo/grid/fs_spec.rb +129 -0
- data/spec/mongo/index/view_spec.rb +226 -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 +135 -0
- data/spec/mongo/operation/command_spec.rb +106 -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 +473 -0
- data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
- data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
- data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
- data/spec/mongo/operation/write/command/update_spec.rb +123 -0
- data/spec/mongo/operation/write/create_user_spec.rb +44 -0
- data/spec/mongo/operation/write/delete_spec.rb +178 -0
- data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
- data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
- data/spec/mongo/operation/write/insert_spec.rb +231 -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 +177 -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 +289 -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 +130 -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/mongo_orchestration_spec.rb +70 -0
- data/spec/spec_helper.rb +148 -0
- data/spec/support/authorization.rb +245 -0
- data/spec/support/helpers.rb +140 -0
- data/spec/support/matchers.rb +37 -0
- data/spec/support/mongo_orchestration.rb +61 -0
- data/spec/support/mongo_orchestration/requestable.rb +109 -0
- data/spec/support/mongo_orchestration/standalone.rb +57 -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.rb +140 -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 +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
- data/spec/support/server_selection_rtt.rb +41 -0
- data/spec/support/shared/bulk_write.rb +498 -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
- metadata +523 -189
- 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,72 @@
|
|
|
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
|
+
module Protocol
|
|
17
|
+
|
|
18
|
+
# The MongoDB wire protocol message representing a reply
|
|
19
|
+
#
|
|
20
|
+
# @example
|
|
21
|
+
# socket = TCPSocket.new('localhost', 27017)
|
|
22
|
+
# query = Protocol::Query.new('xgen', 'users', {:name => 'Tyler'})
|
|
23
|
+
# socket.write(query)
|
|
24
|
+
# reply = Protocol::Reply::deserialize(socket)
|
|
25
|
+
#
|
|
26
|
+
# @api semipublic
|
|
27
|
+
class Reply < Message
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
# The operation code required to specify a Reply message.
|
|
32
|
+
# @return [Fixnum] the operation code.
|
|
33
|
+
def op_code
|
|
34
|
+
1
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Available flags for a Reply message.
|
|
38
|
+
FLAGS = [
|
|
39
|
+
:cursor_not_found,
|
|
40
|
+
:query_failure,
|
|
41
|
+
:shard_config_stale,
|
|
42
|
+
:await_capable
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
public
|
|
46
|
+
|
|
47
|
+
# @!attribute
|
|
48
|
+
# @return [Array<Symbol>] The flags for this reply.
|
|
49
|
+
#
|
|
50
|
+
# Supported flags: +:cursor_not_found+, +:query_failure+,
|
|
51
|
+
# +:shard_config_stale+, +:await_capable+
|
|
52
|
+
field :flags, BitVector.new(FLAGS)
|
|
53
|
+
|
|
54
|
+
# @!attribute
|
|
55
|
+
# @return [Fixnum] The cursor id for this response. Will be zero
|
|
56
|
+
# if there are no additional results.
|
|
57
|
+
field :cursor_id, Int64
|
|
58
|
+
|
|
59
|
+
# @!attribute
|
|
60
|
+
# @return [Fixnum] The starting position of the cursor for this Reply.
|
|
61
|
+
field :starting_from, Int32
|
|
62
|
+
|
|
63
|
+
# @!attribute
|
|
64
|
+
# @return [Fixnum] Number of documents in this Reply.
|
|
65
|
+
field :number_returned, Int32
|
|
66
|
+
|
|
67
|
+
# @!attribute
|
|
68
|
+
# @return [Array<Hash>] The documents in this Reply.
|
|
69
|
+
field :documents, Document, :@number_returned
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
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
|
+
module Protocol
|
|
17
|
+
|
|
18
|
+
# Container for various serialization strategies
|
|
19
|
+
#
|
|
20
|
+
# Each strategy must have a serialization method named +serailize+
|
|
21
|
+
# and a deserialization method named +deserialize+
|
|
22
|
+
#
|
|
23
|
+
# Serialize methods must take buffer and value arguements and
|
|
24
|
+
# serialize the value into the buffer
|
|
25
|
+
#
|
|
26
|
+
# Deserialize methods must take an IO stream argument and
|
|
27
|
+
# deserialize the value from the stream of bytes
|
|
28
|
+
#
|
|
29
|
+
# @api private
|
|
30
|
+
module Serializers
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
ZERO = 0.freeze
|
|
35
|
+
NULL = 0.chr.freeze
|
|
36
|
+
INT32_PACK = 'l<'.freeze
|
|
37
|
+
INT64_PACK = 'q<'.freeze
|
|
38
|
+
HEADER_PACK = 'l<l<l<l<'.freeze
|
|
39
|
+
|
|
40
|
+
# MongoDB wire protocol serialization strategy for message headers.
|
|
41
|
+
#
|
|
42
|
+
# Serializes and de-serializes four 32-bit integers consisting
|
|
43
|
+
# of the length of the message, the request id, the response id,
|
|
44
|
+
# and the op code for the operation.
|
|
45
|
+
module Header
|
|
46
|
+
|
|
47
|
+
# Serializes the header value into the buffer
|
|
48
|
+
#
|
|
49
|
+
# @param buffer [String] Buffer to receive the serialized value.
|
|
50
|
+
# @param value [String] Header value to be serialized.
|
|
51
|
+
# @return [String] Buffer with serialized value.
|
|
52
|
+
def self.serialize(buffer, value)
|
|
53
|
+
buffer << value.pack(HEADER_PACK)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Deserializes the header value from the IO stream
|
|
57
|
+
#
|
|
58
|
+
# @param io [IO] IO stream containing the message header.
|
|
59
|
+
# @return [Array<Fixnum>] Array consisting of the deserialized
|
|
60
|
+
# length, request id, response id, and op code.
|
|
61
|
+
def self.deserialize(io)
|
|
62
|
+
io.read(16).unpack(HEADER_PACK)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# MongoDB wire protocol serialization strategy for C style strings.
|
|
67
|
+
#
|
|
68
|
+
# Serializes and de-serializes C style strings (null terminated).
|
|
69
|
+
module CString
|
|
70
|
+
|
|
71
|
+
# Serializes a C style string into the buffer
|
|
72
|
+
#
|
|
73
|
+
# @param buffer [String] Buffer to receive the serialized CString.
|
|
74
|
+
# @param value [String] The string to be serialized.
|
|
75
|
+
# @return [String] Buffer with serialized value.
|
|
76
|
+
def self.serialize(buffer, value)
|
|
77
|
+
buffer << value
|
|
78
|
+
buffer << NULL
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# MongoDB wire protocol serialization strategy for 32-bit Zero.
|
|
83
|
+
#
|
|
84
|
+
# Serializes and de-serializes one 32-bit Zero.
|
|
85
|
+
module Zero
|
|
86
|
+
|
|
87
|
+
# Serializes a 32-bit Zero into the buffer
|
|
88
|
+
#
|
|
89
|
+
# @param buffer [String] Buffer to receive the serialized Zero.
|
|
90
|
+
# @param value [Fixnum] Ignored value.
|
|
91
|
+
# @return [String] Buffer with serialized value.
|
|
92
|
+
def self.serialize(buffer, value)
|
|
93
|
+
buffer << [ZERO].pack(INT32_PACK)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# MongoDB wire protocol serialization strategy for 32-bit integers.
|
|
98
|
+
#
|
|
99
|
+
# Serializes and de-serializes one 32-bit integer.
|
|
100
|
+
module Int32
|
|
101
|
+
|
|
102
|
+
# Serializes a fixnum to a 4-byte 32-bit integer
|
|
103
|
+
#
|
|
104
|
+
# @param buffer [String] Buffer to receive the serialized Int32.
|
|
105
|
+
# @param value [Fixnum] 32-bit integer to be serialized.
|
|
106
|
+
# @return [String] Buffer with serialized value.
|
|
107
|
+
def self.serialize(buffer, value)
|
|
108
|
+
buffer << [value].pack(INT32_PACK)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Deserializes a 32-bit Fixnum from the IO stream
|
|
112
|
+
#
|
|
113
|
+
# @param io [IO] IO stream containing the 32-bit integer
|
|
114
|
+
# @return [Fixnum] Deserialized Int32
|
|
115
|
+
def self.deserialize(io)
|
|
116
|
+
io.read(4).unpack(INT32_PACK).first
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# MongoDB wire protocol serialization strategy for 64-bit integers.
|
|
121
|
+
#
|
|
122
|
+
# Serializes and de-serializes one 64-bit integer.
|
|
123
|
+
module Int64
|
|
124
|
+
|
|
125
|
+
# Serializes a fixnum to an 8-byte 64-bit integer
|
|
126
|
+
#
|
|
127
|
+
# @param buffer [String] Buffer to receive the serialized Int64.
|
|
128
|
+
# @param value [Fixnum] 64-bit integer to be serialized.
|
|
129
|
+
# @return [String] Buffer with serialized value.
|
|
130
|
+
def self.serialize(buffer, value)
|
|
131
|
+
buffer << [value].pack(INT64_PACK)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Deserializes a 64-bit Fixnum from the IO stream
|
|
135
|
+
#
|
|
136
|
+
# @param io [IO] IO stream containing the 64-bit integer.
|
|
137
|
+
# @return [Fixnum] Deserialized Int64.
|
|
138
|
+
def self.deserialize(io)
|
|
139
|
+
io.read(8).unpack(INT64_PACK).first
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# MongoDB wire protocol serialization strategy for a BSON Document.
|
|
144
|
+
#
|
|
145
|
+
# Serializes and de-serializes a single document.
|
|
146
|
+
module Document
|
|
147
|
+
|
|
148
|
+
# Serializes a document into the buffer
|
|
149
|
+
#
|
|
150
|
+
# @param buffer [String] Buffer to receive the BSON encoded document.
|
|
151
|
+
# @param value [Hash] Document to serialize as BSON.
|
|
152
|
+
# @return [String] Buffer with serialized value.
|
|
153
|
+
def self.serialize(buffer, value, max_bson_size = nil)
|
|
154
|
+
start_size = buffer.size
|
|
155
|
+
value.to_bson(buffer)
|
|
156
|
+
if max_bson_size && buffer.size - start_size > max_bson_size
|
|
157
|
+
raise Error::MaxBSONSize.new(max_bson_size)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Deserializes a document from the IO stream
|
|
162
|
+
#
|
|
163
|
+
# @param io [IO] IO stream containing the BSON encoded document.
|
|
164
|
+
# @return [Hash] The decoded BSON document.
|
|
165
|
+
def self.deserialize(io)
|
|
166
|
+
BSON::Document.from_bson(io)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Whether there can be a size limit on this type after serialization.
|
|
170
|
+
#
|
|
171
|
+
# @return [ true ] Documents can be size limited upon serialization.
|
|
172
|
+
#
|
|
173
|
+
# @since 2.0.0
|
|
174
|
+
def self.size_limited?
|
|
175
|
+
true
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
module Protocol
|
|
17
|
+
|
|
18
|
+
# MongoDB Wire protocol Update message.
|
|
19
|
+
#
|
|
20
|
+
# This is a client request message that is sent to the server in order
|
|
21
|
+
# to update documents matching the provided query.
|
|
22
|
+
#
|
|
23
|
+
# The default is to update a single document. In order to update many at
|
|
24
|
+
# a time users should set the +:multi_update+ flag for the update.
|
|
25
|
+
#
|
|
26
|
+
# If an upsert (update or insert) is desired, users can set the +:upsert+
|
|
27
|
+
# flag in order to indicate they would like to insert the merged selector
|
|
28
|
+
# and update if no document matching the update query currently exists.
|
|
29
|
+
#
|
|
30
|
+
# @api semipublic
|
|
31
|
+
class Update < Message
|
|
32
|
+
|
|
33
|
+
# Creates a new Update message
|
|
34
|
+
#
|
|
35
|
+
# @example Update single document
|
|
36
|
+
# Update.new('xgen', 'users', {:name => 'Tyler'}, {:name => 'Bob'})
|
|
37
|
+
#
|
|
38
|
+
# @example Perform a multi update
|
|
39
|
+
# Update.new('xgen', 'users',
|
|
40
|
+
# {:age => 20}, {:age => 21}, :flags => [:multi_update])
|
|
41
|
+
#
|
|
42
|
+
# @example Perform an upsert
|
|
43
|
+
# Update.new('xgen', 'users', {:name => 'Tyler'}, :flags => [:upsert])
|
|
44
|
+
#
|
|
45
|
+
# @param database [String, Symbol] The database to update.
|
|
46
|
+
# @param collection [String, Symbol] The collection to update.
|
|
47
|
+
# @param selector [Hash] The update selector.
|
|
48
|
+
# @param update [Hash] The update to perform.
|
|
49
|
+
# @param options [Hash] The additional query options.
|
|
50
|
+
#
|
|
51
|
+
# @option options :flags [Array] The flags for the update message.
|
|
52
|
+
#
|
|
53
|
+
# Supported flags: +:upsert+, +:multi_update+
|
|
54
|
+
def initialize(database, collection, selector, update, options = {})
|
|
55
|
+
@namespace = "#{database}.#{collection}"
|
|
56
|
+
@selector = selector
|
|
57
|
+
@update = update
|
|
58
|
+
@flags = options[:flags] || []
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# The log message for an update operation.
|
|
62
|
+
#
|
|
63
|
+
# @example Get the log message.
|
|
64
|
+
# update.log_message
|
|
65
|
+
#
|
|
66
|
+
# @return [ String ] The log message
|
|
67
|
+
#
|
|
68
|
+
# @since 2.0.0
|
|
69
|
+
def log_message
|
|
70
|
+
fields = []
|
|
71
|
+
fields << ["%s |", "UPDATE"]
|
|
72
|
+
fields << ["namespace=%s", namespace]
|
|
73
|
+
fields << ["selector=%s", selector.inspect]
|
|
74
|
+
fields << ["udpdate=%s", update.inspect]
|
|
75
|
+
fields << ["flags=%s", flags.inspect]
|
|
76
|
+
f, v = fields.transpose
|
|
77
|
+
f.join(" ") % v
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
|
|
82
|
+
# The operation code required to specify an Update message.
|
|
83
|
+
# @return [Fixnum] the operation code.
|
|
84
|
+
def op_code
|
|
85
|
+
2001
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Available flags for an Update message.
|
|
89
|
+
FLAGS = [:upsert, :multi_update]
|
|
90
|
+
|
|
91
|
+
# Field representing Zero encoded as an Int32.
|
|
92
|
+
field :zero, Zero
|
|
93
|
+
|
|
94
|
+
# @!attribute
|
|
95
|
+
# @return [String] The namespace for this Update message.
|
|
96
|
+
field :namespace, CString
|
|
97
|
+
|
|
98
|
+
# @!attribute
|
|
99
|
+
# @return [Array<Symbol>] The flags for this Update message.
|
|
100
|
+
field :flags, BitVector.new(FLAGS)
|
|
101
|
+
|
|
102
|
+
# @!attribute
|
|
103
|
+
# @return [Hash] The selector for this Update message.
|
|
104
|
+
field :selector, Document
|
|
105
|
+
|
|
106
|
+
# @!attribute
|
|
107
|
+
# @return [Hash] The update for this Delete message.
|
|
108
|
+
field :update, Document
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
data/lib/mongo/server.rb
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
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/connectable'
|
|
16
|
+
require 'mongo/server/connection'
|
|
17
|
+
require 'mongo/server/connection_pool'
|
|
18
|
+
require 'mongo/server/context'
|
|
19
|
+
require 'mongo/server/description'
|
|
20
|
+
require 'mongo/server/monitor'
|
|
21
|
+
|
|
22
|
+
module Mongo
|
|
23
|
+
|
|
24
|
+
# Represents a single server on the server side that can be standalone, part of
|
|
25
|
+
# a replica set, or a mongos.
|
|
26
|
+
#
|
|
27
|
+
# @since 2.0.0
|
|
28
|
+
class Server
|
|
29
|
+
extend Forwardable
|
|
30
|
+
|
|
31
|
+
# @return [ String ] The configured address for the server.
|
|
32
|
+
attr_reader :address
|
|
33
|
+
|
|
34
|
+
# @return [ Monitor ] monitor The server monitor.
|
|
35
|
+
attr_reader :monitor
|
|
36
|
+
|
|
37
|
+
# @return [ Hash ] The options hash.
|
|
38
|
+
attr_reader :options
|
|
39
|
+
|
|
40
|
+
# Get the description from the monitor and scan on monitor.
|
|
41
|
+
def_delegators :monitor, :description, :scan!
|
|
42
|
+
|
|
43
|
+
# Delegate convenience methods to the monitor description.
|
|
44
|
+
def_delegators :description,
|
|
45
|
+
:arbiter?,
|
|
46
|
+
:features,
|
|
47
|
+
:ghost?,
|
|
48
|
+
:max_wire_version,
|
|
49
|
+
:max_write_batch_size,
|
|
50
|
+
:max_bson_object_size,
|
|
51
|
+
:max_message_size,
|
|
52
|
+
:tags,
|
|
53
|
+
:average_round_trip_time,
|
|
54
|
+
:mongos?,
|
|
55
|
+
:other?,
|
|
56
|
+
:primary?,
|
|
57
|
+
:replica_set_name,
|
|
58
|
+
:secondary?,
|
|
59
|
+
:standalone?,
|
|
60
|
+
:unknown?
|
|
61
|
+
|
|
62
|
+
# Is this server equal to another?
|
|
63
|
+
#
|
|
64
|
+
# @example Is the server equal to the other?
|
|
65
|
+
# server == other
|
|
66
|
+
#
|
|
67
|
+
# @param [ Object ] other The object to compare to.
|
|
68
|
+
#
|
|
69
|
+
# @return [ true, false ] If the servers are equal.
|
|
70
|
+
#
|
|
71
|
+
# @since 2.0.0
|
|
72
|
+
def ==(other)
|
|
73
|
+
return false unless other.is_a?(Server)
|
|
74
|
+
address == other.address
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Get a new context for this server in which to send messages.
|
|
78
|
+
#
|
|
79
|
+
# @example Get the server context.
|
|
80
|
+
# server.context
|
|
81
|
+
#
|
|
82
|
+
# @return [ Mongo::Server::Context ] The server context.
|
|
83
|
+
#
|
|
84
|
+
# @since 2.0.0
|
|
85
|
+
def context
|
|
86
|
+
Context.new(self)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Disconnect the server from the connection.
|
|
90
|
+
#
|
|
91
|
+
# @example Disconnect the server.
|
|
92
|
+
# server.disconnect!
|
|
93
|
+
#
|
|
94
|
+
# @return [ true ] Always tru with no exception.
|
|
95
|
+
#
|
|
96
|
+
# @since 2.0.0
|
|
97
|
+
def disconnect!
|
|
98
|
+
context.with_connection do |connection|
|
|
99
|
+
connection.disconnect!
|
|
100
|
+
end
|
|
101
|
+
monitor.stop! and true
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Instantiate a new server object. Will start the background refresh and
|
|
105
|
+
# subscribe to the appropriate events.
|
|
106
|
+
#
|
|
107
|
+
# @example Initialize the server.
|
|
108
|
+
# Mongo::Server.new('127.0.0.1:27017', listeners)
|
|
109
|
+
#
|
|
110
|
+
# @param [ Address ] address The host:port address to connect to.
|
|
111
|
+
# @param [ Event::Listeners ] event_listeners The event listeners.
|
|
112
|
+
# @param [ Hash ] options The server options.
|
|
113
|
+
#
|
|
114
|
+
# @since 2.0.0
|
|
115
|
+
def initialize(address, event_listeners, options = {})
|
|
116
|
+
@address = address
|
|
117
|
+
@options = options.freeze
|
|
118
|
+
@monitor = Monitor.new(address, event_listeners, options)
|
|
119
|
+
monitor.scan!
|
|
120
|
+
monitor.run!
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Get a pretty printed server inspection.
|
|
124
|
+
#
|
|
125
|
+
# @example Get the server inspection.
|
|
126
|
+
# server.inspec
|
|
127
|
+
#
|
|
128
|
+
# @return [ String ] The nice inspection string.
|
|
129
|
+
#
|
|
130
|
+
# @since 2.0.0
|
|
131
|
+
def inspect
|
|
132
|
+
"#<Mongo::Server:0x#{object_id} address=#{address.host}:#{address.port}>"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Get the connection pool for this server.
|
|
136
|
+
#
|
|
137
|
+
# @example Get the connection pool for the server.
|
|
138
|
+
# server.pool
|
|
139
|
+
#
|
|
140
|
+
# @return [ Mongo::Pool ] The connection pool.
|
|
141
|
+
#
|
|
142
|
+
# @since 2.0.0
|
|
143
|
+
def pool
|
|
144
|
+
@pool ||= ConnectionPool.get(self)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Determine if the provided tags are a subset of the server's tags.
|
|
148
|
+
#
|
|
149
|
+
# @example Are the provided tags a subset of the server's tags.
|
|
150
|
+
# server.matches_tag_set?({ 'rack' => 'a', 'dc' => 'nyc' })
|
|
151
|
+
#
|
|
152
|
+
# @param [ Hash ] The tag set to compare to the server's tags.
|
|
153
|
+
#
|
|
154
|
+
# @return [ true, false ] If the provided tags are a subset of the server's tags.
|
|
155
|
+
#
|
|
156
|
+
# @since 2.0.0
|
|
157
|
+
def matches_tag_set?(tag_set)
|
|
158
|
+
tag_set.keys.all? do |k|
|
|
159
|
+
tags[k] && tags[k] == tag_set[k]
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|