mongo 2.23.0 → 2.24.1

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 (463) 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 +20 -17
  46. data/lib/mongo/bulk_write/result_combiner.rb +17 -13
  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 +230 -275
  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 +148 -183
  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.rb +5 -10
  71. data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
  72. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
  73. data/lib/mongo/collection/view/builder.rb +0 -1
  74. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
  75. data/lib/mongo/collection/view/change_stream.rb +59 -58
  76. data/lib/mongo/collection/view/explainable.rb +11 -20
  77. data/lib/mongo/collection/view/immutable.rb +1 -3
  78. data/lib/mongo/collection/view/iterable.rb +35 -28
  79. data/lib/mongo/collection/view/map_reduce.rb +20 -25
  80. data/lib/mongo/collection/view/readable.rb +50 -57
  81. data/lib/mongo/collection/view/writable.rb +56 -72
  82. data/lib/mongo/collection/view.rb +9 -8
  83. data/lib/mongo/collection.rb +63 -76
  84. data/lib/mongo/condition_variable.rb +4 -4
  85. data/lib/mongo/config/options.rb +0 -3
  86. data/lib/mongo/config/validators/option.rb +3 -5
  87. data/lib/mongo/config.rb +7 -4
  88. data/lib/mongo/crypt/auto_decryption_context.rb +0 -3
  89. data/lib/mongo/crypt/auto_encrypter.rb +34 -43
  90. data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
  91. data/lib/mongo/crypt/binary.rb +5 -9
  92. data/lib/mongo/crypt/binding.rb +149 -155
  93. data/lib/mongo/crypt/context.rb +10 -17
  94. data/lib/mongo/crypt/data_key_context.rb +2 -7
  95. data/lib/mongo/crypt/encryption_io.rb +29 -39
  96. data/lib/mongo/crypt/explicit_decryption_context.rb +0 -3
  97. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  98. data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
  99. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
  100. data/lib/mongo/crypt/handle.rb +42 -48
  101. data/lib/mongo/crypt/hooks.rb +12 -15
  102. data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
  103. data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
  104. data/lib/mongo/crypt/kms/aws.rb +0 -2
  105. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
  106. data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
  107. data/lib/mongo/crypt/kms/azure.rb +0 -1
  108. data/lib/mongo/crypt/kms/credentials.rb +13 -27
  109. data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
  110. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
  111. data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
  112. data/lib/mongo/crypt/kms/gcp.rb +0 -2
  113. data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
  114. data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
  115. data/lib/mongo/crypt/kms/kmip.rb +0 -1
  116. data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
  117. data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
  118. data/lib/mongo/crypt/kms/local.rb +0 -1
  119. data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
  120. data/lib/mongo/crypt/kms.rb +14 -16
  121. data/lib/mongo/crypt/kms_context.rb +0 -2
  122. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
  123. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
  124. data/lib/mongo/crypt/status.rb +12 -14
  125. data/lib/mongo/crypt.rb +0 -1
  126. data/lib/mongo/csot_timeout_holder.rb +3 -2
  127. data/lib/mongo/cursor/kill_spec.rb +7 -10
  128. data/lib/mongo/cursor.rb +74 -64
  129. data/lib/mongo/cursor_host.rb +8 -10
  130. data/lib/mongo/database/view.rb +16 -37
  131. data/lib/mongo/database.rb +52 -56
  132. data/lib/mongo/dbref.rb +0 -1
  133. data/lib/mongo/distinguishing_semaphore.rb +0 -1
  134. data/lib/mongo/error/auth_error.rb +0 -2
  135. data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
  136. data/lib/mongo/error/bulk_write_error.rb +35 -10
  137. data/lib/mongo/error/change_stream_resumable.rb +0 -2
  138. data/lib/mongo/error/client_closed.rb +0 -2
  139. data/lib/mongo/error/closed_stream.rb +1 -4
  140. data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
  141. data/lib/mongo/error/connection_perished.rb +0 -2
  142. data/lib/mongo/error/connection_unavailable.rb +0 -2
  143. data/lib/mongo/error/credential_check_error.rb +0 -2
  144. data/lib/mongo/error/crypt_error.rb +0 -2
  145. data/lib/mongo/error/extra_file_chunk.rb +1 -4
  146. data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
  147. data/lib/mongo/error/file_not_found.rb +0 -3
  148. data/lib/mongo/error/handshake_error.rb +0 -2
  149. data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
  150. data/lib/mongo/error/internal_driver_error.rb +0 -2
  151. data/lib/mongo/error/invalid_address.rb +0 -2
  152. data/lib/mongo/error/invalid_application_name.rb +0 -3
  153. data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
  154. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
  155. data/lib/mongo/error/invalid_collection_name.rb +1 -4
  156. data/lib/mongo/error/invalid_config_option.rb +0 -3
  157. data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
  158. data/lib/mongo/error/invalid_database_name.rb +1 -4
  159. data/lib/mongo/error/invalid_document.rb +1 -4
  160. data/lib/mongo/error/invalid_file.rb +0 -3
  161. data/lib/mongo/error/invalid_file_revision.rb +0 -3
  162. data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
  163. data/lib/mongo/error/invalid_nonce.rb +0 -3
  164. data/lib/mongo/error/invalid_read_concern.rb +2 -4
  165. data/lib/mongo/error/invalid_read_option.rb +0 -3
  166. data/lib/mongo/error/invalid_replacement_document.rb +2 -5
  167. data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
  168. data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
  169. data/lib/mongo/error/invalid_server_preference.rb +10 -16
  170. data/lib/mongo/error/invalid_session.rb +1 -4
  171. data/lib/mongo/error/invalid_signature.rb +0 -3
  172. data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
  173. data/lib/mongo/error/invalid_txt_record.rb +0 -2
  174. data/lib/mongo/error/invalid_update_document.rb +2 -5
  175. data/lib/mongo/error/invalid_uri.rb +1 -4
  176. data/lib/mongo/error/invalid_write_concern.rb +2 -5
  177. data/lib/mongo/error/kms_error.rb +0 -2
  178. data/lib/mongo/error/labelable.rb +0 -3
  179. data/lib/mongo/error/lint_error.rb +0 -2
  180. data/lib/mongo/error/max_bson_size.rb +8 -11
  181. data/lib/mongo/error/max_message_size.rb +2 -5
  182. data/lib/mongo/error/mismatched_domain.rb +0 -2
  183. data/lib/mongo/error/missing_connection.rb +0 -2
  184. data/lib/mongo/error/missing_file_chunk.rb +0 -3
  185. data/lib/mongo/error/missing_password.rb +0 -2
  186. data/lib/mongo/error/missing_resume_token.rb +1 -4
  187. data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
  188. data/lib/mongo/error/missing_service_id.rb +0 -2
  189. data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
  190. data/lib/mongo/error/multi_index_drop.rb +0 -3
  191. data/lib/mongo/error/need_primary_server.rb +0 -2
  192. data/lib/mongo/error/no_server_available.rb +3 -8
  193. data/lib/mongo/error/no_service_connection_available.rb +1 -3
  194. data/lib/mongo/error/no_srv_records.rb +0 -2
  195. data/lib/mongo/error/notable.rb +8 -16
  196. data/lib/mongo/error/operation_failure.rb +62 -36
  197. data/lib/mongo/error/parser.rb +33 -75
  198. data/lib/mongo/error/pool_cleared_error.rb +1 -3
  199. data/lib/mongo/error/pool_closed_error.rb +0 -3
  200. data/lib/mongo/error/pool_error.rb +0 -3
  201. data/lib/mongo/error/pool_paused_error.rb +0 -2
  202. data/lib/mongo/error/raise_original_error.rb +1 -3
  203. data/lib/mongo/error/read_write_retryable.rb +14 -17
  204. data/lib/mongo/error/sdam_error_detection.rb +3 -5
  205. data/lib/mongo/error/server_api_conflict.rb +0 -2
  206. data/lib/mongo/error/server_certificate_revoked.rb +0 -2
  207. data/lib/mongo/error/server_not_usable.rb +0 -2
  208. data/lib/mongo/error/session_ended.rb +1 -3
  209. data/lib/mongo/error/session_not_materialized.rb +1 -3
  210. data/lib/mongo/error/sessions_not_supported.rb +1 -4
  211. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
  212. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
  213. data/lib/mongo/error/socket_error.rb +0 -2
  214. data/lib/mongo/error/socket_timeout_error.rb +0 -2
  215. data/lib/mongo/error/transactions_not_supported.rb +3 -6
  216. data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
  217. data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
  218. data/lib/mongo/error/unexpected_response.rb +1 -4
  219. data/lib/mongo/error/unknown_payload_type.rb +0 -3
  220. data/lib/mongo/error/unmet_dependency.rb +0 -2
  221. data/lib/mongo/error/unsupported_array_filters.rb +3 -24
  222. data/lib/mongo/error/unsupported_collation.rb +3 -24
  223. data/lib/mongo/error/unsupported_features.rb +0 -2
  224. data/lib/mongo/error/unsupported_message_type.rb +0 -2
  225. data/lib/mongo/error/unsupported_option.rb +19 -21
  226. data/lib/mongo/error/write_retryable.rb +0 -2
  227. data/lib/mongo/error.rb +10 -24
  228. data/lib/mongo/event/base.rb +0 -2
  229. data/lib/mongo/event/listeners.rb +0 -3
  230. data/lib/mongo/event/publisher.rb +0 -3
  231. data/lib/mongo/event/subscriber.rb +0 -4
  232. data/lib/mongo/event.rb +4 -6
  233. data/lib/mongo/grid/file/chunk.rb +7 -10
  234. data/lib/mongo/grid/file/info.rb +20 -24
  235. data/lib/mongo/grid/file.rb +7 -8
  236. data/lib/mongo/grid/fs_bucket.rb +40 -48
  237. data/lib/mongo/grid/stream/read.rb +25 -35
  238. data/lib/mongo/grid/stream/write.rb +17 -22
  239. data/lib/mongo/grid/stream.rb +2 -4
  240. data/lib/mongo/grid.rb +0 -1
  241. data/lib/mongo/id.rb +0 -1
  242. data/lib/mongo/index/view.rb +49 -48
  243. data/lib/mongo/index.rb +7 -10
  244. data/lib/mongo/lint.rb +31 -37
  245. data/lib/mongo/loggable.rb +5 -8
  246. data/lib/mongo/logger.rb +1 -7
  247. data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
  248. data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
  249. data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
  250. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
  251. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
  252. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
  253. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
  254. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
  255. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
  256. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
  257. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
  258. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
  259. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
  260. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
  261. data/lib/mongo/monitoring/event/cmap.rb +0 -1
  262. data/lib/mongo/monitoring/event/command_failed.rb +5 -9
  263. data/lib/mongo/monitoring/event/command_started.rb +8 -12
  264. data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
  265. data/lib/mongo/monitoring/event/secure.rb +15 -20
  266. data/lib/mongo/monitoring/event/server_closed.rb +1 -4
  267. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
  268. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
  269. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
  270. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
  271. data/lib/mongo/monitoring/event/server_opening.rb +1 -4
  272. data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
  273. data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
  274. data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
  275. data/lib/mongo/monitoring/event.rb +0 -1
  276. data/lib/mongo/monitoring/publishable.rb +20 -30
  277. data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
  278. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
  279. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +2 -3
  280. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
  281. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +8 -8
  282. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
  283. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
  284. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
  285. data/lib/mongo/monitoring.rb +38 -39
  286. data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
  287. data/lib/mongo/operation/aggregate/result.rb +3 -6
  288. data/lib/mongo/operation/aggregate.rb +0 -2
  289. data/lib/mongo/operation/collections_info/result.rb +0 -3
  290. data/lib/mongo/operation/collections_info.rb +0 -2
  291. data/lib/mongo/operation/command/op_msg.rb +1 -4
  292. data/lib/mongo/operation/command.rb +0 -2
  293. data/lib/mongo/operation/context.rb +13 -16
  294. data/lib/mongo/operation/count/op_msg.rb +2 -4
  295. data/lib/mongo/operation/count.rb +0 -2
  296. data/lib/mongo/operation/create/op_msg.rb +2 -5
  297. data/lib/mongo/operation/create.rb +0 -2
  298. data/lib/mongo/operation/create_index/op_msg.rb +3 -7
  299. data/lib/mongo/operation/create_index.rb +0 -2
  300. data/lib/mongo/operation/create_user/op_msg.rb +2 -4
  301. data/lib/mongo/operation/create_user.rb +0 -2
  302. data/lib/mongo/operation/delete/bulk_result.rb +2 -3
  303. data/lib/mongo/operation/delete/op_msg.rb +3 -10
  304. data/lib/mongo/operation/delete/result.rb +0 -3
  305. data/lib/mongo/operation/delete.rb +1 -5
  306. data/lib/mongo/operation/distinct/op_msg.rb +2 -5
  307. data/lib/mongo/operation/distinct.rb +0 -2
  308. data/lib/mongo/operation/drop/op_msg.rb +0 -2
  309. data/lib/mongo/operation/drop.rb +0 -2
  310. data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
  311. data/lib/mongo/operation/drop_database.rb +0 -2
  312. data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
  313. data/lib/mongo/operation/drop_index.rb +0 -2
  314. data/lib/mongo/operation/explain/op_msg.rb +0 -2
  315. data/lib/mongo/operation/explain/result.rb +0 -3
  316. data/lib/mongo/operation/explain.rb +0 -2
  317. data/lib/mongo/operation/find/builder/command.rb +4 -12
  318. data/lib/mongo/operation/find/builder/flags.rb +9 -15
  319. data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
  320. data/lib/mongo/operation/find/builder.rb +0 -1
  321. data/lib/mongo/operation/find/op_msg.rb +4 -12
  322. data/lib/mongo/operation/find/result.rb +0 -3
  323. data/lib/mongo/operation/find.rb +0 -2
  324. data/lib/mongo/operation/get_more/command_builder.rb +1 -6
  325. data/lib/mongo/operation/get_more/op_msg.rb +10 -4
  326. data/lib/mongo/operation/get_more/result.rb +0 -3
  327. data/lib/mongo/operation/get_more.rb +0 -2
  328. data/lib/mongo/operation/indexes/op_msg.rb +0 -2
  329. data/lib/mongo/operation/indexes/result.rb +1 -5
  330. data/lib/mongo/operation/indexes.rb +0 -2
  331. data/lib/mongo/operation/insert/bulk_result.rb +2 -6
  332. data/lib/mongo/operation/insert/op_msg.rb +2 -4
  333. data/lib/mongo/operation/insert/result.rb +0 -3
  334. data/lib/mongo/operation/insert.rb +2 -5
  335. data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
  336. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
  337. data/lib/mongo/operation/kill_cursors.rb +0 -2
  338. data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
  339. data/lib/mongo/operation/list_collections/result.rb +1 -4
  340. data/lib/mongo/operation/list_collections.rb +0 -2
  341. data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
  342. data/lib/mongo/operation/map_reduce/result.rb +3 -6
  343. data/lib/mongo/operation/map_reduce.rb +0 -2
  344. data/lib/mongo/operation/op_msg_base.rb +0 -1
  345. data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
  346. data/lib/mongo/operation/parallel_scan/result.rb +2 -5
  347. data/lib/mongo/operation/parallel_scan.rb +0 -2
  348. data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
  349. data/lib/mongo/operation/remove_user.rb +0 -2
  350. data/lib/mongo/operation/result.rb +38 -47
  351. data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
  352. data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
  353. data/lib/mongo/operation/shared/executable.rb +20 -29
  354. data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
  355. data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
  356. data/lib/mongo/operation/shared/idable.rb +3 -6
  357. data/lib/mongo/operation/shared/limited.rb +0 -3
  358. data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
  359. data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
  360. data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
  361. data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
  362. data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
  363. data/lib/mongo/operation/shared/response_handling.rb +13 -26
  364. data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
  365. data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
  366. data/lib/mongo/operation/shared/specifiable.rb +32 -58
  367. data/lib/mongo/operation/shared/write.rb +12 -17
  368. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
  369. data/lib/mongo/operation/update/bulk_result.rb +13 -17
  370. data/lib/mongo/operation/update/op_msg.rb +2 -5
  371. data/lib/mongo/operation/update/result.rb +5 -5
  372. data/lib/mongo/operation/update.rb +1 -5
  373. data/lib/mongo/operation/update_user/op_msg.rb +2 -4
  374. data/lib/mongo/operation/update_user.rb +0 -2
  375. data/lib/mongo/operation/users_info/op_msg.rb +2 -4
  376. data/lib/mongo/operation/users_info/result.rb +1 -4
  377. data/lib/mongo/operation/users_info.rb +0 -2
  378. data/lib/mongo/operation/write_command/op_msg.rb +2 -10
  379. data/lib/mongo/operation/write_command.rb +0 -2
  380. data/lib/mongo/operation.rb +9 -14
  381. data/lib/mongo/options/mapper.rb +8 -15
  382. data/lib/mongo/options/redacted.rb +7 -9
  383. data/lib/mongo/options.rb +0 -1
  384. data/lib/mongo/protocol/bit_vector.rb +3 -5
  385. data/lib/mongo/protocol/caching_hash.rb +2 -7
  386. data/lib/mongo/protocol/compressed.rb +5 -10
  387. data/lib/mongo/protocol/get_more.rb +2 -8
  388. data/lib/mongo/protocol/kill_cursors.rb +2 -8
  389. data/lib/mongo/protocol/message.rb +103 -105
  390. data/lib/mongo/protocol/msg.rb +48 -63
  391. data/lib/mongo/protocol/query.rb +32 -41
  392. data/lib/mongo/protocol/registry.rb +2 -5
  393. data/lib/mongo/protocol/reply.rb +10 -16
  394. data/lib/mongo/protocol/serializers.rb +41 -59
  395. data/lib/mongo/protocol.rb +0 -1
  396. data/lib/mongo/query_cache.rb +7 -15
  397. data/lib/mongo/retryable/backpressure.rb +31 -0
  398. data/lib/mongo/retryable/base_worker.rb +39 -13
  399. data/lib/mongo/retryable/read_worker.rb +77 -21
  400. data/lib/mongo/retryable/retry_policy.rb +59 -0
  401. data/lib/mongo/retryable/write_worker.rb +155 -56
  402. data/lib/mongo/retryable.rb +70 -9
  403. data/lib/mongo/search_index/view.rb +1 -1
  404. data/lib/mongo/semaphore.rb +0 -1
  405. data/lib/mongo/server/app_metadata/environment.rb +3 -3
  406. data/lib/mongo/server/app_metadata.rb +4 -5
  407. data/lib/mongo/server/connection.rb +61 -61
  408. data/lib/mongo/server/connection_base.rb +43 -53
  409. data/lib/mongo/server/connection_common.rb +41 -64
  410. data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
  411. data/lib/mongo/server/connection_pool/populator.rb +1 -4
  412. data/lib/mongo/server/connection_pool.rb +250 -175
  413. data/lib/mongo/server/description/features.rb +23 -60
  414. data/lib/mongo/server/description/load_balancer.rb +0 -2
  415. data/lib/mongo/server/description.rb +138 -137
  416. data/lib/mongo/server/monitor/app_metadata.rb +3 -4
  417. data/lib/mongo/server/monitor/connection.rb +28 -35
  418. data/lib/mongo/server/monitor.rb +65 -60
  419. data/lib/mongo/server/pending_connection.rb +70 -71
  420. data/lib/mongo/server/push_monitor/connection.rb +0 -3
  421. data/lib/mongo/server/push_monitor.rb +21 -29
  422. data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
  423. data/lib/mongo/server.rb +60 -93
  424. data/lib/mongo/server_selector/base.rb +146 -157
  425. data/lib/mongo/server_selector/nearest.rb +5 -5
  426. data/lib/mongo/server_selector/primary.rb +4 -5
  427. data/lib/mongo/server_selector/primary_preferred.rb +5 -6
  428. data/lib/mongo/server_selector/secondary.rb +5 -6
  429. data/lib/mongo/server_selector/secondary_preferred.rb +4 -5
  430. data/lib/mongo/server_selector.rb +3 -4
  431. data/lib/mongo/session/server_session.rb +6 -7
  432. data/lib/mongo/session/session_pool.rb +20 -34
  433. data/lib/mongo/session.rb +321 -189
  434. data/lib/mongo/socket/ocsp_cache.rb +8 -13
  435. data/lib/mongo/socket/ocsp_verifier.rb +69 -70
  436. data/lib/mongo/socket/ssl.rb +44 -43
  437. data/lib/mongo/socket/tcp.rb +5 -8
  438. data/lib/mongo/socket/unix.rb +0 -4
  439. data/lib/mongo/socket.rb +80 -102
  440. data/lib/mongo/srv/monitor.rb +6 -11
  441. data/lib/mongo/srv/resolver.rb +15 -24
  442. data/lib/mongo/srv/result.rb +18 -24
  443. data/lib/mongo/srv.rb +0 -1
  444. data/lib/mongo/timeout.rb +4 -11
  445. data/lib/mongo/topology_version.rb +8 -13
  446. data/lib/mongo/tracing/open_telemetry/command_tracer.rb +28 -1
  447. data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +1 -1
  448. data/lib/mongo/tracing/open_telemetry/tracer.rb +1 -1
  449. data/lib/mongo/uri/options_mapper.rb +135 -126
  450. data/lib/mongo/uri/srv_protocol.rb +25 -38
  451. data/lib/mongo/uri.rb +95 -139
  452. data/lib/mongo/utils.rb +5 -12
  453. data/lib/mongo/version.rb +1 -1
  454. data/lib/mongo/write_concern/acknowledged.rb +0 -2
  455. data/lib/mongo/write_concern/base.rb +6 -6
  456. data/lib/mongo/write_concern/unacknowledged.rb +0 -2
  457. data/lib/mongo/write_concern.rb +14 -15
  458. data/lib/mongo.rb +2 -3
  459. data/mongo.gemspec +17 -17
  460. metadata +5 -5
  461. data/lib/mongo/error/server_api_not_supported.rb +0 -27
  462. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
  463. 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) 2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Server
