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) 2015-2020 MongoDB Inc.
5
4
  #
@@ -20,7 +19,6 @@ require 'mongo/operation/map_reduce/result'
20
19
 
21
20
  module Mongo
22
21
  module Operation
23
-
24
22
  # A MongoDB mapreduce operation.
25
23
  #
26
24
  # @api private
@@ -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
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2018-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class ParallelScan
21
-
22
20
  # A MongoDB parallelscan operation sent as an op message.
23
21
  #
24
22
  # @api private
@@ -31,12 +29,13 @@ module Mongo
31
29
 
32
30
  private
33
31
 
34
- def selector(connection)
35
- sel = { :parallelCollectionScan => coll_name, :numCursors => cursor_count }
32
+ def selector(_connection)
33
+ sel = { parallelCollectionScan: coll_name, numCursors: cursor_count }
36
34
  sel[:maxTimeMS] = max_time_ms if max_time_ms
37
35
  if read_concern
38
36
  sel[:readConcern] = Options::Mapper.transform_values_to_strings(
39
- read_concern)
37
+ read_concern
38
+ )
40
39
  end
41
40
  sel
42
41
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2015-2020 MongoDB Inc.
5
4
  #
@@ -18,18 +17,16 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class ParallelScan
21
-
22
20
  # Defines custom behavior of results in a parallel scan.
23
21
  #
24
22
  # @since 2.0.0
25
23
  # @api semiprivate
26
24
  class Result < Operation::Result
27
-
28
25
  # The name of the cursors field in the result.
29
26
  #
30
27
  # @since 2.0.0
31
28
  # @api private
32
- CURSORS = 'cursors'.freeze
29
+ CURSORS = 'cursors'
33
30
 
34
31
  # Get all the cursor ids from the result.
35
32
  #
@@ -41,7 +38,7 @@ module Mongo
41
38
  # @since 2.0.0
42
39
  # @api private
43
40
  def cursor_ids
44
- documents.map {|doc| doc[CURSOR][CURSOR_ID]}
41
+ documents.map { |doc| doc[CURSOR][CURSOR_ID] }
45
42
  end
46
43
 
47
44
  # Get the documents from parallel scan.
@@ -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
  #
@@ -20,7 +19,6 @@ require 'mongo/operation/parallel_scan/result'
20
19
 
21
20
  module Mongo
22
21
  module Operation
23
-
24
22
  # A MongoDB parallelscan operation.
25
23
  #
26
24
  # @api private
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2018-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class RemoveUser
21
-
22
20
  # A MongoDB removeuser operation sent as an op message.
23
21
  #
24
22
  # @api private
@@ -29,8 +27,8 @@ module Mongo
29
27
 
30
28
  private
31
29
 
32
- def selector(connection)
33
- { :dropUser => user_name }
30
+ def selector(_connection)
31
+ { dropUser: user_name }
34
32
  end
35
33
  end
36
34
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2015-2020 MongoDB Inc.
5
4
  #
@@ -19,7 +18,6 @@ require 'mongo/operation/remove_user/op_msg'
19
18
 
20
19
  module Mongo
21
20
  module Operation
22
-
23
21
  # A MongoDB removeuser operation.
24
22
  #
25
23
  # @api private
@@ -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,11 +15,9 @@
16
15
  # limitations under the License.
17
16
 
18
17
  require 'mongo/operation/shared/result/aggregatable'
19
- require 'mongo/operation/shared/result/use_legacy_error_parser'
20
18
 
21
19
  module Mongo
22
20
  module Operation
23
-
24
21
  # Result wrapper for wire protocol replies.
25
22
  #
26
23
  # An operation has zero or one replies. The only operations producing zero
@@ -39,49 +36,49 @@ module Mongo
39
36
  #
40
37
  # @since 2.2.0
41
38
  # @api private
42
- CURSOR = 'cursor'.freeze
39
+ CURSOR = 'cursor'
43
40
 
