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