mongo 2.16.4 → 2.20.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 (1612) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +33 -39
  4. data/Rakefile +31 -157
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/address/unix.rb +1 -1
  10. data/lib/mongo/address/validator.rb +1 -1
  11. data/lib/mongo/address.rb +1 -1
  12. data/lib/mongo/auth/aws/conversation.rb +1 -5
  13. data/lib/mongo/{operation/get_more/command.rb → auth/aws/credentials.rb} +15 -20
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +172 -37
  16. data/lib/mongo/auth/aws/request.rb +1 -3
  17. data/lib/mongo/auth/aws.rb +6 -6
  18. data/lib/mongo/auth/base.rb +9 -2
  19. data/lib/mongo/auth/conversation_base.rb +1 -1
  20. data/lib/mongo/auth/cr/conversation.rb +1 -1
  21. data/lib/mongo/auth/cr.rb +1 -1
  22. data/lib/mongo/auth/credential_cache.rb +1 -1
  23. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  24. data/lib/mongo/auth/gssapi.rb +1 -1
  25. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  26. data/lib/mongo/auth/ldap.rb +1 -1
  27. data/lib/mongo/auth/roles.rb +17 -17
  28. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  29. data/lib/mongo/auth/scram/conversation.rb +1 -1
  30. data/lib/mongo/auth/scram.rb +1 -1
  31. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  32. data/lib/mongo/auth/scram256.rb +1 -1
  33. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  35. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +1 -1
  39. data/lib/mongo/auth/user/view.rb +1 -1
  40. data/lib/mongo/auth/user.rb +1 -1
  41. data/lib/mongo/auth/x509/conversation.rb +1 -1
  42. data/lib/mongo/auth/x509.rb +1 -1
  43. data/lib/mongo/auth.rb +13 -2
  44. data/lib/mongo/background_thread.rb +1 -1
  45. data/lib/mongo/bson.rb +1 -1
  46. data/lib/mongo/bulk_write/combineable.rb +1 -1
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  48. data/lib/mongo/bulk_write/result.rb +11 -2
  49. data/lib/mongo/bulk_write/result_combiner.rb +3 -5
  50. data/lib/mongo/bulk_write/transformable.rb +1 -1
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/validatable.rb +1 -1
  53. data/lib/mongo/bulk_write.rb +118 -30
  54. data/lib/mongo/caching_cursor.rb +1 -1
  55. data/lib/mongo/client.rb +190 -22
  56. data/lib/mongo/client_encryption.rb +215 -11
  57. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +34 -16
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  60. data/lib/mongo/cluster/sdam_flow.rb +42 -15
  61. data/lib/mongo/cluster/topology/base.rb +17 -1
  62. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  67. data/lib/mongo/cluster/topology/single.rb +1 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  69. data/lib/mongo/cluster/topology.rb +1 -1
  70. data/lib/mongo/cluster.rb +82 -41
  71. data/lib/mongo/cluster_time.rb +1 -1
  72. data/lib/mongo/collection/helpers.rb +43 -0
  73. data/lib/mongo/collection/queryable_encryption.rb +162 -0
  74. data/lib/mongo/collection/view/aggregation.rb +68 -17
  75. data/lib/mongo/collection/view/builder/aggregation.rb +12 -14
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +2 -2
  77. data/lib/mongo/collection/view/builder.rb +1 -1
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  79. data/lib/mongo/collection/view/change_stream.rb +69 -23
  80. data/lib/mongo/collection/view/explainable.rb +2 -2
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +6 -6
  83. data/lib/mongo/collection/view/map_reduce.rb +21 -10
  84. data/lib/mongo/collection/view/readable.rb +54 -28
  85. data/lib/mongo/collection/view/writable.rb +153 -39
  86. data/lib/mongo/collection/view.rb +1 -1
  87. data/lib/mongo/collection.rb +332 -98
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +63 -0
  90. data/lib/mongo/config/validators/option.rb +27 -0
  91. data/lib/mongo/config.rb +43 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +140 -16
  94. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  95. data/lib/mongo/crypt/binary.rb +1 -1
  96. data/lib/mongo/crypt/binding.rb +715 -152
  97. data/lib/mongo/crypt/context.rb +72 -6
  98. data/lib/mongo/crypt/data_key_context.rb +13 -105
  99. data/lib/mongo/crypt/encryption_io.rb +95 -61
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +233 -30
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +76 -22
  103. data/lib/mongo/{operation/drop/command.rb → crypt/explicit_encryption_expression_context.rb} +9 -20
  104. data/lib/mongo/crypt/handle.rb +169 -87
  105. data/lib/mongo/crypt/hooks.rb +26 -3
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +20 -0
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +122 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +21 -0
  114. data/lib/mongo/crypt/kms/credentials.rb +96 -0
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +58 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +21 -0
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +19 -0
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +19 -0
  125. data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
  126. data/lib/mongo/crypt/kms.rb +122 -0
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
  130. data/lib/mongo/crypt/status.rb +9 -3
  131. data/lib/mongo/crypt.rb +16 -1
  132. data/lib/mongo/cursor/kill_spec.rb +42 -4
  133. data/lib/mongo/cursor.rb +68 -19
  134. data/lib/mongo/database/view.rb +51 -9
  135. data/lib/mongo/database.rb +65 -21
  136. data/lib/mongo/dbref.rb +2 -106
  137. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  138. data/lib/mongo/error/auth_error.rb +1 -1
  139. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  140. data/lib/mongo/error/bulk_write_error.rb +32 -5
  141. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  142. data/lib/mongo/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +1 -1
  144. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  145. data/lib/mongo/error/connection_perished.rb +3 -1
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +1 -1
  148. data/lib/mongo/error/crypt_error.rb +1 -1
  149. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  150. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  151. data/lib/mongo/error/file_not_found.rb +1 -1
  152. data/lib/mongo/error/handshake_error.rb +1 -1
  153. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  154. data/lib/mongo/error/internal_driver_error.rb +1 -1
  155. data/lib/mongo/error/invalid_address.rb +1 -1
  156. data/lib/mongo/error/invalid_application_name.rb +1 -1
  157. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  159. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  160. data/lib/mongo/error/invalid_config_option.rb +21 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  162. data/lib/mongo/error/invalid_database_name.rb +1 -1
  163. data/lib/mongo/error/invalid_document.rb +1 -1
  164. data/lib/mongo/error/invalid_file.rb +1 -1
  165. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  166. data/lib/mongo/error/invalid_max_connecting.rb +28 -0
  167. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  168. data/lib/mongo/error/invalid_nonce.rb +1 -1
  169. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  170. data/lib/mongo/error/invalid_read_option.rb +2 -2
  171. data/lib/mongo/error/invalid_replacement_document.rb +28 -10
  172. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  173. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  174. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  175. data/lib/mongo/error/invalid_session.rb +1 -1
  176. data/lib/mongo/error/invalid_signature.rb +1 -1
  177. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  178. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  179. data/lib/mongo/error/invalid_update_document.rb +28 -8
  180. data/lib/mongo/error/invalid_uri.rb +1 -1
  181. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  182. data/lib/mongo/error/kms_error.rb +1 -1
  183. data/lib/mongo/error/labelable.rb +72 -0
  184. data/lib/mongo/error/lint_error.rb +1 -1
  185. data/lib/mongo/error/max_bson_size.rb +1 -1
  186. data/lib/mongo/error/max_message_size.rb +1 -1
  187. data/lib/mongo/error/mismatched_domain.rb +1 -1
  188. data/lib/mongo/error/missing_connection.rb +27 -0
  189. data/lib/mongo/error/missing_file_chunk.rb +9 -3
  190. data/lib/mongo/error/missing_password.rb +1 -1
  191. data/lib/mongo/error/missing_resume_token.rb +1 -1
  192. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  193. data/lib/mongo/error/missing_service_id.rb +1 -1
  194. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  195. data/lib/mongo/error/multi_index_drop.rb +1 -1
  196. data/lib/mongo/error/need_primary_server.rb +1 -1
  197. data/lib/mongo/error/no_server_available.rb +1 -1
  198. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  199. data/lib/mongo/error/no_srv_records.rb +1 -1
  200. data/lib/mongo/error/notable.rb +15 -1
  201. data/lib/mongo/error/operation_failure.rb +35 -87
  202. data/lib/mongo/error/parser.rb +1 -1
  203. data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
  204. data/lib/mongo/error/pool_closed_error.rb +4 -17
  205. data/lib/mongo/{operation/update_user/command.rb → error/pool_error.rb} +21 -21
  206. data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
  207. data/lib/mongo/error/raise_original_error.rb +1 -1
  208. data/lib/mongo/error/read_write_retryable.rb +108 -0
  209. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  210. data/lib/mongo/error/server_api_conflict.rb +1 -1
  211. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  212. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  213. data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
  214. data/lib/mongo/error/session_ended.rb +1 -1
  215. data/lib/mongo/error/session_not_materialized.rb +29 -0
  216. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  217. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/snapshot_session_invalid_server_version.rb} +9 -19
  218. data/lib/mongo/{operation/command/command.rb → error/snapshot_session_transaction_prohibited.rb} +8 -19
  219. data/lib/mongo/error/socket_error.rb +1 -1
  220. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  221. data/lib/mongo/{operation/shared/op_msg_or_command.rb → error/transactions_not_supported.rb} +13 -20
  222. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  223. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  224. data/lib/mongo/error/unexpected_response.rb +1 -1
  225. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  226. data/lib/mongo/error/unmet_dependency.rb +1 -1
  227. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  228. data/lib/mongo/error/unsupported_collation.rb +1 -1
  229. data/lib/mongo/error/unsupported_features.rb +1 -1
  230. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  231. data/lib/mongo/error/unsupported_option.rb +1 -1
  232. data/lib/mongo/error/write_retryable.rb +1 -1
  233. data/lib/mongo/error.rb +16 -38
  234. data/lib/mongo/event/base.rb +1 -1
  235. data/lib/mongo/event/listeners.rb +1 -1
  236. data/lib/mongo/event/publisher.rb +1 -1
  237. data/lib/mongo/event/subscriber.rb +1 -1
  238. data/lib/mongo/event.rb +1 -1
  239. data/lib/mongo/grid/file/chunk.rb +3 -2
  240. data/lib/mongo/grid/file/info.rb +3 -2
  241. data/lib/mongo/grid/file.rb +1 -1
  242. data/lib/mongo/grid/fs_bucket.rb +7 -1
  243. data/lib/mongo/grid/stream/read.rb +7 -1
  244. data/lib/mongo/grid/stream/write.rb +1 -1
  245. data/lib/mongo/grid/stream.rb +1 -1
  246. data/lib/mongo/grid.rb +1 -1
  247. data/lib/mongo/id.rb +1 -1
  248. data/lib/mongo/index/view.rb +24 -8
  249. data/lib/mongo/index.rb +1 -1
  250. data/lib/mongo/lint.rb +1 -1
  251. data/lib/mongo/loggable.rb +3 -3
  252. data/lib/mongo/logger.rb +1 -1
  253. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  254. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  255. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  256. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  257. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  258. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  259. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  263. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  264. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  266. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  267. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  268. data/lib/mongo/monitoring/event/command_failed.rb +9 -3
  269. data/lib/mongo/monitoring/event/command_started.rb +2 -2
  270. data/lib/mongo/monitoring/event/command_succeeded.rb +10 -3
  271. data/lib/mongo/monitoring/event/secure.rb +2 -2
  272. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  273. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  274. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  275. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  276. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  277. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  278. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  279. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  280. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  281. data/lib/mongo/monitoring/event.rb +1 -1
  282. data/lib/mongo/monitoring/publishable.rb +10 -6
  283. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  284. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  285. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  286. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  287. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  288. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  291. data/lib/mongo/monitoring.rb +1 -1
  292. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  293. data/lib/mongo/operation/aggregate/result.rb +1 -1
  294. data/lib/mongo/operation/aggregate.rb +2 -3
  295. data/lib/mongo/operation/collections_info/result.rb +6 -3
  296. data/lib/mongo/operation/collections_info.rb +4 -16
  297. data/lib/mongo/operation/command/op_msg.rb +7 -1
  298. data/lib/mongo/operation/command.rb +2 -3
  299. data/lib/mongo/operation/context.rb +25 -7
  300. data/lib/mongo/operation/count/op_msg.rb +5 -2
  301. data/lib/mongo/operation/count.rb +2 -3
  302. data/lib/mongo/operation/create/op_msg.rb +5 -2
  303. data/lib/mongo/operation/create.rb +2 -3
  304. data/lib/mongo/operation/create_index/op_msg.rb +3 -2
  305. data/lib/mongo/operation/create_index.rb +2 -3
  306. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  307. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  308. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  309. data/lib/mongo/operation/create_user.rb +2 -3
  310. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  311. data/lib/mongo/operation/delete/op_msg.rb +4 -2
  312. data/lib/mongo/operation/delete/result.rb +1 -1
  313. data/lib/mongo/operation/delete.rb +1 -3
  314. data/lib/mongo/operation/distinct/op_msg.rb +5 -2
  315. data/lib/mongo/operation/distinct.rb +2 -3
  316. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  317. data/lib/mongo/operation/drop.rb +2 -3
  318. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  319. data/lib/mongo/operation/drop_database.rb +2 -3
  320. data/lib/mongo/operation/drop_index/op_msg.rb +6 -2
  321. data/lib/mongo/operation/drop_index.rb +2 -3
  322. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  323. data/lib/mongo/operation/drop_search_index.rb +15 -0
  324. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  325. data/lib/mongo/operation/explain/result.rb +1 -1
  326. data/lib/mongo/operation/explain.rb +2 -4
  327. data/lib/mongo/operation/find/builder/command.rb +2 -1
  328. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  329. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  330. data/lib/mongo/operation/find/builder.rb +1 -2
  331. data/lib/mongo/operation/find/op_msg.rb +1 -1
  332. data/lib/mongo/operation/find/result.rb +1 -1
  333. data/lib/mongo/operation/find.rb +2 -4
  334. data/lib/mongo/operation/get_more/command_builder.rb +6 -2
  335. data/lib/mongo/operation/get_more/op_msg.rb +1 -1
  336. data/lib/mongo/operation/get_more/result.rb +1 -1
  337. data/lib/mongo/operation/get_more.rb +2 -4
  338. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  339. data/lib/mongo/operation/indexes/result.rb +1 -1
  340. data/lib/mongo/operation/indexes.rb +2 -18
  341. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  342. data/lib/mongo/operation/insert/op_msg.rb +7 -4
  343. data/lib/mongo/operation/insert/result.rb +7 -4
  344. data/lib/mongo/operation/insert.rb +1 -3
  345. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  346. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  347. data/lib/mongo/operation/kill_cursors.rb +2 -4
  348. data/lib/mongo/operation/list_collections/op_msg.rb +5 -2
  349. data/lib/mongo/operation/list_collections/result.rb +1 -1
  350. data/lib/mongo/operation/list_collections.rb +2 -3
  351. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  352. data/lib/mongo/operation/map_reduce/result.rb +17 -1
  353. data/lib/mongo/operation/map_reduce.rb +2 -3
  354. data/lib/mongo/operation/op_msg_base.rb +1 -1
  355. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  356. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  357. data/lib/mongo/operation/parallel_scan.rb +2 -3
  358. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  359. data/lib/mongo/operation/remove_user.rb +2 -3
  360. data/lib/mongo/operation/result.rb +28 -6
  361. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  362. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  363. data/lib/mongo/operation/shared/executable.rb +48 -13
  364. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  365. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  366. data/lib/mongo/operation/shared/idable.rb +1 -1
  367. data/lib/mongo/operation/shared/limited.rb +1 -1
  368. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  369. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +25 -8
  370. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  371. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  372. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  373. data/lib/mongo/operation/shared/response_handling.rb +30 -31
  374. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  375. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  376. data/lib/mongo/operation/shared/sessions_supported.rb +26 -7
  377. data/lib/mongo/operation/shared/specifiable.rb +8 -1
  378. data/lib/mongo/operation/shared/validatable.rb +1 -1
  379. data/lib/mongo/operation/shared/write.rb +19 -13
  380. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  381. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  382. data/lib/mongo/operation/update/op_msg.rb +4 -2
  383. data/lib/mongo/operation/update/result.rb +1 -1
  384. data/lib/mongo/operation/update.rb +1 -3
  385. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  386. data/lib/mongo/operation/update_search_index.rb +15 -0
  387. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  388. data/lib/mongo/operation/update_user.rb +2 -3
  389. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  390. data/lib/mongo/operation/users_info/result.rb +1 -1
  391. data/lib/mongo/operation/users_info.rb +2 -3
  392. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  393. data/lib/mongo/operation/write_command.rb +2 -3
  394. data/lib/mongo/operation.rb +5 -4
  395. data/lib/mongo/options/mapper.rb +1 -1
  396. data/lib/mongo/options/redacted.rb +1 -1
  397. data/lib/mongo/options.rb +1 -1
  398. data/lib/mongo/protocol/bit_vector.rb +4 -2
  399. data/lib/mongo/protocol/caching_hash.rb +52 -0
  400. data/lib/mongo/protocol/compressed.rb +1 -1
  401. data/lib/mongo/protocol/get_more.rb +1 -1
  402. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  403. data/lib/mongo/protocol/message.rb +5 -9
  404. data/lib/mongo/protocol/msg.rb +23 -2
  405. data/lib/mongo/protocol/query.rb +1 -1
  406. data/lib/mongo/protocol/registry.rb +1 -1
  407. data/lib/mongo/protocol/reply.rb +1 -1
  408. data/lib/mongo/protocol/serializers.rb +25 -18
  409. data/lib/mongo/protocol.rb +2 -4
  410. data/lib/mongo/query_cache.rb +36 -21
  411. data/lib/mongo/retryable/base_worker.rb +91 -0
  412. data/lib/mongo/retryable/read_worker.rb +297 -0
  413. data/lib/mongo/retryable/write_worker.rb +367 -0
  414. data/lib/mongo/retryable.rb +31 -454
  415. data/lib/mongo/search_index/view.rb +232 -0
  416. data/lib/mongo/semaphore.rb +2 -2
  417. data/lib/mongo/server/app_metadata/environment.rb +314 -0
  418. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  419. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  420. data/lib/mongo/server/app_metadata.rb +76 -108
  421. data/lib/mongo/server/connection.rb +94 -20
  422. data/lib/mongo/server/connection_base.rb +3 -1
  423. data/lib/mongo/server/connection_common.rb +5 -2
  424. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  425. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  426. data/lib/mongo/server/connection_pool.rb +736 -247
  427. data/lib/mongo/server/description/features.rb +7 -2
  428. data/lib/mongo/server/description/load_balancer.rb +1 -1
  429. data/lib/mongo/server/description.rb +14 -8
  430. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  431. data/lib/mongo/server/monitor/connection.rb +2 -1
  432. data/lib/mongo/server/monitor.rb +36 -20
  433. data/lib/mongo/server/pending_connection.rb +1 -1
  434. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  435. data/lib/mongo/server/push_monitor.rb +14 -4
  436. data/lib/mongo/server/round_trip_time_averager.rb +1 -1
  437. data/lib/mongo/server.rb +105 -35
  438. data/lib/mongo/server_selector/base.rb +77 -8
  439. data/lib/mongo/server_selector/nearest.rb +1 -1
  440. data/lib/mongo/server_selector/primary.rb +1 -1
  441. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  442. data/lib/mongo/server_selector/secondary.rb +1 -1
  443. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  444. data/lib/mongo/server_selector.rb +1 -1
  445. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  446. data/lib/mongo/session/server_session.rb +4 -1
  447. data/lib/mongo/session/session_pool.rb +21 -19
  448. data/lib/mongo/session.rb +164 -37
  449. data/lib/mongo/socket/ocsp_cache.rb +3 -4
  450. data/lib/mongo/socket/ocsp_verifier.rb +5 -6
  451. data/lib/mongo/socket/ssl.rb +1 -1
  452. data/lib/mongo/socket/tcp.rb +4 -1
  453. data/lib/mongo/socket/unix.rb +1 -1
  454. data/lib/mongo/socket.rb +30 -7
  455. data/lib/mongo/srv/monitor.rb +1 -3
  456. data/lib/mongo/srv/resolver.rb +25 -4
  457. data/lib/mongo/srv/result.rb +1 -1
  458. data/lib/mongo/srv.rb +1 -1
  459. data/lib/mongo/timeout.rb +2 -2
  460. data/lib/mongo/topology_version.rb +1 -1
  461. data/lib/mongo/uri/options_mapper.rb +324 -81
  462. data/lib/mongo/uri/srv_protocol.rb +2 -2
  463. data/lib/mongo/uri.rb +61 -17
  464. data/lib/mongo/utils.rb +1 -7
  465. data/lib/mongo/version.rb +2 -2
  466. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  467. data/lib/mongo/write_concern/base.rb +1 -1
  468. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  469. data/lib/mongo/write_concern.rb +1 -1
  470. data/lib/mongo.rb +25 -1
  471. data/mongo.gemspec +10 -7
  472. data/spec/README.md +23 -5
  473. data/spec/atlas/atlas_connectivity_spec.rb +6 -10
  474. data/spec/atlas/operations_spec.rb +4 -13
  475. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  476. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  477. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  478. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  479. data/spec/integration/auth_spec.rb +1 -1
  480. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  481. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  482. data/spec/integration/aws_auth_request_spec.rb +2 -2
  483. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  484. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  485. data/spec/integration/bson_symbol_spec.rb +1 -1
  486. data/spec/integration/bulk_insert_spec.rb +1 -1
  487. data/spec/integration/bulk_write_error_message_spec.rb +33 -0
  488. data/spec/integration/bulk_write_spec.rb +17 -1
  489. data/spec/integration/change_stream_examples_spec.rb +1 -1
  490. data/spec/integration/change_stream_spec.rb +12 -6
  491. data/spec/integration/check_clean_slate_spec.rb +1 -1
  492. data/spec/integration/client_authentication_options_spec.rb +1 -1
  493. data/spec/integration/client_connectivity_spec.rb +1 -1
  494. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  495. data/spec/integration/client_construction_spec.rb +97 -9
  496. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
  497. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
  498. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -2
  499. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  500. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +41 -5
  501. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +146 -3
  502. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  503. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
  504. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +3 -3
  505. data/spec/integration/client_side_encryption/client_close_spec.rb +2 -2
  506. data/spec/integration/client_side_encryption/corpus_spec.rb +75 -38
  507. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +40 -43
  508. data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
  509. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  510. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +60 -1
  511. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  512. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +7 -7
  513. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  514. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  515. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  516. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  517. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  518. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  519. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  520. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  521. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  522. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  523. data/spec/integration/client_side_encryption/views_spec.rb +2 -2
  524. data/spec/integration/client_spec.rb +8 -3
  525. data/spec/integration/client_update_spec.rb +7 -3
  526. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  527. data/spec/integration/command_monitoring_spec.rb +1 -1
  528. data/spec/integration/command_spec.rb +2 -24
  529. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  530. data/spec/integration/connection/faas_env_spec.rb +62 -0
  531. data/spec/integration/connection_pool_populator_spec.rb +27 -7
  532. data/spec/integration/connection_spec.rb +1 -1
  533. data/spec/integration/crud_spec.rb +13 -1
  534. data/spec/integration/cursor_pinning_spec.rb +9 -5
  535. data/spec/integration/cursor_reaping_spec.rb +1 -1
  536. data/spec/integration/docs_examples_spec.rb +2 -2
  537. data/spec/integration/error_detection_spec.rb +1 -1
  538. data/spec/integration/fork_reconnect_spec.rb +17 -10
  539. data/spec/integration/get_more_spec.rb +1 -1
  540. data/spec/integration/grid_fs_bucket_spec.rb +4 -4
  541. data/spec/integration/heartbeat_events_spec.rb +1 -1
  542. data/spec/integration/map_reduce_spec.rb +5 -1
  543. data/spec/integration/mmapv1_spec.rb +1 -1
  544. data/spec/integration/mongos_pinning_spec.rb +1 -1
  545. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  546. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  547. data/spec/integration/ocsp_verifier_spec.rb +5 -2
  548. data/spec/integration/operation_failure_code_spec.rb +1 -1
  549. data/spec/integration/operation_failure_message_spec.rb +1 -0
  550. data/spec/integration/query_cache_spec.rb +124 -33
  551. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  552. data/spec/integration/read_concern_spec.rb +1 -1
  553. data/spec/integration/read_preference_spec.rb +17 -13
  554. data/spec/integration/reconnect_spec.rb +6 -1
  555. data/spec/integration/retryable_errors_spec.rb +1 -1
  556. data/spec/integration/retryable_reads_errors_spec.rb +263 -0
  557. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
  558. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  559. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  560. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  561. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  562. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  563. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  564. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  565. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  566. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  567. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  568. data/spec/integration/retryable_writes_errors_spec.rb +316 -2
  569. data/spec/integration/sdam_error_handling_spec.rb +65 -4
  570. data/spec/integration/sdam_events_spec.rb +1 -1
  571. data/spec/integration/sdam_prose_spec.rb +3 -3
  572. data/spec/integration/search_indexes_prose_spec.rb +168 -0
  573. data/spec/integration/secondary_reads_spec.rb +1 -0
  574. data/spec/integration/server_description_spec.rb +1 -1
  575. data/spec/integration/server_monitor_spec.rb +3 -2
  576. data/spec/integration/server_selection_spec.rb +1 -1
  577. data/spec/integration/server_selector_spec.rb +5 -3
  578. data/spec/integration/server_spec.rb +23 -26
  579. data/spec/integration/shell_examples_spec.rb +1 -1
  580. data/spec/integration/size_limit_spec.rb +5 -2
  581. data/spec/integration/snappy_compression_spec.rb +1 -1
  582. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  583. data/spec/integration/srv_monitoring_spec.rb +40 -1
  584. data/spec/integration/srv_spec.rb +4 -3
  585. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  586. data/spec/integration/step_down_spec.rb +25 -7
  587. data/spec/integration/time_zone_querying_spec.rb +1 -1
  588. data/spec/integration/transaction_pinning_spec.rb +20 -6
  589. data/spec/integration/transactions_api_examples_spec.rb +1 -1
  590. data/spec/integration/transactions_examples_spec.rb +1 -1
  591. data/spec/integration/truncated_utf8_spec.rb +1 -1
  592. data/spec/integration/versioned_api_examples_spec.rb +38 -32
  593. data/spec/integration/x509_auth_spec.rb +1 -1
  594. data/spec/integration/zlib_compression_spec.rb +1 -1
  595. data/spec/integration/zstd_compression_spec.rb +1 -1
  596. data/spec/kerberos/kerberos_spec.rb +1 -1
  597. data/spec/lite_spec_helper.rb +61 -16
  598. data/spec/mongo/address/ipv4_spec.rb +1 -1
  599. data/spec/mongo/address/ipv6_spec.rb +8 -1
  600. data/spec/mongo/address/unix_spec.rb +1 -1
  601. data/spec/mongo/address/validator_spec.rb +1 -1
  602. data/spec/mongo/address_spec.rb +15 -2
  603. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  604. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  605. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  606. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  607. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  608. data/spec/mongo/auth/cr_spec.rb +2 -22
  609. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  610. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  611. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  612. data/spec/mongo/auth/ldap_spec.rb +1 -1
  613. data/spec/mongo/auth/scram/conversation_spec.rb +24 -24
  614. data/spec/mongo/auth/scram256/conversation_spec.rb +21 -21
  615. data/spec/mongo/auth/scram_negotiation_spec.rb +2 -1
  616. data/spec/mongo/auth/scram_spec.rb +1 -1
  617. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  618. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  619. data/spec/mongo/auth/user/view_spec.rb +96 -1
  620. data/spec/mongo/auth/user_spec.rb +1 -1
  621. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  622. data/spec/mongo/auth/x509_spec.rb +1 -1
  623. data/spec/mongo/auth_spec.rb +1 -1
  624. data/spec/mongo/bson_spec.rb +1 -1
  625. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  626. data/spec/mongo/bulk_write/result_spec.rb +16 -2
  627. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  628. data/spec/mongo/bulk_write_spec.rb +142 -21
  629. data/spec/mongo/caching_cursor_spec.rb +1 -1
  630. data/spec/mongo/client_construction_spec.rb +734 -631
  631. data/spec/mongo/client_encryption_spec.rb +11 -23
  632. data/spec/mongo/client_spec.rb +389 -152
  633. data/spec/mongo/cluster/cursor_reaper_spec.rb +42 -17
  634. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  635. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  636. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  637. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  638. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  639. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  640. data/spec/mongo/cluster/topology_spec.rb +1 -1
  641. data/spec/mongo/cluster_spec.rb +193 -199
  642. data/spec/mongo/cluster_time_spec.rb +1 -1
  643. data/spec/mongo/collection/view/aggregation_spec.rb +184 -84
  644. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  645. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  646. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  647. data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
  648. data/spec/mongo/collection/view/explainable_spec.rb +3 -1
  649. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  650. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  651. data/spec/mongo/collection/view/map_reduce_spec.rb +25 -2
  652. data/spec/mongo/collection/view/readable_spec.rb +744 -2
  653. data/spec/mongo/collection/view/writable_spec.rb +145 -33
  654. data/spec/mongo/collection/view_spec.rb +1 -1
  655. data/spec/mongo/collection_crud_spec.rb +121 -15
  656. data/spec/mongo/collection_ddl_spec.rb +116 -66
  657. data/spec/mongo/collection_spec.rb +48 -2
  658. data/spec/mongo/condition_variable_spec.rb +104 -0
  659. data/spec/mongo/config/options_spec.rb +76 -0
  660. data/spec/mongo/config_spec.rb +74 -0
  661. data/spec/mongo/crypt/auto_decryption_context_spec.rb +18 -2
  662. data/spec/mongo/crypt/auto_encrypter_spec.rb +264 -6
  663. data/spec/mongo/crypt/auto_encryption_context_spec.rb +18 -2
  664. data/spec/mongo/crypt/binary_spec.rb +1 -1
  665. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  666. data/spec/mongo/crypt/binding/context_spec.rb +68 -18
  667. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  668. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +18 -47
  669. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  670. data/spec/mongo/crypt/binding/version_spec.rb +48 -1
  671. data/spec/mongo/crypt/binding_unloaded_spec.rb +15 -1
  672. data/spec/mongo/crypt/data_key_context_spec.rb +43 -115
  673. data/spec/mongo/crypt/encryption_io_spec.rb +3 -1
  674. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +33 -2
  675. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +95 -2
  676. data/spec/mongo/crypt/handle_spec.rb +187 -156
  677. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  678. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  679. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  680. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  681. data/spec/mongo/crypt/kms_spec.rb +62 -0
  682. data/spec/mongo/crypt/status_spec.rb +1 -1
  683. data/spec/mongo/crypt_spec.rb +21 -0
  684. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  685. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  686. data/spec/mongo/cursor_spec.rb +148 -14
  687. data/spec/mongo/database_spec.rb +67 -2
  688. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  689. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  690. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  691. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  692. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  693. data/spec/mongo/error/notable_spec.rb +1 -1
  694. data/spec/mongo/error/operation_failure_heavy_spec.rb +50 -1
  695. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  696. data/spec/mongo/error/parser_spec.rb +1 -1
  697. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  698. data/spec/mongo/event/publisher_spec.rb +1 -1
  699. data/spec/mongo/event/subscriber_spec.rb +1 -1
  700. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  701. data/spec/mongo/grid/file/info_spec.rb +1 -1
  702. data/spec/mongo/grid/file_spec.rb +1 -1
  703. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  704. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  705. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  706. data/spec/mongo/grid/stream_spec.rb +1 -1
  707. data/spec/mongo/id_spec.rb +2 -2
  708. data/spec/mongo/index/view_spec.rb +126 -1
  709. data/spec/mongo/lint_spec.rb +2 -2
  710. data/spec/mongo/logger_spec.rb +1 -1
  711. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  712. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  713. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  714. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  715. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  716. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  717. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  718. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  719. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  720. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  721. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  722. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  723. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  724. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  725. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  726. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  727. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  728. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  729. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  730. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  731. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  732. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  733. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  734. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  735. data/spec/mongo/monitoring_spec.rb +1 -1
  736. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  737. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  738. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  739. data/spec/mongo/operation/command_spec.rb +1 -1
  740. data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
  741. data/spec/mongo/operation/create_index_spec.rb +1 -1
  742. data/spec/mongo/operation/create_user_spec.rb +1 -1
  743. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  744. data/spec/mongo/operation/delete/op_msg_spec.rb +14 -5
  745. data/spec/mongo/operation/delete_spec.rb +1 -31
  746. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  747. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  748. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  749. data/spec/mongo/operation/indexes_spec.rb +1 -1
  750. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  751. data/spec/mongo/operation/insert/op_msg_spec.rb +19 -11
  752. data/spec/mongo/operation/insert_spec.rb +2 -34
  753. data/spec/mongo/operation/limited_spec.rb +1 -1
  754. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  755. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  756. data/spec/mongo/operation/read_preference_op_msg_spec.rb +25 -2
  757. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  758. data/spec/mongo/operation/result_spec.rb +21 -1
  759. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  760. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  761. data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
  762. data/spec/mongo/operation/update_spec.rb +1 -30
  763. data/spec/mongo/operation/update_user_spec.rb +1 -1
  764. data/spec/mongo/options/redacted_spec.rb +2 -2
  765. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  766. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  767. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  768. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  769. data/spec/mongo/protocol/msg_spec.rb +45 -66
  770. data/spec/mongo/protocol/query_spec.rb +1 -1
  771. data/spec/mongo/protocol/registry_spec.rb +1 -1
  772. data/spec/mongo/protocol/reply_spec.rb +1 -1
  773. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  774. data/spec/mongo/query_cache_spec.rb +2 -1
  775. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  776. data/spec/mongo/retryable_spec.rb +37 -6
  777. data/spec/mongo/semaphore_spec.rb +7 -7
  778. data/spec/mongo/server/app_metadata/environment_spec.rb +344 -0
  779. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  780. data/spec/mongo/server/app_metadata_spec.rb +53 -65
  781. data/spec/mongo/server/connection_auth_spec.rb +4 -2
  782. data/spec/mongo/server/connection_common_spec.rb +14 -2
  783. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  784. data/spec/mongo/server/connection_pool_spec.rb +567 -63
  785. data/spec/mongo/server/connection_spec.rb +71 -163
  786. data/spec/mongo/server/description/features_spec.rb +25 -1
  787. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  788. data/spec/mongo/server/description_spec.rb +1 -1
  789. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  790. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  791. data/spec/mongo/server/monitor_spec.rb +6 -5
  792. data/spec/mongo/server/push_monitor_spec.rb +3 -9
  793. data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
  794. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  795. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  796. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  797. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  798. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  799. data/spec/mongo/server_selector_spec.rb +137 -16
  800. data/spec/mongo/server_spec.rb +32 -5
  801. data/spec/mongo/session/server_session_spec.rb +1 -1
  802. data/spec/mongo/session/session_pool_spec.rb +2 -17
  803. data/spec/mongo/session_spec.rb +27 -7
  804. data/spec/mongo/session_transaction_spec.rb +19 -3
  805. data/spec/mongo/socket/ssl_spec.rb +45 -72
  806. data/spec/mongo/socket/tcp_spec.rb +1 -1
  807. data/spec/mongo/socket/unix_spec.rb +1 -1
  808. data/spec/mongo/socket_spec.rb +1 -1
  809. data/spec/mongo/srv/monitor_spec.rb +1 -1
  810. data/spec/mongo/srv/result_spec.rb +1 -1
  811. data/spec/mongo/timeout_spec.rb +1 -1
  812. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  813. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  814. data/spec/mongo/uri/srv_protocol_spec.rb +263 -4
  815. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  816. data/spec/mongo/uri_spec.rb +168 -11
  817. data/spec/mongo/utils_spec.rb +1 -15
  818. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  819. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  820. data/spec/mongo/write_concern_spec.rb +1 -1
  821. data/spec/runners/auth.rb +1 -1
  822. data/spec/runners/change_streams/outcome.rb +1 -1
  823. data/spec/runners/change_streams/spec.rb +1 -1
  824. data/spec/runners/change_streams/test.rb +1 -1
  825. data/spec/runners/cmap/verifier.rb +2 -2
  826. data/spec/runners/cmap.rb +188 -45
  827. data/spec/runners/command_monitoring.rb +1 -1
  828. data/spec/runners/connection_string.rb +9 -1
  829. data/spec/runners/crud/context.rb +1 -1
  830. data/spec/runners/crud/operation.rb +14 -5
  831. data/spec/runners/crud/outcome.rb +1 -1
  832. data/spec/runners/crud/requirement.rb +12 -7
  833. data/spec/runners/crud/spec.rb +6 -1
  834. data/spec/runners/crud/test.rb +2 -10
  835. data/spec/runners/crud/test_base.rb +2 -2
  836. data/spec/runners/crud/verifier.rb +10 -5
  837. data/spec/runners/crud.rb +2 -2
  838. data/spec/runners/gridfs.rb +1 -1
  839. data/spec/runners/read_write_concern_document.rb +1 -1
  840. data/spec/runners/sdam/verifier.rb +1 -1
  841. data/spec/runners/sdam.rb +1 -1
  842. data/spec/runners/server_selection.rb +1 -1
  843. data/spec/runners/server_selection_rtt.rb +1 -1
  844. data/spec/runners/transactions/operation.rb +15 -9
  845. data/spec/runners/transactions/spec.rb +3 -3
  846. data/spec/runners/transactions/test.rb +75 -22
  847. data/spec/runners/transactions.rb +12 -9
  848. data/spec/runners/unified/assertions.rb +162 -51
  849. data/spec/runners/unified/change_stream_operations.rb +26 -3
  850. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  851. data/spec/runners/unified/crud_operations.rb +166 -28
  852. data/spec/runners/unified/ddl_operations.rb +152 -3
  853. data/spec/runners/unified/entity_map.rb +4 -4
  854. data/spec/runners/unified/error.rb +3 -2
  855. data/spec/runners/unified/event_subscriber.rb +9 -3
  856. data/spec/runners/unified/exceptions.rb +1 -1
  857. data/spec/runners/unified/grid_fs_operations.rb +22 -1
  858. data/spec/runners/unified/search_index_operations.rb +63 -0
  859. data/spec/runners/unified/support_operations.rb +78 -8
  860. data/spec/runners/unified/test.rb +199 -31
  861. data/spec/runners/unified/test_group.rb +1 -1
  862. data/spec/runners/unified/thread_operations.rb +73 -0
  863. data/spec/runners/unified.rb +15 -5
  864. data/spec/shared/lib/mrss/constraints.rb +10 -17
  865. data/spec/shared/lib/mrss/docker_runner.rb +30 -3
  866. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  867. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  868. data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
  869. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  870. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  871. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  872. data/spec/shared/lib/mrss/utils.rb +28 -6
  873. data/spec/shared/share/Dockerfile.erb +82 -124
  874. data/spec/shared/shlib/config.sh +27 -0
  875. data/spec/shared/shlib/distro.sh +2 -1
  876. data/spec/shared/shlib/server.sh +74 -24
  877. data/spec/shared/shlib/set_env.sh +45 -30
  878. data/spec/solo/clean_exit_spec.rb +5 -7
  879. data/spec/spec_helper.rb +2 -3
  880. data/spec/spec_tests/auth_spec.rb +1 -1
  881. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  882. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  883. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  884. data/spec/spec_tests/cmap_spec.rb +29 -15
  885. data/spec/spec_tests/collection_management_spec.rb +1 -1
  886. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  887. data/spec/spec_tests/connection_string_spec.rb +1 -1
  888. data/spec/spec_tests/crud_spec.rb +1 -11
  889. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  892. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +120 -0
  893. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  894. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  895. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  896. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  897. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  898. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  899. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  900. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  901. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
  902. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  903. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  904. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  905. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  906. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  907. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  908. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  909. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  910. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  911. data/spec/spec_tests/data/client_side_encryption/explain.yml +3 -10
  912. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  913. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  914. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  915. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +89 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +82 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +937 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +66 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +100 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +79 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +102 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +58 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +200 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +96 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +89 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +43 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +44 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  932. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  933. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  934. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  935. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  936. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  937. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  938. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  939. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  940. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  941. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  942. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  943. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  944. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  945. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  946. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  947. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  948. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  949. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  950. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  951. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  952. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  953. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  954. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  955. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  956. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  957. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  958. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  959. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  960. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  961. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  962. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  963. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  964. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  965. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  966. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  967. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  968. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  969. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  970. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  971. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  972. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  973. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +210 -0
  974. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +169 -0
  975. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  976. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  977. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  978. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  979. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  980. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  981. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  982. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  983. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  984. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  985. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  986. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  987. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  988. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  989. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  990. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  991. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  992. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  993. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  994. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  995. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  996. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  997. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  998. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  999. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  1000. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  1001. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  1002. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  1003. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  1004. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  1005. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  1006. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  1007. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  1008. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  1009. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  1010. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  1011. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  1012. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  1013. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  1014. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  1015. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  1016. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  1017. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1018. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1019. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1020. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1021. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1022. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1023. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1024. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  1025. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1026. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1027. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1028. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1029. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1030. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1031. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1032. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1033. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  1034. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1035. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1036. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1037. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1038. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1039. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1040. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1041. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1042. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  1043. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1044. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1045. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1046. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1047. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1048. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  1049. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  1050. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  1051. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  1052. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  1053. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  1054. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  1055. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  1056. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  1057. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  1058. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  1059. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  1060. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  1061. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  1062. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  1063. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1064. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -0
  1065. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1066. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1067. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1068. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +155 -0
  1069. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1076. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1077. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1078. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1079. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1080. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1081. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1082. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1083. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1084. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1085. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1086. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1087. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1088. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1089. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1090. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1091. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1092. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1093. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1094. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1095. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1096. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +151 -0
  1097. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1098. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1099. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1100. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1101. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1102. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1103. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
  1104. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1105. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1106. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1107. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1108. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1109. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1110. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
  1111. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1112. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1113. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +49 -135
  1114. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1115. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1116. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1117. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1118. data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
  1119. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +348 -0
  1120. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1121. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1122. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1123. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1124. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1125. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1126. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
  1127. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1128. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1129. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1130. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1131. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1132. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1133. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
  1134. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1135. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1136. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1137. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1138. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1139. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1140. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1141. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
  1142. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1143. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1144. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1145. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1146. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1147. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1148. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1149. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1150. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1151. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1152. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1153. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1154. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1155. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1156. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1157. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1158. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1159. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
  1160. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1161. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1162. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1163. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1164. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1165. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1166. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1167. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1168. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
  1169. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1170. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  1171. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1172. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1173. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1174. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1175. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1176. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  1177. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  1178. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  1179. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  1180. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  1181. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
  1182. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  1183. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  1184. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  1185. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
  1186. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
  1187. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
  1188. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
  1189. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
  1190. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
  1191. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
  1192. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
  1193. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
  1194. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
  1195. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
  1196. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  1197. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  1198. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  1199. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
  1200. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  1201. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
  1202. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
  1203. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  1204. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
  1205. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  1206. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
  1207. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
  1208. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
  1209. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
  1210. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  1211. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  1212. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1213. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  1214. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  1215. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  1216. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  1217. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  1218. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  1219. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  1220. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  1221. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  1222. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +93 -0
  1223. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1224. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1225. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
  1226. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  1227. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  1228. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1229. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1230. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1231. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1232. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1233. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1234. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1235. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1236. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1237. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1238. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1239. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1240. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1241. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1242. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1243. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1244. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1245. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1246. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1247. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1248. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1249. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1250. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1251. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1252. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1253. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1254. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1255. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1256. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1257. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1258. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1259. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1260. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1261. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1262. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1263. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1264. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1265. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1266. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1267. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1268. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1269. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1270. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1271. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1272. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1273. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1274. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1275. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1276. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1277. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1278. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1279. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1280. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1281. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1282. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1283. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1284. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1285. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1286. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1287. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1288. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  1289. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1290. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1291. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
  1292. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
  1293. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
  1294. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
  1295. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  1296. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1297. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  1298. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  1299. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  1300. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  1301. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  1302. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  1303. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1304. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1305. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1306. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1307. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1308. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1309. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1310. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1311. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1312. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1313. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1314. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1315. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1316. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1317. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1318. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1319. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1320. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1321. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
  1322. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  1323. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
  1324. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1325. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
  1326. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  1327. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  1328. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  1329. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
  1330. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1331. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  1332. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  1333. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1334. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1335. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1336. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1337. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1338. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1339. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1340. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1341. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1342. data/spec/spec_tests/retryable_reads_spec.rb +7 -2
  1343. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1344. data/spec/spec_tests/retryable_writes_spec.rb +5 -2
  1345. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1346. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  1347. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1348. data/spec/spec_tests/sdam_spec.rb +5 -1
  1349. data/spec/spec_tests/sdam_unified_spec.rb +15 -0
  1350. data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
  1351. data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
  1352. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1353. data/spec/spec_tests/sessions_unified_spec.rb +13 -0
  1354. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1355. data/spec/spec_tests/transactions_spec.rb +1 -1
  1356. data/spec/spec_tests/transactions_unified_spec.rb +1 -1
  1357. data/spec/spec_tests/unified_spec.rb +2 -2
  1358. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1359. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1360. data/spec/stress/cleanup_spec.rb +1 -1
  1361. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1362. data/spec/stress/connection_pool_timing_spec.rb +12 -36
  1363. data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
  1364. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1365. data/spec/support/authorization.rb +2 -2
  1366. data/spec/support/aws_utils/base.rb +1 -1
  1367. data/spec/support/aws_utils/inspector.rb +1 -1
  1368. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1369. data/spec/support/aws_utils/provisioner.rb +1 -1
  1370. data/spec/support/aws_utils.rb +4 -3
  1371. data/spec/support/background_thread_registry.rb +4 -14
  1372. data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
  1373. data/spec/support/certificates/atlas-ocsp.crt +103 -103
  1374. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1375. data/spec/support/client_registry.rb +6 -2
  1376. data/spec/support/client_registry_macros.rb +1 -1
  1377. data/spec/support/cluster_tools.rb +14 -9
  1378. data/spec/support/common_shortcuts.rb +52 -5
  1379. data/spec/support/constraints.rb +21 -1
  1380. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1381. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1382. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1383. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1384. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1385. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1386. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1387. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1388. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1389. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1390. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1391. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1392. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1393. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1394. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1395. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1396. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1397. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1398. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1399. data/spec/support/crypt/keys/key1-document.json +30 -0
  1400. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1401. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1402. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1403. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1404. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1405. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1406. data/spec/support/crypt.rb +269 -14
  1407. data/spec/support/dns.rb +1 -1
  1408. data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +19 -0
  1409. data/spec/support/json_ext_formatter.rb +1 -1
  1410. data/spec/support/keyword_struct.rb +1 -1
  1411. data/spec/support/local_resource_registry.rb +1 -1
  1412. data/spec/support/macros.rb +29 -0
  1413. data/spec/support/matchers.rb +5 -5
  1414. data/spec/support/mongos_macros.rb +24 -0
  1415. data/spec/support/monitoring_ext.rb +1 -1
  1416. data/spec/support/ocsp +1 -1
  1417. data/spec/support/primary_socket.rb +1 -1
  1418. data/spec/support/recording_logger.rb +27 -0
  1419. data/spec/support/sdam_formatter_integration.rb +1 -1
  1420. data/spec/support/shared/app_metadata.rb +15 -3
  1421. data/spec/support/shared/auth_context.rb +1 -0
  1422. data/spec/support/shared/protocol.rb +1 -1
  1423. data/spec/support/shared/scram_conversation.rb +3 -2
  1424. data/spec/support/shared/server_selector.rb +1 -1
  1425. data/spec/support/shared/session.rb +14 -8
  1426. data/spec/support/spec_config.rb +133 -2
  1427. data/spec/support/spec_setup.rb +1 -1
  1428. data/spec/support/using_hash.rb +11 -2
  1429. data/spec/support/utils.rb +277 -228
  1430. data.tar.gz.sig +0 -0
  1431. metadata +1868 -1248
  1432. metadata.gz.sig +0 -0
  1433. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1434. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1435. data/lib/mongo/operation/count/command.rb +0 -47
  1436. data/lib/mongo/operation/create/command.rb +0 -47
  1437. data/lib/mongo/operation/create_index/command.rb +0 -61
  1438. data/lib/mongo/operation/delete/command.rb +0 -52
  1439. data/lib/mongo/operation/delete/legacy.rb +0 -64
  1440. data/lib/mongo/operation/distinct/command.rb +0 -47
  1441. data/lib/mongo/operation/drop_database/command.rb +0 -41
  1442. data/lib/mongo/operation/explain/command.rb +0 -58
  1443. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1444. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1445. data/lib/mongo/operation/find/command.rb +0 -51
  1446. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1447. data/lib/mongo/operation/find/legacy.rb +0 -52
  1448. data/lib/mongo/operation/indexes/command.rb +0 -42
  1449. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1450. data/lib/mongo/operation/insert/command.rb +0 -59
  1451. data/lib/mongo/operation/insert/legacy.rb +0 -68
  1452. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1453. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1454. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1455. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1456. data/lib/mongo/operation/remove_user/command.rb +0 -46
  1457. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1458. data/lib/mongo/operation/update/command.rb +0 -53
  1459. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  1460. data/lib/mongo/operation/update/legacy.rb +0 -76
  1461. data/lib/mongo/operation/users_info/command.rb +0 -46
  1462. data/lib/mongo/operation/write_command/command.rb +0 -51
  1463. data/lib/mongo/protocol/delete.rb +0 -172
  1464. data/lib/mongo/protocol/insert.rb +0 -181
  1465. data/lib/mongo/protocol/update.rb +0 -214
  1466. data/spec/mongo/dbref_spec.rb +0 -152
  1467. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1468. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1469. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1470. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1471. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  1472. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1473. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1474. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1475. data/spec/mongo/protocol/update_spec.rb +0 -204
  1476. data/spec/spec_tests/change_streams_spec.rb +0 -93
  1477. data/spec/spec_tests/command_monitoring_spec.rb +0 -71
  1478. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
  1479. data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
  1480. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
  1481. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
  1482. data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
  1483. data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
  1484. data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
  1485. data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
  1486. data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
  1487. data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
  1488. data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
  1489. data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
  1490. data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
  1491. data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
  1492. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
  1493. data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
  1494. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
  1495. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
  1496. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
  1497. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
  1498. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
  1499. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
  1500. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
  1501. data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
  1502. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
  1503. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
  1504. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
  1505. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
  1506. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
  1507. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
  1508. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
  1509. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
  1510. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
  1511. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
  1512. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
  1513. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
  1514. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
  1515. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
  1516. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
  1517. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
  1518. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
  1519. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
  1520. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
  1521. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
  1522. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
  1523. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
  1524. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
  1525. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
  1526. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
  1527. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
  1528. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
  1529. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
  1530. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
  1531. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
  1532. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
  1533. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
  1534. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
  1535. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
  1536. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
  1537. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
  1538. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
  1539. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
  1540. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1541. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1542. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1543. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1544. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -160
  1545. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -158
  1546. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -225
  1547. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1548. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1549. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1550. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
  1551. data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
  1552. data/spec/support/session_registry.rb +0 -55
  1553. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1554. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  1555. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1556. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  1557. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  1558. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  1559. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  1560. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  1561. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  1562. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  1563. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1564. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  1565. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1566. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  1567. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1568. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  1569. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1570. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  1571. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1572. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  1573. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1574. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  1575. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1576. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  1577. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1578. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  1579. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1580. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  1581. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1582. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  1583. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1584. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  1585. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1586. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  1587. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1588. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  1589. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  1590. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  1591. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1592. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  1593. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1594. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  1595. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1596. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1597. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1598. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1599. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1600. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1601. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1602. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1603. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1604. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1605. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1606. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1607. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1608. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1609. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1610. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1611. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1612. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -35,15 +35,20 @@ module Mongo
