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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfc6de88aae51217bcbe02307215fefb67259f3257c5eba94c966fa8ceac5ccd
4
- data.tar.gz: 258a3151671bf5ef8f6ece898dee5846b767ea5ed537fc2a86699ca688285176
3
+ metadata.gz: 0cdda79c0346533e626f9458f748cdb003881c93cbe597957706129277872ac0
4
+ data.tar.gz: 688197ddc194148b4788526763a706bae2a45e1fef0ac3ed5b1c5b55dd25a781
5
5
  SHA512:
6
- metadata.gz: 2c32a72398d175523f643ad4e229f406e82f450d5eb254ee3e05815645750dd578bca77da03ee5c546146c5d78779cced7c97485107589f057fef3fcb1097662
7
- data.tar.gz: 1b3dfcefc33c710792591177f18ea274439326cac1c525cc13d39c6551ac33582baa579082832422166fd819cfa68815659925d925e34f8a4e1026f244fe63f2
6
+ metadata.gz: f60e23e96c0ba93d06bbec7beb8cbb77420a502b5b64efe3ebafa85475e982d5f8d20c292336a716fa84b4aa6e98791cb2bed09fac1de8578b12b4320a12cdca
7
+ data.tar.gz: 34d8751ba7740e254e70397dd204dac01efea33d54d3ee3115cc2d3f6a460c857d625c1f367a672be3f0fc587ac0d09710318fd9011bb4152d110c939f7ec5ae
data/bin/mongo_console CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
- # rubocop:todo all
4
3
 
5
4
  $LOAD_PATH[0, 0] = File.join(File.dirname(__FILE__), '..', 'lib')
6
5
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2020 MongoDB Inc.
5
4
  #
@@ -17,4 +16,4 @@
17
16
 
18
17
  # Require this file if using the Ruby drver with ActiveSupport.
19
18
 
20
- require "bson/active_support"
19
+ require 'bson/active_support'
@@ -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
  #
@@ -17,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  class Address
20
-
21
19
  # Sets up resolution with IPv4 support if the address is an ip
22
20
  # address.
23
21
  #
24
22
  # @since 2.0.0
25
23
  class IPv4
26
-
27
24
  # @return [ String ] host The host.
28
25
  attr_reader :host
29
26
 
@@ -41,7 +38,7 @@ module Mongo
41
38
  # Split value constant.
42
39
  #
43
40
  # @since 2.1.0
44
- SPLIT = ':'.freeze
41
+ SPLIT = ':'
45
42
 
46
43
  # Parse an IPv4 address into its host and port.
47
44
  #
@@ -56,7 +53,7 @@ module Mongo
56
53
  def self.parse(address)
57
54
  parts = address.split(SPLIT)
58
55
  host = parts[0]
59
- port = (parts[1] || 27017).to_i
56
+ port = (parts[1] || 27_017).to_i
60
57
  [ host, port ]
61
58
  end
62
59
 
@@ -69,7 +66,7 @@ module Mongo
69
66
  # @param [ Integer ] port The port.
70
67
  #
71
68
  # @since 2.0.0
72
- def initialize(host, port, host_name=nil)
69
+ def initialize(host, port, host_name = nil)
73
70
  @host = host
74
71
  @port = port
75
72
  @host_name = host_name
@@ -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
  #
@@ -17,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  class Address
20
-
21
19
  # Sets up resolution with IPv6 support if the address is an ip
22
20
  # address.
23
21
  #
24
22
  # @since 2.0.0
25
23
  class IPv6
26
-
27
24
  # @return [ String ] host The host.
28
25
  attr_reader :host
29
26
 
@@ -51,16 +48,15 @@ module Mongo
51
48
  def self.parse(address)
52
49
  # IPAddr's parser handles IP address only, not port.
53
50
  # Therefore we need to handle the port ourselves
54
- if address =~ /[\[\]]/
51
+ if /[\[\]]/.match?(address)
55
52
  parts = address.match(/\A\[(.+)\](?::(\d+))?\z/)
56
- if parts.nil?
57
- raise ArgumentError, "Invalid IPv6 address: #{address}"
58
- end
53
+ raise ArgumentError, "Invalid IPv6 address: #{address}" if parts.nil?
54
+
59
55
  host = parts[1]
60
- port = (parts[2] || 27017).to_i
56
+ port = (parts[2] || 27_017).to_i
61
57
  else
62
58
  host = address
63
- port = 27017
59
+ port = 27_017
64
60
  end
65
61
  # Validate host.
