mongo 2.16.4 → 2.21.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 (1614) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -37
  3. data/Rakefile +87 -177
  4. data/bin/mongo_console +2 -0
  5. data/lib/mongo/active_support.rb +1 -1
  6. data/lib/mongo/address/ipv4.rb +1 -1
  7. data/lib/mongo/address/ipv6.rb +1 -1
  8. data/lib/mongo/address/unix.rb +1 -1
  9. data/lib/mongo/address/validator.rb +1 -1
  10. data/lib/mongo/address.rb +23 -4
  11. data/lib/mongo/auth/aws/conversation.rb +1 -5
  12. data/lib/mongo/{operation/drop_database/command.rb → auth/aws/credentials.rb} +15 -18
  13. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  14. data/lib/mongo/auth/aws/credentials_retriever.rb +232 -44
  15. data/lib/mongo/auth/aws/request.rb +1 -3
  16. data/lib/mongo/auth/aws.rb +6 -6
  17. data/lib/mongo/auth/base.rb +9 -2
  18. data/lib/mongo/auth/conversation_base.rb +1 -1
  19. data/lib/mongo/auth/cr/conversation.rb +1 -1
  20. data/lib/mongo/auth/cr.rb +1 -1
  21. data/lib/mongo/auth/credential_cache.rb +1 -1
  22. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  23. data/lib/mongo/auth/gssapi.rb +1 -1
  24. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  25. data/lib/mongo/auth/ldap.rb +1 -1
  26. data/lib/mongo/auth/roles.rb +17 -17
  27. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  28. data/lib/mongo/auth/scram/conversation.rb +1 -1
  29. data/lib/mongo/auth/scram.rb +1 -1
  30. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  31. data/lib/mongo/auth/scram256.rb +1 -1
  32. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  33. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  34. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  35. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  37. data/lib/mongo/auth/stringprep.rb +1 -1
  38. data/lib/mongo/auth/user/view.rb +1 -1
  39. data/lib/mongo/auth/user.rb +1 -1
  40. data/lib/mongo/auth/x509/conversation.rb +1 -1
  41. data/lib/mongo/auth/x509.rb +1 -1
  42. data/lib/mongo/auth.rb +13 -2
  43. data/lib/mongo/background_thread.rb +1 -1
  44. data/lib/mongo/bson.rb +1 -1
  45. data/lib/mongo/bulk_write/combineable.rb +1 -1
  46. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  47. data/lib/mongo/bulk_write/result.rb +11 -2
  48. data/lib/mongo/bulk_write/result_combiner.rb +3 -5
  49. data/lib/mongo/bulk_write/transformable.rb +1 -1
  50. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  51. data/lib/mongo/bulk_write/validatable.rb +1 -1
  52. data/lib/mongo/bulk_write.rb +153 -32
  53. data/lib/mongo/caching_cursor.rb +1 -1
  54. data/lib/mongo/client.rb +227 -27
  55. data/lib/mongo/client_encryption.rb +218 -11
  56. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  57. data/lib/mongo/cluster/reapers/cursor_reaper.rb +40 -17
  58. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  59. data/lib/mongo/cluster/sdam_flow.rb +62 -22
  60. data/lib/mongo/cluster/topology/base.rb +17 -1
  61. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  62. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  63. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  66. data/lib/mongo/cluster/topology/single.rb +1 -1
  67. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  68. data/lib/mongo/cluster/topology.rb +1 -1
  69. data/lib/mongo/cluster.rb +95 -44
  70. data/lib/mongo/cluster_time.rb +1 -1
  71. data/lib/mongo/collection/helpers.rb +43 -0
  72. data/lib/mongo/collection/queryable_encryption.rb +162 -0
  73. data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
  74. data/lib/mongo/collection/view/aggregation.rb +85 -100
  75. data/lib/mongo/collection/view/builder/aggregation.rb +13 -21
  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 +144 -45
  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 +81 -65
  83. data/lib/mongo/collection/view/map_reduce.rb +43 -15
  84. data/lib/mongo/collection/view/readable.rb +127 -52
  85. data/lib/mongo/collection/view/writable.rb +231 -56
  86. data/lib/mongo/collection/view.rb +44 -4
  87. data/lib/mongo/collection.rb +483 -114
  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 +142 -20
  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 +83 -11
  98. data/lib/mongo/crypt/data_key_context.rb +13 -105
  99. data/lib/mongo/crypt/encryption_io.rb +133 -69
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +266 -34
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +82 -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 +138 -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 +83 -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/csot_timeout_holder.rb +119 -0
  133. data/lib/mongo/cursor/kill_spec.rb +45 -4
  134. data/lib/mongo/cursor/nontailable.rb +27 -0
  135. data/lib/mongo/cursor.rb +149 -38
  136. data/lib/mongo/cursor_host.rb +82 -0
  137. data/lib/mongo/database/view.rb +126 -17
  138. data/lib/mongo/database.rb +154 -40
  139. data/lib/mongo/dbref.rb +2 -106
  140. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  141. data/lib/mongo/error/auth_error.rb +1 -1
  142. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  143. data/lib/mongo/error/bulk_write_error.rb +32 -5
  144. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  145. data/lib/mongo/error/client_closed.rb +24 -0
  146. data/lib/mongo/error/closed_stream.rb +1 -1
  147. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  148. data/lib/mongo/error/connection_perished.rb +3 -1
  149. data/lib/mongo/error/connection_unavailable.rb +27 -0
  150. data/lib/mongo/error/credential_check_error.rb +1 -1
  151. data/lib/mongo/error/crypt_error.rb +1 -1
  152. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  153. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  154. data/lib/mongo/error/file_not_found.rb +1 -1
  155. data/lib/mongo/error/handshake_error.rb +1 -1
  156. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  157. data/lib/mongo/error/internal_driver_error.rb +1 -1
  158. data/lib/mongo/error/invalid_address.rb +1 -1
  159. data/lib/mongo/error/invalid_application_name.rb +1 -1
  160. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  161. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  162. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  163. data/lib/mongo/error/invalid_config_option.rb +21 -0
  164. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  165. data/lib/mongo/error/invalid_database_name.rb +1 -1
  166. data/lib/mongo/error/invalid_document.rb +1 -1
  167. data/lib/mongo/error/invalid_file.rb +1 -1
  168. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  169. data/lib/mongo/error/invalid_max_connecting.rb +28 -0
  170. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  171. data/lib/mongo/error/invalid_nonce.rb +1 -1
  172. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  173. data/lib/mongo/error/invalid_read_option.rb +2 -2
  174. data/lib/mongo/error/invalid_replacement_document.rb +28 -10
  175. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  176. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  177. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  178. data/lib/mongo/error/invalid_session.rb +1 -1
  179. data/lib/mongo/error/invalid_signature.rb +1 -1
  180. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  181. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  182. data/lib/mongo/error/invalid_update_document.rb +28 -8
  183. data/lib/mongo/error/invalid_uri.rb +1 -1
  184. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  185. data/lib/mongo/error/kms_error.rb +1 -1
  186. data/lib/mongo/error/labelable.rb +72 -0
  187. data/lib/mongo/error/lint_error.rb +1 -1
  188. data/lib/mongo/error/max_bson_size.rb +1 -1
  189. data/lib/mongo/error/max_message_size.rb +1 -1
  190. data/lib/mongo/error/mismatched_domain.rb +1 -1
  191. data/lib/mongo/error/missing_connection.rb +27 -0
  192. data/lib/mongo/error/missing_file_chunk.rb +9 -3
  193. data/lib/mongo/error/missing_password.rb +1 -1
  194. data/lib/mongo/error/missing_resume_token.rb +1 -1
  195. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  196. data/lib/mongo/error/missing_service_id.rb +1 -1
  197. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  198. data/lib/mongo/error/multi_index_drop.rb +1 -1
  199. data/lib/mongo/error/need_primary_server.rb +1 -1
  200. data/lib/mongo/error/no_server_available.rb +1 -1
  201. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  202. data/lib/mongo/error/no_srv_records.rb +1 -1
  203. data/lib/mongo/error/notable.rb +15 -1
  204. data/lib/mongo/error/operation_failure.rb +213 -260
  205. data/lib/mongo/error/parser.rb +1 -1
  206. data/lib/mongo/{operation/create_user/command.rb → error/pool_cleared_error.rb} +17 -23
  207. data/lib/mongo/error/pool_closed_error.rb +4 -17
  208. data/lib/mongo/{operation/update_user/command.rb → error/pool_error.rb} +21 -21
  209. data/lib/mongo/{operation/drop_index/command.rb → error/pool_paused_error.rb} +17 -22
  210. data/lib/mongo/error/raise_original_error.rb +1 -1
  211. data/lib/mongo/error/read_write_retryable.rb +108 -0
  212. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  213. data/lib/mongo/error/server_api_conflict.rb +1 -1
  214. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  215. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  216. data/lib/mongo/{operation/get_more/legacy.rb → error/server_not_usable.rb} +13 -16
  217. data/lib/mongo/error/server_timeout_error.rb +12 -0
  218. data/lib/mongo/error/session_ended.rb +1 -1
  219. data/lib/mongo/error/session_not_materialized.rb +29 -0
  220. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  221. data/lib/mongo/{operation/kill_cursors/legacy.rb → error/snapshot_session_invalid_server_version.rb} +9 -19
  222. data/lib/mongo/{operation/command/command.rb → error/snapshot_session_transaction_prohibited.rb} +8 -19
  223. data/lib/mongo/error/socket_error.rb +1 -1
  224. data/lib/mongo/error/socket_timeout_error.rb +4 -2
  225. data/lib/mongo/error/timeout_error.rb +23 -0
  226. data/lib/mongo/{operation/shared/op_msg_or_command.rb → error/transactions_not_supported.rb} +13 -20
  227. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  228. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  229. data/lib/mongo/error/unexpected_response.rb +1 -1
  230. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  231. data/lib/mongo/error/unmet_dependency.rb +1 -1
  232. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  233. data/lib/mongo/error/unsupported_collation.rb +1 -1
  234. data/lib/mongo/error/unsupported_features.rb +1 -1
  235. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  236. data/lib/mongo/error/unsupported_option.rb +1 -1
  237. data/lib/mongo/error/write_retryable.rb +1 -1
  238. data/lib/mongo/error.rb +18 -38
  239. data/lib/mongo/event/base.rb +1 -1
  240. data/lib/mongo/event/listeners.rb +1 -1
  241. data/lib/mongo/event/publisher.rb +1 -1
  242. data/lib/mongo/event/subscriber.rb +1 -1
  243. data/lib/mongo/event.rb +1 -1
  244. data/lib/mongo/grid/file/chunk.rb +3 -2
  245. data/lib/mongo/grid/file/info.rb +3 -2
  246. data/lib/mongo/grid/file.rb +1 -1
  247. data/lib/mongo/grid/fs_bucket.rb +49 -10
  248. data/lib/mongo/grid/stream/read.rb +22 -2
  249. data/lib/mongo/grid/stream/write.rb +22 -5
  250. data/lib/mongo/grid/stream.rb +1 -1
  251. data/lib/mongo/grid.rb +1 -1
  252. data/lib/mongo/id.rb +1 -1
  253. data/lib/mongo/index/view.rb +96 -19
  254. data/lib/mongo/index.rb +1 -1
  255. data/lib/mongo/lint.rb +1 -1
  256. data/lib/mongo/loggable.rb +3 -3
  257. data/lib/mongo/logger.rb +1 -1
  258. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  259. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  263. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  264. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  266. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  267. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  268. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  269. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  270. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  271. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  272. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  273. data/lib/mongo/monitoring/event/command_failed.rb +9 -3
  274. data/lib/mongo/monitoring/event/command_started.rb +2 -2
  275. data/lib/mongo/monitoring/event/command_succeeded.rb +10 -3
  276. data/lib/mongo/monitoring/event/secure.rb +2 -2
  277. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  278. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  279. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  280. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  281. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  282. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  283. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  284. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  285. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  286. data/lib/mongo/monitoring/event.rb +1 -1
  287. data/lib/mongo/monitoring/publishable.rb +10 -6
  288. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  291. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  292. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  293. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  294. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  295. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  296. data/lib/mongo/monitoring.rb +1 -1
  297. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  298. data/lib/mongo/operation/aggregate/result.rb +1 -1
  299. data/lib/mongo/operation/aggregate.rb +2 -3
  300. data/lib/mongo/operation/collections_info/result.rb +6 -3
  301. data/lib/mongo/operation/collections_info.rb +4 -16
  302. data/lib/mongo/operation/command/op_msg.rb +7 -1
  303. data/lib/mongo/operation/command.rb +2 -3
  304. data/lib/mongo/operation/context.rb +64 -8
  305. data/lib/mongo/operation/count/op_msg.rb +5 -2
  306. data/lib/mongo/operation/count.rb +2 -3
  307. data/lib/mongo/operation/create/op_msg.rb +5 -2
  308. data/lib/mongo/operation/create.rb +2 -3
  309. data/lib/mongo/operation/create_index/op_msg.rb +3 -2
  310. data/lib/mongo/operation/create_index.rb +2 -3
  311. data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
  312. data/lib/mongo/operation/create_search_indexes.rb +15 -0
  313. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  314. data/lib/mongo/operation/create_user.rb +2 -3
  315. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  316. data/lib/mongo/operation/delete/op_msg.rb +6 -3
  317. data/lib/mongo/operation/delete/result.rb +1 -1
  318. data/lib/mongo/operation/delete.rb +1 -3
  319. data/lib/mongo/operation/distinct/op_msg.rb +5 -2
  320. data/lib/mongo/operation/distinct.rb +2 -3
  321. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  322. data/lib/mongo/operation/drop.rb +2 -3
  323. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  324. data/lib/mongo/operation/drop_database.rb +2 -3
  325. data/lib/mongo/operation/drop_index/op_msg.rb +6 -2
  326. data/lib/mongo/operation/drop_index.rb +2 -3
  327. data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
  328. data/lib/mongo/operation/drop_search_index.rb +15 -0
  329. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  330. data/lib/mongo/operation/explain/result.rb +1 -1
  331. data/lib/mongo/operation/explain.rb +2 -4
  332. data/lib/mongo/operation/find/builder/command.rb +2 -1
  333. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  334. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  335. data/lib/mongo/operation/find/builder.rb +1 -2
  336. data/lib/mongo/operation/find/op_msg.rb +46 -1
  337. data/lib/mongo/operation/find/result.rb +1 -1
  338. data/lib/mongo/operation/find.rb +2 -4
  339. data/lib/mongo/operation/get_more/command_builder.rb +6 -2
  340. data/lib/mongo/operation/get_more/op_msg.rb +34 -1
  341. data/lib/mongo/operation/get_more/result.rb +1 -1
  342. data/lib/mongo/operation/get_more.rb +2 -4
  343. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  344. data/lib/mongo/operation/indexes/result.rb +1 -1
  345. data/lib/mongo/operation/indexes.rb +2 -18
  346. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  347. data/lib/mongo/operation/insert/op_msg.rb +9 -5
  348. data/lib/mongo/operation/insert/result.rb +9 -4
  349. data/lib/mongo/operation/insert.rb +1 -3
  350. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  351. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  352. data/lib/mongo/operation/kill_cursors.rb +2 -4
  353. data/lib/mongo/operation/list_collections/op_msg.rb +5 -2
  354. data/lib/mongo/operation/list_collections/result.rb +2 -2
  355. data/lib/mongo/operation/list_collections.rb +2 -3
  356. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  357. data/lib/mongo/operation/map_reduce/result.rb +18 -2
  358. data/lib/mongo/operation/map_reduce.rb +2 -3
  359. data/lib/mongo/operation/op_msg_base.rb +4 -2
  360. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  361. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  362. data/lib/mongo/operation/parallel_scan.rb +2 -3
  363. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  364. data/lib/mongo/operation/remove_user.rb +2 -3
  365. data/lib/mongo/operation/result.rb +53 -10
  366. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  367. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  368. data/lib/mongo/operation/shared/executable.rb +60 -14
  369. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  370. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  371. data/lib/mongo/operation/shared/idable.rb +1 -1
  372. data/lib/mongo/operation/shared/limited.rb +1 -1
  373. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  374. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +28 -8
  375. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  376. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  377. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  378. data/lib/mongo/operation/shared/response_handling.rb +32 -33
  379. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  380. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  381. data/lib/mongo/operation/shared/sessions_supported.rb +27 -8
  382. data/lib/mongo/operation/shared/specifiable.rb +8 -1
  383. data/lib/mongo/operation/shared/timed.rb +52 -0
  384. data/lib/mongo/operation/shared/validatable.rb +1 -1
  385. data/lib/mongo/operation/shared/write.rb +22 -13
  386. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  387. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  388. data/lib/mongo/operation/update/op_msg.rb +6 -3
  389. data/lib/mongo/operation/update/result.rb +1 -1
  390. data/lib/mongo/operation/update.rb +1 -3
  391. data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
  392. data/lib/mongo/operation/update_search_index.rb +15 -0
  393. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  394. data/lib/mongo/operation/update_user.rb +2 -3
  395. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  396. data/lib/mongo/operation/users_info/result.rb +1 -1
  397. data/lib/mongo/operation/users_info.rb +2 -3
  398. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  399. data/lib/mongo/operation/write_command.rb +2 -3
  400. data/lib/mongo/operation.rb +6 -4
  401. data/lib/mongo/options/mapper.rb +1 -1
  402. data/lib/mongo/options/redacted.rb +1 -1
  403. data/lib/mongo/options.rb +1 -1
  404. data/lib/mongo/protocol/bit_vector.rb +4 -2
  405. data/lib/mongo/protocol/caching_hash.rb +52 -0
  406. data/lib/mongo/protocol/compressed.rb +1 -1
  407. data/lib/mongo/protocol/get_more.rb +1 -1
  408. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  409. data/lib/mongo/protocol/message.rb +6 -13
  410. data/lib/mongo/protocol/msg.rb +25 -4
  411. data/lib/mongo/protocol/query.rb +1 -1
  412. data/lib/mongo/protocol/registry.rb +1 -1
  413. data/lib/mongo/protocol/reply.rb +1 -1
  414. data/lib/mongo/protocol/serializers.rb +25 -18
  415. data/lib/mongo/protocol.rb +2 -4
  416. data/lib/mongo/query_cache.rb +36 -21
  417. data/lib/mongo/retryable/base_worker.rb +116 -0
  418. data/lib/mongo/retryable/read_worker.rb +338 -0
  419. data/lib/mongo/retryable/write_worker.rb +398 -0
  420. data/lib/mongo/retryable.rb +37 -454
  421. data/lib/mongo/search_index/view.rb +232 -0
  422. data/lib/mongo/semaphore.rb +2 -2
  423. data/lib/mongo/server/app_metadata/environment.rb +314 -0
  424. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  425. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  426. data/lib/mongo/server/app_metadata.rb +76 -108
  427. data/lib/mongo/server/connection.rb +102 -22
  428. data/lib/mongo/server/connection_base.rb +25 -3
  429. data/lib/mongo/server/connection_common.rb +5 -2
  430. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  431. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  432. data/lib/mongo/server/connection_pool.rb +758 -251
  433. data/lib/mongo/server/description/features.rb +7 -2
  434. data/lib/mongo/server/description/load_balancer.rb +1 -1
  435. data/lib/mongo/server/description.rb +32 -13
  436. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  437. data/lib/mongo/server/monitor/connection.rb +2 -1
  438. data/lib/mongo/server/monitor.rb +43 -24
  439. data/lib/mongo/server/pending_connection.rb +26 -9
  440. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  441. data/lib/mongo/server/push_monitor.rb +14 -4
  442. data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +26 -8
  443. data/lib/mongo/server.rb +114 -39
  444. data/lib/mongo/server_selector/base.rb +98 -13
  445. data/lib/mongo/server_selector/nearest.rb +1 -1
  446. data/lib/mongo/server_selector/primary.rb +1 -1
  447. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  448. data/lib/mongo/server_selector/secondary.rb +1 -1
  449. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  450. data/lib/mongo/server_selector.rb +1 -1
  451. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  452. data/lib/mongo/session/server_session.rb +4 -1
  453. data/lib/mongo/session/session_pool.rb +21 -19
  454. data/lib/mongo/session.rb +240 -44
  455. data/lib/mongo/socket/ocsp_cache.rb +3 -4
  456. data/lib/mongo/socket/ocsp_verifier.rb +5 -6
  457. data/lib/mongo/socket/ssl.rb +132 -19
  458. data/lib/mongo/socket/tcp.rb +44 -7
  459. data/lib/mongo/socket/unix.rb +1 -1
  460. data/lib/mongo/socket.rb +184 -32
  461. data/lib/mongo/srv/monitor.rb +1 -3
  462. data/lib/mongo/srv/resolver.rb +25 -4
  463. data/lib/mongo/srv/result.rb +1 -1
  464. data/lib/mongo/srv.rb +1 -1
  465. data/lib/mongo/timeout.rb +2 -2
  466. data/lib/mongo/topology_version.rb +1 -1
  467. data/lib/mongo/uri/options_mapper.rb +325 -81
  468. data/lib/mongo/uri/srv_protocol.rb +2 -2
  469. data/lib/mongo/uri.rb +61 -17
  470. data/lib/mongo/utils.rb +1 -7
  471. data/lib/mongo/version.rb +1 -5
  472. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  473. data/lib/mongo/write_concern/base.rb +1 -1
  474. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  475. data/lib/mongo/write_concern.rb +1 -1
  476. data/lib/mongo.rb +26 -1
  477. data/mongo.gemspec +15 -15
  478. data/spec/README.md +23 -5
  479. data/spec/atlas/atlas_connectivity_spec.rb +10 -10
  480. data/spec/atlas/operations_spec.rb +7 -12
  481. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  482. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  483. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  484. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  485. data/spec/integration/auth_spec.rb +1 -1
  486. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  487. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  488. data/spec/integration/aws_auth_request_spec.rb +2 -2
  489. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  490. data/spec/integration/aws_lambda_examples_spec.rb +68 -0
  491. data/spec/integration/bson_symbol_spec.rb +1 -1
  492. data/spec/integration/bulk_insert_spec.rb +1 -1
  493. data/spec/integration/bulk_write_error_message_spec.rb +33 -0
  494. data/spec/integration/bulk_write_spec.rb +17 -1
  495. data/spec/integration/change_stream_examples_spec.rb +1 -1
  496. data/spec/integration/change_stream_spec.rb +12 -6
  497. data/spec/integration/check_clean_slate_spec.rb +1 -1
  498. data/spec/integration/client_authentication_options_spec.rb +1 -1
  499. data/spec/integration/client_connectivity_spec.rb +1 -1
  500. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  501. data/spec/integration/client_construction_spec.rb +97 -9
  502. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +10 -10
  503. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +169 -169
  504. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +3 -3
  505. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  506. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +41 -5
  507. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +537 -387
  508. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  509. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +3 -3
  510. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +3 -3
  511. data/spec/integration/client_side_encryption/client_close_spec.rb +2 -2
  512. data/spec/integration/client_side_encryption/corpus_spec.rb +75 -38
  513. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +40 -43
  514. data/spec/integration/client_side_encryption/data_key_spec.rb +98 -8
  515. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +159 -0
  516. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +60 -1
  517. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +150 -0
  518. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +7 -7
  519. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
  520. data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
  521. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  522. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  523. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  524. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  525. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +114 -0
  526. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +583 -0
  527. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  528. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +89 -0
  529. data/spec/integration/client_side_encryption/views_spec.rb +2 -2
  530. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
  531. data/spec/integration/client_spec.rb +8 -3
  532. data/spec/integration/client_update_spec.rb +7 -3
  533. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  534. data/spec/integration/command_monitoring_spec.rb +1 -1
  535. data/spec/integration/command_spec.rb +2 -24
  536. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  537. data/spec/integration/connection/faas_env_spec.rb +62 -0
  538. data/spec/integration/connection_pool_populator_spec.rb +29 -7
  539. data/spec/integration/connection_spec.rb +1 -1
  540. data/spec/integration/crud_spec.rb +13 -1
  541. data/spec/integration/cursor_pinning_spec.rb +21 -62
  542. data/spec/integration/cursor_reaping_spec.rb +2 -2
  543. data/spec/integration/docs_examples_spec.rb +3 -3
  544. data/spec/integration/error_detection_spec.rb +1 -1
  545. data/spec/integration/fork_reconnect_spec.rb +17 -10
  546. data/spec/integration/get_more_spec.rb +1 -1
  547. data/spec/integration/grid_fs_bucket_spec.rb +4 -4
  548. data/spec/integration/heartbeat_events_spec.rb +1 -1
  549. data/spec/integration/map_reduce_spec.rb +5 -1
  550. data/spec/integration/mmapv1_spec.rb +1 -1
  551. data/spec/integration/mongos_pinning_spec.rb +1 -1
  552. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  553. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  554. data/spec/integration/ocsp_verifier_spec.rb +5 -2
  555. data/spec/integration/operation_failure_code_spec.rb +2 -2
  556. data/spec/integration/operation_failure_message_spec.rb +4 -3
  557. data/spec/integration/query_cache_spec.rb +124 -33
  558. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  559. data/spec/integration/read_concern_spec.rb +1 -1
  560. data/spec/integration/read_preference_spec.rb +17 -13
  561. data/spec/integration/reconnect_spec.rb +6 -1
  562. data/spec/integration/retryable_errors_spec.rb +3 -3
  563. data/spec/integration/retryable_reads_errors_spec.rb +275 -0
  564. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +2 -2
  565. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  566. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  567. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  568. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  569. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  570. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  571. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  572. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  573. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  574. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  575. data/spec/integration/retryable_writes_errors_spec.rb +316 -2
  576. data/spec/integration/sdam_error_handling_spec.rb +69 -5
  577. data/spec/integration/sdam_events_spec.rb +1 -1
  578. data/spec/integration/sdam_prose_spec.rb +3 -3
  579. data/spec/integration/search_indexes_prose_spec.rb +172 -0
  580. data/spec/integration/secondary_reads_spec.rb +1 -0
  581. data/spec/integration/server_description_spec.rb +1 -1
  582. data/spec/integration/server_monitor_spec.rb +3 -2
  583. data/spec/integration/server_selection_spec.rb +1 -1
  584. data/spec/integration/server_selector_spec.rb +5 -3
  585. data/spec/integration/server_spec.rb +26 -28
  586. data/spec/integration/shell_examples_spec.rb +1 -1
  587. data/spec/integration/size_limit_spec.rb +5 -2
  588. data/spec/integration/snappy_compression_spec.rb +1 -1
  589. data/spec/integration/snapshot_query_examples_spec.rb +129 -0
  590. data/spec/integration/srv_monitoring_spec.rb +40 -1
  591. data/spec/integration/srv_spec.rb +4 -3
  592. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  593. data/spec/integration/step_down_spec.rb +25 -7
  594. data/spec/integration/time_zone_querying_spec.rb +1 -1
  595. data/spec/integration/transaction_pinning_spec.rb +20 -6
  596. data/spec/integration/transactions_api_examples_spec.rb +3 -1
  597. data/spec/integration/transactions_examples_spec.rb +1 -1
  598. data/spec/integration/truncated_utf8_spec.rb +1 -1
  599. data/spec/integration/versioned_api_examples_spec.rb +38 -32
  600. data/spec/integration/x509_auth_spec.rb +1 -1
  601. data/spec/integration/zlib_compression_spec.rb +1 -1
  602. data/spec/integration/zstd_compression_spec.rb +1 -1
  603. data/spec/kerberos/kerberos_spec.rb +5 -1
  604. data/spec/lite_spec_helper.rb +63 -26
  605. data/spec/mongo/address/ipv4_spec.rb +1 -1
  606. data/spec/mongo/address/ipv6_spec.rb +8 -1
  607. data/spec/mongo/address/unix_spec.rb +1 -1
  608. data/spec/mongo/address/validator_spec.rb +1 -1
  609. data/spec/mongo/address_spec.rb +15 -2
  610. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  611. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  612. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  613. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  614. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  615. data/spec/mongo/auth/cr_spec.rb +2 -22
  616. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  617. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  618. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  619. data/spec/mongo/auth/ldap_spec.rb +1 -1
  620. data/spec/mongo/auth/scram/conversation_spec.rb +24 -24
  621. data/spec/mongo/auth/scram256/conversation_spec.rb +21 -21
  622. data/spec/mongo/auth/scram_negotiation_spec.rb +2 -1
  623. data/spec/mongo/auth/scram_spec.rb +1 -1
  624. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  625. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  626. data/spec/mongo/auth/user/view_spec.rb +96 -1
  627. data/spec/mongo/auth/user_spec.rb +1 -1
  628. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  629. data/spec/mongo/auth/x509_spec.rb +1 -1
  630. data/spec/mongo/auth_spec.rb +1 -1
  631. data/spec/mongo/bson_spec.rb +1 -1
  632. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  633. data/spec/mongo/bulk_write/result_spec.rb +16 -2
  634. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  635. data/spec/mongo/bulk_write_spec.rb +142 -21
  636. data/spec/mongo/caching_cursor_spec.rb +2 -2
  637. data/spec/mongo/client_construction_spec.rb +734 -631
  638. data/spec/mongo/client_encryption_spec.rb +12 -23
  639. data/spec/mongo/client_spec.rb +547 -156
  640. data/spec/mongo/cluster/cursor_reaper_spec.rb +42 -17
  641. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  642. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  643. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  644. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  645. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  646. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  647. data/spec/mongo/cluster/topology_spec.rb +1 -1
  648. data/spec/mongo/cluster_spec.rb +193 -199
  649. data/spec/mongo/cluster_time_spec.rb +1 -1
  650. data/spec/mongo/collection/view/aggregation_spec.rb +198 -123
  651. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  652. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  653. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  654. data/spec/mongo/collection/view/change_stream_spec.rb +6 -6
  655. data/spec/mongo/collection/view/explainable_spec.rb +3 -1
  656. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  657. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  658. data/spec/mongo/collection/view/map_reduce_spec.rb +25 -2
  659. data/spec/mongo/collection/view/readable_spec.rb +744 -2
  660. data/spec/mongo/collection/view/writable_spec.rb +145 -33
  661. data/spec/mongo/collection/view_spec.rb +1 -1
  662. data/spec/mongo/collection_crud_spec.rb +122 -15
  663. data/spec/mongo/collection_ddl_spec.rb +116 -66
  664. data/spec/mongo/collection_spec.rb +47 -2
  665. data/spec/mongo/condition_variable_spec.rb +104 -0
  666. data/spec/mongo/config/options_spec.rb +76 -0
  667. data/spec/mongo/config_spec.rb +74 -0
  668. data/spec/mongo/crypt/auto_decryption_context_spec.rb +18 -2
  669. data/spec/mongo/crypt/auto_encrypter_spec.rb +272 -12
  670. data/spec/mongo/crypt/auto_encryption_context_spec.rb +18 -2
  671. data/spec/mongo/crypt/binary_spec.rb +1 -1
  672. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  673. data/spec/mongo/crypt/binding/context_spec.rb +68 -18
  674. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  675. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +18 -47
  676. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  677. data/spec/mongo/crypt/binding/version_spec.rb +48 -1
  678. data/spec/mongo/crypt/binding_unloaded_spec.rb +15 -1
  679. data/spec/mongo/crypt/data_key_context_spec.rb +46 -116
  680. data/spec/mongo/crypt/encryption_io_spec.rb +3 -1
  681. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +33 -2
  682. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +95 -2
  683. data/spec/mongo/crypt/handle_spec.rb +187 -156
  684. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  685. data/spec/mongo/crypt/hooks_spec.rb +30 -0
  686. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  687. data/spec/mongo/crypt/kms/credentials_spec.rb +373 -0
  688. data/spec/mongo/crypt/kms_spec.rb +62 -0
  689. data/spec/mongo/crypt/status_spec.rb +1 -1
  690. data/spec/mongo/crypt_spec.rb +21 -0
  691. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  692. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  693. data/spec/mongo/cursor_spec.rb +172 -21
  694. data/spec/mongo/database_spec.rb +67 -2
  695. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  696. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  697. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  698. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  699. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  700. data/spec/mongo/error/notable_spec.rb +1 -1
  701. data/spec/mongo/error/operation_failure_heavy_spec.rb +51 -2
  702. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  703. data/spec/mongo/error/parser_spec.rb +1 -1
  704. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  705. data/spec/mongo/event/publisher_spec.rb +1 -1
  706. data/spec/mongo/event/subscriber_spec.rb +1 -1
  707. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  708. data/spec/mongo/grid/file/info_spec.rb +1 -1
  709. data/spec/mongo/grid/file_spec.rb +1 -1
  710. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  711. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  712. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  713. data/spec/mongo/grid/stream_spec.rb +1 -1
  714. data/spec/mongo/id_spec.rb +2 -2
  715. data/spec/mongo/index/view_spec.rb +126 -1
  716. data/spec/mongo/lint_spec.rb +2 -2
  717. data/spec/mongo/logger_spec.rb +1 -1
  718. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  719. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  720. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  721. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  722. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  723. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  724. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  725. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  726. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  727. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  728. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  729. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  730. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  731. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  732. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  733. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  734. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  735. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  736. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  737. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  738. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  739. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  740. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  741. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  742. data/spec/mongo/monitoring_spec.rb +1 -1
  743. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  744. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  745. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  746. data/spec/mongo/operation/command_spec.rb +1 -1
  747. data/spec/mongo/operation/context_spec.rb +79 -0
  748. data/spec/mongo/operation/create/op_msg_spec.rb +240 -0
  749. data/spec/mongo/operation/create_index_spec.rb +1 -1
  750. data/spec/mongo/operation/create_user_spec.rb +1 -1
  751. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  752. data/spec/mongo/operation/delete/op_msg_spec.rb +20 -10
  753. data/spec/mongo/operation/delete_spec.rb +1 -31
  754. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  755. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  756. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  757. data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
  758. data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
  759. data/spec/mongo/operation/indexes_spec.rb +1 -1
  760. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  761. data/spec/mongo/operation/insert/op_msg_spec.rb +131 -126
  762. data/spec/mongo/operation/insert_spec.rb +2 -34
  763. data/spec/mongo/operation/limited_spec.rb +1 -1
  764. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  765. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  766. data/spec/mongo/operation/read_preference_op_msg_spec.rb +25 -2
  767. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  768. data/spec/mongo/operation/result_spec.rb +21 -1
  769. data/spec/mongo/operation/shared/csot/examples.rb +113 -0
  770. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  771. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  772. data/spec/mongo/operation/update/op_msg_spec.rb +14 -5
  773. data/spec/mongo/operation/update_spec.rb +1 -30
  774. data/spec/mongo/operation/update_user_spec.rb +1 -1
  775. data/spec/mongo/options/redacted_spec.rb +2 -2
  776. data/spec/mongo/protocol/caching_hash_spec.rb +37 -0
  777. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  778. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  779. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  780. data/spec/mongo/protocol/msg_spec.rb +45 -66
  781. data/spec/mongo/protocol/query_spec.rb +1 -1
  782. data/spec/mongo/protocol/registry_spec.rb +1 -1
  783. data/spec/mongo/protocol/reply_spec.rb +1 -1
  784. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  785. data/spec/mongo/query_cache_spec.rb +245 -226
  786. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  787. data/spec/mongo/retryable_spec.rb +38 -6
  788. data/spec/mongo/semaphore_spec.rb +7 -7
  789. data/spec/mongo/server/app_metadata/environment_spec.rb +344 -0
  790. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  791. data/spec/mongo/server/app_metadata_spec.rb +53 -65
  792. data/spec/mongo/server/connection_auth_spec.rb +4 -2
  793. data/spec/mongo/server/connection_common_spec.rb +14 -2
  794. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  795. data/spec/mongo/server/connection_pool_spec.rb +567 -63
  796. data/spec/mongo/server/connection_spec.rb +93 -163
  797. data/spec/mongo/server/description/features_spec.rb +25 -1
  798. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  799. data/spec/mongo/server/description_spec.rb +1 -1
  800. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  801. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  802. data/spec/mongo/server/monitor_spec.rb +6 -5
  803. data/spec/mongo/server/push_monitor_spec.rb +3 -9
  804. data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
  805. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  806. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  807. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  808. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  809. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  810. data/spec/mongo/server_selector_spec.rb +137 -16
  811. data/spec/mongo/server_spec.rb +32 -5
  812. data/spec/mongo/session/server_session_spec.rb +1 -1
  813. data/spec/mongo/session/session_pool_spec.rb +2 -17
  814. data/spec/mongo/session_spec.rb +27 -7
  815. data/spec/mongo/session_transaction_spec.rb +19 -3
  816. data/spec/mongo/socket/ssl_spec.rb +45 -82
  817. data/spec/mongo/socket/tcp_spec.rb +1 -1
  818. data/spec/mongo/socket/unix_spec.rb +1 -1
  819. data/spec/mongo/socket_spec.rb +1 -1
  820. data/spec/mongo/srv/monitor_spec.rb +1 -1
  821. data/spec/mongo/srv/result_spec.rb +1 -1
  822. data/spec/mongo/timeout_spec.rb +1 -1
  823. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  824. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  825. data/spec/mongo/uri/srv_protocol_spec.rb +263 -4
  826. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  827. data/spec/mongo/uri_spec.rb +168 -11
  828. data/spec/mongo/utils_spec.rb +1 -15
  829. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  830. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  831. data/spec/mongo/write_concern_spec.rb +1 -1
  832. data/spec/runners/auth.rb +1 -1
  833. data/spec/runners/change_streams/outcome.rb +1 -1
  834. data/spec/runners/change_streams/spec.rb +1 -1
  835. data/spec/runners/change_streams/test.rb +3 -3
  836. data/spec/runners/cmap/verifier.rb +2 -2
  837. data/spec/runners/cmap.rb +188 -45
  838. data/spec/runners/command_monitoring.rb +1 -1
  839. data/spec/runners/connection_string.rb +9 -1
  840. data/spec/runners/crud/context.rb +1 -1
  841. data/spec/runners/crud/operation.rb +15 -6
  842. data/spec/runners/crud/outcome.rb +1 -1
  843. data/spec/runners/crud/requirement.rb +12 -7
  844. data/spec/runners/crud/spec.rb +6 -1
  845. data/spec/runners/crud/test.rb +2 -10
  846. data/spec/runners/crud/test_base.rb +2 -2
  847. data/spec/runners/crud/verifier.rb +13 -6
  848. data/spec/runners/crud.rb +2 -2
  849. data/spec/runners/gridfs.rb +1 -1
  850. data/spec/runners/read_write_concern_document.rb +1 -1
  851. data/spec/runners/sdam/verifier.rb +1 -1
  852. data/spec/runners/sdam.rb +1 -1
  853. data/spec/runners/server_selection.rb +1 -1
  854. data/spec/runners/server_selection_rtt.rb +1 -1
  855. data/spec/runners/transactions/operation.rb +19 -15
  856. data/spec/runners/transactions/spec.rb +3 -3
  857. data/spec/runners/transactions/test.rb +75 -22
  858. data/spec/runners/transactions.rb +12 -9
  859. data/spec/runners/unified/ambiguous_operations.rb +13 -0
  860. data/spec/runners/unified/assertions.rb +166 -51
  861. data/spec/runners/unified/change_stream_operations.rb +22 -9
  862. data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
  863. data/spec/runners/unified/crud_operations.rb +197 -36
  864. data/spec/runners/unified/ddl_operations.rb +185 -5
  865. data/spec/runners/unified/entity_map.rb +4 -4
  866. data/spec/runners/unified/error.rb +3 -2
  867. data/spec/runners/unified/event_subscriber.rb +9 -3
  868. data/spec/runners/unified/exceptions.rb +1 -1
  869. data/spec/runners/unified/grid_fs_operations.rb +59 -3
  870. data/spec/runners/unified/search_index_operations.rb +63 -0
  871. data/spec/runners/unified/support_operations.rb +121 -12
  872. data/spec/runners/unified/test.rb +219 -39
  873. data/spec/runners/unified/test_group.rb +1 -1
  874. data/spec/runners/unified/thread_operations.rb +73 -0
  875. data/spec/runners/unified.rb +15 -5
  876. data/spec/solo/clean_exit_spec.rb +7 -7
  877. data/spec/spec_helper.rb +2 -3
  878. data/spec/spec_tests/auth_spec.rb +1 -1
  879. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  880. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  881. data/spec/spec_tests/client_side_encryption_unified_spec.rb +26 -0
  882. data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
  883. data/spec/spec_tests/cmap_spec.rb +29 -15
  884. data/spec/spec_tests/collection_management_spec.rb +1 -1
  885. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  886. data/spec/spec_tests/connection_string_spec.rb +1 -1
  887. data/spec/spec_tests/crud_spec.rb +1 -11
  888. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  889. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +43 -0
  890. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +105 -0
  891. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +122 -0
  892. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
  893. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1169 -0
  894. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1069 -0
  895. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +307 -0
  896. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
  897. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
  898. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  899. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
  900. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +14 -3
  901. data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
  902. data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
  903. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
  904. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  905. data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
  906. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
  907. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
  908. data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
  909. data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
  910. data/spec/spec_tests/data/client_side_encryption/explain.yml +3 -10
  911. data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
  912. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
  913. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
  914. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +90 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +83 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +938 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +67 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +101 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +103 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +59 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +201 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +97 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +90 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +44 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +45 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +211 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +170 -0
  931. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
  932. data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
  933. data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
  934. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
  935. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
  936. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
  937. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +3 -1
  938. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
  939. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
  940. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
  941. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
  942. data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
  943. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
  944. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
  945. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
  946. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
  947. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
  948. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
  949. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
  950. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
  951. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
  952. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
  953. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
  954. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
  955. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
  956. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
  957. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
  958. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
  959. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
  960. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
  961. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
  962. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
  963. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
  964. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
  965. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
  966. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
  967. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
  968. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
  969. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
  970. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
  971. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
  972. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
  973. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
  974. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
  975. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
  976. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
  977. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
  978. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
  979. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
  980. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
  981. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
  982. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  983. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  984. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  985. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  986. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  987. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  988. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  989. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  990. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  991. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  992. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  993. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  994. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  995. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  996. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  997. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  998. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  999. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  1000. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  1001. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  1002. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  1003. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  1004. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  1005. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  1006. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  1007. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  1008. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  1009. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  1010. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  1011. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
  1012. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
  1013. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  1014. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
  1015. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  1016. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
  1017. data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
  1018. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
  1019. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
  1020. data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
  1021. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
  1022. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
  1023. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
  1024. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  1025. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
  1026. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
  1027. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
  1028. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
  1029. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  1030. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  1031. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  1032. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
  1033. data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
  1034. data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
  1035. data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
  1036. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
  1037. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
  1038. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
  1039. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
  1040. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
  1041. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
  1042. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
  1043. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
  1044. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
  1045. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
  1046. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +138 -0
  1047. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  1048. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
  1049. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
  1050. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +161 -0
  1051. data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
  1052. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
  1053. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
  1054. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
  1055. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
  1056. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
  1057. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
  1058. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
  1059. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
  1060. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
  1061. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
  1062. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  1063. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
  1064. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
  1065. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
  1066. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
  1067. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
  1068. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
  1069. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
  1070. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
  1071. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
  1072. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
  1073. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
  1074. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
  1075. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
  1076. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
  1077. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
  1078. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +157 -0
  1079. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
  1080. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
  1081. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
  1082. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
  1083. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
  1084. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
  1085. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +93 -0
  1086. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
  1087. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  1088. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
  1089. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
  1090. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
  1091. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
  1092. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +91 -0
  1093. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
  1094. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
  1095. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +49 -135
  1096. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
  1097. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
  1098. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
  1099. data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
  1100. data/spec/spec_tests/data/crud_unified/find-let.yml +71 -0
  1101. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
  1102. data/spec/spec_tests/data/crud_unified/find.yml +68 -0
  1103. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
  1104. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
  1105. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
  1106. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
  1107. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
  1108. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +86 -0
  1109. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
  1110. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
  1111. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
  1112. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
  1113. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
  1114. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
  1115. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +94 -0
  1116. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
  1117. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
  1118. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  1119. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
  1120. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
  1121. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
  1122. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
  1123. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +96 -0
  1124. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
  1125. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
  1126. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
  1127. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
  1128. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  1129. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
  1130. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
  1131. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
  1132. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
  1133. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
  1134. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
  1135. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
  1136. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
  1137. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
  1138. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
  1139. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
  1140. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
  1141. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +107 -0
  1142. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
  1143. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
  1144. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
  1145. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  1146. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
  1147. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
  1148. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
  1149. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
  1150. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +102 -0
  1151. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
  1152. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
  1153. data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
  1154. data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
  1155. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
  1156. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
  1157. data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
  1158. data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
  1159. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
  1160. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
  1161. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
  1162. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
  1163. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +2 -2
  1164. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  1165. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  1166. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  1167. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +2 -2
  1168. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +2 -2
  1169. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +4 -4
  1170. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +2 -2
  1171. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +4 -4
  1172. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +2 -2
  1173. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +2 -2
  1174. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +3 -3
  1175. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +2 -2
  1176. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +2 -2
  1177. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +2 -2
  1178. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  1179. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  1180. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  1181. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +2 -2
  1182. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  1183. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +2 -2
  1184. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +5 -5
  1185. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  1186. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +5 -5
  1187. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  1188. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +2 -2
  1189. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +2 -2
  1190. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +1 -1
  1191. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -1
  1192. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
  1193. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
  1194. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1342 -0
  1195. data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
  1196. data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
  1197. data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
  1198. data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
  1199. data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
  1200. data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
  1201. data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
  1202. data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
  1203. data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
  1204. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +93 -0
  1205. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +785 -0
  1206. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  1207. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +75 -0
  1208. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  1209. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
  1210. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  1211. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  1212. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  1213. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  1214. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  1215. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  1216. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  1217. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  1218. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  1219. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  1220. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  1221. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  1222. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  1223. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  1224. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  1225. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  1226. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  1227. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1228. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1229. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1230. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1231. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1232. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1233. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1234. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1235. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1236. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1237. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1238. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1239. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1240. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1241. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1242. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1243. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1244. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1245. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1246. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1247. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1248. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1249. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
  1250. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1251. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1252. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
  1253. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
  1254. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +11 -0
  1255. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +11 -0
  1256. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
  1257. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
  1258. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
  1259. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
  1260. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
  1261. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
  1262. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
  1263. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
  1264. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
  1265. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
  1266. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
  1267. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
  1268. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
  1269. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
  1270. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  1271. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
  1272. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1273. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +75 -0
  1274. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +102 -0
  1275. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +258 -0
  1276. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +482 -0
  1277. data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
  1278. data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
  1279. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
  1280. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
  1281. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
  1282. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
  1283. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
  1284. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
  1285. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  1286. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1287. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  1288. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  1289. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1290. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1291. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1292. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1293. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
  1294. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1295. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1296. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1297. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1298. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1299. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1300. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
  1301. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1302. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1303. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +22 -1
  1304. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
  1305. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +19 -13
  1306. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1307. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +9 -9
  1308. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  1309. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  1310. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  1311. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +6 -5
  1312. data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
  1313. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
  1314. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
  1315. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1316. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1317. data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
  1318. data/spec/spec_tests/index_management_unified_spec.rb +13 -0
  1319. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1320. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1321. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1322. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1323. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1324. data/spec/spec_tests/retryable_reads_spec.rb +7 -2
  1325. data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
  1326. data/spec/spec_tests/retryable_writes_spec.rb +5 -2
  1327. data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
  1328. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  1329. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1330. data/spec/spec_tests/sdam_spec.rb +5 -1
  1331. data/spec/spec_tests/sdam_unified_spec.rb +15 -0
  1332. data/spec/spec_tests/seed_list_discovery_spec.rb +11 -2
  1333. data/spec/spec_tests/server_selection_rtt_spec.rb +7 -7
  1334. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1335. data/spec/spec_tests/sessions_unified_spec.rb +13 -0
  1336. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1337. data/spec/spec_tests/transactions_spec.rb +1 -1
  1338. data/spec/spec_tests/transactions_unified_spec.rb +3 -2
  1339. data/spec/spec_tests/unified_spec.rb +2 -2
  1340. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1341. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1342. data/spec/stress/cleanup_spec.rb +1 -1
  1343. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1344. data/spec/stress/connection_pool_timing_spec.rb +12 -36
  1345. data/spec/stress/fork_reconnect_stress_spec.rb +10 -10
  1346. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1347. data/spec/support/authorization.rb +2 -2
  1348. data/spec/support/aws_utils/base.rb +1 -1
  1349. data/spec/support/aws_utils/inspector.rb +1 -1
  1350. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1351. data/spec/support/aws_utils/provisioner.rb +1 -1
  1352. data/spec/support/aws_utils.rb +4 -3
  1353. data/spec/support/background_thread_registry.rb +4 -14
  1354. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
  1355. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  1356. data/spec/support/certificates/retrieve-atlas-cert +40 -0
  1357. data/spec/support/client_registry.rb +6 -2
  1358. data/spec/support/client_registry_macros.rb +1 -1
  1359. data/spec/support/cluster_tools.rb +17 -12
  1360. data/spec/support/common_shortcuts.rb +53 -6
  1361. data/spec/support/constraints.rb +21 -1
  1362. data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
  1363. data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
  1364. data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
  1365. data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
  1366. data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
  1367. data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
  1368. data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
  1369. data/spec/support/crypt/corpus/corpus.json +4999 -37
  1370. data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
  1371. data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
  1372. data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
  1373. data/spec/support/crypt/encrypted_fields/encryptedFields.json +32 -0
  1374. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1375. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1376. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1377. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1378. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1379. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1380. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1381. data/spec/support/crypt/keys/key1-document.json +30 -0
  1382. data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
  1383. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1384. data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
  1385. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1386. data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
  1387. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1388. data/spec/support/crypt.rb +269 -14
  1389. data/spec/support/dns.rb +1 -1
  1390. data/spec/support/json_ext_formatter.rb +1 -1
  1391. data/spec/support/keyword_struct.rb +1 -1
  1392. data/spec/support/local_resource_registry.rb +1 -1
  1393. data/spec/support/macros.rb +29 -0
  1394. data/spec/support/matchers.rb +5 -5
  1395. data/spec/support/mongos_macros.rb +24 -0
  1396. data/spec/support/monitoring_ext.rb +1 -1
  1397. data/spec/support/ocsp +1 -1
  1398. data/spec/support/primary_socket.rb +1 -1
  1399. data/spec/support/recording_logger.rb +27 -0
  1400. data/spec/support/sdam_formatter_integration.rb +1 -1
  1401. data/spec/support/shared/app_metadata.rb +15 -3
  1402. data/spec/support/shared/auth_context.rb +1 -0
  1403. data/spec/support/shared/protocol.rb +1 -1
  1404. data/spec/support/shared/scram_conversation.rb +3 -2
  1405. data/spec/support/shared/server_selector.rb +1 -1
  1406. data/spec/support/shared/session.rb +16 -10
  1407. data/spec/support/spec_config.rb +133 -2
  1408. data/spec/support/spec_setup.rb +3 -3
  1409. data/spec/support/using_hash.rb +11 -2
  1410. data/spec/support/utils.rb +280 -229
  1411. metadata +1809 -1274
  1412. checksums.yaml.gz.sig +0 -0
  1413. data/lib/mongo/operation/aggregate/command.rb +0 -55
  1414. data/lib/mongo/operation/collections_info/command.rb +0 -48
  1415. data/lib/mongo/operation/count/command.rb +0 -47
  1416. data/lib/mongo/operation/create/command.rb +0 -47
  1417. data/lib/mongo/operation/create_index/command.rb +0 -61
  1418. data/lib/mongo/operation/delete/command.rb +0 -52
  1419. data/lib/mongo/operation/delete/legacy.rb +0 -64
  1420. data/lib/mongo/operation/distinct/command.rb +0 -47
  1421. data/lib/mongo/operation/explain/command.rb +0 -58
  1422. data/lib/mongo/operation/explain/legacy.rb +0 -52
  1423. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  1424. data/lib/mongo/operation/find/command.rb +0 -51
  1425. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  1426. data/lib/mongo/operation/find/legacy.rb +0 -52
  1427. data/lib/mongo/operation/get_more/command.rb +0 -43
  1428. data/lib/mongo/operation/indexes/command.rb +0 -42
  1429. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  1430. data/lib/mongo/operation/insert/command.rb +0 -59
  1431. data/lib/mongo/operation/insert/legacy.rb +0 -68
  1432. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  1433. data/lib/mongo/operation/list_collections/command.rb +0 -46
  1434. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  1435. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  1436. data/lib/mongo/operation/remove_user/command.rb +0 -46
  1437. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  1438. data/lib/mongo/operation/update/command.rb +0 -53
  1439. data/lib/mongo/operation/update/legacy/result.rb +0 -112
  1440. data/lib/mongo/operation/update/legacy.rb +0 -76
  1441. data/lib/mongo/operation/users_info/command.rb +0 -46
  1442. data/lib/mongo/operation/write_command/command.rb +0 -51
  1443. data/lib/mongo/protocol/delete.rb +0 -172
  1444. data/lib/mongo/protocol/insert.rb +0 -181
  1445. data/lib/mongo/protocol/update.rb +0 -214
  1446. data/spec/mongo/dbref_spec.rb +0 -152
  1447. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  1448. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  1449. data/spec/mongo/operation/get_more_spec.rb +0 -63
  1450. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  1451. data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
  1452. data/spec/mongo/operation/update/command_spec.rb +0 -122
  1453. data/spec/mongo/protocol/delete_spec.rb +0 -185
  1454. data/spec/mongo/protocol/insert_spec.rb +0 -179
  1455. data/spec/mongo/protocol/update_spec.rb +0 -204
  1456. data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
  1457. data/spec/shared/LICENSE +0 -20
  1458. data/spec/shared/bin/get-mongodb-download-url +0 -17
  1459. data/spec/shared/bin/s3-copy +0 -45
  1460. data/spec/shared/bin/s3-upload +0 -69
  1461. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  1462. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  1463. data/spec/shared/lib/mrss/constraints.rb +0 -385
  1464. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  1465. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  1466. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  1467. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  1468. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  1469. data/spec/shared/lib/mrss/utils.rb +0 -15
  1470. data/spec/shared/share/Dockerfile.erb +0 -323
  1471. data/spec/shared/share/haproxy-1.conf +0 -16
  1472. data/spec/shared/share/haproxy-2.conf +0 -17
  1473. data/spec/shared/shlib/distro.sh +0 -73
  1474. data/spec/shared/shlib/server.sh +0 -367
  1475. data/spec/shared/shlib/set_env.sh +0 -131
  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.tar.gz.sig +0 -0
  1554. metadata.gz.sig +0 -0
  1555. /data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
  1556. /data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
  1557. /data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
  1558. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
  1559. /data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
  1560. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
  1561. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
  1562. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
  1563. /data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
  1564. /data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
  1565. /data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
  1566. /data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
  1567. /data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
  1568. /data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
  1569. /data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
  1570. /data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
  1571. /data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
  1572. /data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
  1573. /data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
  1574. /data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
  1575. /data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
  1576. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
  1577. /data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
  1578. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
  1579. /data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
  1580. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
  1581. /data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
  1582. /data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
  1583. /data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
  1584. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
  1585. /data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
  1586. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
  1587. /data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
  1588. /data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
  1589. /data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
  1590. /data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
  1591. /data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
  1592. /data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
  1593. /data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
  1594. /data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
  1595. /data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
  1596. /data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
  1597. /data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
  1598. /data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
  1599. /data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
  1600. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
  1601. /data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
  1602. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
  1603. /data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
  1604. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
  1605. /data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
  1606. /data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
  1607. /data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
  1608. /data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
  1609. /data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
  1610. /data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
  1611. /data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
  1612. /data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
  1613. /data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
  1614. /data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