20
-
21
19
  # A monitor utilizing server-pushed hello requests.
22
20
  #
23
21
  # When a Monitor handshakes with a 4.4+ server, it creates an instance
@@ -33,15 +31,10 @@ module Mongo
33
31
  include BackgroundThread
34
32
 
35
33
  def initialize(monitor, topology_version, monitoring, **options)
36
- if topology_version.nil?
37
- raise ArgumentError, 'Topology version must be provided but it was nil'
38
- end
39
- unless options[:app_metadata]
40
- raise ArgumentError, 'App metadata is required'
41
- end
42
- unless options[:check_document]
43
- raise ArgumentError, 'Check document is required'
44
- end
34
+ raise ArgumentError, 'Topology version must be provided but it was nil' if topology_version.nil?
35
+ raise ArgumentError, 'App metadata is required' unless options[:app_metadata]
36
+ raise ArgumentError, 'Check document is required' unless options[:check_document]
37
+
45
38
  @app_metadata = options[:app_metadata]
46
39
  @check_document = options[:check_document]
47
40
  @monitor = monitor
@@ -78,7 +71,11 @@ module Mongo
78
71
  if @connection
79
72
  # Interrupt any in-progress exhausted hello reads by
80
73
  # disconnecting the connection.
81
- @connection.send(:socket).close rescue nil
74
+ begin
75
+ @connection.send(:socket).close
76
+ rescue StandardError
77
+ nil
78
+ end
82
79
  end