44
41
  # The cursor id field in the cursor document.
45
42
  #
46
43
  # @since 2.2.0
47
44
  # @api private
48
- CURSOR_ID = 'id'.freeze
45
+ CURSOR_ID = 'id'
49
46
 
50
47
  # The field name for the first batch of a cursor.
51
48
  #
52
49
  # @since 2.2.0
53
50
  # @api private
54
- FIRST_BATCH = 'firstBatch'.freeze
51
+ FIRST_BATCH = 'firstBatch'
55
52
 
56
53
  # The field name for the next batch of a cursor.
57
54
  #
58
55
  # @since 2.2.0
59
56
  # @api private
60
- NEXT_BATCH = 'nextBatch'.freeze
57
+ NEXT_BATCH = 'nextBatch'
61
58
 
62
59
  # The namespace field in the cursor document.
63
60
  #
64
61
  # @since 2.2.0
65
62
  # @api private
66
- NAMESPACE = 'ns'.freeze
63
+ NAMESPACE = 'ns'
67
64
 
68
65
  # The number of documents updated in the write.
69
66
  #
70
67
  # @since 2.0.0
71
68
  # @api private
72
- N = 'n'.freeze
69
+ N = 'n'
73
70
 
74
71
  # The ok status field in the result.
75
72
  #
76
73
  # @since 2.0.0
77
74
  # @api private
78
- OK = 'ok'.freeze
75
+ OK = 'ok'
79
76
 
80
77
  # The result field constant.
81
78
  #
82
79
  # @since 2.2.0
83
80
  # @api private
84
- RESULT = 'result'.freeze
81
+ RESULT = 'result'
85
82
 
86
83
  # Initialize a new result.
87
84
  #
@@ -107,23 +104,23 @@ module Mongo
107
104
  def initialize(replies, connection_description = nil, connection_global_id = nil, context: nil, connection: nil)
108
105
  @context = context
109
106
 
110
- if replies
111
- if replies.is_a?(Array)
112
- if replies.length != 1
113
- raise ArgumentError, "Only one (or zero) reply is supported, given #{replies.length}"
114
- end
115
- reply = replies.first
116
- else
117
- reply = replies
118
- end
119
- unless reply.is_a?(Protocol::Message)
120
- raise ArgumentError, "Argument must be a Message instance, but is a #{reply.class}: #{reply.inspect}"
121
- end
122
- @replies = [ reply ]
123
- @connection_description = connection_description
124
- @connection_global_id = connection_global_id
125
- @connection = connection
107
+ return unless replies
108
+
109
+ if replies.is_a?(Array)
110
+ raise ArgumentError, "Only one (or zero) reply is supported, given #{replies.length}" if replies.length != 1
111
+
112
+ reply = replies.first
113
+ else
114
+ reply = replies
126
115
  end
116
+ unless reply.is_a?(Protocol::Message)
117
+ raise ArgumentError, "Argument must be a Message instance, but is a #{reply.class}: #{reply.inspect}"
118
+ end
119
+
120
+ @replies = [ reply ]
121
+ @connection_description = connection_description
122
+ @connection_global_id = connection_global_id
123
+ @connection = connection
127
124
  end
128
125
 
129
126
  # @return [ Array<Protocol::Message> ] replies The wrapped wire protocol replies.
@@ -153,16 +150,10 @@ module Mongo
153
150
 
154
151
  # @api private
155
152
  def_delegators :parser,
156
- :not_master?, :node_recovering?, :node_shutting_down?
153
+ :not_master?, :node_recovering?, :node_shutting_down?
157
154
 
158
155
  # Is the result acknowledged?
159
156
  #
160
- # @note On MongoDB 2.6 and higher all writes are acknowledged since the
161
- # driver uses write commands for all write operations. On 2.4 and
162
- # lower, the result is acknowledged if the GLE has been executed after
163
- # the command. If not, no replies will be specified. Reads will always
164
- # return true here since a replies is always provided.
165
- #
166
157
  # @return [ true, false ] If the result is acknowledged.