data/lib/mongo/client.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
  #
@@ -71,6 +71,7 @@ module Mongo
71
71
  :local_threshold,
72
72
  :logger,
73
73
  :log_prefix,
74
+ :max_connecting,
74
75
  :max_idle_time,
75
76
  :max_pool_size,
76
77
  :max_read_retries,
@@ -80,6 +81,7 @@ module Mongo
80
81
  :monitoring_io,
81
82
  :password,
82
83
  :platform,
84
+ :populator_io,
83
85
  :read,
84
86
  :read_concern,
85
87
  :read_retry_interval,
@@ -92,6 +94,8 @@ module Mongo
92
94
  :server_api,
93
95
  :server_selection_timeout,
94
96
  :socket_timeout,
97
+ :srv_max_hosts,
98
+ :srv_service_name,
95
99
  :ssl,
96
100
  :ssl_ca_cert,
97
101
  :ssl_ca_cert_object,
@@ -107,6 +111,7 @@ module Mongo
107
111
  :ssl_verify_certificate,
108
112
  :ssl_verify_hostname,
109
113
  :ssl_verify_ocsp_endpoint,
114
+ :timeout_ms,
110
115
  :truncate_logs,
111
116
  :user,
112
117
  :wait_queue_timeout,
@@ -263,10 +268,16 @@ module Mongo
263
268
  # @option options [ String ] :log_prefix A custom log prefix to use when
