mongo 2.22.0 → 2.24.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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mongo_console +0 -1
  3. data/lib/mongo/active_support.rb +1 -2
  4. data/lib/mongo/address/ipv4.rb +3 -6
  5. data/lib/mongo/address/ipv6.rb +6 -10
  6. data/lib/mongo/address/unix.rb +1 -4
  7. data/lib/mongo/address/validator.rb +16 -28
  8. data/lib/mongo/address.rb +30 -40
  9. data/lib/mongo/auth/aws/conversation.rb +6 -10
  10. data/lib/mongo/auth/aws/credentials.rb +0 -1
  11. data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
  12. data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
  13. data/lib/mongo/auth/aws/request.rb +20 -35
  14. data/lib/mongo/auth/aws.rb +1 -2
  15. data/lib/mongo/auth/base.rb +20 -29
  16. data/lib/mongo/auth/conversation_base.rb +14 -18
  17. data/lib/mongo/auth/cr/conversation.rb +0 -3
  18. data/lib/mongo/auth/cr.rb +1 -4
  19. data/lib/mongo/auth/credential_cache.rb +0 -2
  20. data/lib/mongo/auth/gssapi/conversation.rb +3 -8
  21. data/lib/mongo/auth/gssapi.rb +1 -4
  22. data/lib/mongo/auth/ldap/conversation.rb +0 -3
  23. data/lib/mongo/auth/ldap.rb +1 -4
  24. data/lib/mongo/auth/roles.rb +16 -19
  25. data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
  26. data/lib/mongo/auth/scram/conversation.rb +2 -5
  27. data/lib/mongo/auth/scram.rb +5 -10
  28. data/lib/mongo/auth/scram256/conversation.rb +2 -5
  29. data/lib/mongo/auth/scram256.rb +1 -3
  30. data/lib/mongo/auth/scram_conversation_base.rb +18 -24
  31. data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
  32. data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
  33. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
  34. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
  35. data/lib/mongo/auth/stringprep.rb +9 -12
  36. data/lib/mongo/auth/user/view.rb +3 -5
  37. data/lib/mongo/auth/user.rb +14 -24
  38. data/lib/mongo/auth/x509/conversation.rb +0 -3
  39. data/lib/mongo/auth/x509.rb +7 -9
  40. data/lib/mongo/auth.rb +18 -30
  41. data/lib/mongo/background_thread.rb +9 -17
  42. data/lib/mongo/bson.rb +0 -2
  43. data/lib/mongo/bulk_write/combineable.rb +0 -3
  44. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
  45. data/lib/mongo/bulk_write/result.rb +11 -16
  46. data/lib/mongo/bulk_write/result_combiner.rb +9 -12
  47. data/lib/mongo/bulk_write/transformable.rb +16 -19
  48. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
  49. data/lib/mongo/bulk_write/validatable.rb +11 -18
  50. data/lib/mongo/bulk_write.rb +76 -91
  51. data/lib/mongo/caching_cursor.rb +2 -7
  52. data/lib/mongo/client.rb +267 -276
  53. data/lib/mongo/client_encryption.rb +4 -5
  54. data/lib/mongo/cluster/periodic_executor.rb +2 -5
  55. data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
  56. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
  57. data/lib/mongo/cluster/sdam_flow.rb +136 -159
  58. data/lib/mongo/cluster/topology/base.rb +15 -18
  59. data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
  60. data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
  61. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
  62. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
  63. data/lib/mongo/cluster/topology/sharded.rb +19 -9
  64. data/lib/mongo/cluster/topology/single.rb +24 -14
  65. data/lib/mongo/cluster/topology/unknown.rb +20 -10
  66. data/lib/mongo/cluster/topology.rb +29 -25
  67. data/lib/mongo/cluster.rb +152 -184
  68. data/lib/mongo/cluster_time.rb +14 -31
  69. data/lib/mongo/collection/helpers.rb +5 -8
  70. data/lib/mongo/collection/view/aggregation/behavior.rb +1 -1
  71. data/lib/mongo/collection/view/aggregation.rb +10 -12
  72. data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
  73. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
  74. data/lib/mongo/collection/view/builder.rb +0 -1
  75. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
  76. data/lib/mongo/collection/view/change_stream.rb +59 -58
  77. data/lib/mongo/collection/view/explainable.rb +11 -20
  78. data/lib/mongo/collection/view/immutable.rb +1 -3
  79. data/lib/mongo/collection/view/iterable.rb +44 -35
  80. data/lib/mongo/collection/view/map_reduce.rb +20 -25
  81. data/lib/mongo/collection/view/readable.rb +96 -94
  82. data/lib/mongo/collection/view/writable.rb +104 -114
  83. data/lib/mongo/collection/view.rb +11 -8
  84. data/lib/mongo/collection.rb +103 -106
  85. data/lib/mongo/condition_variable.rb +4 -4
  86. data/lib/mongo/config/options.rb +0 -3
  87. data/lib/mongo/config/validators/option.rb +3 -5
  88. data/lib/mongo/config.rb +6 -4
  89. data/lib/mongo/crypt/auto_decryption_context.rb +9 -3
  90. data/lib/mongo/crypt/auto_encrypter.rb +34 -43
  91. data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
  92. data/lib/mongo/crypt/binary.rb +5 -9
  93. data/lib/mongo/crypt/binding.rb +150 -156
  94. data/lib/mongo/crypt/context.rb +20 -17
  95. data/lib/mongo/crypt/data_key_context.rb +2 -7
  96. data/lib/mongo/crypt/encryption_io.rb +29 -39
  97. data/lib/mongo/crypt/explicit_decryption_context.rb +9 -3
  98. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  99. data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
  100. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
  101. data/lib/mongo/crypt/handle.rb +42 -48
  102. data/lib/mongo/crypt/hooks.rb +12 -15
  103. data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
  104. data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
  105. data/lib/mongo/crypt/kms/aws.rb +0 -2
  106. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
  107. data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
  108. data/lib/mongo/crypt/kms/azure.rb +0 -1
  109. data/lib/mongo/crypt/kms/credentials.rb +13 -27
  110. data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
  111. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
  112. data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
  113. data/lib/mongo/crypt/kms/gcp.rb +0 -2
  114. data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
  115. data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
  116. data/lib/mongo/crypt/kms/kmip.rb +0 -1
  117. data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
  118. data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
  119. data/lib/mongo/crypt/kms/local.rb +0 -1
  120. data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
  121. data/lib/mongo/crypt/kms.rb +14 -16
  122. data/lib/mongo/crypt/kms_context.rb +0 -2
  123. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
  124. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
  125. data/lib/mongo/crypt/status.rb +12 -14
  126. data/lib/mongo/crypt.rb +0 -1
  127. data/lib/mongo/csot_timeout_holder.rb +3 -2
  128. data/lib/mongo/cursor/kill_spec.rb +7 -10
  129. data/lib/mongo/cursor.rb +74 -64
  130. data/lib/mongo/cursor_host.rb +8 -10
  131. data/lib/mongo/database/view.rb +23 -39
  132. data/lib/mongo/database.rb +68 -65
  133. data/lib/mongo/dbref.rb +0 -1
  134. data/lib/mongo/deprecations.rb +98 -0
  135. data/lib/mongo/distinguishing_semaphore.rb +0 -1
  136. data/lib/mongo/error/auth_error.rb +0 -2
  137. data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
  138. data/lib/mongo/error/bulk_write_error.rb +7 -10
  139. data/lib/mongo/error/change_stream_resumable.rb +0 -2
  140. data/lib/mongo/error/client_closed.rb +0 -2
  141. data/lib/mongo/error/closed_stream.rb +1 -4
  142. data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
  143. data/lib/mongo/error/connection_perished.rb +0 -2
  144. data/lib/mongo/error/connection_unavailable.rb +0 -2
  145. data/lib/mongo/error/credential_check_error.rb +0 -2
  146. data/lib/mongo/error/crypt_error.rb +0 -2
  147. data/lib/mongo/error/extra_file_chunk.rb +1 -4
  148. data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
  149. data/lib/mongo/error/file_not_found.rb +0 -3
  150. data/lib/mongo/error/handshake_error.rb +0 -2
  151. data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
  152. data/lib/mongo/error/internal_driver_error.rb +0 -2
  153. data/lib/mongo/error/invalid_address.rb +0 -2
  154. data/lib/mongo/error/invalid_application_name.rb +0 -3
  155. data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
  156. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
  157. data/lib/mongo/error/invalid_collection_name.rb +1 -4
  158. data/lib/mongo/error/invalid_config_option.rb +0 -3
  159. data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
  160. data/lib/mongo/error/invalid_database_name.rb +1 -4
  161. data/lib/mongo/error/invalid_document.rb +1 -4
  162. data/lib/mongo/error/invalid_file.rb +0 -3
  163. data/lib/mongo/error/invalid_file_revision.rb +0 -3
  164. data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
  165. data/lib/mongo/error/invalid_nonce.rb +0 -3
  166. data/lib/mongo/error/invalid_read_concern.rb +2 -4
  167. data/lib/mongo/error/invalid_read_option.rb +0 -3
  168. data/lib/mongo/error/invalid_replacement_document.rb +2 -5
  169. data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
  170. data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
  171. data/lib/mongo/error/invalid_server_preference.rb +7 -16
  172. data/lib/mongo/error/invalid_session.rb +1 -4
  173. data/lib/mongo/error/invalid_signature.rb +0 -3
  174. data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
  175. data/lib/mongo/error/invalid_txt_record.rb +0 -2
  176. data/lib/mongo/error/invalid_update_document.rb +2 -5
  177. data/lib/mongo/error/invalid_uri.rb +1 -4
  178. data/lib/mongo/error/invalid_write_concern.rb +2 -5
  179. data/lib/mongo/error/kms_error.rb +0 -2
  180. data/lib/mongo/error/labelable.rb +0 -3
  181. data/lib/mongo/error/lint_error.rb +0 -2
  182. data/lib/mongo/error/max_bson_size.rb +8 -11
  183. data/lib/mongo/error/max_message_size.rb +2 -5
  184. data/lib/mongo/error/mismatched_domain.rb +0 -2
  185. data/lib/mongo/error/missing_connection.rb +0 -2
  186. data/lib/mongo/error/missing_file_chunk.rb +0 -3
  187. data/lib/mongo/error/missing_password.rb +0 -2
  188. data/lib/mongo/error/missing_resume_token.rb +1 -4
  189. data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
  190. data/lib/mongo/error/missing_service_id.rb +0 -2
  191. data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
  192. data/lib/mongo/error/multi_index_drop.rb +0 -3
  193. data/lib/mongo/error/need_primary_server.rb +0 -2
  194. data/lib/mongo/error/no_server_available.rb +3 -8
  195. data/lib/mongo/error/no_service_connection_available.rb +1 -3
  196. data/lib/mongo/error/no_srv_records.rb +0 -2
  197. data/lib/mongo/error/notable.rb +8 -16
  198. data/lib/mongo/error/operation_failure.rb +22 -35
  199. data/lib/mongo/error/parser.rb +33 -75
  200. data/lib/mongo/error/pool_cleared_error.rb +1 -3
  201. data/lib/mongo/error/pool_closed_error.rb +0 -3
  202. data/lib/mongo/error/pool_error.rb +0 -3
  203. data/lib/mongo/error/pool_paused_error.rb +0 -2
  204. data/lib/mongo/error/raise_original_error.rb +1 -3
  205. data/lib/mongo/error/read_write_retryable.rb +14 -17
  206. data/lib/mongo/error/sdam_error_detection.rb +3 -5
  207. data/lib/mongo/error/server_api_conflict.rb +0 -2
  208. data/lib/mongo/error/server_certificate_revoked.rb +0 -2
  209. data/lib/mongo/error/server_not_usable.rb +0 -2
  210. data/lib/mongo/error/session_ended.rb +1 -3
  211. data/lib/mongo/error/session_not_materialized.rb +1 -3
  212. data/lib/mongo/error/sessions_not_supported.rb +1 -4
  213. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
  214. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
  215. data/lib/mongo/error/socket_error.rb +0 -2
  216. data/lib/mongo/error/socket_timeout_error.rb +0 -2
  217. data/lib/mongo/error/transactions_not_supported.rb +3 -6
  218. data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
  219. data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
  220. data/lib/mongo/error/unexpected_response.rb +1 -4
  221. data/lib/mongo/error/unknown_payload_type.rb +0 -3
  222. data/lib/mongo/error/unmet_dependency.rb +0 -2
  223. data/lib/mongo/error/unsupported_array_filters.rb +3 -24
  224. data/lib/mongo/error/unsupported_collation.rb +3 -24
  225. data/lib/mongo/error/unsupported_features.rb +0 -2
  226. data/lib/mongo/error/unsupported_message_type.rb +0 -2
  227. data/lib/mongo/error/unsupported_option.rb +19 -21
  228. data/lib/mongo/error/write_retryable.rb +0 -2
  229. data/lib/mongo/error.rb +10 -24
  230. data/lib/mongo/event/base.rb +0 -2
  231. data/lib/mongo/event/listeners.rb +0 -3
  232. data/lib/mongo/event/publisher.rb +0 -3
  233. data/lib/mongo/event/subscriber.rb +0 -4
  234. data/lib/mongo/event.rb +4 -6
  235. data/lib/mongo/grid/file/chunk.rb +7 -10
  236. data/lib/mongo/grid/file/info.rb +20 -24
  237. data/lib/mongo/grid/file.rb +7 -8
  238. data/lib/mongo/grid/fs_bucket.rb +40 -48
  239. data/lib/mongo/grid/stream/read.rb +25 -35
  240. data/lib/mongo/grid/stream/write.rb +17 -22
  241. data/lib/mongo/grid/stream.rb +2 -4
  242. data/lib/mongo/grid.rb +0 -1
  243. data/lib/mongo/id.rb +0 -1
  244. data/lib/mongo/index/view.rb +68 -58
  245. data/lib/mongo/index.rb +7 -10
  246. data/lib/mongo/lint.rb +31 -37
  247. data/lib/mongo/loggable.rb +5 -8
  248. data/lib/mongo/logger.rb +1 -7
  249. data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
  250. data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
  251. data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
  252. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
  253. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
  254. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
  255. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
  256. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
  257. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
  258. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
  259. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
  260. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
  261. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
  262. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
  263. data/lib/mongo/monitoring/event/cmap.rb +0 -1
  264. data/lib/mongo/monitoring/event/command_failed.rb +5 -9
  265. data/lib/mongo/monitoring/event/command_started.rb +8 -12
  266. data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
  267. data/lib/mongo/monitoring/event/secure.rb +15 -20
  268. data/lib/mongo/monitoring/event/server_closed.rb +1 -4
  269. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
  270. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
  271. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
  272. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
  273. data/lib/mongo/monitoring/event/server_opening.rb +1 -4
  274. data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
  275. data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
  276. data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
  277. data/lib/mongo/monitoring/event.rb +0 -1
  278. data/lib/mongo/monitoring/publishable.rb +20 -30
  279. data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
  280. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
  281. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
  282. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
  283. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
  284. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
  285. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
  286. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
  287. data/lib/mongo/monitoring.rb +38 -39
  288. data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
  289. data/lib/mongo/operation/aggregate/result.rb +3 -6
  290. data/lib/mongo/operation/aggregate.rb +0 -2
  291. data/lib/mongo/operation/collections_info/result.rb +0 -3
  292. data/lib/mongo/operation/collections_info.rb +0 -2
  293. data/lib/mongo/operation/command/op_msg.rb +1 -4
  294. data/lib/mongo/operation/command.rb +0 -2
  295. data/lib/mongo/operation/context.rb +13 -16
  296. data/lib/mongo/operation/count/op_msg.rb +2 -4
  297. data/lib/mongo/operation/count.rb +0 -2
  298. data/lib/mongo/operation/create/op_msg.rb +2 -5
  299. data/lib/mongo/operation/create.rb +4 -2
  300. data/lib/mongo/operation/create_index/op_msg.rb +3 -7
  301. data/lib/mongo/operation/create_index.rb +0 -2
  302. data/lib/mongo/operation/create_user/op_msg.rb +2 -4
  303. data/lib/mongo/operation/create_user.rb +0 -2
  304. data/lib/mongo/operation/delete/bulk_result.rb +2 -3
  305. data/lib/mongo/operation/delete/op_msg.rb +3 -10
  306. data/lib/mongo/operation/delete/result.rb +0 -3
  307. data/lib/mongo/operation/delete.rb +1 -5
  308. data/lib/mongo/operation/distinct/op_msg.rb +2 -5
  309. data/lib/mongo/operation/distinct.rb +0 -2
  310. data/lib/mongo/operation/drop/op_msg.rb +0 -2
  311. data/lib/mongo/operation/drop.rb +0 -2
  312. data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
  313. data/lib/mongo/operation/drop_database.rb +0 -2
  314. data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
  315. data/lib/mongo/operation/drop_index.rb +0 -2
  316. data/lib/mongo/operation/explain/op_msg.rb +0 -2
  317. data/lib/mongo/operation/explain/result.rb +0 -3
  318. data/lib/mongo/operation/explain.rb +0 -2
  319. data/lib/mongo/operation/find/builder/command.rb +4 -12
  320. data/lib/mongo/operation/find/builder/flags.rb +9 -15
  321. data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
  322. data/lib/mongo/operation/find/builder.rb +0 -1
  323. data/lib/mongo/operation/find/op_msg.rb +4 -12
  324. data/lib/mongo/operation/find/result.rb +0 -3
  325. data/lib/mongo/operation/find.rb +0 -2
  326. data/lib/mongo/operation/get_more/command_builder.rb +1 -6
  327. data/lib/mongo/operation/get_more/op_msg.rb +10 -4
  328. data/lib/mongo/operation/get_more/result.rb +0 -3
  329. data/lib/mongo/operation/get_more.rb +0 -2
  330. data/lib/mongo/operation/indexes/op_msg.rb +0 -2
  331. data/lib/mongo/operation/indexes/result.rb +1 -5
  332. data/lib/mongo/operation/indexes.rb +0 -2
  333. data/lib/mongo/operation/insert/bulk_result.rb +2 -6
  334. data/lib/mongo/operation/insert/op_msg.rb +7 -6
  335. data/lib/mongo/operation/insert/result.rb +0 -3
  336. data/lib/mongo/operation/insert.rb +2 -5
  337. data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
  338. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
  339. data/lib/mongo/operation/kill_cursors.rb +0 -2
  340. data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
  341. data/lib/mongo/operation/list_collections/result.rb +1 -4
  342. data/lib/mongo/operation/list_collections.rb +0 -2
  343. data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
  344. data/lib/mongo/operation/map_reduce/result.rb +3 -6
  345. data/lib/mongo/operation/map_reduce.rb +0 -2
  346. data/lib/mongo/operation/op_msg_base.rb +0 -1
  347. data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
  348. data/lib/mongo/operation/parallel_scan/result.rb +2 -5
  349. data/lib/mongo/operation/parallel_scan.rb +0 -2
  350. data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
  351. data/lib/mongo/operation/remove_user.rb +0 -2
  352. data/lib/mongo/operation/result.rb +38 -48
  353. data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
  354. data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
  355. data/lib/mongo/operation/shared/executable.rb +29 -31
  356. data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
  357. data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
  358. data/lib/mongo/operation/shared/idable.rb +3 -6
  359. data/lib/mongo/operation/shared/limited.rb +0 -3
  360. data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
  361. data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
  362. data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
  363. data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
  364. data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
  365. data/lib/mongo/operation/shared/response_handling.rb +13 -26
  366. data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
  367. data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
  368. data/lib/mongo/operation/shared/specifiable.rb +37 -59
  369. data/lib/mongo/operation/shared/write.rb +12 -17
  370. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
  371. data/lib/mongo/operation/update/bulk_result.rb +13 -17
  372. data/lib/mongo/operation/update/op_msg.rb +2 -5
  373. data/lib/mongo/operation/update/result.rb +5 -5
  374. data/lib/mongo/operation/update.rb +1 -5
  375. data/lib/mongo/operation/update_user/op_msg.rb +2 -4
  376. data/lib/mongo/operation/update_user.rb +0 -2
  377. data/lib/mongo/operation/users_info/op_msg.rb +2 -4
  378. data/lib/mongo/operation/users_info/result.rb +1 -4
  379. data/lib/mongo/operation/users_info.rb +0 -2
  380. data/lib/mongo/operation/write_command/op_msg.rb +2 -10
  381. data/lib/mongo/operation/write_command.rb +0 -2
  382. data/lib/mongo/operation.rb +9 -14
  383. data/lib/mongo/options/mapper.rb +8 -15
  384. data/lib/mongo/options/redacted.rb +7 -9
  385. data/lib/mongo/options.rb +0 -1
  386. data/lib/mongo/protocol/bit_vector.rb +3 -5
  387. data/lib/mongo/protocol/caching_hash.rb +2 -7
  388. data/lib/mongo/protocol/compressed.rb +5 -10
  389. data/lib/mongo/protocol/get_more.rb +2 -8
  390. data/lib/mongo/protocol/kill_cursors.rb +2 -8
  391. data/lib/mongo/protocol/message.rb +103 -105
  392. data/lib/mongo/protocol/msg.rb +48 -63
  393. data/lib/mongo/protocol/query.rb +32 -41
  394. data/lib/mongo/protocol/registry.rb +2 -5
  395. data/lib/mongo/protocol/reply.rb +10 -16
  396. data/lib/mongo/protocol/serializers.rb +41 -59
  397. data/lib/mongo/protocol.rb +0 -1
  398. data/lib/mongo/query_cache.rb +7 -15
  399. data/lib/mongo/retryable/backpressure.rb +31 -0
  400. data/lib/mongo/retryable/base_worker.rb +39 -13
  401. data/lib/mongo/retryable/read_worker.rb +77 -21
  402. data/lib/mongo/retryable/retry_policy.rb +59 -0
  403. data/lib/mongo/retryable/write_worker.rb +155 -56
  404. data/lib/mongo/retryable.rb +70 -9
  405. data/lib/mongo/search_index/view.rb +30 -10
  406. data/lib/mongo/semaphore.rb +0 -1
  407. data/lib/mongo/server/app_metadata/environment.rb +3 -3
  408. data/lib/mongo/server/app_metadata/platform.rb +17 -4
  409. data/lib/mongo/server/app_metadata.rb +4 -5
  410. data/lib/mongo/server/connection.rb +79 -61
  411. data/lib/mongo/server/connection_base.rb +43 -53
  412. data/lib/mongo/server/connection_common.rb +41 -64
  413. data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
  414. data/lib/mongo/server/connection_pool/populator.rb +1 -4
  415. data/lib/mongo/server/connection_pool.rb +195 -167
  416. data/lib/mongo/server/description/features.rb +51 -59
  417. data/lib/mongo/server/description/load_balancer.rb +0 -2
  418. data/lib/mongo/server/description.rb +117 -138
  419. data/lib/mongo/server/monitor/app_metadata.rb +3 -4
  420. data/lib/mongo/server/monitor/connection.rb +28 -35
  421. data/lib/mongo/server/monitor.rb +65 -60
  422. data/lib/mongo/server/pending_connection.rb +70 -71
  423. data/lib/mongo/server/push_monitor/connection.rb +0 -3
  424. data/lib/mongo/server/push_monitor.rb +21 -29
  425. data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
  426. data/lib/mongo/server.rb +62 -94
  427. data/lib/mongo/server_selector/base.rb +133 -157
  428. data/lib/mongo/server_selector/nearest.rb +2 -5
  429. data/lib/mongo/server_selector/primary.rb +1 -5
  430. data/lib/mongo/server_selector/primary_preferred.rb +2 -6
  431. data/lib/mongo/server_selector/secondary.rb +2 -6
  432. data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
  433. data/lib/mongo/server_selector.rb +3 -4
  434. data/lib/mongo/session/server_session.rb +6 -7
  435. data/lib/mongo/session/session_pool.rb +20 -34
  436. data/lib/mongo/session.rb +334 -199
  437. data/lib/mongo/socket/ocsp_cache.rb +8 -13
  438. data/lib/mongo/socket/ocsp_verifier.rb +69 -70
  439. data/lib/mongo/socket/ssl.rb +44 -43
  440. data/lib/mongo/socket/tcp.rb +5 -8
  441. data/lib/mongo/socket/unix.rb +0 -4
  442. data/lib/mongo/socket.rb +80 -102
  443. data/lib/mongo/srv/monitor.rb +10 -11
  444. data/lib/mongo/srv/resolver.rb +15 -24
  445. data/lib/mongo/srv/result.rb +25 -21
  446. data/lib/mongo/srv.rb +0 -1
  447. data/lib/mongo/timeout.rb +4 -11
  448. data/lib/mongo/topology_version.rb +8 -13
  449. data/lib/mongo/tracing/open_telemetry/command_tracer.rb +320 -0
  450. data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +227 -0
  451. data/lib/mongo/tracing/open_telemetry/tracer.rb +236 -0
  452. data/lib/mongo/{error/server_api_not_supported.rb → tracing/open_telemetry.rb} +10 -10
  453. data/lib/mongo/tracing.rb +42 -0
  454. data/lib/mongo/uri/options_mapper.rb +135 -126
  455. data/lib/mongo/uri/srv_protocol.rb +34 -42
  456. data/lib/mongo/uri.rb +95 -139
  457. data/lib/mongo/utils.rb +5 -12
  458. data/lib/mongo/version.rb +1 -1
  459. data/lib/mongo/write_concern/acknowledged.rb +0 -2
  460. data/lib/mongo/write_concern/base.rb +6 -6
  461. data/lib/mongo/write_concern/unacknowledged.rb +0 -2
  462. data/lib/mongo/write_concern.rb +14 -15
  463. data/lib/mongo.rb +4 -3
  464. data/mongo.gemspec +17 -17
  465. metadata +11 -5
  466. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
  467. data/lib/mongo/operation/shared/validatable.rb +0 -87
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2021 MongoDB Inc.
5
4
  #
