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) 2014-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  require 'mongo/database/view'
19
18
 
20
19
  module Mongo
21
-
22
20
  # Represents a database on the db server and operations that can execute on
23
21
  # it at this level.
24
22
  #
@@ -30,33 +28,33 @@ module Mongo
30
28
  # The admin database name.
31
29
  #
32
30
  # @since 2.0.0
33
- ADMIN = 'admin'.freeze
31
+ ADMIN = 'admin'
34
32
 
35
33
  # The "collection" that database commands operate against.
36
34
  #
37
35
  # @since 2.0.0
38
- COMMAND = '$cmd'.freeze
36
+ COMMAND = '$cmd'
39
37
 
40
38
  # The default database options.
41
39
  #
42
40
  # @since 2.0.0
43
- DEFAULT_OPTIONS = Options::Redacted.new(:database => ADMIN).freeze
41
+ DEFAULT_OPTIONS = Options::Redacted.new(database: ADMIN).freeze
44
42
 
45
43
  # Database name field constant.
46
44
  #
47
45
  # @since 2.1.0
48
46
  # @deprecated
49
- NAME = 'name'.freeze
47
+ NAME = 'name'
50
48
 
51
49
  # Databases constant.
52
50
  #
53
51
  # @since 2.1.0
54
- DATABASES = 'databases'.freeze
52
+ DATABASES = 'databases'
55
53
 
56
54
  # The name of the collection that holds all the collection names.
57
55
  #
58
56
  # @since 2.0.0
59
- NAMESPACES = 'system.namespaces'.freeze
57
+ NAMESPACES = 'system.namespaces'
60
58
 
61
59
  # @return [ Client ] client The database client.
62
60
  attr_reader :client
@@ -74,7 +72,8 @@ module Mongo
74
72
  :server_selector,
75
73
  :read_concern,
76
74
  :write_concern,
77
- :encrypted_fields_map
75
+ :encrypted_fields_map,
76
+ :tracer
78
77
 
79
78
  # @return [ Mongo::Server ] Get the primary server from the cluster.
80
79
  def_delegators :cluster,
@@ -93,6 +92,7 @@ module Mongo
93
92
  # @since 2.0.0
94
93
  def ==(other)
95
94
  return false unless other.is_a?(Database)
95
+
96
96
  name == other.name
97
97
  end
98
98
 
@@ -109,11 +109,13 @@ module Mongo
109
109
  # @since 2.0.0
110
110
  def [](collection_name, options = {})
111
111
  if options[:server_api]
112
- raise ArgumentError, 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level'
112
+ raise ArgumentError,
113
+ 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level'
113
114
  end
115
+
114
116
  Collection.new(self, collection_name, options)
115
117
  end
116
- alias_method :collection, :[]
118
+ alias collection []
117
119
 
118
120
  # Get all the names of the non-system collections in the database.
119
121
  #
@@ -222,7 +224,7 @@ module Mongo
222
224
  # executes this command. This is an internal option and is subject to
223
225
  # change.
224
226
  # - :deserialize_as_bson [ Boolean ] Whether to deserialize the response
225
- # to this command using BSON types intead of native Ruby types wherever
227
+ # to this command using BSON types instead of native Ruby types wherever
226
228
  # possible.
227
229
  #
228
230
  # @return [ Mongo::Operation::Result ] The result of the command execution.
@@ -230,31 +232,30 @@ module Mongo
230
232
  opts = opts.dup
231
233
  execution_opts = opts.delete(:execution_options) || {}
232
234
 
233
- txn_read_pref = if opts[:session] && opts[:session].in_transaction?
234
- opts[:session].txn_read_preference
235
- else
236
- nil
237
- end
235
+ txn_read_pref = (opts[:session].txn_read_preference if opts[:session] && opts[:session].in_transaction?)
238
236
  txn_read_pref ||= opts[:read] || ServerSelector::PRIMARY