264
269
  # logging. This option is experimental and subject to change in a future
265
270
  # version of the driver.
271
+ # @option options [ Integer ] :max_connecting The maximum number of
272
+ # connections that can be connecting simultaneously. The default is 2.
273
+ # This option should be increased if there are many threads that share
274
+ # the same client and the application is experiencing timeouts
275
+ # while waiting for connections to be established.
276
+ # selecting a server for an operation. The default is 2.
266
277
  # @option options [ Integer ] :max_idle_time The maximum seconds a socket can remain idle
267
278
  # since it has been checked in to the pool.
268
279
  # @option options [ Integer ] :max_pool_size The maximum size of the
269
- # connection pool.
280
+ # connection pool. Setting this option to zero creates an unlimited connection pool.
270
281
  # @option options [ Integer ] :max_read_retries The maximum number of read
271
282
  # retries when legacy read retries are in use.
272
283
  # @option options [ Integer ] :max_write_retries The maximum number of write
@@ -339,7 +350,15 @@ module Mongo
339
350
  # @option options [ Integer ] :server_selection_timeout The timeout in seconds
340
351
  # for selecting a server for an operation.
341
352
  # @option options [ Float ] :socket_timeout The timeout, in seconds, to
342
- # execute operations on a socket.
353
+ # execute operations on a socket. This option is deprecated, use
354
+ # :timeout_ms instead.
355
+ # @option options [ Integer ] :srv_max_hosts The maximum number of mongoses
356
+ # that the driver will communicate with for sharded topologies. If this
357
+ # option is 0, then there will be no maximum number of mongoses. If the
358
+ # given URI resolves to more hosts than ``:srv_max_hosts``, the client
359
+ # will ramdomly choose an ``:srv_max_hosts`` sized subset of hosts.
360
+ # @option options [ String ] :srv_service_name The service name to use in
361
+ # the SRV DNS query.
343
362
  # @option options [ true, false ] :ssl Whether to use TLS.