@@ -18,12 +17,10 @@
18
17
  module Mongo
19
18
  class Cluster
20
19
  module Topology
21
-
22
20
  # Defines behavior for when a cluster is in load-balanced topology.
23
21
  class LoadBalanced < Base
24
-
25
22
  # The display name for the topology.
26
- NAME = 'LoadBalanced'.freeze
23
+ NAME = 'LoadBalanced'
27
24
 
28
25
  # Get the display name.
29
26
  #
@@ -48,7 +45,9 @@ module Mongo
48
45
  # selector.
49
46
  #
50
47
  # @return [ true ] A standalone always has a readable server.
51
- def has_readable_server?(cluster, server_selector = nil); true; end
48
+ def has_readable_server?(_cluster, _server_selector = nil)
49
+ true
50
+ end
52
51
 
53
52
  # Determine if the topology would select a writable server for the
54
53
  # provided candidates.
@@ -56,45 +55,56 @@ module Mongo
56
55
  # @param [ Cluster ] cluster The cluster.
57
56
  #
58
57
  # @return [ true ] A standalone always has a writable server.
59
- def has_writable_server?(cluster); true; end
58
+ def has_writable_server?(_cluster)
59
+ true
60
+ end
60
61
 
61
62
  # Returns whether this topology is one of the replica set ones.