239
237
  Lint.validate_underscore_read_preference(txn_read_pref)
240
238
  selector = ServerSelector.get(txn_read_pref)
241
239
 
242
240
  client.with_session(opts) do |session|
243
- server = selector.select_server(cluster, nil, session)
241
+ context = Operation::Context.new(
242
+ client: client,
243
+ session: session,
244
+ operation_timeouts: operation_timeouts(opts)
245
+ )
244
246
  op = Operation::Command.new(
245
- :selector => operation,
246
- :db_name => name,
247
- :read => selector,
248
- :session => session
247
+ selector: operation,
248
+ db_name: name,
249
+ read: selector,
250
+ session: session
249
251
  )
250
252
 
251
- op.execute(server,
252
- context: Operation::Context.new(
253
- client: client,
254
- session: session,
255
- operation_timeouts: operation_timeouts(opts)
256
- ),
257
- options: execution_opts)
253
+ retry_enabled = client.options[:retry_reads] != false &&
254
+ client.options[:retry_writes] != false
255
+ with_overload_retry(context: context, retry_enabled: retry_enabled) do
256
+ server = selector.select_server(cluster, nil, session)
257
+ op.execute(server, context: context, options: execution_opts)
258
+ end
258
259
  end
259
260
  end
260
261
 
@@ -267,19 +268,17 @@ module Mongo
267
268
  # @option opts :session [ Session ] The session to use for this command.
268
269
  # @option opts [ Object ] :comment A user-provided
269
270
  # comment to attach to this command.
270
- # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
271
+ # @option opts [ Integer ] :timeout_ms The operation timeout in milliseconds.
271
272
  # Must be a non-negative integer. An explicit value of 0 means infinite.
272
273
  # The default value is unset which means the value is inherited from
273
274
  # the database or the client.
275
+ # @option opts :op_name [ String | nil ] The name of the operation for
276
+ # tracing purposes.
274
277
  #
275
278
  # @return [ Hash ] The result of the command execution.
276
279
  # @api private
277
280
  def read_command(operation, opts = {})
278
- txn_read_pref = if opts[:session] && opts[:session].in_transaction?
279
- opts[:session].txn_read_preference
280
- else
281
- nil
282
- end
281
+ txn_read_pref = (opts[:session].txn_read_preference if opts[:session] && opts[:session].in_transaction?)
283
282
  txn_read_pref ||= opts[:read] || ServerSelector::PRIMARY
284
283
  Lint.validate_underscore_read_preference(txn_read_pref)
285
284
  preference = ServerSelector.get(txn_read_pref)
@@ -290,14 +289,18 @@ module Mongo
290
289
  session: session,
291
290
  operation_timeouts: operation_timeouts(opts)
292
291
  )
293
- read_with_retry(session, preference, context) do |server|
294
- Operation::Command.new(
295
- selector: operation.dup,
296
- db_name: name,
297
- read: preference,
298
- session: session,
299
- comment: opts[:comment],
300
- ).execute(server, context: context)
292
+ operation = Operation::Command.new(
293
+ selector: operation.dup,
294
+ db_name: name,
295
+ read: preference,
296
+ session: session,
297
+ comment: opts[:comment]
298
+ )
299
+ op_name = opts[:op_name] || 'command'
300
+ tracer.trace_operation(operation, context, op_name: op_name) do
301
+ read_with_retry(session, preference, context) do |server|
302
+ operation.execute(server, context: context)
303
+ end
301
304
  end
302
305
  end
303
306
  end
@@ -320,26 +323,26 @@ module Mongo
320
323
  #
321
324
  # @since 2.0.0
322
325
  def drop(options = {})
323
- operation = { :dropDatabase => 1 }
326
+ operation = { dropDatabase: 1 }
324
327
  client.with_session(options) do |session|
325
328
  write_concern = if options[:write_concern]
