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.
Files changed (475) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CONTRIBUTING.md +64 -0
  4. data/LICENSE +1 -1
  5. data/README.md +21 -126
  6. data/Rakefile +39 -21
  7. data/bin/mongo_console +6 -38
  8. data/lib/mongo/address/ipv4.rb +85 -0
  9. data/lib/mongo/address/ipv6.rb +85 -0
  10. data/lib/mongo/address/unix.rb +76 -0
  11. data/lib/mongo/address.rb +111 -0
  12. data/lib/mongo/auth/cr/conversation.rb +119 -0
  13. data/lib/mongo/auth/cr.rb +44 -0
  14. data/lib/mongo/auth/executable.rb +52 -0
  15. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  16. data/lib/mongo/auth/ldap.rb +48 -0
  17. data/lib/mongo/auth/roles.rb +104 -0
  18. data/lib/mongo/auth/scram/conversation.rb +450 -0
  19. data/lib/mongo/auth/scram.rb +53 -0
  20. data/lib/mongo/auth/user/view.rb +102 -0
  21. data/lib/mongo/auth/user.rb +159 -0
  22. data/lib/mongo/auth/x509/conversation.rb +92 -0
  23. data/lib/mongo/auth/x509.rb +48 -0
  24. data/lib/mongo/auth.rb +108 -0
  25. data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
  26. data/lib/mongo/bulk_write/deletable.rb +60 -0
  27. data/lib/mongo/bulk_write/insertable.rb +52 -0
  28. data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
  29. data/lib/mongo/bulk_write/replacable.rb +57 -0
  30. data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
  31. data/lib/mongo/bulk_write/updatable.rb +68 -0
  32. data/lib/mongo/bulk_write.rb +52 -0
  33. data/lib/mongo/client.rb +246 -0
  34. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  35. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  36. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  37. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  38. data/lib/mongo/cluster/topology.rb +60 -0
  39. data/lib/mongo/cluster.rb +203 -0
  40. data/lib/mongo/collection/view/aggregation.rb +108 -0
  41. data/lib/mongo/collection/view/explainable.rb +49 -0
  42. data/lib/mongo/collection/view/immutable.rb +43 -0
  43. data/lib/mongo/collection/view/iterable.rb +48 -0
  44. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  45. data/lib/mongo/collection/view/readable.rb +363 -0
  46. data/lib/mongo/collection/view/writable.rb +185 -0
  47. data/lib/mongo/collection/view.rb +169 -0
  48. data/lib/mongo/collection.rb +130 -1101
  49. data/lib/mongo/cursor.rb +78 -681
  50. data/lib/mongo/database/view.rb +101 -0
  51. data/lib/mongo/database.rb +224 -0
  52. data/lib/mongo/error/bulk_write_error.rb +41 -0
  53. data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
  54. data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
  55. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  56. data/lib/mongo/error/invalid_database_name.rb +39 -0
  57. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  58. data/lib/mongo/error/invalid_file.rb +38 -0
  59. data/lib/mongo/error/invalid_nonce.rb +46 -0
  60. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  61. data/lib/mongo/error/invalid_signature.rb +47 -0
  62. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  63. data/lib/mongo/error/max_bson_size.rb +40 -0
  64. data/lib/mongo/error/max_message_size.rb +42 -0
  65. data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
  66. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  67. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  68. data/lib/mongo/error/parser.rb +77 -0
  69. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  70. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  71. data/lib/mongo/error/unsupported_features.rb +43 -0
  72. data/lib/mongo/error.rb +82 -0
  73. data/lib/mongo/event/listeners.rb +63 -0
  74. data/lib/mongo/event/primary_elected.rb +53 -0
  75. data/lib/mongo/event/publisher.rb +42 -0
  76. data/lib/mongo/event/server_added.rb +53 -0
  77. data/lib/mongo/event/server_removed.rb +53 -0
  78. data/lib/mongo/event/subscriber.rb +41 -0
  79. data/lib/mongo/event.rb +40 -0
  80. data/lib/mongo/grid/file/chunk.rb +184 -0
  81. data/lib/mongo/grid/file/metadata.rb +229 -0
  82. data/lib/mongo/grid/file.rb +106 -0
  83. data/lib/mongo/grid/fs.rb +149 -0
  84. data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
  85. data/lib/mongo/index/view.rb +261 -0
  86. data/lib/mongo/index.rb +64 -0
  87. data/lib/mongo/loggable.rb +126 -0
  88. data/lib/mongo/logger.rb +132 -0
  89. data/lib/mongo/operation/aggregate/result.rb +88 -0
  90. data/lib/mongo/operation/aggregate.rb +100 -0
  91. data/lib/mongo/operation/command.rb +62 -0
  92. data/lib/mongo/operation/executable.rb +105 -0
  93. data/lib/mongo/operation/kill_cursors.rb +39 -0
  94. data/lib/mongo/operation/limited.rb +37 -0
  95. data/lib/mongo/operation/list_collections/result.rb +114 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  98. data/lib/mongo/operation/map_reduce.rb +96 -0
  99. data/lib/mongo/operation/read/collections_info.rb +67 -0
  100. data/lib/mongo/operation/read/get_more.rb +71 -0
  101. data/lib/mongo/operation/read/indexes.rb +68 -0
  102. data/lib/mongo/operation/read/list_collections.rb +75 -0
  103. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  104. data/lib/mongo/operation/read/query.rb +71 -0
  105. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  106. data/lib/mongo/operation/read_preferrable.rb +34 -0
  107. data/lib/mongo/operation/result.rb +259 -0
  108. data/lib/mongo/operation/specifiable.rb +397 -0
  109. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
  110. data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
  111. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
  112. data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
  113. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
  114. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
  115. data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
  116. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
  117. data/lib/mongo/operation/write/bulk.rb +17 -0
  118. data/lib/mongo/operation/write/command/create_index.rb +50 -0
  119. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  120. data/lib/mongo/operation/write/command/delete.rb +56 -0
  121. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  122. data/lib/mongo/operation/write/command/insert.rb +55 -0
  123. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  124. data/lib/mongo/operation/write/command/update.rb +60 -0
  125. data/lib/mongo/operation/write/command/writable.rb +61 -0
  126. data/lib/mongo/operation/write/command.rb +22 -0
  127. data/lib/mongo/operation/write/create_index.rb +89 -0
  128. data/lib/mongo/operation/write/create_user.rb +75 -0
  129. data/lib/mongo/operation/write/delete/result.rb +40 -0
  130. data/lib/mongo/operation/write/delete.rb +93 -0
  131. data/lib/mongo/operation/write/drop_index.rb +62 -0
  132. data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
  133. data/lib/mongo/operation/write/insert.rb +90 -0
  134. data/lib/mongo/operation/write/remove_user.rb +70 -0
  135. data/lib/mongo/operation/write/update/result.rb +160 -0
  136. data/lib/mongo/operation/write/update.rb +103 -0
  137. data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
  138. data/lib/mongo/operation.rb +25 -0
  139. data/lib/mongo/options/mapper.rb +78 -0
  140. data/lib/mongo/options.rb +15 -0
  141. data/lib/mongo/protocol/bit_vector.rb +61 -0
  142. data/lib/mongo/protocol/delete.rb +94 -0
  143. data/lib/mongo/protocol/get_more.rb +99 -0
  144. data/lib/mongo/protocol/insert.rb +99 -0
  145. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  146. data/lib/mongo/protocol/message.rb +252 -0
  147. data/lib/mongo/protocol/query.rb +147 -0
  148. data/lib/mongo/protocol/reply.rb +72 -0
  149. data/lib/mongo/protocol/serializers.rb +180 -0
  150. data/lib/mongo/protocol/update.rb +111 -0
  151. data/lib/mongo/protocol.rb +15 -0
  152. data/lib/mongo/server/connectable.rb +110 -0
  153. data/lib/mongo/server/connection.rb +134 -0
  154. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  155. data/lib/mongo/server/connection_pool.rb +141 -0
  156. data/lib/mongo/server/context.rb +66 -0
  157. data/lib/mongo/server/description/features.rb +85 -0
  158. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  159. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  160. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  161. data/lib/mongo/server/description/inspector.rb +79 -0
  162. data/lib/mongo/server/description.rb +450 -0
  163. data/lib/mongo/server/monitor/connection.rb +89 -0
  164. data/lib/mongo/server/monitor.rb +176 -0
  165. data/lib/mongo/server.rb +163 -0
  166. data/lib/mongo/server_selector/nearest.rb +94 -0
  167. data/lib/mongo/server_selector/primary.rb +88 -0
  168. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  169. data/lib/mongo/server_selector/secondary.rb +91 -0
  170. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  171. data/lib/mongo/server_selector/selectable.rb +209 -0
  172. data/lib/mongo/server_selector.rb +81 -0
  173. data/lib/mongo/socket/ssl.rb +130 -0
  174. data/lib/mongo/socket/tcp.rb +69 -0
  175. data/lib/mongo/socket/unix.rb +64 -0
  176. data/lib/mongo/socket.rb +179 -0
  177. data/lib/mongo/uri.rb +504 -0
  178. data/lib/mongo/version.rb +21 -0
  179. data/lib/mongo/write_concern/acknowledged.rb +52 -0
  180. data/lib/mongo/write_concern/normalizable.rb +51 -0
  181. data/lib/mongo/write_concern/unacknowledged.rb +55 -0
  182. data/lib/mongo/write_concern.rb +99 -0
  183. data/lib/mongo.rb +24 -82
  184. data/mongo.gemspec +17 -14
  185. data/spec/certificates/ca.pem +17 -0
  186. data/spec/certificates/client.pem +101 -0
  187. data/spec/certificates/crl.pem +10 -0
  188. data/spec/certificates/crl_client_revoked.pem +12 -0
  189. data/spec/certificates/password_protected.pem +51 -0
  190. data/spec/certificates/server.pem +34 -0
  191. data/spec/mongo/address/ipv4_spec.rb +74 -0
  192. data/spec/mongo/address/ipv6_spec.rb +74 -0
  193. data/spec/mongo/address/unix_spec.rb +30 -0
  194. data/spec/mongo/address_spec.rb +206 -0
  195. data/spec/mongo/auth/cr_spec.rb +59 -0
  196. data/spec/mongo/auth/ldap_spec.rb +40 -0
  197. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  198. data/spec/mongo/auth/scram_spec.rb +55 -0
  199. data/spec/mongo/auth/user/view_spec.rb +76 -0
  200. data/spec/mongo/auth/user_spec.rb +190 -0
  201. data/spec/mongo/auth/x509_spec.rb +40 -0
  202. data/spec/mongo/auth_spec.rb +65 -0
  203. data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
  204. data/spec/mongo/client_spec.rb +564 -0
  205. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  206. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  207. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  208. data/spec/mongo/cluster/topology_spec.rb +65 -0
  209. data/spec/mongo/cluster_spec.rb +129 -0
  210. data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
  211. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  212. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  213. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  214. data/spec/mongo/collection/view/writable_spec.rb +679 -0
  215. data/spec/mongo/collection/view_spec.rb +530 -0
  216. data/spec/mongo/collection_spec.rb +362 -0
  217. data/spec/mongo/crud_spec.rb +42 -0
  218. data/spec/mongo/cursor_spec.rb +295 -0
  219. data/spec/mongo/database_spec.rb +302 -0
  220. data/spec/mongo/error/parser_spec.rb +119 -0
  221. data/spec/mongo/event/publisher_spec.rb +50 -0
  222. data/spec/mongo/event/subscriber_spec.rb +34 -0
  223. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  224. data/spec/mongo/grid/file/metadata_spec.rb +92 -0
  225. data/spec/mongo/grid/file_spec.rb +172 -0
  226. data/spec/mongo/grid/fs_spec.rb +129 -0
  227. data/spec/mongo/index/view_spec.rb +330 -0
  228. data/spec/mongo/loggable_spec.rb +62 -0
  229. data/spec/mongo/logger_spec.rb +97 -0
  230. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  231. data/spec/mongo/operation/aggregate_spec.rb +127 -0
  232. data/spec/mongo/operation/command_spec.rb +98 -0
  233. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  234. data/spec/mongo/operation/limited_spec.rb +50 -0
  235. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  236. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  237. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  238. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  239. data/spec/mongo/operation/read/query_spec.rb +84 -0
  240. data/spec/mongo/operation/result_spec.rb +275 -0
  241. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  242. data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
  243. data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
  244. data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
  245. data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
  246. data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
  247. data/spec/mongo/operation/write/command/update_spec.rb +109 -0
  248. data/spec/mongo/operation/write/create_index_spec.rb +63 -0
  249. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  250. data/spec/mongo/operation/write/delete_spec.rb +186 -0
  251. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  252. data/spec/mongo/operation/write/insert_spec.rb +244 -0
  253. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  254. data/spec/mongo/operation/write/response_spec.rb +85 -0
  255. data/spec/mongo/operation/write/update_spec.rb +228 -0
  256. data/spec/mongo/protocol/delete_spec.rb +167 -0
  257. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  258. data/spec/mongo/protocol/insert_spec.rb +161 -0
  259. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  260. data/spec/mongo/protocol/query_spec.rb +285 -0
  261. data/spec/mongo/protocol/reply_spec.rb +157 -0
  262. data/spec/mongo/protocol/update_spec.rb +186 -0
  263. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  264. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  265. data/spec/mongo/server/connection_spec.rb +312 -0
  266. data/spec/mongo/server/description/features_spec.rb +138 -0
  267. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  268. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  269. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  270. data/spec/mongo/server/description_spec.rb +510 -0
  271. data/spec/mongo/server/monitor_spec.rb +144 -0
  272. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  273. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  274. data/spec/mongo/server_selection_spec.rb +89 -0
  275. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  276. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  277. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  278. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  279. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  280. data/spec/mongo/server_selector_spec.rb +101 -0
  281. data/spec/mongo/server_spec.rb +131 -0
  282. data/spec/mongo/uri_spec.rb +517 -0
  283. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  284. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  285. data/spec/spec_helper.rb +133 -0
  286. data/spec/support/authorization.rb +247 -0
  287. data/spec/support/crud/read.rb +144 -0
  288. data/spec/support/crud/write.rb +214 -0
  289. data/spec/support/crud.rb +203 -0
  290. data/spec/support/crud_tests/read/aggregate.yml +43 -0
  291. data/spec/support/crud_tests/read/count.yml +37 -0
  292. data/spec/support/crud_tests/read/distinct.yml +33 -0
  293. data/spec/support/crud_tests/read/find.yml +50 -0
  294. data/spec/support/crud_tests/write/deleteMany.yml +36 -0
  295. data/spec/support/crud_tests/write/deleteOne.yml +49 -0
  296. data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
  297. data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
  298. data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
  299. data/spec/support/crud_tests/write/insertMany.yml +24 -0
  300. data/spec/support/crud_tests/write/insertOne.yml +19 -0
  301. data/spec/support/crud_tests/write/replaceOne.yml +96 -0
  302. data/spec/support/crud_tests/write/updateMany.yml +83 -0
  303. data/spec/support/crud_tests/write/updateOne.yml +80 -0
  304. data/spec/support/helpers.rb +140 -0
  305. data/spec/support/matchers.rb +37 -0
  306. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  307. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  308. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  309. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  310. data/spec/support/sdam/rs/discovery.yml +195 -0
  311. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  312. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  313. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  314. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  315. data/spec/support/sdam/rs/new_primary.yml +74 -0
  316. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  317. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  318. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  319. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  320. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  321. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  322. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  323. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  324. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  325. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  326. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  327. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  328. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  329. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  330. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  331. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  332. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  333. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  334. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  335. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  336. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  337. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  338. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  339. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  340. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  341. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  342. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  343. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  344. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  345. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  346. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  347. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  348. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  349. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  350. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  351. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
  352. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
  353. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
  354. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
  355. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
  356. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
  357. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
  358. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
  359. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
  360. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
  361. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
  362. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
  363. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
  364. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
  365. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
  366. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
  367. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
  368. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
  369. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
  370. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
  371. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
  372. data/spec/support/server_selection.rb +157 -0
  373. data/spec/support/server_selection_rtt.rb +41 -0
  374. data/spec/support/shared/bulk_write.rb +535 -0
  375. data/spec/support/shared/cursor.rb +38 -0
  376. data/spec/support/shared/operation.rb +77 -0
  377. data/spec/support/shared/protocol.rb +31 -0
  378. data/spec/support/shared/server_selector.rb +111 -0
  379. data/spec/support/shared/socket.rb +82 -0
  380. data/spec/support/travis.rb +14 -0
  381. data.tar.gz.sig +2 -3
  382. metadata +583 -186
  383. metadata.gz.sig +0 -0
  384. data/VERSION +0 -1
  385. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  386. data/lib/mongo/collection_writer.rb +0 -364
  387. data/lib/mongo/connection/node.rb +0 -249
  388. data/lib/mongo/connection/pool.rb +0 -340
  389. data/lib/mongo/connection/pool_manager.rb +0 -320
  390. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  391. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  392. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  393. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  394. data/lib/mongo/db.rb +0 -808
  395. data/lib/mongo/exception.rb +0 -145
  396. data/lib/mongo/functional/authentication.rb +0 -455
  397. data/lib/mongo/functional/logging.rb +0 -85
  398. data/lib/mongo/functional/read_preference.rb +0 -183
  399. data/lib/mongo/functional/scram.rb +0 -556
  400. data/lib/mongo/functional/uri_parser.rb +0 -409
  401. data/lib/mongo/functional/write_concern.rb +0 -66
  402. data/lib/mongo/gridfs/grid.rb +0 -112
  403. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  404. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  405. data/lib/mongo/gridfs/grid_io.rb +0 -484
  406. data/lib/mongo/legacy.rb +0 -140
  407. data/lib/mongo/mongo_client.rb +0 -697
  408. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  409. data/lib/mongo/mongo_sharded_client.rb +0 -159
  410. data/lib/mongo/networking.rb +0 -372
  411. data/lib/mongo/utils/conversions.rb +0 -110
  412. data/lib/mongo/utils/core_ext.rb +0 -70
  413. data/lib/mongo/utils/server_version.rb +0 -69
  414. data/lib/mongo/utils/support.rb +0 -80
  415. data/test/functional/authentication_test.rb +0 -39
  416. data/test/functional/bulk_api_stress_test.rb +0 -133
  417. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  418. data/test/functional/client_test.rb +0 -627
  419. data/test/functional/collection_test.rb +0 -2175
  420. data/test/functional/collection_writer_test.rb +0 -83
  421. data/test/functional/conversions_test.rb +0 -163
  422. data/test/functional/cursor_fail_test.rb +0 -57
  423. data/test/functional/cursor_message_test.rb +0 -56
  424. data/test/functional/cursor_test.rb +0 -683
  425. data/test/functional/db_api_test.rb +0 -835
  426. data/test/functional/db_test.rb +0 -348
  427. data/test/functional/grid_file_system_test.rb +0 -285
  428. data/test/functional/grid_io_test.rb +0 -252
  429. data/test/functional/grid_test.rb +0 -273
  430. data/test/functional/pool_test.rb +0 -136
  431. data/test/functional/safe_test.rb +0 -98
  432. data/test/functional/support_test.rb +0 -62
  433. data/test/functional/timeout_test.rb +0 -60
  434. data/test/functional/uri_test.rb +0 -446
  435. data/test/functional/write_concern_test.rb +0 -118
  436. data/test/helpers/general.rb +0 -50
  437. data/test/helpers/test_unit.rb +0 -476
  438. data/test/replica_set/authentication_test.rb +0 -37
  439. data/test/replica_set/basic_test.rb +0 -189
  440. data/test/replica_set/client_test.rb +0 -393
  441. data/test/replica_set/connection_test.rb +0 -138
  442. data/test/replica_set/count_test.rb +0 -66
  443. data/test/replica_set/cursor_test.rb +0 -220
  444. data/test/replica_set/insert_test.rb +0 -157
  445. data/test/replica_set/max_values_test.rb +0 -151
  446. data/test/replica_set/pinning_test.rb +0 -105
  447. data/test/replica_set/query_test.rb +0 -73
  448. data/test/replica_set/read_preference_test.rb +0 -219
  449. data/test/replica_set/refresh_test.rb +0 -211
  450. data/test/replica_set/replication_ack_test.rb +0 -95
  451. data/test/sharded_cluster/basic_test.rb +0 -203
  452. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  453. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  454. data/test/shared/authentication/gssapi_shared.rb +0 -176
  455. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  456. data/test/shared/authentication/scram_shared.rb +0 -92
  457. data/test/shared/ssl_shared.rb +0 -235
  458. data/test/test_helper.rb +0 -61
  459. data/test/threading/basic_test.rb +0 -120
  460. data/test/tools/mongo_config.rb +0 -708
  461. data/test/tools/mongo_config_test.rb +0 -160
  462. data/test/unit/client_test.rb +0 -381
  463. data/test/unit/collection_test.rb +0 -166
  464. data/test/unit/connection_test.rb +0 -335
  465. data/test/unit/cursor_test.rb +0 -307
  466. data/test/unit/db_test.rb +0 -136
  467. data/test/unit/grid_test.rb +0 -76
  468. data/test/unit/mongo_sharded_client_test.rb +0 -48
  469. data/test/unit/node_test.rb +0 -93
  470. data/test/unit/pool_manager_test.rb +0 -111
  471. data/test/unit/read_pref_test.rb +0 -406
  472. data/test/unit/read_test.rb +0 -159
  473. data/test/unit/safe_test.rb +0 -158
  474. data/test/unit/sharding_pool_manager_test.rb +0 -84
  475. 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