344
363
  # @option options [ String ] :ssl_ca_cert The file containing concatenated
345
364
  # certificate authority certificates used to validate certs passed from the
@@ -396,11 +415,15 @@ module Mongo
396
415
  # @option options [ true, false ] :ssl_verify_hostname Whether to perform peer hostname
397
416
  # validation. This setting overrides :ssl_verify with respect to whether hostname validation
398
417
  # is performed.
418
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
419
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
420
+ # The default value is unset which means the feature is not enabled.
399
421
  # @option options [ true, false ] :truncate_logs Whether to truncate the
400
422
  # logs at the default 250 characters.
401
423
  # @option options [ String ] :user The user name.
402
424
  # @option options [ Float ] :wait_queue_timeout The time to wait, in
403
425
  # seconds, in the connection pool for a connection to be checked in.
426
+ # This option is deprecated, use :timeout_ms instead.
404
427
  # @option options [ Array<Hash> ] :wrapping_libraries Information about
405
428
  # libraries such as ODMs that are wrapping the driver, to be added to
406
429
  # metadata sent to the server. Specify the lower level libraries first.
@@ -408,7 +431,7 @@ module Mongo
408
431
  # @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
409
432
  # option.
410
433
  # @option options [ Hash ] :write_concern The write concern options.
411
- # Can be :w => Integer|String, :wtimeout => Integer (in milliseconds),
434
+ # Can be :w => Integer|String, :wtimeout => Integer (in milliseconds, deprecated),
412
435
  # :j => Boolean, :fsync => Boolean.