326
- WriteConcern.get(options[:write_concern])
327
- else
328
- self.write_concern
329
- end
329
+ WriteConcern.get(options[:write_concern])
330
+ else
331
+ self.write_concern
332
+ end
330
333
  Operation::DropDatabase.new({
331
- selector: operation,
332
- db_name: name,
333
- write_concern: write_concern,
334
- session: session
335
- }).execute(
336
- next_primary(nil, session),
337
- context: Operation::Context.new(
338
- client: client,
339
- session: session,
340
- operation_timeouts: operation_timeouts(options)
341
- )
342
- )
334
+ selector: operation,
335
+ db_name: name,
336
+ write_concern: write_concern,
337
+ session: session
338
+ }).execute(
339
+ next_primary(nil, session),
340
+ context: Operation::Context.new(
341
+ client: client,
342
+ session: session,
343
+ operation_timeouts: operation_timeouts(options)
344
+ )
345
+ )
343
346
  end
344
347
  end
345
348
 
@@ -364,6 +367,7 @@ module Mongo
364
367
  if Lint.enabled? && !(name.is_a?(String) || name.is_a?(Symbol))
365
368
  raise "Database name must be a string or a symbol: #{name}"
366
369
  end
370
+
367
371
  @client = client
368
372
  @name = name.to_s.freeze
369
373
  @options = options.freeze
@@ -451,9 +455,8 @@ module Mongo
451
455
  View.new(self, options).aggregate(pipeline, options)
452
456
  end
453
457
 
454
- # As of version 3.6 of the MongoDB server, a ``$changeStream`` pipeline stage is supported
455
- # in the aggregation framework. As of version 4.0, this stage allows users to request that
456
- # notifications are sent for all changes that occur in the client's database.
458
+ # Allows users to request that notifications are sent for all changes that
459
+ # occur in the client's database.
457
460
  #
458
461
  # @example Get change notifications for a given database..
459
462
  # database.watch([{ '$match' => { operationType: { '$in' => ['insert', 'replace'] } } }])
@@ -500,7 +503,6 @@ module Mongo
500
503
  # @option options [ BSON::Timestamp ] :start_at_operation_time Only return
501
504
  # changes that occurred after the specified timestamp. Any command run
502
505
  # against the server will return a cluster time that can be used here.
503
- # Only recognized by server versions 4.0+.
504
506
  # @option options [ Object ] :comment A user-provided
505
507
  # comment to attach to this command.
506
508
  # @option options [ Boolean ] :show_expanded_events Enables the server to
@@ -524,7 +526,8 @@ module Mongo
524
526
  Mongo::Collection::View.new(collection("#{COMMAND}.aggregate"), {}, view_options),
525
527
  pipeline,
526
528
  Mongo::Collection::View::ChangeStream::DATABASE,
527
- options)
529
+ options
530
+ )
528
531
  end
529
532
 
530
533
  # Create a database for the provided client, for use when we don't want the