35
35
  # - 8 => 4.2
36
36
  # - 9 => 4.4
37
37
  # - 13 => 5.0
38
+ # - 14 => 5.1
39
+ # - 17 => 6.0
38
40
  #
39
41
  # @since 2.0.0
40
42
  MAPPINGS = {
43
+ merge_out_on_secondary: 13,
44
+ get_more_comment: 9,
41
45
  retryable_write_error_label: 9,
42
46
  commit_quorum: 9,
43
47
  # Server versions older than 4.2 do not reliably validate options
44
48
  # provided by the client during findAndModify operations, requiring the
45
49
  # driver to raise client-side errors when those options are provided.
46
50
  find_and_modify_option_validation: 8,
51
+ sharded_transactions: 8,
47
52
  transactions: 7,
48
53
  scram_sha_256: 7,
49
54
  array_filters: 6,
@@ -78,7 +83,7 @@ module Mongo
78
83
  # The wire protocol versions that this version of the driver supports.
79
84
  #
80
85
  # @since 2.0.0
81
- DRIVER_WIRE_VERSIONS = (2..13).freeze
86
+ DRIVER_WIRE_VERSIONS = (6..21).freeze
82
87
 
83
88
  # Create the methods for each mapping to tell if they are supported.
84
89
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2021 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -234,8 +234,7 @@ module Mongo
234
234
  # to work if the server it communicates with does not set serviceId
235
235
  # in ismaster/hello response.
236
236
  #
237
- # In practice, there are currently no server version that actually
238
- # sets this field.
237
+ # At the moment we cannot run a proper load balancer setup on evergreen
239
238
  #
240
239
  # Therefore, when connect=:load_balanced Ruby option is used instead
241
240
  # of the loadBalanced=true URI option, if serviceId is not set in
@@ -255,6 +254,8 @@ module Mongo
255
254
  # service ids are strings, to distinguish them from the real ones.
256
255
  # In particular processId is also a BSON::ObjectId, but will be
257
256
  # mapped to a string for clarity that this is a fake service id.
257
+ #
258
+ # TODO: Remove this when https://jira.mongodb.org/browse/RUBY-2881 is done.
258
259
  if ok? && !service_id
259
260
  unless force_load_balancer
260
261
  raise Error::MissingServiceId, "The server at #{address.seed} did not provide a service id in handshake response"
@@ -298,11 +299,6 @@ module Mongo
298
299
  @features
299
300
  end
300
301
 
301
- # @return [ nil | Object ] The service id, if any.
302
- def service_id
303
- config['serviceId']
304
- end
305
-
306
302
  # @return [ Float ] The moving average time the hello call took to complete.
307
303
  attr_reader :average_round_trip_time
308
304
 
@@ -843,6 +839,8 @@ module Mongo
843
839
  config['connectionId']
844
840
  end
845
841
 
842
+ # @return [ nil | Object ] The service id, if any.
843
+ #
846
844
  # @api experimental
847
845
  def service_id
848
846
  config['serviceId']
@@ -871,6 +869,14 @@ module Mongo
871
869
  # @api private
872
870
  def server_version_gte?(version)
873
871
  required_wv = case version
872
+ when '7.0'
873
+ 21
874
+ when '6.0'
875
+ 17
876
+ when '5.2'
877
+ 15
878
+ when '5.1'
879
+ 14
874
880
  when '5.0'
875
881
  12
876
882
  when '4.4'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2018-2020 MongoDB Inc.
5
5
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2015-2020 MongoDB Inc.
5
5
  #
@@ -86,6 +86,7 @@ module Mongo
86
86
  options[:connect_timeout] || Server::CONNECT_TIMEOUT
87
87
  end
88
88
 
89
+ # @return [ Integer ] server_connection_id The server connection id.
89
90
  attr_reader :server_connection_id
90
91
 
91
92
  # Sends a message and returns the result.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -170,6 +170,25 @@ module Mongo
170
170
  end
171
171
  end
172
172
 
173
+ def create_push_monitor!(topology_version)
174
+ @update_mutex.synchronize do
175
+ if @push_monitor && !@push_monitor.running?
176
+ @push_monitor = nil
177
+ end
178
+
179
+ @push_monitor ||= PushMonitor.new(
180
+ self,
181
+ topology_version,
182
+ monitoring,
183
+ **Utils.shallow_symbolize_keys(options.merge(
184
+ socket_timeout: heartbeat_interval + connection.socket_timeout,
185
+ app_metadata: options[:push_monitor_app_metadata],
186
+ check_document: @connection.check_document
187
+ )),
188
+ )
189
+ end
190
+ end
191
+
173
192
  def stop_push_monitor!
174
193
  @update_mutex.synchronize do
175
194
  if @push_monitor
@@ -204,13 +223,17 @@ module Mongo
204
223
  @mutex.synchronize do
205
224
  throttle_scan_frequency!
206
225
 
207
- result = do_scan
208
-
209
- run_sdam_flow(result)
226
+ begin
227
+ result = do_scan
228
+ rescue => e
229
+ run_sdam_flow({}, scan_error: e)
230
+ else
231
+ run_sdam_flow(result)
232
+ end
210
233
  end
211
234
  end
212
235
 
213
- def run_sdam_flow(result, awaited: false)
236
+ def run_sdam_flow(result, awaited: false, scan_error: nil)
214
237
  @sdam_mutex.synchronize do
215
238
  old_description = server.description
216
239
 
@@ -218,7 +241,7 @@ module Mongo
218
241
  average_round_trip_time: server.round_trip_time_averager.average_round_trip_time
219
242
  )