413
436
  # @option options [ Integer ] :zlib_compression_level The Zlib compression level to use, if using compression.
414
437
  # See Ruby's Zlib module for valid levels.
@@ -420,11 +443,16 @@ module Mongo
420
443
  # instance containing the encryption key vault
421
444
  # - :key_vault_namespace => String, the namespace of the key vault in the
422
445
  # format database.collection
423
- # - :kms_providers => Hash, A hash of key management service configuration
424
- # information. Valid hash keys are :local or :aws. There may be more
425
- # than one kms provider specified.
446
+ # - :kms_providers => Hash, A hash of key management service (KMS) configuration
447
+ # information. Valid hash keys are :aws, :azure, :gcp, :kmip, :local.
448
+ # There may be more than one kms provider specified.
449
+ # - :kms_tls_options => Hash, A hash of TLS options to authenticate to
450
+ # KMS providers, usually used for KMIP servers. Valid hash keys
451
+ # are :aws, :azure, :gcp, :kmip, :local. There may be more than one
452
+ # kms provider specified.
426
453
  # - :schema_map => Hash | nil, JSONSchema for one or more collections
427
- # specifying which fields should be encrypted.
454
+ # specifying which fields should be encrypted. This option is
455
+ # mutually exclusive with :schema_map_path.
428
456
  # - Note: Schemas supplied in the schema_map only apply to configuring