data/lib/mongo/dbref.rb CHANGED
@@ -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
  #
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongo/loggable'
4
+
5
+ module Mongo
6
+ # Used for reporting deprecated behavior in the driver. When it is possible
7
+ # to detect that a deprecated feature is being used, a warning should be issued
8
+ # through this module.
9
+ #
10
+ # The warning will be issued no more than once for that feature, regardless
11
+ # of how many times Mongo::Deprecations.warn is called.
12
+ #
13
+ # @example Issue a deprecation warning.
14
+ # Mongo::Deprecations.warn(:old_feature, "The old_feature is deprecated, use new_feature instead.")
15
+ #
16
+ # @api private
17
+ module Deprecations
18
+ extend self
19
+ extend Mongo::Loggable
20
+
21
+ # Mutex for synchronizing access to warned features.
22
+ # @api private
23
+ MUTEX = Thread::Mutex.new
24
+
25
+ # Issue a warning about a deprecated feature. The warning is written to the
26
+ # logger, and will not be written more than once per feature.
27
+ #
28
+ # @param [ String | Symbol ] feature The deprecated feature.
29
+ # @param [ String ] message The deprecation message.
30
+ def warn(feature, message)
31
+ MUTEX.synchronize do
32
+ return if _warned?(feature)
33
+
34
+ _warned!(feature)
35
+ log_warn("[DEPRECATION:#{feature}] #{message}")
36
+ end
37
+ end
38
+
39
+ # Check if a warning for a given deprecated feature has already been issued.
40
+ #
41
+ # @param [ String | Symbol ] feature The deprecated feature.
42
+ # @param [ true | false ] prefix Whether to check for prefix matches.
43
+ #
44
+ # @return [ true | false ] If a warning has already been issued.
45
+ def warned?(feature, prefix: false)
46
+ MUTEX.synchronize { _warned?(feature, prefix: prefix) }
47
+ end
48
+
49
+ # Mark that a warning for a given deprecated feature has been issued.
50
+ #
51
+ # @param [ String | Symbol ] feature The deprecated feature.
52
+ def warned!(feature)
53
+ MUTEX.synchronize { _warned!(feature) }
54
+ nil
55
+ end
56
+
57
+ # Clears all memory of previously warned features.
58
+ def clear!
59
+ MUTEX.synchronize { warned_features reset: true }
60
+ nil
61
+ end
62
+
63
+ private
64
+
65
+ # Set of features that have already been warned about.
66
+ #
67
+ # @param [ true | false ] reset Whether to reset the warned features.
68
+ #
69
+ # @return [ Set<String> ] The set of warned features.
70
+ def warned_features(reset: false)
71
+ @warned_features = nil if reset
72
+ @warned_features ||= Set.new
73
+ end
74
+
75
+ # Check if a warning for a given deprecated feature has already been issued.
76
+ # This version is not thread-safe.
77
+ #
78
+ # @param [ String | Symbol ] feature The deprecated feature.
79
+ # @param [ true | false ] prefix Whether to check for prefix matches.
80
+ #
81
+ # @return [ true | false ] If a warning has already been issued.
82
+ def _warned?(feature, prefix: false)
83
+ if prefix
84
+ warned_features.any? { |f| f.to_s.start_with?(feature) }
85
+ else
86
+ warned_features.include?(feature.to_s)
87
+ end
88
+ end
89
+
90
+ # Mark that a warning for a given deprecated feature has been issued.
91
+ # This version is not thread-safe.
92
+ #
93
+ # @param [ String | Symbol ] feature The deprecated feature.
94
+ def _warned!(feature)
95
+ warned_features.add(feature.to_s)
96
+ end
97
+ end
98
+ 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
  #
@@ -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
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised when authentication fails.
22
20
  #
23
21
  # Note: This class is derived from RuntimeError for
@@ -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
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised when the driver is in load-balancing mode but a connection
22
20
  # is established to something other than a mongos.
23
21
  class BadLoadBalancerTarget < Error
@@ -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,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised if there are write errors upon executing a bulk
22
20
  # operation.
23
21
  #
@@ -33,7 +31,6 @@ module Mongo
33
31
  #
34
32
  # @since 2.0.0
35
33
  class BulkWriteError < Error
36
-
37
34
  # @return [ BSON::Document ] result The error result.
38
35
  attr_reader :result
39
36
 
@@ -48,9 +45,11 @@ module Mongo
48
45
  # @since 2.0.0
49
46
  def initialize(result)
50
47
  @result = result
48
+
51
49
  # Exception constructor behaves differently for a nil argument and
52
50
  # for no argument. Avoid passing nil explicitly.
53
- super(*[build_message])
51
+ message = build_message
52
+ message ? super(message) : super()
54
53
  end
55
54
 
56
55
  private
@@ -77,24 +76,22 @@ module Mongo
77
76
  errors = @result['writeErrors']
