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
|
@@ -1,320 +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
|
-
module Mongo
|
|
16
|
-
class PoolManager
|
|
17
|
-
include ThreadLocalVariableManager
|
|
18
|
-
|
|
19
|
-
attr_reader :client,
|
|
20
|
-
:hosts,
|
|
21
|
-
:pools,
|
|
22
|
-
:secondaries,
|
|
23
|
-
:secondary_pools,
|
|
24
|
-
:arbiters,
|
|
25
|
-
:primary,
|
|
26
|
-
:primary_pool,
|
|
27
|
-
:seeds,
|
|
28
|
-
:max_bson_size,
|
|
29
|
-
:max_message_size,
|
|
30
|
-
:max_wire_version,
|
|
31
|
-
:min_wire_version
|
|
32
|
-
|
|
33
|
-
# Create a new set of connection pools.
|
|
34
|
-
#
|
|
35
|
-
# The pool manager will by default use the original seed list passed
|
|
36
|
-
# to the connection objects, accessible via connection.seeds. In addition,
|
|
37
|
-
# the user may pass an additional list of seeds nodes discovered in real
|
|
38
|
-
# time. The union of these lists will be used when attempting to connect,
|
|
39
|
-
# with the newly-discovered nodes being used first.
|
|
40
|
-
def initialize(client, seeds=[])
|
|
41
|
-
@client = client
|
|
42
|
-
@seeds = seeds
|
|
43
|
-
|
|
44
|
-
initialize_immutable_state
|
|
45
|
-
initialize_mutable_state
|
|
46
|
-
|
|
47
|
-
@pools = Set.new
|
|
48
|
-
@primary = nil
|
|
49
|
-
@primary_pool = nil
|
|
50
|
-
@members = Set.new
|
|
51
|
-
@refresh_required = false
|
|
52
|
-
@max_bson_size = DEFAULT_MAX_BSON_SIZE
|
|
53
|
-
@max_message_size = @max_bson_size * MESSAGE_SIZE_FACTOR
|
|
54
|
-
@max_wire_version = 0
|
|
55
|
-
@min_wire_version = 0
|
|
56
|
-
@connect_mutex = Mutex.new
|
|
57
|
-
thread_local[:locks][:connecting_manager] = false
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def inspect
|
|
61
|
-
"<Mongo::PoolManager:0x#{self.object_id.to_s(16)} @seeds=#{@seeds}>"
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def connect
|
|
65
|
-
@connect_mutex.synchronize do
|
|
66
|
-
begin
|
|
67
|
-
thread_local[:locks][:connecting_manager] = true
|
|
68
|
-
@refresh_required = false
|
|
69
|
-
disconnect_old_members
|
|
70
|
-
connect_to_members
|
|
71
|
-
initialize_pools(@members)
|
|
72
|
-
update_max_sizes
|
|
73
|
-
@seeds = discovered_seeds
|
|
74
|
-
ensure
|
|
75
|
-
thread_local[:locks][:connecting_manager] = false
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
clone_state
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def refresh!(additional_seeds)
|
|
82
|
-
@seeds |= additional_seeds
|
|
83
|
-
connect
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# We're healthy if all members are pingable and if the view
|
|
87
|
-
# of the replica set returned by isMaster is equivalent
|
|
88
|
-
# to our view. If any of these isn't the case,
|
|
89
|
-
# set @refresh_required to true, and return.
|
|
90
|
-
def check_connection_health
|
|
91
|
-
return if thread_local[:locks][:connecting_manager]
|
|
92
|
-
members = copy_members
|
|
93
|
-
begin
|
|
94
|
-
seed = get_valid_seed_node
|
|
95
|
-
rescue ConnectionFailure
|
|
96
|
-
@refresh_required = true
|
|
97
|
-
return
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
unless current_config = seed.config
|
|
101
|
-
@refresh_required = true
|
|
102
|
-
seed.close
|
|
103
|
-
return
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
if current_config['hosts'].length != members.length
|
|
107
|
-
@refresh_required = true
|
|
108
|
-
seed.close
|
|
109
|
-
return
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
current_config['hosts'].each do |host|
|
|
113
|
-
member = members.detect do |m|
|
|
114
|
-
m.address == host
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
if member && validate_existing_member(current_config, member)
|
|
118
|
-
next
|
|
119
|
-
else
|
|
120
|
-
@refresh_required = true
|
|
121
|
-
seed.close
|
|
122
|
-
return
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
seed.close
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# The replica set connection should initiate a full refresh.
|
|
130
|
-
def refresh_required?
|
|
131
|
-
@refresh_required
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def closed?
|
|
135
|
-
pools.all? { |pool| pool.closed? }
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def close(opts={})
|
|
139
|
-
begin
|
|
140
|
-
pools.each { |pool| pool.close(opts) }
|
|
141
|
-
rescue ConnectionFailure
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def read
|
|
146
|
-
read_pool.host_port
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
private
|
|
150
|
-
|
|
151
|
-
def update_max_sizes
|
|
152
|
-
unless @members.size == 0
|
|
153
|
-
@max_bson_size = @members.map(&:max_bson_size).min
|
|
154
|
-
@max_message_size = @members.map(&:max_message_size).min
|
|
155
|
-
@max_wire_version = @members.map(&:max_wire_version).min
|
|
156
|
-
@min_wire_version = @members.map(&:min_wire_version).max
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def validate_existing_member(current_config, member)
|
|
161
|
-
if current_config['ismaster'] && member.last_state != :primary
|
|
162
|
-
return false
|
|
163
|
-
elsif member.last_state != :other
|
|
164
|
-
return false
|
|
165
|
-
end
|
|
166
|
-
return true
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# For any existing members, close and remove any that are unhealthy or already closed.
|
|
170
|
-
def disconnect_old_members
|
|
171
|
-
@pools_mutable.reject! {|pool| !pool.healthy? }
|
|
172
|
-
@members.reject! {|node| !node.healthy? }
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Connect to each member of the replica set
|
|
176
|
-
# as reported by the given seed node.
|
|
177
|
-
def connect_to_members
|
|
178
|
-
seed = get_valid_seed_node
|
|
179
|
-
seed.node_list.each do |host|
|
|
180
|
-
if existing = @members.detect {|node| node =~ host }
|
|
181
|
-
if existing.healthy?
|
|
182
|
-
# Refresh this node's configuration
|
|
183
|
-
existing.set_config
|
|
184
|
-
# If we are unhealthy after refreshing our config, drop from the set.
|
|
185
|
-
if !existing.healthy?
|
|
186
|
-
@members.delete(existing)
|
|
187
|
-
else
|
|
188
|
-
next
|
|
189
|
-
end
|
|
190
|
-
else
|
|
191
|
-
existing.close
|
|
192
|
-
@members.delete(existing)
|
|
193
|
-
end
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
node = Mongo::Node.new(self.client, host)
|
|
197
|
-
node.connect
|
|
198
|
-
@members << node if node.healthy?
|
|
199
|
-
end
|
|
200
|
-
seed.close
|
|
201
|
-
|
|
202
|
-
if @members.empty?
|
|
203
|
-
raise ConnectionFailure, "Failed to connect to any given member."
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
# Initialize the connection pools for the primary and secondary nodes.
|
|
208
|
-
def initialize_pools(members)
|
|
209
|
-
@primary_pool = nil
|
|
210
|
-
@primary = nil
|
|
211
|
-
@secondaries_mutable.clear
|
|
212
|
-
@secondary_pools_mutable.clear
|
|
213
|
-
@hosts_mutable.clear
|
|
214
|
-
|
|
215
|
-
members.each do |member|
|
|
216
|
-
member.last_state = nil
|
|
217
|
-
@hosts_mutable << member.host_string
|
|
218
|
-
if member.primary?
|
|
219
|
-
assign_primary(member)
|
|
220
|
-
elsif member.secondary?
|
|
221
|
-
# member could be not primary but secondary still is false
|
|
222
|
-
assign_secondary(member)
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
@arbiters_mutable = members.first.arbiters
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
def assign_primary(member)
|
|
230
|
-
member.last_state = :primary
|
|
231
|
-
@primary = member.host_port
|
|
232
|
-
if existing = @pools_mutable.detect {|pool| pool.node == member }
|
|
233
|
-
@primary_pool = existing
|
|
234
|
-
else
|
|
235
|
-
@primary_pool = Pool.new(self.client, member.host, member.port,
|
|
236
|
-
:size => self.client.pool_size,
|
|
237
|
-
:timeout => self.client.pool_timeout,
|
|
238
|
-
:node => member
|
|
239
|
-
)
|
|
240
|
-
@pools_mutable << @primary_pool
|
|
241
|
-
end
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
def assign_secondary(member)
|
|
245
|
-
member.last_state = :secondary
|
|
246
|
-
@secondaries_mutable << member.host_port
|
|
247
|
-
if existing = @pools_mutable.detect {|pool| pool.node == member }
|
|
248
|
-
@secondary_pools_mutable << existing
|
|
249
|
-
else
|
|
250
|
-
pool = Pool.new(self.client, member.host, member.port,
|
|
251
|
-
:size => self.client.pool_size,
|
|
252
|
-
:timeout => self.client.pool_timeout,
|
|
253
|
-
:node => member
|
|
254
|
-
)
|
|
255
|
-
@secondary_pools_mutable << pool
|
|
256
|
-
@pools_mutable << pool
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
# Iterate through the list of provided seed
|
|
261
|
-
# nodes until we've gotten a response from the
|
|
262
|
-
# replica set we're trying to connect to.
|
|
263
|
-
#
|
|
264
|
-
# If we don't get a response, raise an exception.
|
|
265
|
-
def get_valid_seed_node
|
|
266
|
-
@seeds.each do |seed|
|
|
267
|
-
node = Mongo::Node.new(self.client, seed)
|
|
268
|
-
node.connect
|
|
269
|
-
return node if node.healthy?
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
raise ConnectionFailure, "Cannot connect to a replica set using seeds " +
|
|
273
|
-
"#{@seeds.map {|s| "#{s[0]}:#{s[1]}" }.join(', ')}"
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
def discovered_seeds
|
|
277
|
-
@members.map(&:host_port)
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
def copy_members
|
|
281
|
-
members = Set.new
|
|
282
|
-
@connect_mutex.synchronize do
|
|
283
|
-
@members.map do |m|
|
|
284
|
-
members << m.dup
|
|
285
|
-
end
|
|
286
|
-
end
|
|
287
|
-
members
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
def initialize_immutable_state
|
|
291
|
-
@hosts = Set.new.freeze
|
|
292
|
-
@pools = Set.new.freeze
|
|
293
|
-
@secondaries = Set.new.freeze
|
|
294
|
-
@secondary_pools = [].freeze
|
|
295
|
-
@arbiters = [].freeze
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
def initialize_mutable_state
|
|
299
|
-
@hosts_mutable = Set.new
|
|
300
|
-
@pools_mutable = Set.new
|
|
301
|
-
@secondaries_mutable = Set.new
|
|
302
|
-
@secondary_pools_mutable = []
|
|
303
|
-
@arbiters_mutable = []
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
def clone_state
|
|
307
|
-
@hosts = @hosts_mutable.clone
|
|
308
|
-
@pools = @pools_mutable.clone
|
|
309
|
-
@secondaries = @secondaries_mutable.clone
|
|
310
|
-
@secondary_pools = @secondary_pools_mutable.clone
|
|
311
|
-
@arbiters = @arbiters_mutable.clone
|
|
312
|
-
|
|
313
|
-
@hosts.freeze
|
|
314
|
-
@pools.freeze
|
|
315
|
-
@secondaries.freeze
|
|
316
|
-
@secondary_pools.freeze
|
|
317
|
-
@arbiters.freeze
|
|
318
|
-
end
|
|
319
|
-
end
|
|
320
|
-
end
|
|
@@ -1,67 +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
|
-
module Mongo
|
|
16
|
-
class ShardingPoolManager < PoolManager
|
|
17
|
-
def inspect
|
|
18
|
-
"<Mongo::ShardingPoolManager:0x#{self.object_id.to_s(16)} @seeds=#{@seeds}>"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# "Best" should be the member with the fastest ping time
|
|
22
|
-
# but connect/connect_to_members reinitializes @members
|
|
23
|
-
def best(members)
|
|
24
|
-
Array(members.first)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def connect
|
|
28
|
-
@connect_mutex.synchronize do
|
|
29
|
-
begin
|
|
30
|
-
thread_local[:locks][:connecting_manager] = true
|
|
31
|
-
@refresh_required = false
|
|
32
|
-
disconnect_old_members
|
|
33
|
-
connect_to_members
|
|
34
|
-
initialize_pools best(@members)
|
|
35
|
-
update_max_sizes
|
|
36
|
-
@seeds = discovered_seeds
|
|
37
|
-
ensure
|
|
38
|
-
thread_local[:locks][:connecting_manager] = false
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Checks that each node is healthy (via check_is_master) and that each
|
|
44
|
-
# node is in fact a mongos. If either criteria are not true, a refresh is
|
|
45
|
-
# set to be triggered and close() is called on the node.
|
|
46
|
-
#
|
|
47
|
-
# @return [Boolean] indicating if a refresh is required.
|
|
48
|
-
def check_connection_health
|
|
49
|
-
@refresh_required = false
|
|
50
|
-
@members.each do |member|
|
|
51
|
-
begin
|
|
52
|
-
config = @client.check_is_master([member.host, member.port])
|
|
53
|
-
unless config && config.has_key?('msg')
|
|
54
|
-
@refresh_required = true
|
|
55
|
-
member.close
|
|
56
|
-
end
|
|
57
|
-
rescue OperationTimeout
|
|
58
|
-
@refresh_required = true
|
|
59
|
-
member.close
|
|
60
|
-
end
|
|
61
|
-
break if @refresh_required
|
|
62
|
-
end
|
|
63
|
-
@refresh_required
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
end
|
|
67
|
-
end
|
|
@@ -1,95 +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 'openssl'
|
|
16
|
-
|
|
17
|
-
module Mongo
|
|
18
|
-
|
|
19
|
-
# A basic wrapper over Ruby's SSLSocket that initiates
|
|
20
|
-
# a TCP connection over SSL and then provides an basic interface
|
|
21
|
-
# mirroring Ruby's TCPSocket, vis., TCPSocket#send and TCPSocket#read.
|
|
22
|
-
class SSLSocket
|
|
23
|
-
include SocketUtil
|
|
24
|
-
|
|
25
|
-
def initialize(host, port, op_timeout=nil, connect_timeout=nil, opts={})
|
|
26
|
-
@op_timeout = op_timeout
|
|
27
|
-
@connect_timeout = connect_timeout
|
|
28
|
-
@pid = Process.pid
|
|
29
|
-
@auths = Set.new
|
|
30
|
-
|
|
31
|
-
@tcp_socket = ::TCPSocket.new(host, port)
|
|
32
|
-
@tcp_socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
|
33
|
-
|
|
34
|
-
@context = OpenSSL::SSL::SSLContext.new
|
|
35
|
-
|
|
36
|
-
if opts[:cert]
|
|
37
|
-
@context.cert = OpenSSL::X509::Certificate.new(File.open(opts[:cert]))
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
if opts[:key]
|
|
41
|
-
if opts[:key_pass_phrase]
|
|
42
|
-
@context.key = OpenSSL::PKey::RSA.new(File.open(opts[:key]), opts[:key_pass_phrase])
|
|
43
|
-
else
|
|
44
|
-
@context.key = OpenSSL::PKey::RSA.new(File.open(opts[:key]))
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
if opts[:verify]
|
|
49
|
-
@context.ca_file = opts[:ca_cert]
|
|
50
|
-
@context.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
begin
|
|
54
|
-
@socket = OpenSSL::SSL::SSLSocket.new(@tcp_socket, @context)
|
|
55
|
-
@socket.sync_close = true
|
|
56
|
-
connect
|
|
57
|
-
rescue OpenSSL::SSL::SSLError
|
|
58
|
-
raise ConnectionFailure, "SSL handshake failed. MongoDB may " +
|
|
59
|
-
"not be configured with SSL support."
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
if opts[:verify]
|
|
63
|
-
unless OpenSSL::SSL.verify_certificate_identity(@socket.peer_cert, host)
|
|
64
|
-
raise ConnectionFailure, "SSL handshake failed. Hostname mismatch."
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
self
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def connect
|
|
72
|
-
if @connect_timeout
|
|
73
|
-
Timeout::timeout(@connect_timeout, ConnectionTimeoutError) do
|
|
74
|
-
@socket.connect
|
|
75
|
-
end
|
|
76
|
-
else
|
|
77
|
-
@socket.connect
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def send(data)
|
|
82
|
-
@socket.syswrite(data)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def read(length, buffer)
|
|
86
|
-
if @op_timeout
|
|
87
|
-
Timeout::timeout(@op_timeout, OperationTimeout) do
|
|
88
|
-
@socket.sysread(length, buffer)
|
|
89
|
-
end
|
|
90
|
-
else
|
|
91
|
-
@socket.sysread(length, buffer)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
end
|