66
62
  # This will raise IPAddr::InvalidAddressError
@@ -83,7 +79,7 @@ module Mongo
83
79
  # @param [ Integer ] port The port.
84
80
  #
85
81
  # @since 2.0.0
86
- def initialize(host, port, host_name=nil)
82
+ def initialize(host, port, host_name = nil)
87
83
  @host = host
88
84
  @port = port
89
85
  @host_name = host_name
@@ -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
  #
@@ -17,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  class Address
20
-
21
19
  # Sets up socket addresses.
22
20
  #
23
21
  # @since 2.0.0
24
22
  class Unix
25
-
26
23
  # @return [ String ] host The host.
27
24
  attr_reader :host
28
25
 
@@ -56,7 +53,7 @@ module Mongo
56
53
  # @param [ String ] host The host.
57
54
  #
58
55
  # @since 2.0.0
59
- def initialize(host, port=nil, host_name=nil)
56
+ def initialize(host, _port = nil, _host_name = nil)
60
57
  @host = host
61
58
  end
62
59
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2017-2020 MongoDB Inc.
5
4
  #
@@ -16,22 +15,19 @@
16
15
  # limitations under the License.
17
16
 
18
17
  module Mongo
19
-
20
18
  class Address
21
-
22
19
  # @api private
23
20
  module Validator
24
-
25
21
  # Takes an address string in ipv4/ipv6/hostname/socket path format and
26
22
  # validates its format.
27
23
  def validate_address_str!(address_str)
28
24
  case address_str
29
25
  when /\A\[[\d:]+\](?::(\d+))?\z/
30
26
  # ipv6 with optional port
31
- if port_str = $1
27
+ if port_str = ::Regexp.last_match(1)
32
28
  validate_port_str!(port_str)
33
29
  end
34
- when /\A\//, /\.sock\z/
30
+ when %r{\A/}, /\.sock\z/
35
31
  # Unix socket path.
36
32
  # Spec requires us to validate that the path has no unescaped
37
33
  # slashes, but if this were to be the case, parsing would have
@@ -41,27 +37,23 @@ module Mongo
41
37
  # socket paths end in ".sock". We accept all paths but special case
42
38
  # the .sock extension to avoid relative paths falling into the
43
39
  # host:port case below.
44
- when /[\/\[\]]/
40
+ when %r{[/\[\]]}
45
41
  # Not a host:port nor an ipv4 address with optional port.
46
42
  # Possibly botched ipv6 address with e.g. port delimiter present and
47
43
  # port missing, or extra junk before or after.
48
44
  raise Error::InvalidAddress,
49
- "Invalid hostname: #{address_str}"
45
+ "Invalid hostname: #{address_str}"
50
46
  when /:.*:/m
51
47
  raise Error::InvalidAddress,
52
- "Multiple port delimiters are not allowed: #{address_str}"
48
+ "Multiple port delimiters are not allowed: #{address_str}"
53
49
  else
54
50
  # host:port or ipv4 address with optional port number
55
51
  host, port = address_str.split(':')
56
- if host.empty?
57
- raise Error::InvalidAddress, "Host is empty: #{address_str}"
58
- end
52
+ raise Error::InvalidAddress, "Host is empty: #{address_str}" if host.empty?
59
53
 
60
54
  validate_hostname!(host)
61
55
 
62
- if port && port.empty?
63
- raise Error::InvalidAddress, "Port is empty: #{address_str}"
64
- end
56
+ raise Error::InvalidAddress, "Port is empty: #{address_str}" if port && port.empty?
65
57
 
66
58
  validate_port_str!(port)
67
59
  end
@@ -80,22 +72,18 @@ module Mongo
80
72
  # and runs of multiple dots. DNS resolution of SRV records yields
81
73
  # hostnames with trailing dots, those trailing dots are removed
82
74
  # during normalization process prior to validation.
83
- if host.start_with?('.')
84
- raise Error::InvalidAddress, "Hostname cannot start with a dot: #{host}"
85
- end
86
- if host.end_with?('.')
87
- raise Error::InvalidAddress, "Hostname cannot end with a dot: #{host}"
88
- end
89
- if host.include?('..')
90
- raise Error::InvalidAddress, "Runs of multiple dots are not allowed in hostname: #{host}"
91
- end
75
+ raise Error::InvalidAddress, "Hostname cannot start with a dot: #{host}" if host.start_with?('.')
76
+ raise Error::InvalidAddress, "Hostname cannot end with a dot: #{host}" if host.end_with?('.')
77
+ return unless host.include?('..')
78
+
79
+ raise Error::InvalidAddress, "Runs of multiple dots are not allowed in hostname: #{host}"
92
80
  end