220
243
 
221
- server.cluster.run_sdam_flow(server.description, new_description, awaited: awaited)
244
+ server.cluster.run_sdam_flow(server.description, new_description, awaited: awaited, scan_error: scan_error)
222
245
 
223
246
  server.description.tap do |new_description|
224
247
  unless awaited
@@ -249,6 +272,10 @@ module Mongo
249
272
  end
250
273
  end
251
274
 
275
+ def to_s
276
+ "#<#{self.class.name}:#{object_id} #{server.address}>"
277
+ end
278
+
252
279
  private
253
280
 
254
281
  def pre_stop
@@ -267,7 +294,7 @@ module Mongo
267
294
  log_prefix: options[:log_prefix],
268
295
  bg_error_backtrace: options[:bg_error_backtrace],
269
296
  )
270
- {}
297
+ raise exc
271
298
  end
272
299
  end
273
300
 
@@ -300,20 +327,9 @@ module Mongo
300
327
  connection.handshake!
301
328
  end
302
329
  @connection = connection
303
- if result['topologyVersion']
330
+ if tv_doc = result['topologyVersion']
304
331
  # Successful response, server 4.4+
305
- @update_mutex.synchronize do
306
- @push_monitor ||= PushMonitor.new(
307
- self,
308
- TopologyVersion.new(result['topologyVersion']),
309
- monitoring,
310
- **Utils.shallow_symbolize_keys(options.merge(
311
- socket_timeout: heartbeat_interval + connection.socket_timeout,
312
- app_metadata: options[:push_monitor_app_metadata],
313
- check_document: @connection.check_document
314
- )),
315
- )
316
- end
332
+ create_push_monitor!(TopologyVersion.new(tv_doc))
317
333
  push_monitor.run!