83
80
  end
84
81
  super.tap do
@@ -107,10 +104,8 @@ module Mongo
107
104
  # https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-monitoring.md#streamable-hello-or-legacy-hello-command
108
105
  # says that topologyVersion should only be updated from successful
109
106
  # hello responses.
110
- if new_description.topology_version
111
- @topology_version = new_description.topology_version
112
- end
113
- rescue IOError, SocketError, SystemCallError, Mongo::Error => exc
107
+ @topology_version = new_description.topology_version if new_description.topology_version
108
+ rescue IOError, SocketError, SystemCallError, Mongo::Error => e
114
109
  stop_requested = @lock.synchronize { @stop_requested }
115
110
  if stop_requested
116
111
  # Ignore the exception, see RUBY-2771.
@@ -118,11 +113,10 @@ module Mongo
118
113
  end
119
114
 
120
115
  msg = "Error running awaited hello on #{server.address}"
121
- Utils.warn_bg_exception(msg, exc,
122
- logger: options[:logger],
123
- log_prefix: options[:log_prefix],
124
- bg_error_backtrace: options[:bg_error_backtrace],
125
- )
116
+ Utils.warn_bg_exception(msg, e,
117
+ logger: options[:logger],
118
+ log_prefix: options[:log_prefix],
119
+ bg_error_backtrace: options[:bg_error_backtrace])
126
120
 