429
457
  # automatic encryption for client side encryption. Other validation
430
458
  # rules in the JSON schema will not be enforced by the driver and will
@@ -433,10 +461,27 @@ module Mongo
433
461
  # JSON Schemas obtained from the server. It protects against a
434
462
  # malicious server advertising a false JSON Schema, which could trick
435
463
  # the client into sending unencrypted data that should be encrypted.
464
+ # - Note: If a collection is present on both the :encrypted_fields_map
465
+ # and :schema_map, an error will be raised.
466
+ # - :schema_map_path => String | nil A path to a file contains the JSON schema
467
+ # of the collection that stores auto encrypted documents. This option is
468
+ # mutually exclusive with :schema_map.
436
469
  # - :bypass_auto_encryption => Boolean, when true, disables auto encryption;
437
470
  # defaults to false.
438
471
  # - :extra_options => Hash | nil, options related to spawning mongocryptd
439
472
  # (this part of the API is subject to change).
473
+ # - :encrypted_fields_map => Hash | nil, maps a collection namespace to
474
+ # a hash describing encrypted fields for queryable encryption.
475
+ # - Note: If a collection is present on both the encryptedFieldsMap
476
+ # and schemaMap, an error will be raised.
477
+ # - :bypass_query_analysis => Boolean | nil, when true disables automatic
478
+ # analysis of outgoing commands.
479
+ # - :crypt_shared_lib_path => [ String | nil ] Path that should
480
+ # be the used to load the crypt shared library. Providing this option
481
+ # overrides default crypt shared library load paths for libmongocrypt.
482
+ # - :crypt_shared_lib_required => [ Boolean | nil ] Whether
483
+ # crypt shared library is required. If 'true', an error will be raised
484
+ # if a crypt_shared library cannot be loaded by libmongocrypt.
440
485
  #