318
334
  else
319
335
  # Failed response or pre-4.4 server
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2019-2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -78,7 +78,7 @@ module Mongo
78
78
  if @connection
79
79
  # Interrupt any in-progress exhausted hello reads by
80
80
  # disconnecting the connection.
81
- @connection.send(:socket).close
81
+ @connection.send(:socket).close rescue nil
82
82
  end
83
83
  end
84
84
  super.tap do
@@ -124,8 +124,14 @@ module Mongo
124
124
  bg_error_backtrace: options[:bg_error_backtrace],
125
125
  )
126
126
 
127
- # Avoid tight looping in push monitor - see RUBY-2806.
128
- sleep(0.5)
127
+ # If a request failed on a connection, stop push monitoring.
128
+ # In case the server is dead we don't want to have two connections
129
+ # trying to connect unsuccessfully at the same time.
130
+ stop!
131
+
132
+ # Request an immediate check on the monitor to get reinstated as
133
+ # soon as possible in case the server is actually alive.
134
+ server.scan_semaphore.signal
129
135
  end
130
136
 
131
137
  def check
@@ -190,6 +196,10 @@ module Mongo
190
196
  end
191
197
  end
192
198
 
199
+ def to_s
200
+ "#<#{self.class.name}:#{object_id} #{server.address}>"
201
+ end
202
+
193
203
  end