127
121
  # If a request failed on a connection, stop push monitoring.
128
122
  # In case the server is dead we don't want to have two connections
@@ -153,9 +147,7 @@ module Mongo
153
147
  end
154
148
 
155
149
  resp_msg = begin
156
- unless @server_pushing
157
- write_check_command
158
- end
150
+ write_check_command unless @server_pushing
159
151
  read_response
160
152
  rescue Mongo::Error
161
153
  @lock.synchronize do
@@ -173,10 +165,10 @@ module Mongo
173
165
  def write_check_command
174
166
  document = @check_document.merge(
175
167
  topologyVersion: topology_version.to_doc,
176
- maxAwaitTimeMS: monitor.heartbeat_interval * 1000,
168
+ maxAwaitTimeMS: monitor.heartbeat_interval * 1000
177
169
  )
178
170
  command = Protocol::Msg.new(
179
- [:exhaust_allowed], {}, document.merge({'$db' => Database::ADMIN})
171
+ [ :exhaust_allowed ], {}, document.merge({ '$db' => Database::ADMIN })
180
172
  )
181
173
  @lock.synchronize { @connection }.write_bytes(command.serialize.to_s)
182
174
  end
@@ -184,14 +176,15 @@ module Mongo
184
176
  def read_response
185
177
  if timeout = options[:connect_timeout]