62
63
  #
63
64
  # @return [ false ] Always false.
64
- def replica_set?; false; end
65
+ def replica_set?
66
+ false
67
+ end
65
68
 
66
69
  # Select appropriate servers for this topology.
67
70
  #
68
71
  # @param [ Array<Server> ] servers The known servers.
69
72
  #
70
73
  # @return [ Array<Server> ] All of the known servers.
71
- def servers(servers, name = nil)
74
+ def servers(servers, _name = nil)
72
75
  servers
73
76
  end
74
77
 
75
78
  # Returns whether this topology is sharded.
76
79
  #
77
80
  # @return [ false ] Always false.
78
- def sharded?; false; end
81
+ def sharded?
82
+ false
83
+ end
79
84
 
80
85
  # Returns whether this topology is Single.
81
86
  #
82
- # @return [ true ] Always false.
83
- def single?; false; end
87
+ # @return [ false ] Always false.
88
+ def single?
89
+ false
90
+ end
84
91
 
85
92
  # Returns whether this topology is Unknown.
86
93
  #
87
94
  # @return [ false ] Always false.
88
- def unknown?; false; end
95
+ def unknown?
96
+ false
97
+ end
89
98
 
90
99
  private
91
100
 
92
101
  def validate_options(options, cluster)
93
102
  if cluster.servers_list.length > 1