93
81
 
94
82
  def validate_port_str!(port)
95
- unless port.nil? || (port.length > 0 && port.to_i > 0 && port.to_i <= 65535)
96
- raise Error::InvalidAddress,
97
- "Invalid port: #{port}. Port must be an integer greater than 0 and less than 65536"
98
- end
83
+ return if port.nil? || (port.length > 0 && port.to_i > 0 && port.to_i <= 65_535)
84
+
85
+ raise Error::InvalidAddress,
86
+ "Invalid port: #{port}. Port must be an integer greater than 0 and less than 65536"
99
87
  end
100
88
  end
101
89
  end
data/lib/mongo/address.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
  #
@@ -21,7 +20,6 @@ require 'mongo/address/unix'
21
20
  require 'mongo/address/validator'
22
21
 
23
22
  module Mongo
24
-
25
23
  # Represents an address to a server, either with an IP address or socket
26
24
  # path.
27
25
  #
@@ -41,7 +39,7 @@ module Mongo
41
39
  # The localhost constant.
42
40
  #
43
41
  # @since 2.1.0
44
- LOCALHOST = 'localhost'.freeze
42
+ LOCALHOST = 'localhost'
45
43
 
46
44
  # Initialize the address.
47
45
  #
@@ -73,12 +71,11 @@ module Mongo
73
71
  #
74
72
  # @since 2.0.0
75
73
  def initialize(seed, options = {})
76
- if seed.nil?
77
- raise ArgumentError, "address must be not nil"
78
- end
74
+ raise ArgumentError, 'address must be not nil' if seed.nil?
75
+
79
76
  @seed = seed
80
77
  @host, @port = parse_host_port
81
- @options = Hash[options.map { |k, v| [k.to_sym, v] }]
78
+ @options = Hash[options.map { |k, v| [ k.to_sym, v ] }]
82
79
  end
83
80
 
84
81
  # @return [ String ] seed The seed address.
@@ -105,6 +102,7 @@ module Mongo
105
102
  # @since 2.0.0
106
103
  def ==(other)
107
104
  return false unless other.is_a?(Address)
105
+
108
106
  host == other.host && port == other.port
109
107
  end
110
108
 
@@ -143,7 +141,7 @@ module Mongo
143
141
  #
144
142
  # @since 2.0.0
145
143
  def inspect
146
- "#<Mongo::Address:0x#{object_id} address=#{to_s}>"
144
+ "#<Mongo::Address:0x#{object_id} address=#{self}>"
147
145
  end
148
146
 
149
147
  # Get a socket for the address stored in this object, given the options.
@@ -220,10 +218,10 @@ module Mongo
220
218
  csot = !!opts[:csot]
221
219
  opts = {
222
220
  connect_timeout: Server::CONNECT_TIMEOUT,
223
- }.update(options).update(Hash[opts.map { |k, v| [k.to_sym, v] }])
221
+ }.update(options).update(Hash[opts.map { |k, v| [ k.to_sym, v ] }])
224
222
 
225
223
  map_exceptions(csot) do
226
- if seed.downcase =~ Unix::MATCH
224
+ if Unix::MATCH.match?(seed.downcase)
227
225
  specific_address = Unix.new(seed.downcase)
228
226
  return specific_address.socket(socket_timeout, opts)
229
227
  end
@@ -239,16 +237,14 @@ module Mongo
239
237
  # eliminate duplicates here.
240
238
  infos = getaddrinfo(host, family)
241
239
  results = infos.map do |info|
242
- [info[4], info[3]]
240
+ [ info[4], info[3] ]
243
241
  end.uniq
244
242
  results.each do |family, address_str|
245
- begin
246
- specific_address = FAMILY_MAP[family].new(address_str, port, host)
247
- socket = specific_address.socket(socket_timeout, opts)
248
- return socket
249
- rescue IOError, SystemCallError, Error::SocketTimeoutError, Error::SocketError => e
250
- error = e
251
- end
243
+ specific_address = FAMILY_MAP[family].new(address_str, port, host)
244
+ socket = specific_address.socket(socket_timeout, opts)
245
+ return socket
246
+ rescue IOError, SystemCallError, Error::SocketTimeoutError, Error::SocketError => e
247
+ error = e
252
248
  end
253
249
  raise error
254
250
  end
@@ -285,9 +281,9 @@ module Mongo
285
281
  def parse_host_port