441
486
  # Notes on automatic encryption:
442
487
  # - Automatic encryption is an enterprise only feature that only applies
@@ -532,7 +577,7 @@ module Mongo
532
577
  end
533
578
  =end
534
579
  @options.freeze
535
- validate_options!(addresses)
580
+ validate_options!(addresses, is_srv: uri.is_a?(URI::SRVProtocol))
536
581
  validate_authentication_options!
537
582
 
538
583
  database_options = @options.dup
@@ -565,9 +610,9 @@ module Mongo
565
610
 
566
611
  rescue
567
612
  begin
568
- @cluster.disconnect!
613
+ @cluster.close
569
614
  rescue => e
570
- log_warn("Eror disconnecting cluster in client constructor's exception handler: #{e.class}: #{e}")
615
+ log_warn("Eror closing cluster in client constructor's exception handler: #{e.class}: #{e}")
571
616
  # Drop this exception so that the original exception is raised
572
617
  end
573
618
  raise
@@ -742,7 +787,7 @@ module Mongo
742
787
  # We can't use the same cluster if some options that would affect it
743
788
  # have changed.
744
789
  if cluster_modifying?(opts)
745
- Cluster.create(client)
790
+ Cluster.create(client, monitoring: opts[:monitoring])
746
791
  end
747
792
  end
748
793
  end
@@ -828,6 +873,10 @@ module Mongo
828
873
  @write_concern ||= WriteConcern.get(options[:write_concern] || options[:write])
829
874
  end
830
875
 
876
+ def closed?
877
+ !!@closed
878
+ end
879
+
831
880
  # Close all connections.
832
881
  #
833
882
  # @return [ true ] Always true.
@@ -835,6 +884,7 @@ module Mongo
835
884
  # @since 2.1.0
836
885
  def close
837
886
  @connect_lock.synchronize do
887
+ @closed = true
838
888
  do_close
839
889
  end
840
890
  true
@@ -868,6 +918,8 @@ module Mongo
868
918
  if @options[:auto_encryption_options]
869
919
  build_encrypter
870
920
  end
921
+
922
+ @closed = false
871
923
  end
872
924
 
873
925
  true
@@ -885,8 +937,14 @@ module Mongo
885
937
  # which databases are returned based on user privileges when access control
886
938
  # is enabled
887
939
  #
888
- # See https://docs.mongodb.com/manual/reference/command/listDatabases/
940
+ # See https://mongodb.com/docs/manual/reference/command/listDatabases/
889
941
  # for more information and usage.
942
+ # @option opts [ Session ] :session The session to use.
943
+ # @option opts [ Object ] :comment A user-provided
944
+ # comment to attach to this command.
945
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
946
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
947
+ # The default value is unset which means the feature is not enabled.
890
948
  #
891
949
  # @return [ Array<String> ] The names of the databases.
892
950
  #
@@ -906,10 +964,18 @@ module Mongo
906
964
  #
907
965
  # @option opts [ true, false ] :authorized_databases A flag that determines
908
966
  # which databases are returned based on user privileges when access control
909
- # is enabled
910
- #
911
- # See https://docs.mongodb.com/manual/reference/command/listDatabases/
967
+ # is enabled.
968
+ # @option opts [ Object ] :comment A user-provided
969
+ # comment to attach to this command.
970
+ # @option options [ Integer ] :timeout_ms The operation timeout in milliseconds.
971
+ # Must be a non-negative integer. An explicit value of 0 means infinite.
972
+ # The default value is unset which means the feature is not enabled.
973
+ #
974
+ # See https://mongodb.com/docs/manual/reference/command/listDatabases/
912
975
  # for more information and usage.
976
+ # @option opts [ Session ] :session The session to use.
977
+ # @option options [ Object ] :comment A user-provided
978
+ # comment to attach to this command.
913
979
  #
914
980
  # @return [ Array<Hash> ] The info for each database.
915
981
  #
@@ -930,6 +996,10 @@ module Mongo
930
996
  # @param [ Hash ] filter The filter criteria for getting a list of databases.
931
997
  # @param [ Hash ] opts The command options.
932
998
  #
999
+ # @option opts [ Session ] :session The session to use.
1000
+ # @option options [ Object ] :comment A user-provided
1001
+ # comment to attach to this command.
1002
+ #
933
1003
  # @return [ Array<Mongo::Database> ] The list of database objects.
934
1004
  #
935
1005
  # @since 2.5.0
@@ -980,11 +1050,35 @@ module Mongo
980
1050
  #
981
1051
  # @param [ Array<Hash> ] pipeline Optional additional filter operators.
982
1052
  # @param [ Hash ] options The change stream options.
1053
+ # @option options [ String ] :full_document Allowed values: nil, 'default',
1054
+ # 'updateLookup', 'whenAvailable', 'required'.
1055
+ #
1056
+ # The default is to not send a value (i.e. nil), which is equivalent to
1057
+ # 'default'. By default, the change notification for partial updates will
1058
+ # include a delta describing the changes to the document.
983
1059
  #
984
- # @option options [ String ] :full_document Allowed values: 'default', 'updateLookup'.
985
- # Defaults to 'default'. When set to 'updateLookup', the change notification for partial
986
- # updates will include both a delta describing the changes to the document, as well as a copy
987
- # of the entire document that was changed from some time after the change occurred.
1060
+ # When set to 'updateLookup', the change notification for partial updates
1061
+ # will include both a delta describing the changes to the document as well
1062
+ # as a copy of the entire document that was changed from some time after
1063
+ # the change occurred.
1064
+ #
1065
+ # When set to 'whenAvailable', configures the change stream to return the
1066
+ # post-image of the modified document for replace and update change events
1067
+ # if the post-image for this event is available.
1068
+ #
1069
+ # When set to 'required', the same behavior as 'whenAvailable' except that
1070
+ # an error is raised if the post-image is not available.
1071
+ # @option options [ String ] :full_document_before_change Allowed values: nil,
1072
+ # 'whenAvailable', 'required', 'off'.
1073
+ #
1074
+ # The default is to not send a value (i.e. nil), which is equivalent to 'off'.
1075
+ #
1076
+ # When set to 'whenAvailable', configures the change stream to return the
1077
+ # pre-image of the modified document for replace, update, and delete change
1078
+ # events if it is available.
1079
+ #
1080
+ # When set to 'required', the same behavior as 'whenAvailable' except that
1081
+ # an error is raised if the pre-image is not available.
988
1082
  # @option options [ BSON::Document, Hash ] :resume_after Specifies the logical starting point