94
- raise ArgumentError, "Cannot instantiate a load-balanced topology with more than one server in the cluster: #{cluster.servers_list.map(&:address).map(&:seed).join(', ')}"
103
+ raise ArgumentError,
104
+ "Cannot instantiate a load-balanced topology with more than one server in the cluster: #{cluster.servers_list.map(&:address).map(&:seed).join(', ')}"
95
105
  end
96
106
 
97
- super(options, cluster)
107
+ super
98
108
  end
99
109
  end
100
110
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2018-2020 MongoDB Inc.
5
4
  #
@@ -24,12 +23,10 @@ module Mongo
24
23
  def validate_options(options, cluster)
25
24
  # These options can be set to nil for convenience, but not to
26
25
  # any value including an empty string.
27
- [:replica_set_name, :max_election_id, :max_set_version].each do |option|
28
- if options[option]
29
- raise ArgumentError, "Topology #{self.class.name} cannot have the :#{option} option set"
30
- end
26
+ %i[replica_set_name max_election_id max_set_version].each do |option|
27
+ raise ArgumentError, "Topology #{self.class.name} cannot have the :#{option} option set" if options[option]
31
28
  end
32
- super(options, cluster)
29
+ super
33
30
  end
34
31
  end
35
32
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -18,19 +17,17 @@
18
17
  module Mongo