186
178
  if timeout < 0
187
- raise Mongo::SocketTimeoutError, "Requested to read with a negative timeout: #{}"
179
+ raise Mongo::SocketTimeoutError, 'Requested to read with a negative timeout: '
188
180
  elsif timeout > 0
189
181
  timeout += options[:heartbeat_frequency] || Monitor::DEFAULT_HEARTBEAT_INTERVAL
190
182
  end
191
183
  end
192
184
  # We set the timeout twice: once passed into read_socket which applies
193
185
  # to each individual read operation, and again around the entire read.
194
- Timeout.timeout(timeout, Error::SocketTimeoutError, "Failed to read an awaited hello response in #{timeout} seconds") do
186
+ Timeout.timeout(timeout, Error::SocketTimeoutError,
187
+ "Failed to read an awaited hello response in #{timeout} seconds") do
195
188
  @lock.synchronize { @connection }.read_response(socket_timeout: timeout)
196
189
  end
197
190
  end
@@ -199,7 +192,6 @@ module Mongo
199
192
  def to_s
200
193
  "#<#{self.class.name}:#{object_id} #{server.address}>"
201
194
  end
202
-
203
195
  end
204
196
  end
205
197
  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
 
@@ -19,10 +18,9 @@ module Mongo
19
18
  class Server