194
204
  end
195
205
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2018-2020 MongoDB Inc.
5
5
 
data/lib/mongo/server.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #
@@ -54,6 +54,15 @@ module Mongo
54
54
  # done by this server. Note: setting this option to false will make
55
55
  # the server non-functional. It is intended for use in tests which
56
56
  # manually invoke SDAM state transitions.
57
+ # @option options [ true, false ] :populator_io For internal driver
58
+ # use only. Set to false to prevent the populator threads from being
59
+ # created and started in the server's connection pool. It is intended
60
+ # for use in tests that also turn off monitoring_io, unless the populator
61
+ # is explicitly needed. If monitoring_io is off, but the populator_io
62
+ # is on, the populator needs to be manually closed at the end of the
63
+ # test, since a cluster without monitoring is considered not connected,
64
+ # and thus will not clean up the connection pool populator threads on
65
+ # close.
57
66
  # @option options [ true | false ] :load_balancer Whether this server
58
67
  # is a load balancer.
59
68
  # @option options [ String ] :connect The client connection mode.
@@ -267,25 +276,41 @@ module Mongo
267
276
  if monitor
268
277
  monitor.stop!
269
278
  end
270
- _pool = @pool_lock.synchronize do
271
- @pool
272
- end
273
- if _pool
274
- # For backwards compatibility we disconnect/clear the pool rather
275
- # than close it here. We also stop the populator which allows the
276
- # the pool to continue providing connections but stops it from
277
- # connecting in background on clients/servers that are in fact
278
- # intended to be closed and no longer used.
279
- begin
280
- _pool.disconnect!(stop_populator: true)
281
- rescue Error::PoolClosedError
282
- # If the pool was already closed, we don't need to do anything here.
283
- end
284
- end
279
+
285
280
  @connected = false