19
18
  class Cluster
20
19
  module Topology
21
-
22
20
  # Defines behavior when a cluster is in replica set topology,
23
21
  # and there is no primary or the primary has not yet been discovered
24
22
  # by the driver.
25
23
  #
26
24
  # @since 2.0.0
27
25
  class ReplicaSetNoPrimary < Base
28
-
29
26
  # The display name for the topology.
30
27
  #
31
28
  # @since 2.0.0
32
29
  # @deprecated
33
- NAME = 'Replica Set'.freeze
30
+ NAME = 'Replica Set'
34
31
 
35
32
  # Get the display name.
36
33
  #
@@ -50,16 +47,10 @@ module Mongo
50
47
  # @since 2.7.0
51
48
  def summary
52
49
  details = server_descriptions.keys.join(',')
53
- if details != ''
54
- details << ','
55
- end
50
+ details << ',' if details != ''
56
51
  details << "name=#{replica_set_name}"
57
- if max_set_version
58
- details << ",v=#{max_set_version}"
59
- end
60
- if max_election_id
61
- details << ",e=#{max_election_id && max_election_id.to_s.sub(/^0+/, '')}"
62
- end
52
+ details << ",v=#{max_set_version}" if max_set_version
53
+ details << ",e=#{max_election_id && max_election_id.to_s.sub(/^0+/, '')}" if max_election_id
63
54
  "#{display_name}[#{details}]"