167
158
  #
168
159
  # @since 2.0.0
@@ -263,11 +254,9 @@ module Mongo
263
254
  # @since 2.0.0
264
255
  # @api private
265
256
  def reply
266
- if acknowledged?
267
- replies.first
268
- else
269
- nil
270
- end
257
+ return unless acknowledged?
258
+
259
+ replies.first
271
260
  end
272
261
 
273
262
  # Get the number of documents returned by the server in this batch.
@@ -298,7 +287,8 @@ module Mongo
298
287
  # @since 2.0.0
299
288
  # @api public
300
289
  def successful?
301
- return true if !acknowledged?
290
+ return true unless acknowledged?
291
+
302
292
  if first_document.has_key?(OK)
303
293
  ok? && parser.message.empty?
304
294
  else
@@ -340,7 +330,7 @@ module Mongo
340
330
  # @since 2.0.0
341
331
  # @api private
342
332
  def validate!
343
- !successful? ? raise_operation_failure : self
333
+ successful? ? self : raise_operation_failure
344
334
  end
345
335
 
346
336
  # The exception instance (of Error::OperationFailure::Family)
@@ -365,7 +355,7 @@ module Mongo
365
355
  wtimeout: parser.wtimeout,
366
356
  connection_description: connection_description,
367
357
  document: parser.document,
368
- server_message: parser.server_message,
358
+ server_message: parser.server_message
369
359
  )
370
360
  end
371
361
 
@@ -383,7 +373,7 @@ module Mongo
383
373
  def topology_version
384
374
  unless defined?(@topology_version)
385
375
  @topology_version = first_document['topologyVersion'] &&
386
- TopologyVersion.new(first_document['topologyVersion'])
376
+ TopologyVersion.new(first_document['topologyVersion'])
387
377
  end
388
378
  @topology_version
389
379
  end
@@ -406,7 +396,7 @@ module Mongo
406
396
  end
407
397
 
408
398
  # @api public
409
- alias :n :written_count
399
+ alias n written_count
410
400
 
411
401
  # Get the operation time reported in the server response.
412
402
  #
@@ -459,9 +449,9 @@ module Mongo
459
449
  end
460
450
 
461
451
  def snapshot_timestamp
462
- if doc = reply.documents.first
463
- doc['cursor']&.[]('atClusterTime') || doc['atClusterTime']
464
- end
452
+ return unless doc = reply.documents.first
453
+
454
+ doc['cursor']&.[]('atClusterTime') || doc['atClusterTime']
465
455
  end
466
456
 
467
457
  private
@@ -483,7 +473,7 @@ module Mongo
483
473
 
484
474
  def aggregate_written_count
485
475
  documents.reduce(0) do |n, document|
486
- n += (document[N] || 0)
476
+ n += document[N] || 0
487
477
  n
488
478
  end
489
479
  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,20 +16,16 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # Custom behavior for operations that support the bypassdocumentvalidation option.
22
20
  #
23
21
  # @since 2.5.2
24
22
  # @api private
25
23
  module BypassDocumentValidation
26
-
27
24
  private
28
25
 
29
26
  def command(connection)
30
- if Lint.enabled?
31
- unless connection.is_a?(Server::Connection)
32
- raise Error::LintError, "Connection is not a Connection instance: #{connection}"
33
- end
27
+ if Lint.enabled? && !connection.is_a?(Server::Connection)
28
+ raise Error::LintError, "Connection is not a Connection instance: #{connection}"
34
29
  end
35
30
 
36
31
  sel = super
@@ -39,6 +34,7 @@ module Mongo
39
34
 
40
35
  def add_bypass_document_validation(sel)
41
36
  return sel unless bypass_document_validation
37
+
42
38
  sel.merge(bypassDocumentValidation: true)