281
+
282
+ # The current CMAP spec requires a pool to be mostly unusable
283
+ # if its server is unknown (or, therefore, disconnected).
284
+ # However any outstanding operations should continue to completion,
285
+ # and their connections need to be checked into the pool to be
286
+ # torn down. Because of this cleanup requirement we cannot just
287
+ # close the pool and set it to nil here, to be recreated the next
288
+ # time the server is discovered.
289
+ pool_internal&.clear
290
+
286
291
  true
287
292
  end
288
293
 
294
+ def close
295
+ if monitor
296
+ monitor.stop!
297
+ end
298
+
299
+ @connected = false
300
+
301
+ _pool = nil
302
+ @pool_lock.synchronize do
303
+ _pool, @pool = @pool, nil
304
+ end
305
+
306
+ # TODO: change this to _pool.close in RUBY-3174.
307
+ # Clear the pool. If the server is not unknown then the
308
+ # pool will stay ready. Stop the background populator thread.
309
+ _pool&.close(stay_ready: true)
310
+
311
+ nil
312
+ end
313
+
289
314
  # Whether the server is connected.
290
315
  #
291
316
  # @return [ true|false ] Whether the server is connected.
@@ -397,8 +422,29 @@ module Mongo
397
422
  #
398
423
  # @since 2.0.0