64
55
  end
65
56
 
@@ -104,7 +95,9 @@ module Mongo
104
95
  # @return [ true ] Always true.
105
96
  #
106
97
  # @since 2.0.0
107
- def replica_set?; true; end
98
+ def replica_set?
99
+ true
100
+ end
108
101
 
109
102
  # Select appropriate servers for this topology.
110
103
  #
@@ -118,8 +111,8 @@ module Mongo
118
111
  # @since 2.0.0
119
112
  def servers(servers)
120
113
  servers.select do |server|
121
- (replica_set_name.nil? || server.replica_set_name == replica_set_name) &&
122
- server.primary? || server.secondary?
114
+ ((replica_set_name.nil? || server.replica_set_name == replica_set_name) &&
115
+ server.primary?) || server.secondary?
123
116
  end
124
117
  end
125
118
 
@@ -131,7 +124,9 @@ module Mongo
131
124
  # @return [ false ] Always false.
132
125
  #
133
126
  # @since 2.0.0
134
- def sharded?; false; end
127
+ def sharded?
128
+ false
129
+ end
135
130
 
136
131
  # A replica set topology is not single.
137
132
  #
@@ -141,7 +136,9 @@ module Mongo
141
136
  # @return [ false ] Always false.
142
137
  #
143
138
  # @since 2.0.0
144
- def single?; false; end
139
+ def single?
140
+ false
141
+ end
145
142
 
146
143
  # A replica set topology is not unknown.
147
144
  #
@@ -151,20 +148,20 @@ module Mongo
151
148
  # @return [ false ] Always false.
152
149
  #
153
150
  # @since 2.0.0
154
- def unknown?; false; end
151
+ def unknown?
152
+ false
153
+ end
155
154
 
156
155
  private
157
156
 
158
157
  def validate_options(options, cluster)
159
- if options[:replica_set_name] == ''
160
- options = options.merge(replica_set_name: nil)
161
- end
158
+ options = options.merge(replica_set_name: nil) if options[:replica_set_name] == ''
162
159
 
163
160
  unless options[:replica_set_name]
164
161
  raise ArgumentError, 'Cannot instantiate a replica set topology without a replica set name'
165
162
  end
166
163
 
167
- super(options, cluster)
164
+ super
168
165
  end
169
166
  end
170
167
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2018-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  class Cluster
20
19
  module Topology
21
-
22
20
  # Defines behavior when a cluster is in replica set topology,
23
21
  # and is a no primary which has been discovered by the driver.
24
22
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  class Cluster
20
19
  module Topology
21
-
22
20
  # Defines behavior for when a cluster is in sharded topology.
23
21
  #
24
22
  # @since 2.0.0
@@ -28,7 +26,7 @@ module Mongo
28
26
  # The display name for the topology.