286
282
  address = seed.downcase
287
283
  case address
288
- when Unix::MATCH then Unix.parse(address)
289
- when IPv6::MATCH then IPv6.parse(address)
290
- else IPv4.parse(address)
284
+ when Unix::MATCH then Unix.parse(address)
285
+ when IPv6::MATCH then IPv6.parse(address)
286
+ else IPv4.parse(address)
291
287
  end
292
288
  end
293
289
 
@@ -297,25 +293,19 @@ module Mongo
297
293
  # @param [ Boolean ] csot Whether the client-side operation timeout
298
294
  # should be considered when connecting the socket.
299
295
  def map_exceptions(csot)
300
- begin
301
- yield
302
- rescue Errno::ETIMEDOUT => e
303
- if csot
304
- raise Error::TimeoutError, "#{e.class}: #{e} (for #{self})"
305
- else
306
- raise Error::SocketTimeoutError, "#{e.class}: #{e} (for #{self})"
307
- end
308
- rescue Error::SocketTimeoutError => e
309
- if csot
310
- raise Error::TimeoutError, "#{e.class}: #{e} (for #{self})"
311
- else
312
- raise e
313
- end
314
- rescue IOError, SystemCallError, ::SocketError => e
315
- raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
316
- rescue OpenSSL::SSL::SSLError => e
317
- raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
318
- end
296
+ yield
297
+ rescue Errno::ETIMEDOUT => e
298
+ raise Error::TimeoutError, "#{e.class}: #{e} (for #{self})" if csot
299
+
300
+ raise Error::SocketTimeoutError, "#{e.class}: #{e} (for #{self})"
301
+ rescue Error::SocketTimeoutError => e
302
+ raise Error::TimeoutError, "#{e.class}: #{e} (for #{self})" if csot
303
+
304
+ raise e
305
+ rescue IOError, SystemCallError, ::SocketError => e
306
+ raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
307
+ rescue OpenSSL::SSL::SSLError => e
308
+ raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
319
309
  end
320
310
  end
321
311
  end
@@ -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
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  module Auth
20
19
  class Aws
21
-
22
20
  # Defines behavior around a single MONGODB-AWS conversation between the
23
21
  # client and server.
24
22
  #
@@ -26,7 +24,6 @@ module Mongo
26
24
  #
27
25
  # @api private
28
26
  class Conversation < SaslConversationBase
29
-
30
27
  # Continue the AWS conversation. This sends the client final message
31
28
  # to the server after setting the reply from the previous server
32
29
  # communication.
@@ -45,12 +42,13 @@ module Mongo
45
42
  validate_server_nonce!
46
43
  @sts_host = payload[:h]
47
44
  unless (1..255).include?(@sts_host.bytesize)
48
- raise Error::InvalidServerAuthConfiguration, "STS host name length is not in 1..255 bytes range: #{@sts_host}"
45
+ raise Error::InvalidServerAuthConfiguration,
46
+ "STS host name length is not in 1..255 bytes range: #{@sts_host}"
49
47
  end
50
48
 
51
49
  selector = CLIENT_CONTINUE_MESSAGE.merge(
52
50
  payload: BSON::Binary.new(client_final_payload),
53
- conversationId: conversation_id,
51
+ conversationId: conversation_id
54
52
  )
55
53
  build_message(connection, user.auth_source, selector)
56
54
  end
@@ -91,7 +89,7 @@ module Mongo
91
89
  secret_access_key: credentials.secret_access_key,
92
90
  session_token: credentials.session_token,
93
91
  host: @sts_host,
94
- server_nonce: server_nonce,
92
+ server_nonce: server_nonce
95
93
  )
96
94
 
97
95
  # Uncomment this line to validate obtained credentials on the
@@ -107,15 +105,13 @@ module Mongo
107
105
  # rules, validation will fail but credentials may be perfectly OK
108
106
  # and the server may be able to authenticate using them just fine
109
107
  # (provided the server is allowed to communicate with STS).
110
- #request.validate!
108
+ # request.validate!
111
109
 
112
110
  payload = {
113
111
  a: request.authorization,
114
112
  d: request.formatted_time,
115
113
  }
116
- if credentials.session_token
117
- payload[:t] = credentials.session_token
118
- end
114
+ payload[:t] = credentials.session_token if credentials.session_token
119
115
  payload.to_bson.to_s
120
116
  end
121
117
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2023-present MongoDB Inc.
5
4
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2023-present MongoDB Inc.
5
4
  #