989
1083
  # for the new change stream.
990
1084
  # @option options [ Integer ] :max_await_time_ms The maximum amount of time for the server to
@@ -996,6 +1090,13 @@ module Mongo
996
1090
  # changes that occurred at or after the specified timestamp. Any command run
997
1091
  # against the server will return a cluster time that can be used here.
998
1092
  # Only recognized by server versions 4.0+.
1093
+ # @option options [ Object ] :comment A user-provided
1094
+ # comment to attach to this command.
1095
+ # @option options [ Boolean ] :show_expanded_events Enables the server to
1096
+ # send the 'expanded' list of change stream events. The list of additional
1097
+ # events included with this flag set are: createIndexes, dropIndexes,
1098
+ # modify, create, shardCollection, reshardCollection,
1099
+ # refineCollectionShardKey.
999
1100
  #
1000
1101
  # @note A change stream only allows 'majority' read concern.
1001
1102
  # @note This helper method is preferable to running a raw aggregation with a $changeStream
@@ -1007,8 +1108,11 @@ module Mongo
1007
1108
  def watch(pipeline = [], options = {})
1008
1109
  return use(Database::ADMIN).watch(pipeline, options) unless database.name == Database::ADMIN
1009
1110
 
1111
+ view_options = options.dup
1112
+ view_options[:cursor_type] = :tailable_await if options[:max_await_time_ms]
1113
+
1010
1114
  Mongo::Collection::View::ChangeStream.new(
1011
- Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"]),
1115
+ Mongo::Collection::View.new(self["#{Database::COMMAND}.aggregate"], {}, view_options),
1012
1116
  pipeline,
1013
1117
  Mongo::Collection::View::ChangeStream::CLUSTER,
1014
1118
  options)
@@ -1058,6 +1162,9 @@ module Mongo
1058
1162
  #
1059
1163
  # @api private
1060
1164
  def with_session(options = {}, &block)
1165
+ # TODO: Add this back in RUBY-3174.
1166
+ # assert_not_closed
1167
+
1061
1168
  session = get_session(options)
1062
1169
 
1063
1170
  yield session
@@ -1084,6 +1191,30 @@ module Mongo
1084
1191
  end
1085
1192
  end
1086
1193
 
1194
+ # Returns encrypted field map hash if provided when creating the client.
1195
+ #
1196
+ # @return [ Hash | nil ] Encrypted field map hash, or nil if not set.
1197
+ # @api private
1198
+ def encrypted_fields_map
1199
+ @encrypted_fields_map ||= @options.fetch(:auto_encryption_options, {})[:encrypted_fields_map]
1200
+ end
1201
+
1202
+ # @return [ Integer | nil ] Value of timeout_ms option if set.
1203
+ # @api private
1204
+ def timeout_ms
1205
+ @options[:timeout_ms]
1206
+ end
1207
+
1208
+ # @return [ Float | nil ] Value of timeout_ms option converted to seconds.
1209
+ # @api private
1210
+ def timeout_sec
1211
+ if timeout_ms.nil?
1212
+ nil
1213
+ else
1214
+ timeout_ms / 1_000.0
1215
+ end
1216
+ end
1217
+
1087
1218
  private
1088
1219
 
1089
1220
  # Create a new encrypter object using the client's auto encryption options
@@ -1112,7 +1243,7 @@ module Mongo
1112
1243
 
1113
1244
  # Implementation for #close, assumes the connect lock is already acquired.
1114
1245
  def do_close
1115
- @cluster.disconnect!
1246
+ @cluster.close
1116
1247
  close_encrypter
1117
1248
  end
1118
1249
 
@@ -1129,6 +1260,8 @@ module Mongo
1129
1260
  # @option options [ true | false ] :implicit When no session is passed in,
1130
1261
  # whether to create an implicit session.
1131
1262
  # @option options [ Session ] :session The session to validate and return.
1263
+ # @option options [ Operation::Context | nil ] :context Context of the
1264
+ # operation the session is used for.
1132
1265
  #
1133
1266
  # @return [ Session ] A session object.
1134
1267
  #
@@ -1141,13 +1274,28 @@ module Mongo
1141
1274
  return options[:session].validate!(self)
1142
1275
  end
1143
1276
 
1144
- cluster.validate_session_support!
1277
+ cluster.validate_session_support!(timeout: timeout_sec)
1278
+
1279
+ options = {implicit: true}.update(options)
1280
+
1281
+ server_session = if options[:implicit]
1282
+ nil
1283
+ else
1284
+ cluster.session_pool.checkout
1285
+ end
1145
1286
 
1146
- Session.new(cluster.session_pool.checkout, self, { implicit: true }.merge(options))
1287
+ Session.new(server_session, self, options)
1147
1288
  end
1148
1289
 
1290
+ # Auxiliary method that is called by interpreter when copying the client
1291
+ # via dup or clone.
1292
+ #
1293
+ # @param [ Mongo::Client ] original Client that is being cloned.
1294
+ #
1295
+ # @api private
1149
1296
  def initialize_copy(original)
1150
1297
  @options = original.options.dup
1298
+ @connect_lock = Mutex.new
1151
1299
  @monitoring = @cluster ? monitoring : Monitoring.new(options)
1152
1300
  @database = nil
1153
1301
  @read_preference = nil
@@ -1209,6 +1357,7 @@ module Mongo
1209
1357
  key = k.to_sym
1210
1358
  if VALID_OPTIONS.include?(key)
1211
1359
  validate_max_min_pool_size!(key, opts)
1360
+ validate_max_connecting!(key, opts)
1212
1361
  validate_read!(key, opts)
1213
1362
  if key == :compressors
1214
1363
  compressors = valid_compressors(v)
@@ -1222,6 +1371,12 @@ module Mongo
1222
1371
  end
1223
1372
 
1224
1373
  _options[key] = compressors unless compressors.empty?
1374
+ elsif key == :srv_max_hosts
1375
+ if v && (!v.is_a?(Integer) || v < 0)
1376
+ log_warn("#{v} is not a valid integer for srv_max_hosts")
1377
+ else
1378
+ _options[key] = v
1379
+ end
1225
1380
  else
1226
1381
  _options[key] = v
1227
1382
  end
@@ -1235,7 +1390,7 @@ module Mongo
1235
1390
  # Validates all options after they are set on the client.
1236
1391
  # This method is intended to catch combinations of options which are
1237
1392
  # not allowed.
1238
- def validate_options!(addresses = nil)
1393
+ def validate_options!(addresses = nil, is_srv: nil)
1239
1394
  if options[:write] && options[:write_concern] && options[:write] != options[:write_concern]
1240
1395
  raise ArgumentError, "If :write and :write_concern are both given, they must be identical: #{options.inspect}"
1241
1396
  end
@@ -1345,6 +1500,26 @@ module Mongo
1345
1500
  end
1346
1501
  end
1347
1502
  end
1503
+
1504
+ if options[:srv_max_hosts] && options[:srv_max_hosts] > 0
1505
+ if options[:replica_set]
1506
+ raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :replica_set option"
1507
+ end
1508
+
1509
+ if options[:load_balanced]
1510
+ raise ArgumentError, ":srv_max_hosts > 0 cannot be used with :load_balanced=true"
1511
+ end
1512
+ end
1513
+
1514
+ unless is_srv.nil? || is_srv
1515
+ if options[:srv_max_hosts]
1516
+ raise ArgumentError, ":srv_max_hosts cannot be used on non-SRV URI"
1517
+ end
1518
+
1519
+ if options[:srv_service_name]
1520
+ raise ArgumentError, ":srv_service_name cannot be used on non-SRV URI"
1521
+ end
1522
+ end
1348
1523
  end
1349
1524
 
1350
1525
  # Validates all authentication-related options after they are set on the client
@@ -1438,7 +1613,26 @@ module Mongo
1438
1613
  def validate_max_min_pool_size!(option, opts)
1439
1614
  if option == :min_pool_size && opts[:min_pool_size]
1440
1615
  max = opts[:max_pool_size] || Server::ConnectionPool::DEFAULT_MAX_SIZE
1441
- raise Error::InvalidMinPoolSize.new(opts[:min_pool_size], max) unless opts[:min_pool_size] <= max
1616
+ if max != 0 && opts[:min_pool_size] > max
1617
+ raise Error::InvalidMinPoolSize.new(opts[:min_pool_size], max)
1618
+ end
1619
+ end
1620
+ true
1621
+ end
1622
+
1623
+ # Validates whether the max_connecting option is valid.
1624
+ #
1625
+ # @param [ Symbol ] option The option to validate.
1626
+ # @param [ Hash ] opts The client options.
1627
+ #
1628
+ # @return [ true ] If the option is valid.
1629
+ # @raise [ Error::InvalidMaxConnecting ] If the option is invalid.
1630
+ def validate_max_connecting!(option, opts)
1631
+ if option == :max_connecting && opts.key?(:max_connecting)
1632
+ max_connecting = opts[:max_connecting] || Server::ConnectionPool::DEFAULT_MAX_CONNECTING
1633
+ if max_connecting <= 0
1634
+ raise Error::InvalidMaxConnecting.new(opts[:max_connecting])
1635
+ end
1442
1636
  end
1443
1637
  true
1444
1638
  end
@@ -1450,7 +1644,7 @@ module Mongo
1450
1644
  # for custom classes implementing key access ([]).
1451
1645
  # Instead reject common cases of strings and symbols.
1452
1646
  if read.is_a?(String) || read.is_a?(Symbol)
1453
- raise Error::InvalidReadOption.new(read, 'must be a hash')
1647
+ raise Error::InvalidReadOption.new(read, "the read preference must be specified as a hash: { mode: #{read.inspect} }")
1454
1648
  end
1455
1649
 
1456
1650
  if mode = read[:mode]
@@ -1462,5 +1656,11 @@ module Mongo
1462
1656
  end
1463
1657
  true
1464
1658
  end
1659
+
1660
+ def assert_not_closed
1661
+ if closed?
1662
+ raise Error::ClientClosed, "The client was closed and is not usable for operations. Call #reconnect to reset this client instance or create a new client instance"
1663
+ end
1664
+ end
1465
1665
  end
1466
1666
  end