78
77
  return nil unless errors
79
78
 
80
- fragment = ""
79
+ fragment = ''
81
80
  cut_short = false
82
81
  errors.first(10).each_with_index do |error, i|
83
- fragment += "; " if fragment.length > 0
82
+ fragment += '; ' if fragment.length > 0
84
83
  fragment += "[#{error['code']}]: #{error['errmsg']}"
85
84
  fragment += " -- #{error['errInfo'].to_json}" if error['errInfo']
86
85
 
87
86
  if fragment.length > 3000
88
- cut_short = i < [9, errors.length].min
87
+ cut_short = i < [ 9, errors.length ].min
89
88
  break
90
89
  end
91
90
  end
92
91
 
93
92
  fragment += '...' if errors.length > 10 || cut_short
94
93
 
95
- if errors.length > 1
96
- fragment = "Multiple errors: #{fragment}"
97
- end
94
+ fragment = "Multiple errors: #{fragment}" if errors.length > 1
98
95
 
99
96
  fragment
100
97
  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
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # A module signifying the error will always cause change stream to
22
20
  # resume once.
23
21
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2022 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  class ClientClosed < Error
22
20
  end
23
21
  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
  #
@@ -17,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised if the Grid::FSBucket::Stream object is closed and an operation is attempted.
22
20
  #
23
21
  # @since 2.1.0
24
22
  class ClosedStream < Error
25
-
26
23
  # Create the new exception.
27
24
  #
28
25
  # @example Create the new exception.
@@ -30,7 +27,7 @@ module Mongo
30
27
  #
31
28
  # @since 2.1.0
32
29
  def initialize
33
- super("The stream is closed and cannot be written to or read from.")
30
+ super('The stream is closed and cannot be written to or read from.')
34
31
  end
35
32
  end
36
33
  end
@@ -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,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised when trying to check out a connection from a connection
22
20
  # pool, the pool is at its max size and no connections become available
23
21
  # within the configured wait timeout.
@@ -27,7 +25,6 @@ module Mongo
27
25
  #
28
26
  # @since 2.9.0
29
27
  class ConnectionCheckOutTimeout < ::Timeout::Error
30
-
31
28
  # @return [ Mongo::Address ] address The address of the server the
32
29
  # pool's connections connect to.
33
30
  #
@@ -42,9 +39,9 @@ module Mongo
42
39
  def initialize(msg, options)
43
40
  super(msg)
44
41
  @address = options[:address]
45
- unless @address
46
- raise ArgumentError, 'Address argument is required'
47
- end
42
+ return if @address
43
+
44
+ raise ArgumentError, 'Address argument is required'
48
45
  end
49
46
  end
50
47
  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
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised when trying to perform operations on a connection that
22
20
  # experienced a network error.
23
21
  class ConnectionPerished < Error
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2022 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised when trying to check out a connection with a specific
22
20
  # global id, and the connection for that global id no longer exists in the
23
21
  # pool.
@@ -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 Error
20
-
21
19
  # Credential check for MONGODB-AWS authentication mechanism failed.
22
20
  #
23
21
  # This exception is raised when the driver attempts to verify the
@@ -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 Error
20
-
21
19
  # An error related to client-side encryption.
22
20
  class CryptError < Mongo::Error
23
21
  # Create a new CryptError
@@ -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 Error
20
-
21
19
  # Raised if an extra chunk is found.
22
20
  #
23
21
  # @since 2.1.0
24
22
  class ExtraFileChunk < Error
25
-
26
23
  # Create the new exception.
27
24
  #
28
25
  # @example Create the new exception.
@@ -30,7 +27,7 @@ module Mongo
30
27
  #
31
28
  # @since 2.1.0
32
29
  def initialize
33
- super("Extra file chunk found.")
30
+ super('Extra file chunk found.')
34
31
  end
35
32
  end
36
33
  end