399
424
  def pool
425
+ if unknown?
426
+ raise Error::ServerNotUsable, address
427
+ end
428
+
400
429
  @pool_lock.synchronize do
401
- @pool ||= ConnectionPool.new(self, options)
430
+ opts = connected? ? options : options.merge(populator_io: false)
431
+ @pool ||= ConnectionPool.new(self, opts).tap do |pool|
432
+ pool.ready
433
+ end
434
+ end
435
+ end
436
+
437
+ # Internal driver method to retrieve the connection pool for this server.
438
+ #
439
+ # Unlike +pool+, +pool_internal+ will not create a pool if one does not
440
+ # already exist.
441
+ #
442
+ # @return [ Server::ConnectionPool | nil ] The connection pool, if one exists.
443
+ #
444
+ # @api private
445
+ def pool_internal
446
+ @pool_lock.synchronize do
447
+ @pool
402
448
  end
403
449
  end
404
450
 
@@ -444,8 +490,8 @@ module Mongo
444
490
  # @return [ Object ] The result of the block execution.
445
491
  #
446
492
  # @since 2.3.0
447
- def with_connection(service_id: nil, &block)
448
- pool.with_connection(service_id: service_id, &block)
493
+ def with_connection(connection_global_id: nil, &block)
494
+ pool.with_connection(connection_global_id: connection_global_id, &block)
449
495
  end
450
496
 
451
497
  # Handle handshake failure.
@@ -480,18 +526,15 @@ module Mongo
480
526
  rescue Mongo::Error::SocketTimeoutError
481
527
  # possibly cluster is slow, do not give up on it
482
528
  raise
483
- rescue Mongo::Error::SocketError => e
484
- # non-timeout network error
529
+ rescue Mongo::Error::SocketError, Auth::Unauthorized => e
530
+ # non-timeout network error or auth error, clear the pool and mark the
531
+ # topology as unknown
485
532
  unknown!(
486
533
  generation: e.generation,
487
534
  service_id: e.service_id,
488
535
  stop_push_monitor: true,
489
536
  )
490
537
  raise
491
- rescue Auth::Unauthorized
492
- # auth error, keep server description and topology as they are
493
- pool.disconnect!
494
- raise
495
538
  end
496
539
 
497
540
  # Whether the server supports modern read retries.
@@ -511,9 +554,15 @@ module Mongo
511
554
  # @note Retryable writes are only available on server versions 3.6+ and with
512
555
  # sharded clusters or replica sets.
513
556
  #
557
+ # @note Some of the conditions in this method automatically return false for
558
+ # for load balanced topologies. The conditions in this method should
559
+ # always be true, since load-balanced topologies are only available on
560
+ # MongoDB 5.0+, and not for standalone topologies. Therefore, we can
561
+ # assume that retry writes are enabled.
562
+ #
514
563
  # @since 2.5.0
515
564
  def retry_writes?
516
- !!(features.sessions_enabled? && logical_session_timeout && !standalone?)
565
+ !!(features.sessions_enabled? && logical_session_timeout && !standalone?) || load_balancer?
517
566
  end