29
27
  #
30
28
  # @since 2.0.0
31
- NAME = 'Sharded'.freeze
29
+ NAME = 'Sharded'
32
30
 
33
31
  # Get the display name.
34
32
  #
@@ -64,7 +62,9 @@ module Mongo
64
62
  # @return [ true ] A Sharded cluster always has a readable server.
65
63
  #
66
64
  # @since 2.4.0
67
- def has_readable_server?(cluster, server_selector = nil); true; end
65
+ def has_readable_server?(_cluster, _server_selector = nil)
66
+ true
67
+ end
68
68
 
69
69
  # Determine if the topology would select a writable server for the
70
70
  # provided candidates.
@@ -77,7 +77,9 @@ module Mongo
77
77
  # @return [ true ] A Sharded cluster always has a writable server.
78
78
  #
79
79
  # @since 2.4.0
80
- def has_writable_server?(cluster); true; end
80
+ def has_writable_server?(_cluster)
81
+ true
82
+ end
81
83
 
82
84
  # A sharded topology is not a replica set.
83
85
  #
@@ -87,7 +89,9 @@ module Mongo
87
89
  # @return [ false ] Always false.
88
90
  #
89
91
  # @since 2.0.0
90
- def replica_set?; false; end
92
+ def replica_set?
93
+ false
94
+ end
91
95
 
92
96
  # Select appropriate servers for this topology.
93
97
  #
@@ -111,7 +115,9 @@ module Mongo
111
115
  # @return [ true ] Always true.
112
116
  #
113
117
  # @since 2.0.0
114
- def sharded?; true; end
118
+ def sharded?
119
+ true
120
+ end
115
121
 
116
122
  # A sharded topology is not single.
117
123
  #
@@ -121,7 +127,9 @@ module Mongo
121
127
  # @return [ false ] Always false.
122
128
  #
123
129
  # @since 2.0.0
124
- def single?; false; end
130
+ def single?
131
+ false
132
+ end
125
133
 
126
134
  # A sharded topology is not unknown.
127
135
  #
@@ -131,7 +139,9 @@ module Mongo
131
139
  # @return [ false ] Always false.
132
140
  #
133
141
  # @since 2.0.0
134
- def unknown?; false; end
142
+ def unknown?
143
+ false
144
+ end
135
145
  end
136
146
  end
137
147
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -18,16 +17,14 @@
18
17
  module Mongo
19
18
  class Cluster
20
19
  module Topology
21
-
22
20
  # Defines behavior for when a cluster is in single topology.
23
21
  #
24
22
  # @since 2.0.0
25
23
  class Single < Base
26
-
27
24
  # The display name for the topology.
28
25
  #
29
26
  # @since 2.0.0
30
- NAME = 'Single'.freeze
27
+ NAME = 'Single'
31
28
 
32
29
  # Get the display name.
33
30
  #
@@ -63,7 +60,9 @@ module Mongo
63
60
  # @return [ true ] A standalone always has a readable server.
64
61
  #
65
62
  # @since 2.4.0
66
- def has_readable_server?(cluster, server_selector = nil); true; end
63
+ def has_readable_server?(_cluster, _server_selector = nil)
64
+ true
65
+ end
67
66
 
68
67
  # Determine if the topology would select a writable server for the
69
68
  # provided candidates.
@@ -76,7 +75,9 @@ module Mongo
76
75
  # @return [ true ] A standalone always has a writable server.
77
76
  #
78
77
  # @since 2.4.0
79
- def has_writable_server?(cluster); true; end
78
+ def has_writable_server?(_cluster)
79
+ true
80
+ end
80
81
 
81
82
  # A single topology is not a replica set.
82
83
  #
@@ -86,7 +87,9 @@ module Mongo
86
87
  # @return [ false ] Always false.
87
88
  #
88
89
  # @since 2.0.0
89
- def replica_set?; false; end
90
+ def replica_set?
91
+ false
92
+ end
90
93
 
91
94
  # Select appropriate servers for this topology.
92
95
  #
@@ -98,7 +101,7 @@ module Mongo
98
101
  # @return [ Array<Server> ] The single servers.
99
102
  #
100
103
  # @since 2.0.0
101
- def servers(servers, name = nil)
104
+ def servers(servers, _name = nil)
102
105
  servers.reject { |server| server.unknown? }
103
106
  end
104
107
 
@@ -110,7 +113,9 @@ module Mongo
110
113
  # @return [ false ] Always false.
111
114
  #
112
115
  # @since 2.0.0
113
- def sharded?; false; end
116
+ def sharded?
117
+ false
118
+ end
114
119
 
115
120
  # A single topology is single.
116
121
  #
@@ -120,9 +125,11 @@ module Mongo
120
125
  # @return [ true ] Always true.
121
126
  #
122
127
  # @since 2.0.0
123
- def single?; true; end
128
+ def single?
129
+ true
130
+ end
124
131
 
125
- # An single topology is not unknown.
132
+ # A single topology is not unknown.
126
133
  #
127
134
  # @example Is the topology unknown?
128
135
  # Single.unknown?
@@ -130,16 +137,19 @@ module Mongo
130
137
  # @return [ false ] Always false.
131
138
  #
132
139
  # @since 2.0.0
133
- def unknown?; false; end
140
+ def unknown?
141
+ false
142
+ end
134
143
 
135
144
  private
136
145
 
137
146
  def validate_options(options, cluster)
138
147
  if cluster.servers_list.length > 1
139
- raise ArgumentError, "Cannot instantiate a single topology with more than one server in the cluster: #{cluster.servers_list.map(&:address).map(&:seed).join(', ')}"
148
+ raise ArgumentError,
149
+ "Cannot instantiate a single topology with more than one server in the cluster: #{cluster.servers_list.map(&:address).map(&:seed).join(', ')}"
140
150
  end