43
39
  end
44
40
  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,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # Custom behavior for operations that support causal consistency.
22
20
  #
23
21
  # @since 2.5.2
24
22
  # @api private
25
23
  module CausalConsistencySupported
26
-
27
24
  private
28
25
 
29
26
  # Adds causal consistency document to the selector, if one can be
@@ -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
  #
@@ -19,13 +18,11 @@ require 'mongo/error'
19
18
 
20
19
  module Mongo
21
20
  module Operation
22
-
23
21
  # Shared executable behavior of operations.
24
22
  #
25
23
  # @since 2.5.2
26
24
  # @api private
27
25
  module Executable
28
-
29
26
  include ResponseHandling
30
27
 
31
28
  # @return [ Operation::Context | nil ] the operation context used to
@@ -45,11 +42,10 @@ module Mongo
45
42
  add_error_labels(connection, context) do
46
43
  check_for_network_error do
47
44
  add_server_diagnostics(connection) do
48
- get_result(connection, context, options).tap do |result|
45
+ get_result(connection, context, options) do |result|
49
46
  if session
50
47
  if session.in_transaction? &&
51
- connection.description.load_balancer?
52
- then
48
+ connection.description.load_balancer?
53
49
  if session.pinned_connection_global_id
54
50
  unless session.pinned_connection_global_id == connection.global_id
55
51
  raise(
@@ -57,9 +53,9 @@ module Mongo
57
53
  "Expected operation to use connection #{session.pinned_connection_global_id} but it used #{connection.global_id}"
58
54
  )
59
55
  end
60
- else
61
- session.pin_to_connection(connection.global_id)
62
- connection.pin
56
+ elsif !session.committing_transaction? && !session.aborting_transaction?
57
+ session.pin_to_connection(connection.global_id, connection: connection)
58
+ connection.pin(:transaction)
63
59
  end
64
60
  end
65
61
 
@@ -69,8 +65,7 @@ module Mongo
69
65
  end
70
66
 
71
67
  if result.has_cursor_id? &&
72
- connection.description.load_balancer?
73
- then
68
+ connection.description.load_balancer?
74
69
  if result.cursor_id == 0
75
70
  connection.unpin
76
71
  else
@@ -86,10 +81,8 @@ module Mongo
86
81
  end
87
82
 
88
83
  def execute(connection, context:, options: {})
89
- if Lint.enabled?
90
- unless connection.is_a?(Mongo::Server::Connection)
91
- raise Error::LintError, "Connection argument is of wrong type: #{connection}"
92
- end
84
+ if Lint.enabled? && !connection.is_a?(Mongo::Server::Connection)
85
+ raise Error::LintError, "Connection argument is of wrong type: #{connection}"
93
86
  end
94
87
 
95
88
  do_execute(connection, context, options).tap do |result|
@@ -104,15 +97,23 @@ module Mongo
104
97
  end
105
98
 
106
99
  def get_result(connection, context, options = {})
107
- result_class.new(*dispatch_message(connection, context, options), context: context, connection: connection)
100
+ message = build_message(connection, context)
101
+ connection.tracer.trace_command(message, context, connection) do
102
+ result = result_class.new(*dispatch_message(message, connection, context, options), context: context,
103
+ connection: connection)
104
+ if block_given?
105
+ yield result
106
+ else
107
+ result
108
+ end
109
+ end
108
110
  end
109
111
 
110
112
  # Returns a Protocol::Message or nil as reply.
111
- def dispatch_message(connection, context, options = {})
112
- message = build_message(connection, context)
113
+ def dispatch_message(message, connection, context, options = {})
113
114
  message = message.maybe_encrypt(connection, context)
114
115
  reply = connection.dispatch([ message ], context, options)
115
- [reply, connection.description, connection.global_id]
116
+ [ reply, connection.description, connection.global_id ]
116
117
  end
117
118
 