20
19
  # @api private
21
20
  class RoundTripTimeCalculator
22
-
23
21
  # The weighting factor (alpha) for calculating the average moving
24
22
  # round trip time.
25
- RTT_WEIGHT_FACTOR = 0.2.freeze
23
+ RTT_WEIGHT_FACTOR = 0.2
26
24
  private_constant :RTT_WEIGHT_FACTOR
27
25
 
28
26
  RTT_SAMPLES_FOR_MINIMUM = 10
@@ -39,9 +37,7 @@ module Mongo
39
37
  @rtts = []
40
38
  end
41
39
 
42
- attr_reader :last_round_trip_time
43
- attr_reader :average_round_trip_time
44
- attr_reader :minimum_round_trip_time
40
+ attr_reader :last_round_trip_time, :average_round_trip_time, :minimum_round_trip_time
45
41
 
46
42
  def measure
47
43
  start = Utils.monotonic_time
@@ -51,7 +47,7 @@ module Mongo
51
47
  # If we encountered a network error, the round-trip is not
52
48
  # complete and thus RTT for it does not make sense.
53
49
  raise
54
- rescue Error, Error::AuthError => exc
50
+ rescue Error, Error::AuthError => e
55
51
  # For other errors, RTT is valid.
56
52
  end
57
53
  last_rtt = Utils.monotonic_time - start
@@ -59,7 +55,7 @@ module Mongo
59
55
  # If hello fails, we need to return the last round trip time
60
56
  # because it is used in the heartbeat failed SDAM event,
61
57
  # but we must not update the round trip time recorded in the server.
62
- unless exc
58
+ unless e
63
59
  @last_round_trip_time = last_rtt
64
60
  @lock.synchronize do
65
61
  update_average_round_trip_time
@@ -67,19 +63,17 @@ module Mongo
67
63
  end
68
64
  end
69
65
 
70
- if exc
71
- raise exc
72
- else
73
- rv
74
- end
66
+ raise e if e
67
+
68
+ rv
75
69
  end
76
70
 
77
71
  def update_average_round_trip_time
78
72
  @average_round_trip_time = if average_round_trip_time
79
- RTT_WEIGHT_FACTOR * last_round_trip_time + (1 - RTT_WEIGHT_FACTOR) * average_round_trip_time
80
- else
81
- last_round_trip_time
82
- end
73
+ (RTT_WEIGHT_FACTOR * last_round_trip_time) + ((1 - RTT_WEIGHT_FACTOR) * average_round_trip_time)
74
+ else
75
+ last_round_trip_time
76
+ end
83
77
  end
84
78
 
85
79
  def update_minimum_round_trip_time
data/lib/mongo/server.rb CHANGED
@@ -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
  #
@@ -16,7 +15,6 @@
16
15
  # limitations under the License.
17
16
 
18
17
  module Mongo
19
-
20
18
  # Represents a single server on the server side that can be standalone, part of
21
19
  # a replica set, or a mongos.
22
20
  #
@@ -29,7 +27,7 @@ module Mongo
29
27
  # The default time in seconds to timeout a connection attempt.
30
28
  #
31
29
  # @since 2.4.3
32
- CONNECT_TIMEOUT = 10.freeze
30
+ CONNECT_TIMEOUT = 10
33
31
 
34
32
  # Instantiate a new server object. Will start the background refresh and
35
33
  # subscribe to the appropriate events.
@@ -82,21 +80,18 @@ module Mongo
82
80
  @scan_semaphore = DistinguishingSemaphore.new
83
81
  @round_trip_time_calculator = RoundTripTimeCalculator.new
84
82
  @description = Description.new(address, {},
85
- load_balancer: !!@options[:load_balancer],
86
- force_load_balancer: force_load_balancer?,
87
- )
83
+ load_balancer: !!@options[:load_balancer],
84
+ force_load_balancer: force_load_balancer?)
88
85
  @last_scan = nil
89
86
  @last_scan_monotime = nil
90
87
  unless options[:monitoring_io] == false