141
151
 
142
- super(options, cluster)
152
+ super
143
153
  end
144
154
  end
145
155
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2015-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  class Cluster
20
19
  module Topology
21
-
22
20
  # Defines behavior for when a cluster is in an unknown state.
23
21
  #
24
22
  # @since 2.0.0
@@ -28,7 +26,7 @@ module Mongo
28
26
  # The display name for the topology.
29
27
  #
30
28
  # @since 2.0.0
31
- NAME = 'Unknown'.freeze
29
+ NAME = 'Unknown'
32
30
 
33
31
  # Get the display name.
34
32
  #
@@ -64,7 +62,9 @@ module Mongo
64
62
  # @return [ false ] An Unknown topology will never have a readable server.
65
63
  #
66
64
  # @since 2.4.0
67
- def has_readable_server?(cluster, server_selector = nil); false; end
65
+ def has_readable_server?(_cluster, _server_selector = nil)
66
+ false
67
+ end
68
68
 
69
69
  # Determine if the topology would select a writable server for the
70
70
  # provided candidates.
@@ -77,7 +77,9 @@ module Mongo
77
77
  # @return [ false ] An Unknown topology will never have a writable server.
78
78
  #
79
79
  # @since 2.4.0
80
- def has_writable_server?(cluster); false; end
80
+ def has_writable_server?(_cluster)
81
+ false
82
+ end
81
83
 
82
84
  # An unknown topology is not a replica set.
83
85
  #
@@ -87,7 +89,9 @@ module Mongo
87
89
  # @return [ false ] Always false.
88
90
  #
89
91
  # @since 2.0.0
90
- def replica_set?; false; end
92
+ def replica_set?
93
+ false
94
+ end
91
95
 
92
96
  # Select appropriate servers for this topology.
93
97
  #
@@ -100,7 +104,7 @@ module Mongo
100
104
  # unknown.
101
105
  #
102
106
  # @since 2.0.0
103
- def servers(servers)
107
+ def servers(_servers)
104
108
  []
105
109
  end
106
110
 
@@ -112,7 +116,9 @@ module Mongo
112
116
  # @return [ false ] Always false.
113
117
  #
114
118
  # @since 2.0.0
115
- def sharded?; false; end
119
+ def sharded?
120
+ false
121
+ end
116
122
 
117
123
  # An unknown topology is not single.
118
124
  #
@@ -122,7 +128,9 @@ module Mongo
122
128
  # @return [ true ] Always false.
123
129
  #
124
130
  # @since 2.0.0
125
- def single?; false; end
131
+ def single?
132
+ false
133
+ end
126
134
 
127
135
  # An unknown topology is unknown.
128
136
  #
@@ -132,7 +140,9 @@ module Mongo
132
140
  # @return [ true ] Always true.
133
141
  #
134
142
  # @since 2.0.0
135
- def unknown?; true; end
143
+ def unknown?
144
+ true
145
+ end
136
146
  end
137
147
  end
138
148
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -90,30 +89,35 @@ module Mongo
90
89
  def initial(cluster, monitoring, options)
91
90
  connect = options[:connect]&.to_sym
92
91
  cls = if options[:direct_connection]
93
- if connect && connect != :direct
94
- raise ArgumentError, "Conflicting topology options: direct_connection=true and connect=#{connect}"
95
- end
96
- if options[:load_balanced]
97
- raise ArgumentError, "Conflicting topology options: direct_connection=true and load_balanced=true"
98
- end
99
- Single
100
- elsif options[:direct_connection] == false && connect && connect == :direct
101
- raise ArgumentError, "Conflicting topology options: direct_connection=false and connect=#{connect}"
102
- elsif connect && connect != :load_balanced
103
- if options[:load_balanced]
104
- raise ArgumentError, "Conflicting topology options: connect=#{options[:connect].inspect} and load_balanced=true"
105
- end
106
- OPTIONS.fetch(options[:connect].to_sym)
107
- elsif options.key?(:replica_set) || options.key?(:replica_set_name)
108
- if options[:load_balanced]
109
- raise ArgumentError, "Conflicting topology options: replica_set/replica_set_name and load_balanced=true"
110
- end
111
- ReplicaSetNoPrimary
112
- elsif options[:load_balanced] || connect == :load_balanced
113
- LoadBalanced
114
- else
115
- Unknown
116
- end
92
+ if connect && connect != :direct
93
+ raise ArgumentError, "Conflicting topology options: direct_connection=true and connect=#{connect}"
94
+ end
95
+ if options[:load_balanced]
96
+ raise ArgumentError, 'Conflicting topology options: direct_connection=true and load_balanced=true'
97
+ end
98
+
99
+ Single
100
+ elsif options[:direct_connection] == false && connect && connect == :direct
101
+ raise ArgumentError, "Conflicting topology options: direct_connection=false and connect=#{connect}"
102
+ elsif connect && connect != :load_balanced
103
+ if options[:load_balanced]
104
+ raise ArgumentError,
105
+ "Conflicting topology options: connect=#{options[:connect].inspect} and load_balanced=true"
106
+ end
107
+
108
+ OPTIONS.fetch(options[:connect].to_sym)
109
+ elsif options.key?(:replica_set) || options.key?(:replica_set_name)
110
+ if options[:load_balanced]
111
+ raise ArgumentError,
112
+ 'Conflicting topology options: replica_set/replica_set_name and load_balanced=true'
113
+ end
114
+
115
+ ReplicaSetNoPrimary
116
+ elsif options[:load_balanced] || connect == :load_balanced
117
+ LoadBalanced
118
+ else
119
+ Unknown
120
+ end
117
121
  # Options here are client/cluster/server options.
118
122
  # In particular the replica set name key is different for
119
123
  # topology.