118
119
  # @param [ Mongo::Server::Connection ] connection The connection on which
@@ -131,29 +132,26 @@ module Mongo
131
132
 
132
133
  process_result_for_sdam(result, connection)
133
134
 
134
- if session
135
- session.process(result)
136
- end
135
+ session.process(result) if session
137
136
 
138
137
  result
139
138
  end
140
139
 
141
140
  def process_result_for_sdam(result, connection)
142
141
  if (result.not_master? || result.node_recovering?) &&
143
- connection.generation >= connection.server.pool.generation(service_id: connection.service_id)
144
- then
145
- if result.node_shutting_down?
146
- keep_pool = false
147
- else
148
- # Max wire version needs to be examined while the server is known
149
- keep_pool = connection.description.server_version_gte?('4.2')
150
- end
142
+ connection.generation >= connection.server.pool.generation(service_id: connection.service_id)
143
+ keep_pool = if result.node_shutting_down?
144
+ false
145
+ else
146
+ # Max wire version needs to be examined while the server is known
147
+ connection.description.server_version_gte?('4.2')
148
+ end
151
149
 
152
150
  connection.server.unknown!(
153
151
  keep_connection_pool: keep_pool,
154
152
  generation: connection.generation,
155
153
  service_id: connection.service_id,
156
- topology_version: result.topology_version,
154
+ topology_version: result.topology_version
157
155
  )
158
156
 
159
157
  connection.server.scan_semaphore.signal
@@ -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,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # Shared executable behavior of operations for operations
22
20
  # whose result should not be validated.
23
21
  #
24
22
  # @api private
25
23
  module ExecutableNoValidate
26
-
27
24
  def execute(connection, context:)
28
25
  do_execute(connection, context)
29
26
  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
  module Operation
20
-
21
19
  # Shared behavior of applying transaction error label to execution result.
22
20
  #
23
21
  # @note This module should be included after ExecutableNoValidate,
@@ -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,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
- # Shared behavior of operations that require its documents to each have an id.
19
+ # Shared behavior of operations that require their documents to each have an id.
22
20
  #
23
21
  # @since 2.5.2
24
22
  # @api private
25
23
  module Idable
26
-
27
24
  def documents
28
25
  @documents ||= ensure_ids(super)
29
26
  end
@@ -33,7 +30,7 @@ module Mongo
33
30
  # The option for a custom id generator.
34
31
  #
35
32
  # @since 2.2.0
36
- ID_GENERATOR = :id_generator.freeze
33
+ ID_GENERATOR = :id_generator
37
34
 
38
35
  # Get the id generator.
39
36
  #
@@ -44,7 +41,7 @@ module Mongo
44
41
  #
45
42
  # @since 2.2.0
46
43
  def id_generator
47
- @id_generator ||= (spec[ID_GENERATOR] || Operation::ObjectIdGenerator.new)
44
+ @id_generator ||= spec[ID_GENERATOR] || Operation::ObjectIdGenerator.new
48
45
  end
49
46
 
50
47
  def id(doc)
@@ -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
  #
@@ -17,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # Shared behavior of operations that require its documents to each have an id.
22
20
  #
23
21
  # @since 2.5.2
24
22
  # @api private
25
23
  module Limited
26
-
27
24
  private
28
25
 
29
26
  # Get the options for executing the operation on a particular connection.
@@ -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
  #
@@ -17,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # The default generator of ids for documents.
22
20
  #
23
21
  # @since 2.2.0
24
22
  # @api private
25
23
  class ObjectIdGenerator
26
-
27
24
  # Generate a new id.
28
25
  #
29
26
  # @example Generate the id.
@@ -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
  module Operation
20
-
21
19
  # Shared behavior of executing the operation as an OpMsg.
22
20
  #
23
21
  # @api private
@@ -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
  module Operation
20
-
21
19
  # Shared behavior of looking up a class based on the name of
22
20
  # the receiver's class.
23
21
  #