91
88
  @monitor = Monitor.new(self, event_listeners, monitoring,
92
- options.merge(
93
- app_metadata: cluster.monitor_app_metadata,
94
- push_monitor_app_metadata: cluster.push_monitor_app_metadata,
95
- heartbeat_interval: cluster.heartbeat_interval,
96
- ))
97
- unless _monitor == false
98
- start_monitoring
99
- end
89
+ options.merge(
90
+ app_metadata: cluster.monitor_app_metadata,
91
+ push_monitor_app_metadata: cluster.push_monitor_app_metadata,
92
+ heartbeat_interval: cluster.heartbeat_interval
93
+ ))
94
+ start_monitoring unless _monitor == false
100
95
  end
101
96
  @connected = true
102
97
  @pool_lock = Mutex.new
@@ -108,7 +103,7 @@ module Mongo
108
103
  # @return [ Cluster ] cluster The server cluster.
109
104
  attr_reader :cluster
110
105
 
111
- # @return [ nil | Monitor ] monitor The server monitor. nil if the servenr
106
+ # @return [ nil | Monitor ] monitor The server monitor. nil if the server
112
107
  # was created with monitoring_io: false option.
113
108
  attr_reader :monitor
114
109
 
@@ -154,14 +149,13 @@ module Mongo
154
149
  end
155
150
  end
156
151
 
157
-
158
152
  # @deprecated
159
153
  def heartbeat_frequency
160
154
  cluster.heartbeat_interval
161
155
  end
162
156
 
163
157
  # @deprecated
164
- alias :heartbeat_frequency_seconds :heartbeat_frequency
158
+ alias heartbeat_frequency_seconds heartbeat_frequency
165
159
 
166
160
  # Performs an immediate, synchronous check of the server.
167
161
  #
@@ -170,8 +164,8 @@ module Mongo
170
164
 
171
165
  # The compressor negotiated by the server monitor, if any.
172
166
  #
173
- # This attribute is nil if no server check has not yet completed, and if
174
- # no compression was negatiated.
167
+ # This attribute is nil if no server check has yet completed, and if
168
+ # no compression was negotiated.
175
169
  #
176
170
  # @note Compression is negotiated for each connection separately.
177
171
  #
@@ -179,11 +173,9 @@ module Mongo
179
173
  #
180
174
  # @deprecated
181
175
  def compressor
182
- if monitor
183
- monitor.compressor
184
- else
185
- nil
186
- end
176
+ return unless monitor
177
+
178
+ monitor.compressor
187
179
  end
188
180
 
189
181
  # Delegate convenience methods to the monitor description.
@@ -246,6 +238,7 @@ module Mongo
246
238
  # @since 2.0.0
247
239
  def ==(other)
248
240
  return false unless other.is_a?(Server)
241
+
249
242
  address == other.address
250
243
  end
251
244
 
@@ -275,9 +268,7 @@ module Mongo
275
268
  #
276
269
  # @since 2.0.0
277
270
  def disconnect!
278
- if monitor
279
- monitor.stop!
280
- end
271
+ monitor.stop! if monitor
281
272
 
282
273
  @connected = false
283
274
 
@@ -294,9 +285,7 @@ module Mongo
294
285
  end
295
286
 
296
287
  def close
297
- if monitor
298
- monitor.stop!
299
- end
288
+ monitor.stop! if monitor
300
289
 
301
290
  @connected = false
302
291
 
@@ -331,9 +320,9 @@ module Mongo
331
320
  # @api private
332
321
  def start_monitoring
333
322
  publish_opening_event
334
- if options[:monitoring_io] != false
335
- monitor.run!
336
- end
323
+ return unless options[:monitoring_io] != false
324
+
325
+ monitor.run!
337
326
  end
338
327
 
339
328
  # Publishes the server opening event.
@@ -362,24 +351,23 @@ module Mongo
362
351
  #
363
352
  # @api private
364
353
  def status
365
- case
366
- when load_balancer?
354
+ if load_balancer?
367
355
  'LB'
368
- when primary?
356
+ elsif primary?
369
357
  'PRIMARY'
370
- when secondary?
358
+ elsif secondary?
371
359
  'SECONDARY'
372
- when standalone?
360
+ elsif standalone?
373
361
  'STANDALONE'
374
- when arbiter?
362
+ elsif arbiter?
375
363
  'ARBITER'
376
- when ghost?
364
+ elsif ghost?
377
365
  'GHOST'
378
- when other?
366
+ elsif other?
379
367
  'OTHER'
380
- when mongos?
368
+ elsif mongos?
381
369
  'MONGOS'
382
- when unknown?
370
+ elsif unknown?
383
371
  'UNKNOWN'
384
372
  else
385
373
  # Since the summary method is often used for debugging, do not raise
@@ -394,23 +382,17 @@ module Mongo
394
382
  # @since 2.7.0
395
383
  def summary
396
384
  status = self.status || ''
397
- if replica_set_name
398
- status += " replica_set=#{replica_set_name}"
399
- end
385
+ status += " replica_set=#{replica_set_name}" if replica_set_name
400
386
 
401
- unless monitor&.running?
402
- status += " NO-MONITORING"
403
- end
387
+ status += ' NO-MONITORING' unless monitor&.running?
404
388
 
405
- if @pool
406
- status += " pool=#{@pool.summary}"
407
- end
389
+ status += " pool=#{@pool.summary}" if @pool
408
390
 
409
391
  address_bit = if address