518
567
 
519
568
  # Marks server unknown and publishes the associated SDAM event
@@ -532,8 +581,6 @@ module Mongo
532
581
  # respective server is cleared. Set this option to true to keep the
533
582
  # existing connection pool (required when handling not master errors
534
583
  # on 4.2+ servers).
535
- # @option options [ Object ] :service_id Discard state for the specified
536
- # service id only.
537
584
  # @option options [ TopologyVersion ] :topology_version Topology version
538
585
  # of the error response that is causing the server to be marked unknown.
539
586
  # @option options [ true | false ] :stop_push_monitor Whether to stop
@@ -543,6 +590,8 @@ module Mongo
543
590
  #
544
591
  # @since 2.4.0, SDAM events are sent as of version 2.7.0
545
592
  def unknown!(options = {})
593
+ pool = pool_internal
594
+
546
595
  if load_balancer?
547
596
  # When the client is in load-balanced topology, servers (the one and
548
597
  # only that can be) starts out as a load balancer and stays as a
@@ -551,15 +600,18 @@ module Mongo
551
600
  # However, this method also clears connection pool for the server
552
601
  # when the latter is marked unknown, and this part needs to happen
553
602
  # when the server is a load balancer.
603
+ #
604
+ # It is possible for a load balancer server to not have a service id,
605
+ # for example if there haven't been any successful connections yet to
606
+ # this server, but the server can still be marked unknown if one
607
+ # of such connections failed midway through its establishment.
554
608
  if service_id = options[:service_id]
555
- pool.disconnect!(service_id: service_id)
556
- elsif Lint.enabled?
557
- raise Error::LintError, 'Load balancer was asked to be marked unknown without a service id'
609
+ pool&.disconnect!(service_id: service_id)
558
610
  end
559
611
  return
560
612
  end
561
613
 
562
- if options[:generation] && options[:generation] < pool.generation
614
+ if options[:generation] && options[:generation] < pool&.generation
563
615
  return
564
616
  end
565
617
 
@@ -591,17 +643,35 @@ module Mongo
591
643
 
592
644
  # @api private
593
645
  def update_description(description)
646
+ pool = pool_internal
647
+ if pool && !description.unknown?
648
+ pool.ready
649
+ end
594
650
  @description = description
595
651
  end
596
652
 
653
+ # Clear the servers description so that it is considered unknown and can be
654
+ # safely disconnected.
655
+ #
656
+ # @api private
657
+ def clear_description
658
+ @description = Mongo::Server::Description.new(address, {})
659
+ end
660
+
597
661
  # @param [ Object ] :service_id Close connections with the specified
598
662
  # service id only.
663
+ # @param [ true | false ] :interrupt_in_use_connections Whether or not the
664
+ # cleared connections should be interrupted as well.
599
665
  #
600
666
  # @api private
601
- def clear_connection_pool(service_id: nil)
667
+ def clear_connection_pool(service_id: nil, interrupt_in_use_connections: false)
602
668
  @pool_lock.synchronize do
603
- if @pool
604
- @pool.disconnect!(service_id: service_id)
669
+ # A server being marked unknown after it is closed is technically
670
+ # incorrect but it does not meaningfully alter any state.
671
+ # Because historically the driver permitted servers to be marked
672
+ # unknown at any time, continue doing so even if the pool is closed.
673
+ if @pool && !@pool.closed?
674
+ @pool.disconnect!(service_id: service_id, interrupt_in_use_connections: interrupt_in_use_connections)
605
675
  end
606
676
  end
607
677
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2020 MongoDB Inc.
5
5
  #
@@ -162,6 +162,12 @@ module Mongo
162
162
  # Deprecated and ignored.
163
163
  # @param [ Session | nil ] session Optional session to take into account
164
164
  # for mongos pinning. Added in version 2.10.0.
165
+ # @param [ true | false ] write_aggregation Whether we need a server that
166
+ # supports writing aggregations (e.g. with $merge/$out) on secondaries.
167
+ # @param [ Array<Server> ] deprioritized A list of servers that should
168
+ # be selected from only if no other servers are available. This is
169
+ # used to avoid selecting the same server twice in a row when
170
+ # retrying a command.
165
171
  #
166
172
  # @return [ Mongo::Server ] A server matching the server preference.
167
173
  #
@@ -172,7 +178,16 @@ module Mongo
172
178
  # lint mode is enabled.
173
179
  #
174
180
  # @since 2.0.0
175
- def select_server(cluster, ping = nil, session = nil)
181
+ def select_server(cluster, ping = nil, session = nil, write_aggregation: false, deprioritized: [])
182
+ select_server_impl(cluster, ping, session, write_aggregation, deprioritized).tap do |server|
183
+ if Lint.enabled? && !server.pool.ready?
184
+ raise Error::LintError, 'Server selector returning a server with a pool which is not ready'
185
+ end
186
+ end
187
+ end
188
+
189
+ # Parameters and return values are the same as for select_server.
190
+ private def select_server_impl(cluster, ping, session, write_aggregation, deprioritized)
176
191
  if cluster.topology.is_a?(Cluster::Topology::LoadBalanced)
177
192
  return cluster.servers.first
178
193
  end
@@ -243,7 +258,19 @@ module Mongo
243
258
  =end
244
259
 
245
260
  loop do
246
- server = try_select_server(cluster)
261
+ if Lint.enabled?
262
+ cluster.servers.each do |server|
263
+ # TODO: Add this back in RUBY-3174.
264
+ # if !server.unknown? && !server.connected?
265
+ # raise Error::LintError, "Server #{server.summary} is known but is not connected"
266
+ # end
267
+ if !server.unknown? && !server.pool.ready?
268
+ raise Error::LintError, "Server #{server.summary} is known but has non-ready pool"
269
+ end
270
+ end
271
+ end
272
+
273
+ server = try_select_server(cluster, write_aggregation: write_aggregation, deprioritized: deprioritized)
247
274
 
248
275
  if server
249
276
  unless cluster.topology.compatible?
@@ -294,17 +321,41 @@ module Mongo
294
321
  # Tries to find a suitable server, returns the server if one is available
295
322
  # or nil if there isn't a suitable server.
296
323
  #
324
+ # @param [ Mongo::Cluster ] cluster The cluster from which to select
325
+ # an eligible server.
326
+ # @param [ true | false ] write_aggregation Whether we need a server that
327
+ # supports writing aggregations (e.g. with $merge/$out) on secondaries.
328
+ # @param [ Array<Server> ] deprioritized A list of servers that should
329
+ # be selected from only if no other servers are available. This is
330
+ # used to avoid selecting the same server twice in a row when
331
+ # retrying a command.
332
+ #
297
333
  # @return [ Server | nil ] A suitable server, if one exists.
298
334
  #
299
335
  # @api private
300
- def try_select_server(cluster)
301
- servers = suitable_servers(cluster)
336
+ def try_select_server(cluster, write_aggregation: false, deprioritized: [])
337
+ servers = if write_aggregation && cluster.replica_set?
338
+ # 1. Check if ALL servers in cluster support secondary writes.
339
+ is_write_supported = cluster.servers.reduce(true) do |res, server|
340
+ res && server.features.merge_out_on_secondary_enabled?
341
+ end
342
+
343
+ if is_write_supported
344
+ # 2. If all servers support secondary writes, we respect read preference.
345
+ suitable_servers(cluster)
346
+ else
347
+ # 3. Otherwise we fallback to primary for replica set.
348
+ [cluster.servers.detect(&:primary?)]
349
+ end
350
+ else
351
+ suitable_servers(cluster)
352
+ end
302
353
 
303
354
  # This list of servers may be ordered in a specific way
304
355
  # by the selector (e.g. for secondary preferred, the first
305
356
  # server may be a secondary and the second server may be primary)
306
357
  # and we should take the first server here respecting the order
307
- server = servers.first
358
+ server = suitable_server(servers, deprioritized)
308
359
 
309
360
  if server
310
361
  if Lint.enabled?
@@ -375,6 +426,24 @@ module Mongo
375
426
 
376
427
  private
377
428
 
429
+ # Returns a server from the list of servers that is suitable for
430
+ # executing the operation.
431
+ #
432
+ # @param [ Array<Server> ] servers The candidate servers.
433
+ # @param [ Array<Server> ] deprioritized A list of servers that should
434
+ # be selected from only if no other servers are available.
435
+ #
436
+ # @return [ Server | nil ] The suitable server or nil if no suitable
437
+ # server is available.
438
+ def suitable_server(servers, deprioritized)
439
+ preferred = servers - deprioritized
440
+ if preferred.empty?
441
+ servers.first
442
+ else
443
+ preferred.first
444
+ end
445
+ end
446
+
378
447
  # Convert this server preference definition into a format appropriate
379
448
  # for sending to a MongoDB server (i.e., as a command field).
380
449
  #
@@ -582,9 +651,9 @@ module Mongo
582
651
  if cluster.server_selection_semaphore
583
652
  # Since the semaphore may have been signaled between us checking
584
653
  # the servers list earlier and the wait call below, we should not
585
- # wait for the full remaining time - wait for up to 1 second, then
654
+ # wait for the full remaining time - wait for up to 0.5 second, then
586
655
  # recheck the state.
587
- cluster.server_selection_semaphore.wait([time_remaining, 1].min)
656
+ cluster.server_selection_semaphore.wait([time_remaining, 0.5].min)
588
657
  else
589
658
  if Lint.enabled?
590
659
  raise Error::LintError, 'Waiting for server selection without having a server selection semaphore'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  # Copyright (C) 2014-2020 MongoDB Inc.
5
5
  #