410
- "#{address.host}:#{address.port}"
411
- else
412
- 'nil'
413
- end
392
+ "#{address.host}:#{address.port}"
393
+ else
394
+ 'nil'
395
+ end
414
396
 
415
397
  "#<Server address=#{address_bit} #{status}>"
416
398
  end
@@ -424,9 +406,7 @@ module Mongo
424
406
  #
425
407
  # @since 2.0.0
426
408
  def pool
427
- if unknown?
428
- raise Error::ServerNotUsable, address
429
- end
409
+ raise Error::ServerNotUsable, address if unknown?
430
410
 
431
411
  @pool_lock.synchronize do
432
412
  opts = connected? ? options : options.merge(populator_io: false)
@@ -475,9 +455,7 @@ module Mongo
475
455
  #
476
456
  # @since 2.1.0
477
457
  def reconnect!
478
- if options[:monitoring_io] != false
479
- monitor.restart!
480
- end
458
+ monitor.restart! if options[:monitoring_io] != false
481
459
  @connected = true
482
460
  end
483
461
 
@@ -507,11 +485,13 @@ module Mongo
507
485
  def handle_handshake_failure!
508
486
  yield
509
487
  rescue Mongo::Error::SocketError, Mongo::Error::SocketTimeoutError => e
510
- unknown!(
511
- generation: e.generation,
512
- service_id: e.service_id,
513
- stop_push_monitor: true,
514
- )
488
+ unless e.label?('SystemOverloadedError')
489
+ unknown!(
490
+ generation: e.generation,
491
+ service_id: e.service_id,
492
+ stop_push_monitor: true
493
+ )
494
+ end
515
495
  raise
516
496
  end
517
497
 
@@ -538,7 +518,7 @@ module Mongo
538
518
  unknown!(
539
519
  generation: e.generation,
540
520
  service_id: e.service_id,
541
- stop_push_monitor: true,
521
+ stop_push_monitor: true
542
522
  )
543
523
  raise
544
524
  end
@@ -547,7 +527,7 @@ module Mongo
547
527
  #
548
528
  # @api private
549
529
  def retry_reads?
550
- !!(features.sessions_enabled? && logical_session_timeout)
530
+ !!logical_session_timeout
551
531
  end
552
532
 
553
533
  # Will writes sent to this server be retried.
@@ -557,18 +537,17 @@ module Mongo
557
537
  #
558
538
  # @return [ true, false ] If writes will be retried.
559
539
  #
560
- # @note Retryable writes are only available on server versions 3.6+ and with
561
- # sharded clusters or replica sets.
540
+ # @note Retryable writes are only available with sharded clusters or replica sets.
562
541
  #
563
542
  # @note Some of the conditions in this method automatically return false for
564
- # for load balanced topologies. The conditions in this method should
543
+ # load balanced topologies. The conditions in this method should
565
544
  # always be true, since load-balanced topologies are only available on
566
545
  # MongoDB 5.0+, and not for standalone topologies. Therefore, we can
567
546
  # assume that retry writes are enabled.
568
547
  #
569
548
  # @since 2.5.0
570
549
  def retry_writes?
571
- !!(features.sessions_enabled? && logical_session_timeout && !standalone?) || load_balancer?
550
+ !!((logical_session_timeout && !standalone?) || load_balancer?)
572
551
  end
573
552
 
574
553
  # Marks server unknown and publishes the associated SDAM event
@@ -619,42 +598,30 @@ module Mongo
619
598
 
620
599
  # NOTE: You cannot use safe navigation here because if pool is nil you end
621
600
  # up trying to evaluate Integer < nil which is invalid.
622
- if options[:generation] && pool && options[:generation] < pool.generation
623
- return
624
- end
601
+ return if options[:generation] && pool && options[:generation] < pool.generation
625
602
 
626
603
  if options[:topology_version] && description.topology_version &&
627
- !options[:topology_version].gt?(description.topology_version)
628
- then
604
+ !options[:topology_version].gt?(description.topology_version)
629
605
  return
630
606
  end
631
607
 
632
- if options[:stop_push_monitor]
633
- monitor&.stop_push_monitor!
634
- end
608
+ monitor&.stop_push_monitor! if options[:stop_push_monitor]
635
609
 
636
610
  # SDAM flow will update description on the server without in-place
637
611
  # mutations and invoke SDAM transitions as needed.
638
612
  config = {}
639
- if options[:service_id]
640
- config['serviceId'] = options[:service_id]
641
- end
642
- if options[:topology_version]
643
- config['topologyVersion'] = options[:topology_version]
644
- end
613
+ config['serviceId'] = options[:service_id] if options[:service_id]
614
+ config['topologyVersion'] = options[:topology_version] if options[:topology_version]
645
615
  new_description = Description.new(address, config,
646
- load_balancer: load_balancer?,
647
- force_load_balancer: options[:connect] == :load_balanced,
648
- )
616
+ load_balancer: load_balancer?,
617
+ force_load_balancer: options[:connect] == :load_balanced)
649
618
  cluster.run_sdam_flow(description, new_description, options)
650
619
  end
651
620
 
652
621
  # @api private
653
622
  def update_description(description)
654
623
  pool = pool_internal
655
- if pool && !description.unknown?
656
- pool.ready
657
- end
624
+ pool.ready if pool && !description.unknown?
658
625
  @description = description
659
626
  end
660
627